Skip to content

Commit

Permalink
补充遗漏依赖
Browse files Browse the repository at this point in the history
  • Loading branch information
Ikaros-521 committed Jun 9, 2023
1 parent 41f9110 commit 375769d
Show file tree
Hide file tree
Showing 45 changed files with 59,477 additions and 8,872 deletions.
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -175,4 +175,7 @@ kuaishou.py

douyin/config2.json
douyin/out/*.mp3
douyin/log/*.txt
douyin/log/*.txt

test/
game/
177 changes: 171 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# AI Vtuber

<div style="text-align: center;">
_✨ AI Vtuber ✨_

<a href="https://github.com/Ikaros-521/AI-Vtuber/stargazers">
Expand All @@ -20,19 +21,182 @@ _✨ AI Vtuber ✨_

</div>

AI Vtuber是一个由`ChatterBot/GPT/Claude/langchain_pdf+gpt`驱动的虚拟主播,可以在`Bilibili/抖音`直播中与观众实时互动。它使用自然语言处理和文本转语音技术(`Edge-TTS/VITS-Fast/elevenlabs`)生成对观众问题的回答。
AI Vtuber是一个由`ChatterBot/GPT/Claude/langchain_pdf+gpt`驱动的虚拟主播,可以在`Bilibili/抖音/快手`直播中与观众实时互动。它使用自然语言处理和文本转语音技术(`Edge-TTS/VITS-Fast/elevenlabs`)生成对观众问题的回答。

`bilibili`文件夹,哔哩哔哩版本,含原始项目版本,vits改版,大融合版本。

`douyin`文件夹,抖音版的大融合功能。
## 项目结构

2个平台的使用说明在各自文件夹内的README.md中有写。
- `config.json`,配置文件。
- `bilibili.py`,哔哩哔哩版本。
- `dy.py`,抖音版。
- `ks.py`,快手版。
- `utils`文件夹,存储聊天、音频、通用类相关功能的封装实现
- `data`文件夹,存储数据文件和违禁词
- `log`文件夹,存储运行日志
- `out`文件夹,存储edge-tts输出的音频文件


## 运行环境
python:3.10
依赖的库在 requirements.txt 中,请自行安装。

python:3.10.11
各个版本的依赖的库在 requirements_xx.txt 中,请自行安装。

当然,如果你觉得麻烦的话,可以直接按我的通用环境装(chatterbot另算)。
```
pip install -r 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/none 其中none就是复读机模式
"chat_type": "none",
// 弹幕语言筛选,none就是全部语言,en英文,jp日文,zh中文
"need_lang": "none",
// 请求gpt/claude时,携带的字符串头部,用于给每个对话追加固定限制
"before_promet": "请简要回复:",
// 请求gpt/claude时,携带的字符串尾部
"after_promet": "",
// 本地违禁词数据路径(你如果不需要,可以清空文件内容)
"badwords_path": "data/badwords.txt",
// 最长阅读的英文单词数(空格分隔)
"max_len": 30,
// 最长阅读的字符数,双重过滤,避免溢出
"max_char_len": 50,
"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": ""
},
// 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
},
// 语音合成类型选择 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",
"vits_api_ip_port": "http://127.0.0.1:7860",
"character": "ikaros"
},
// edge-tts相关配置
"edge-tts": {
// edge-tts选定的说话人
"voice": "zh-CN-XiaoyiNeural"
},
// 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"
}
```

## 使用

各版本都需要做的前期准备操作。
`chatterbot`相关安装参考[chatterbot/README.md](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](https://go.dev/dl/)环境,还没有的话,手动补一补[protobuf](https://github.com/protocolbuffers/protobuf/releases)

运行 `python dy.py`

### 快手版

在命令行中使用以下命令安装所需库:
```
pip install -r requirements_ks.txt
```

运行前请重新生成一下protobuf文件,因为机器系统不一样同时protobuf版本也不一样所以不能拿来直接用~
```
protoc -I . --python_out=. ks.proto
```
ps:依赖[golang](https://go.dev/dl/)环境,还没有的话,手动补一补[protobuf](https://github.com/protocolbuffers/protobuf/releases)

运行 `python ks.py`

## 许可证

MIT许可证。详情请参阅LICENSE文件。

## 补充
Expand All @@ -46,6 +210,7 @@ MIT许可证。详情请参阅LICENSE文件。
不注册账号也可以使用,不过应该是有限制的(具体多少未知)。免费账号拥有每月1万字的额度。

### ChatterBot
[官方仓库](https://github.com/gunthercox/ChatterBot)
ChatterBot 是一个开源的 Python 聊天机器人框架,使用机器学习算法(尤其是自然语言处理、文本语义分析等)来实现基于规则和语境的自动聊天系统。它可以让开发者通过简单的配置和训练,构建出各种类型的聊天机器人,包括问答机器人、任务型机器人、闲聊机器人等。

ChatterBot 的核心思想是:基于历史对话数据,使用机器学习和自然语言处理技术来分析和预测用户输入,然后生成响应。基于这种方法,聊天机器人的反应会更加智能、灵活、接近人类对话的方式。此外,ChatterBot 支持多种存储方式,如 JSON、SQLAlchemy、MongoDB 等,以及多种接口调用方式,如 RESTful API、WebSocket 等,方便开发者在不同场景中进行集成。
Expand Down
35 changes: 35 additions & 0 deletions bilibili.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# 导入所需的库
from bilibili_api import live, sync

from utils.my_handle import My_handle

my_handle = My_handle("config2.json")
if my_handle is None:
print("程序初始化失败!")
exit(0)


# 初始化 Bilibili 直播间
room = live.LiveDanmaku(my_handle.get_room_id())


@room.on('DANMU_MSG')
async def on_danmaku(event):
"""
处理直播间弹幕事件
:param event: 弹幕事件数据
"""
content = event["data"]["info"][1] # 获取弹幕内容
user_name = event["data"]["info"][2][1] # 获取发送弹幕的用户昵称

my_handle.commit_handle(user_name, content)


try:
# 启动 Bilibili 直播间连接
sync(room.connect())
except KeyboardInterrupt:
print('程序被强行退出')
finally:
print('关闭连接...')
exit(0)
Loading

0 comments on commit 375769d

Please sign in to comment.