基于ChatGPT for Bot进行改进,细节请参照原链接
准备材料
Linux服务器(Windows教程参照原链接)
- 最好是境外服务器,便于连接Github
- 亲测Debian 12系统可用
机器人QQ号、管理员QQ号
- 由于机器人QQ号存在被官方封禁的风险,建议重新申请空白QQ号
- 机器人QQ号需要绑定手机号便于接收验证码
OpenAI api_key
- 可以使用token接入,但容易失效/被封
- tb 搜api购买
- 接入其它大模型请参照原链接(Bing亲测失效)
安装过程
一键Docker部署
bash -c "$(wget -O- https://gist.githubusercontent.com/lss233/2fdd75be3f0724739368d0dcd9d1367d/raw/62a790da4a391af096074b3355c2c2b7ecab3c28/chatgpt-mirai-installer-gocqhttp.sh)"
- 按照步骤安装即可。正确输入api_key。
- 新服务器可能需要换源、apt update、apt upgrade
- 大概率会遇到[BUG] cannot import name 'url_decode' from 'werkzeug.urls'[BUG] cannot import name 'url_decode' from 'werkzeug.urls' · Issue #1232 · lss233/chatgpt-mirai-qq-bot · GitHub是docker依赖更新引起的
- 解决方法1:手动重新挂载[Support] 🚀Linux系统(Docker)出现 No module named 'werkzeug.exceptions'🌈解决方法 · Issue #1261 · lss233/chatgpt-mirai-qq-bot · GitHub
- 解决方法2:回退版本,进入chatgpt-qq目录,在docker-compose.yaml对应处修改image版本为v2.5.3(参照#1232)
chatgpt: image: lss233/chatgpt-mirai-qq-bot:browser-version
修改为
chatgpt: image: lss233/chatgpt-mirai-qq-bot:v2.5.3
然后docker-compose重新部署
go-cqhttp登录
到此时看似成功,实则通过docker-compose logs --tail=100查看日志可以看到错误。一般会遇到以下问题
签名服务器(Sign Server)未设置
现在的cqhttp需要签名服务器,否则登录失败率很高,会报45错误。
此处推荐大家自建签名服务器,也可以用现成的签名服务器,参照签名服务器相关问题 · Mrs4s/go-cqhttp · Discussion #2245 · GitHub
此处基于Linux搭建,基于Docker搭建可参考最新版go-cqhttp的sign 签名服务器搭建教程_gocqhttp签名服务器-CSDN博客
自建签名服务器步骤:
下载unidbg-fetch-qsign-1.1.9.zip
wget https://gitee.com/changwenpeng/gocqhttp-qqsign/releases/download/qsign-1.1.9/unidbg-fetch-qsign-1.1.9.zip
解压并进入
unzip unidbg-fetch-qsign-1.1.9.zip
cd unidbg-fetch-qsign-1.1.9
官方建议我们使用8.9.63版本,其余版本可能有未知问题。后台挂载8.9.63版本
nohup ./bin/unidbg-fetch-qsign --basePath=txlib/8.9.63 > nohup.out 2>&1 &
这里实际上是加载了unidbg-fetch-qsign-1.1.9/txlib/8.9.63/config.json文件。文件默认配置如下
{
"server": {
"host": "0.0.0.0",
"port": 8080
},
"key": "114514",
……
}
可以看到是本机IP8080端口提供自签服务。
此时需要设置go-cqhttp的chatgpt-qq/gocqhttp/config.yml文件,对应上文主机IP:8080。
account: # 账号相关
……
sign-servers:
- url: 'http://主机IP:8080'
key: '114514'
authorization: '-'
注意,由于采用docker运行go-cqhttp,所以127.0.0.1并不代表主机而是代表容器,所以url处填写127.0.0.1/0.0.0.0均不生效。
最后我们需要确定协议登录QQ。可以采用安卓平板登录,需要将 unidbg-fetch-qsign-1.1.9/txlib/8.9.63/android_pad.json 复制为 chatgpt-qq/gocqhttp/data/versions/6.json
cp unidbg-fetch-qsign-1.1.9/txlib/8.9.63/android_pad.json chatgpt-qq/gocqhttp/data/versions/6.json
并将chatgpt-qq/gocqhttp/device.json的protocol字段值改为6
"protocol":6
手动拉取验证码
go-cqhttp默认不能通过验证码,因此我们需要手动拉取
首先确定go-cqhttp服务已关闭
docker stop gocqhttp
docker kill gocqhttp
手动运行
docker-compose run gocqhttp
会提示是否手动抓取提交,输入2选择手动抓取,弹出https://ssl.captcha.qq.com/链接,点击进入验证码界面。此时右键检查->网络进行抓包
确定后抓取到ticket
复制双引号内的内容粘贴进docker即可成功登录
后期调试
重启各项服务
docker-compose restart
参照https://chatgpt-qq.lss233.com/尤其是完整配置文件样例设置config.cfg
使用
感谢lss233、Mrs4s、changwenpeng等原作者的无私奉献!