AI Vtuber是一个由ChatterBot/GPT/Claude/langchain_pdf+gpt/chatglm
驱动的虚拟主播(Live2D),可以在Bilibili/抖音/快手
直播中与观众实时互动。它使用自然语言处理和文本转语音技术(Edge-TTS/VITS-Fast/elevenlabs
)生成对观众问题的回答。
config.json
,配置文件。bilibili.py
,哔哩哔哩版本。dy.py
,抖音版。ks.py
,快手版。utils
文件夹,存储聊天、音频、通用类相关功能的封装实现data
文件夹,存储数据文件和违禁词log
文件夹,存储运行日志out
文件夹,存储edge-tts输出的音频文件Live2D
文件夹,存储Live2D源码及模型
首先你得装个git
(啥,没装?百度),当然也可以直接在页面切换分支后下载各版本ZIP压缩包。
# 主线
git clone https://github.com/Ikaros-521/AI-Vtuber.git
# owner分支
git clone -b owner https://github.com/Ikaros-521/AI-Vtuber.git
# dev分支
git clone -b dev https://github.com/Ikaros-521/AI-Vtuber.git
python:3.10.11
各个版本的依赖的库在 requirements_xx.txt 中,请自行安装。
依赖版本参考requirements_common.txt
安装命令参考(注意文件命名,对应各个版本):
pip install -r requirements_bilibili.txt
pip install -r requirements_dy.txt
pip install -r requirements_ks.txt
配置都在config.json
{
// 你的直播间号,兼容全平台,都是直播间页面的链接中最后的数字和字母。例如:123
"room_display_id": "你的直播间号",
// 选用的聊天类型:chatterbot/gpt/claude/langchain_pdf/langchain_pdf+gpt/chatglm/langchain_pdf_local/none 其中none就是复读机模式
"chat_type": "none",
// 弹幕语言筛选,none就是全部语言,en英文,jp日文,zh中文
"need_lang": "none",
// 请求gpt/claude时,携带的字符串头部,用于给每个对话追加固定限制
"before_prompt": "请简要回复:",
// 请求gpt/claude时,携带的字符串尾部
"after_prompt": "",
"filter": {
// 弹幕过滤,必须携带的触发前缀字符串(任一)
"before_must_str": [],
// 弹幕过滤,必须携带的触发后缀字符串(任一)
"after_must_str": [
".",
"。",
"?",
"?"
],
// 本地违禁词数据路径(你如果不需要,可以清空文件内容)
"badwords_path": "data/badwords.txt",
// 最长阅读的英文单词数(空格分隔)
"max_len": 30,
// 最长阅读的字符数,双重过滤,避免溢出
"max_char_len": 50
},
// Live2D皮
"live2d": {
// 是否启用
"enable": true,
// web服务监听端口
"port": 12345
},
"openai": {
"api": "https://api.openai.com/v1",
"api_key": [
"你的api key"
]
},
// claude相关配置
"claude": {
// claude相关配置
// 参考:https://github.com/bincooo/claude-api#readme
"slack_user_token": "",
"bot_user_id": ""
},
// chatglm相关配置
"chatglm": {
"api_ip_port": "http://127.0.0.1:8000",
"max_length": 2048,
"top_p": 0.7,
"temperature": 0.95
},
// langchain_pdf 和 langchain_pdf+gpt 相关配置
"langchain_pdf": {
// 你的openai api key
"openai_api_key": "你的api key",
// 加载的本地pdf数据文件路径(到x.pdf),如:./data/伊卡洛斯百度百科.pdf
"data_path": "",
// 拆分文本的分隔符
"separator": "\n",
// 每个文本块的最大字符数(文本块字符越多,消耗token越多,回复越详细)
"chunk_size": 100,
// 两个相邻文本块之间的重叠字符数。这种重叠可以帮助保持文本的连贯性,特别是当文本被用于训练语言模型或其他需要上下文信息的机器学习模型时
"chunk_overlap": 50,
// 选择的openai的模型
"model_name": "gpt-3.5-turbo-0301",
// 文档结合链的类型
"chain_type": "stuff",
// 显示openai token的消耗
"show_cost": true
},
"langchain_pdf_local": {
// claude相关配置
// 参考:https://github.com/bincooo/claude-api#readme
"bot_user_id": "",
"slack_user_token": "",
// 选择输入的pdf数据
"data_path": "data/伊卡洛斯百度百科.zip",
"separator": "\n",
"chunk_size": 100,
"chunk_overlap": 50,
// 默认模型
"embedding_model": "sebastian-hofstaetter/distilbert-dot-tas_b-b256-msmarco",
// 最大查询数据库次数。限制次数有助于节省token
"max_query": 3,
"question_prompt": "请根据以上content信息进行归纳总结,并结合question的内容给出一个符合content和question语气、语调、背景的回答。不要出现'概括''综上''感谢'等字样,向朋友直接互相交流即可。如果发现不能content的信息与question不相符,抛弃content的提示,直接回答question即可。任何情况下都要简要地回答!",
"chain_type": "stuff",
"show_cost": true
},
// 语音合成类型选择 edge-tts/vits/elevenlabs
"audio_synthesis_type": "edge-tts",
// vits相关配置
"vits": {
// 配置文件的路径
"vits_config_path": "E:\\GitHub_pro\\VITS-fast-fine-tuning\\inference\\finetune_speaker.json",
// 推理服务运行的链接(需要完整的URL)
"vits_api_ip_port": "http://127.0.0.1:7860",
// 选择的说话人,配置文件中的speaker中的其中一个
"character": "ikaros"
},
// edge-tts相关配置
"edge-tts": {
// edge-tts选定的说话人(cmd执行:edge-tts -l 可以查看所有支持的说话人)
"voice": "zh-CN-XiaoyiNeural"
// 语速增益 默认是 +0%,可以增减,注意 + - %符合别搞没了,不然会影响语音合成
"rate": "+0%",
// 音量增益 默认是 +0%,可以增减,注意 + - %符合别搞没了,不然会影响语音合成
"volume": "+0%"
},
// elevenlabs相关配置
"elevenlabs": {
// elevenlabs密钥,可以不填,默认也有一定额度的免费使用权限,具体多少不知道
"api_key": "",
// 选择的说话人名
"voice": "Domi",
// 选择的模型
"model": "eleven_monolingual_v1"
},
// chatterbot相关配置
"chatterbot": {
// 机器人名
"name": "bot",
// bot数据库路径
"db_path": "db.sqlite3"
},
// chatgpt相关配置
"chatgpt": {
"model": "gpt-3.5-turbo",
// 控制生成文本的随机性。较高的温度值会使生成的文本更随机和多样化,而较低的温度值会使生成的文本更加确定和一致。
"temperature": 0.9,
"max_tokens": 2048,
"top_p": 1,
"presence_penalty": 0,
"frequency_penalty": 0,
"preset": "请扮演一个AI虚拟主播。不要回答任何敏感问题!不要强调你是主播,只需要回答问题!"
},
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 Edg/113.0.1774.42"
}
例如:API2D
"openai": {
// 代理地址,需要和官方接口一致的才行。例如:api2d
"api": "https://oa.api2d.net/v1",
// 代理站提供的密钥
"api_key": [
"fkxxxxxxxxxxx"
]
}
或者纯代理的镜像站:
各版本都需要做的前期准备操作。
chatterbot
相关安装参考chatterbot/README.md
修改config.json
的配置,配好哈,注意JSON数据格式
弹幕自带过滤,且需要弹幕以。或.或?结尾才能触发,请注意。
在命令行中使用以下命令安装所需库:
pip install -r requirements_bilibili.txt
运行 python bilibili.py
在命令行中使用以下命令安装所需库:
pip install -r requirements_dy.txt
运行前请重新生成一下protobuf文件,因为机器系统不一样同时protobuf版本也不一样所以不能拿来直接用~
protoc -I . --python_out=. dy.proto
ps:依赖golang环境,还没有的话,手动补一补protobuf
运行 python dy.py
在命令行中使用以下命令安装所需库:
pip install -r requirements_ks.txt
运行前请重新生成一下protobuf文件,因为机器系统不一样同时protobuf版本也不一样所以不能拿来直接用~
protoc -I . --python_out=. ks.proto
ps:依赖golang环境,还没有的话,手动补一补protobuf
运行 python ks.py
打开QT设计师~o( =∩ω∩= )m pyqt5-tools designer
生成UI代码 pyuic5 -o UI_main.py ui\main.ui
可能是API KEY过期了/额度没了,请检查API KEY是否可用。
在线测试参考:
chatgpt-html
ChatGPT-Next-Web
MIT许可证。详情请参阅LICENSE文件。
elevenlabs官网
官方文档
不注册账号也可以使用,不过应该是有限制的(具体多少未知)。免费账号拥有每月1万字的额度。
官方仓库
ChatterBot 是一个开源的 Python 聊天机器人框架,使用机器学习算法(尤其是自然语言处理、文本语义分析等)来实现基于规则和语境的自动聊天系统。它可以让开发者通过简单的配置和训练,构建出各种类型的聊天机器人,包括问答机器人、任务型机器人、闲聊机器人等。
ChatterBot 的核心思想是:基于历史对话数据,使用机器学习和自然语言处理技术来分析和预测用户输入,然后生成响应。基于这种方法,聊天机器人的反应会更加智能、灵活、接近人类对话的方式。此外,ChatterBot 支持多种存储方式,如 JSON、SQLAlchemy、MongoDB 等,以及多种接口调用方式,如 RESTful API、WebSocket 等,方便开发者在不同场景中进行集成。
总的来说,ChatterBot 是一个非常强大、灵活、易用的聊天机器人框架,帮助开发者快速搭建出个性化、定制化的聊天机器人,从而提升用户体验和服务质量。
源自:CyberWaifu
展开/收起
兼容本地版ChatGLM API接口
增加Edge-TTS的语速、音量调节参数。
- 增加GUI版。
- 增加GUI运行的bat文件,需要配合本地虚拟环境运行。请到releases下载。
- 对config.json的结构做了调整,增加了弹幕前后缀过滤配置。
- 增加langchain_pdf_local的配置内容,待和主线整合后合并。
- 修复部分GUI的bug
- 整合到主线
- 新增本地live2d模型加载
感谢以下开发者对该项目做出的贡献: