手动搭建chatgpt-mirai-qqbot对接AI和聊天软件
本文最后更新于:2024年9月16日 下午
说明
前面用docker-compose一键搭建过,为了方便调试各种错误,这次手动一步步搭建,也顺便学习一些新东西。
准备工作
两个qq账号
一个微信账号
一个tg账号:新建bot获取token,获取chatid
一个chatgpt账号获取access token
一个bing账号获取cookie
一个Google bard账户获取cookie
国内和国外vps各一台(国外vps负责接入AI,国内vps负责挂qq和微信)
国外vps安装Python3.11及以上版本(chatgpt-mirai-qqbot需要的要求)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19# 以下是Debian10或11安装Python3.11的命令
sudo apt update && sudo apt upgrade
sudo apt install wget build-essential libncursesw5-dev libssl-dev \
libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev libffi-dev zlib1g-dev
wget https://www.python.org/ftp/python/3.11.3/Python-3.11.3.tgz
tar xzf Python-3.11.3.tgz
cd Python-3.11.3
./configure --enable-optimizations
make altinstall
python3.11 -V
# 如果系统有多个版本的python,注意看默认使用的版本是不是3.11
项目地址
- lss233/chatgpt-mirai-qq-bot: 🚀 一键部署!真正的 AI 聊天机器人!支持ChatGPT、文心一言、Bing、Bard、ChatGLM、POE,多账号,人设调教,虚拟女仆、图片渲染、语音发送 | 支持 QQ、Telegram、Discord、微信 等平台 (github.com)
- Mrs4s/go-cqhttp: cqhttp的golang实现,轻量、原生跨平台. (github.com)
- lcjqyml/wechatbot: A chatbot for wechat. (github.com)
搭建项目本体
在国外vps上:
1 |
|
接入各种AI
调整配置文件config.cfg,没有就自己创建,如果不需要接入那么多的ai和聊天软件就注释或删除
1 |
|
接入聊天软件
在国内vps上
安装go-cqhttp接入qq(最困难的一步,先看再动)
下载最新版适合自己vps的软件包
解压包
tar -xzvf [文件名]
cd 进入解压目录
输入
./go-cqhttp
回车运行,选择3反向WebSocket,生成配置文件按下述样例修改配置:最简配置可只关注account和servers两项
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109# go-cqhttp 默认配置文件
account: # 账号相关
uin: # QQ账号
password: '' # 密码为空时使用扫码登录,如果device.json里面的protocol选择的是2也就是watch在线,就留空扫码登录,需要手机端qq和vps在同一ip才能扫码
encrypt: false # 是否开启密码加密
status: 17 # 在线状态(任意都行) 请参考 https://docs.go-cqhttp.org/guide/config.html#在线状态
relogin: # 重连设置
delay: 3 # 首次重连延迟, 单位秒
interval: 3 # 重连间隔
max-times: 0 # 最大重连次数, 0为无限制
# 是否使用服务器下发的新地址进行重连
# 注意, 此设置可能导致在海外服务器上连接情况更差
use-sso-address: true
# 是否允许发送临时会话消息
allow-temp-session: false
heartbeat:
# 心跳频率, 单位秒
# -1 为关闭心跳
interval: 5
message:
# 上报数据类型
# 可选: string,array
post-format: string
# 是否忽略无效的CQ码, 如果为假将原样发送
ignore-invalid-cqcode: false
# 是否强制分片发送消息
# 分片发送将会带来更快的速度
# 但是兼容性会有些问题
force-fragment: false
# 是否将url分片发送
fix-url: false
# 下载图片等请求网络代理
proxy-rewrite: ''
# 是否上报自身消息
report-self-message: false
# 移除服务端的Reply附带的At
remove-reply-at: false
# 为Reply附加更多信息
extra-reply-data: false
# 跳过 Mime 扫描, 忽略错误数据
skip-mime-scan: false
# 是否自动转换 WebP 图片
convert-webp-image: false
output:
# 日志等级 trace,debug,info,warn,error
log-level: warn
# 日志时效 单位天. 超过这个时间之前的日志将会被自动删除. 设置为 0 表示永久保留.
log-aging: 15
# 是否在每次启动时强制创建全新的文件储存日志. 为 false 的情况下将会在上次启动时创建的日志文件续写
log-force-new: true
# 是否启用日志颜色
log-colorful: true
# 是否启用 DEBUG
debug: false # 开启调试模式
# 默认中间件锚点
default-middlewares: &default
# 访问密钥, 强烈推荐在公网的服务器设置
access-token: ''
# 事件过滤器文件目录
filter: ''
# API限速设置
# 该设置为全局生效
# 原 cqhttp 虽然启用了 rate_limit 后缀, 但是基本没插件适配
# 目前该限速设置为令牌桶算法, 请参考:
# https://baike.baidu.com/item/%E4%BB%A4%E7%89%8C%E6%A1%B6%E7%AE%97%E6%B3%95/6597000?fr=aladdin
rate-limit:
enabled: false # 是否启用限速
frequency: 1 # 令牌回复频率, 单位秒
bucket: 1 # 令牌桶大小
database: # 数据库相关设置
leveldb:
# 是否启用内置leveldb数据库
# 启用将会增加10-20MB的内存占用和一定的磁盘空间
# 关闭将无法使用 撤回 回复 get_msg 等上下文相关功能
enable: true
sqlite3:
# 是否启用内置sqlite3数据库
# 启用将会增加一定的内存占用和一定的磁盘空间
# 关闭将无法使用 撤回 回复 get_msg 等上下文相关功能
enable: false
cachettl: 3600000000000 # 1h
# 连接服务列表
servers:
# 添加方式,同一连接方式可添加多个,具体配置说明请查看文档
#- http: # http 通信
#- ws: # 正向 Websocket
#- ws-reverse: # 反向 Websocket
#- pprof: #性能分析服务器
# 反向WS设置
- ws-reverse:
# 反向WS Universal 地址
# 注意 设置了此项地址后下面两项将会被忽略
universal: ws://国外vps的ip:8554/ws
# # 反向WS API 地址
# api: ws://your_websocket_api.server
# # 反向WS Event 地址
# event: ws://your_websocket_event.server
# # 重连间隔 单位毫秒
# reconnect-interval: 3000
# middlewares:
# <<: *default # 引用默认中间件再次运行
./go-cqhttp
生成随机设备信息device.json根据需要修改device.json中的protocol为2
再次运行
./go-cqhttp
,如果你没有配置qq密码就会让你扫码登录,这就要求你的手机qq登录时用的是国外vps的地址,两者必须在同一ip下才能扫码登录成功。解决这个问题,可以是在本地电脑端下载对应版本的go-cqhttp,按照上述配置成功扫码登录以后,将本地的config.yml和device.json以及session.token上传到vps,然后vps就可以直接登录qq了,目前来看这样操作比较稳当。项目的配置说明,如果遇到问题多看项目issue或提问
登录成功以后,有概率碰到qq号被冻结的情况,申诉可解封
接入微信
1 |
|
端口是安装chatgpt-mirai-qqbot时设置的 config.cfg
里面的http项的端口
启动后扫码登陆即可:
- 扫码的微信号需要进过实名认证,否则会异常。
- 尽量避免国外登陆或者异地登陆,防止封号。
- 若二维码不清晰,可将二维码上方的链接copy至浏览器打开扫码,或者将二维码复制粘贴到记事本,或者更换终端连接器都可能解决(本人开始使用的是finalshell二维码整个变形了)
启动主程序
国外vps
1 |
|
注意看报错信息,再去检查各项设置,如果顺利享受各种聊天软件与各种AI的对话吧。
常用聊天指令
1 |
|
后记
使用
screen
命令让python3 bot.py
和./go-cqhttp
在关闭终端的情况下继续运行:(这玩意就是session的套娃)1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20# 安装命令
apt install screen
# 新建screen窗口名称为bot,并自动进入
screen -S bot
# 运行bot
python3 bot.py
# 退出bot窗口,程序就在窗口中运行了
Ctrl + A , D
# 显示目前所有的窗口
screen -ls
# 恢复某个窗口,检查程序运行情况
screen -r 窗口名称
# 开另一个窗口运行go-cqhttp
screen -S qq检查
go-cqhttp
的运行状态,如果失败退出就自动再运行1
2
3
4
5
6
7
8
9
10
11
12
13#!/bin/bash
while true
do
# 检查 go-cqhttp 进程是否正在运行
if ps aux | grep -v grep | grep -q "go-cqhttp"; then
echo "go-cqhttp 进程正在运行,继续监视"
else
echo "go-cqhttp 进程未运行,启动进程"
# 运行 go-cqhttp 命令,根据实际情况调整命令路径和参数
/root/go-cqhttp/go-cqhttp
sleep 300
fi
done将上述内容保存为
autorun.sh
,并且chmod +x autorun.sh
,存放在go-cqhttp文件夹下,用bash autorun.sh
代替./go-cqhttp
运行,注意如果qq登录失败又反复运行的话,是不是大概率会冻结账号,还在观察中。