手动搭建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

项目地址

搭建项目本体

在国外vps上:

1
2
3
git clone https://github.com/lss233/chatgpt-mirai-qq-bot
cd chatgpt-mirai-qq-bot
pip3 install -r requirements.txt

接入各种AI

调整配置文件config.cfg,没有就自己创建,如果不需要接入那么多的ai和聊天软件就注释或删除

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
[onebot]
qq=小号qq
manager_qq=管理员qq
# 此处保持默认设置,无需修改
reverse_ws_host = "0.0.0.0"
reverse_ws_port = 8554

[telegram]
# 这个 token 是找 BotFather 要的
bot_token = ""
# 如果部署在国内,就填这个设置代理
# 不填的话就会读取系统的代理设置
# proxy = "http://localhost:1080"
# 管理员的 chat id
manager_chat =

[openai]
[[openai.accounts]]
access_token = "换成自己的"

[bing]
# 开启 Bing 画图功能
use_drawing = true
[[bing.accounts]]
cookie_content = '换成自己的'

#[poe]
#[[poe.accounts]]
# 登陆 poe.com 网站后,通过开发者工具查看Cookie获取
#p_b = "这个秒封,不建议接入"

[bard]
[[bard.accounts]]
cookie_content = '换成自己的'

[http]
host = "0.0.0.0"
# 填写提供服务的端口,此端口用来接入微信
port = 8234
# 是否开启调试
debug = false

接入聊天软件

在国内vps上

安装go-cqhttp接入qq(最困难的一步,先看再动)

  1. 下载最新版适合自己vps的软件包

  2. 解压包 tar -xzvf [文件名]

  3. cd 进入解压目录

  4. 输入 ./go-cqhttp 回车运行,选择3反向WebSocket,生成配置文件

  5. 按下述样例修改配置:最简配置可只关注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 # 引用默认中间件
  6. 再次运行 ./go-cqhttp 生成随机设备信息device.json

  7. 根据需要修改device.json中的protocol为2

  8. 再次运行 ./go-cqhttp ,如果你没有配置qq密码就会让你扫码登录,这就要求你的手机qq登录时用的是国外vps的地址,两者必须在同一ip下才能扫码登录成功。解决这个问题,可以是在本地电脑端下载对应版本的go-cqhttp,按照上述配置成功扫码登录以后,将本地的config.yml和device.json以及session.token上传到vps,然后vps就可以直接登录qq了,目前来看这样操作比较稳当。

  9. 项目的配置说明,如果遇到问题多看项目issue或提问

  10. 登录成功以后,有概率碰到qq号被冻结的情况,申诉可解封

接入微信

1
docker run -e CHATBOT_PROXY="http://国外vps的ip:8234" lcjqyml/wechatbot:latest

端口是安装chatgpt-mirai-qqbot时设置的 config.cfg 里面的http项的端口

启动后扫码登陆即可:

  • 扫码的微信号需要进过实名认证,否则会异常。
  • 尽量避免国外登陆或者异地登陆,防止封号。
  • 若二维码不清晰,可将二维码上方的链接copy至浏览器打开扫码,或者将二维码复制粘贴到记事本,或者更换终端连接器都可能解决(本人开始使用的是finalshell二维码整个变形了)

启动主程序

国外vps

1
2
cd chatgpt-mirai-qq-bot
python3 bot.py

注意看报错信息,再去检查各项设置,如果顺利享受各种聊天软件与各种AI的对话吧。

常用聊天指令

1
2
3
4
5
6
7
8
9
# 切换AI
切换AI chatgpt-web
切换AI bing-c
切换AI bard

# 切换聊天内容显示方式
文本模式
图片模式
图文混合模式

后记

  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
  2. 检查 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登录失败又反复运行的话,是不是大概率会冻结账号,还在观察中。


手动搭建chatgpt-mirai-qqbot对接AI和聊天软件
https://andyppang.github.io/2023/05/25/手动搭建chatgpt-mirai-qqbot对接AI和聊天软件/
作者
PL
发布于
2023年5月25日
许可协议