基于ChatGPT的Bilibili直播AI(新概念挖矿)。
js版本
有帮助的话,可以zfb请吃包辣条🐶
- Python>=3.8.16
- 可以访问OpenAI的网络及其API Key
- (可选)虚拟环境,如conda
查看Q&A
部分,参考ChatterBotResponseManager
以及EdgeTTSSpeakerManager
的接入。
- 下载源码
git clone https://github.com/xwy27/LiveStreamAI.git
- 安装依赖
cd LiveStreamAI
pip install -r requirements.txt
- 修改配置
修改config
目录下的config.txt
,仅需直播间的房间号(如直播链接https://live.bilibili.com/139?...
中的139
为房间号)
- 启动
python main.py
- 使用
打开直播,程序会自动监听直播间的弹幕,并对以Q:
开头的弹幕提问进行回复。
- 修改配置
- 必须
修改
config
目录下的config.txt
,包括房间号(如直播链接https://live.bilibili.com/139?...
中的139
为房间号),OpenAIAPIKey(替换为自己的api key),ResponseManager(替换为OpenAIResponseManager
)。 - 可选
修改
config
目录下的UpCharacteristic.txt
可以让ChatGPT提供不同的直播风格(等同于prompt)。
- 启动
python main.py
- 使用
启动后,打开直播即可。程序会自动监听直播间的弹幕,并对以Q:
开头的弹幕提问进行回复。
需要先安装chatterbot
和chatterbot-corpus
,参考文档
- 修改配置
修改config
目录下的config.txt
,包括房间号(如直播链接https://live.bilibili.com/139?...
中的139
为房间号),ResponseManager(替换为ChatterBotResponseManager
)。
- 训练ChatterBot
cd ChatterBot
python TrainChatterBot.py
其中,ChatterBot目录下的ChatData.txt
是自定义的对话数据,格式是一问一答,可用来进一步训练自己的对话模型,可以自己到中文语料库整理。对于PyYAML的版本报错,是用到的库bilibili-api-python
和chatterbot
分别依赖了不同版本,应该是不影响使用的
- 启动
python main.py
- 使用
启动后,打开直播即可。程序会自动监听直播间的弹幕,并对以Q:
开头的弹幕提问进行回复。
- 能否定制声音?
目前的声音输出采用的是edge提供的tts功能,基于edge-tts库实现。所以在实现过程中,sound操作是分离的。在chat/SpeakManager.py
中继承BaseSpeakManager
实现自己的声音播放类,并在文件末尾添加载入代码,最后在config.txt
中修改SpeakManager
为自己的SpeakerManager类名。
- 能否自己控制回复?
同样提供自定义功能,在chat/RespnseManager.py
中继承BaseResponseManager
实现自己的回复生成类,并在并在文件末尾添加载入代码,最后在config.txt
中修改ResponseManager
为自己的ResponseManager类名。
- 为什么没有皮套?
没有接触过,有能力的朋友可以来上一套。
- 对话历史是怎么存的?
从ChatGPT的文档来看,调用api需要自行维护对话历史,这里通过sqlite3为每个用户单独存历史对话信息,用b站的用户名作为key,分别存储累积发送到openai的对话数据。具体可以看utils/DB.py
。
- 还有可以做的吗?
有很多,比如前面提到的几个问题,还有:
- 代码优化(作者自己代码也写得不好,虽然尽量模块化处理了,但肯定可以优化)
- UI展示(给用户提供一个使用界面,自行输入配置,启动和退出等)
- 数据文件定期清理(互动数据会不断积累,但并非都是有用的历史对话信息)
- 设置优先弹幕(新建
PriorityTaskQueues
并且持有多个TaskQueue
来区分优先级,执行时从优先级高到低即可) - 更合理的弹幕输入(目前采取FIFO模式并回调下一个,同时为保证实时性,回调时过滤15s前的弹幕。可以考虑抽离
filter
,初步筛选结合互动限制) - 更多的互动形式
- 发挥想象力,基于目前的代码做成QA机器人
- ...