将ChatGPT接入QQ机器人

原文链接: https://jijunhao.github.io/2023/03/13/article20230313/#alipay

参考文献

ChatGPT

ChatGPT的api管理平套

ChatGPT Mirai QQ Bot

mirai无法登录的临时解决方案

mirai临时登录协议修复插件

go-cqhttp

go-cqhttp扫码登陆解决方案

QQ机器人——接入ChatGPT

ChatGPT简介

ChatGPT 是一种基于人工智能的对话机器人,使用了深度学习技术和自然语言处理技术进行训练和优化。ChatGPT 能够通过和用户的对话来回答各种各样的问题、解决问题和提供建议,支持多种语言和主题,可以用于各种不同的应用领域,如教育、客户服务、娱乐、医疗保健等。由于它可以从数百万条对话中学习并自我改进,因此越来越受欢迎。

  • 对话:ChatGPT能够进行普通的聊天对话,并且可以回答一些简单的问题,例如天气、时间等。
  • 知识问答:ChatGPT拥有广泛的知识库,可以回答各种问题,例如历史事件、科学知识、地理信息等。
  • 文本生成:ChatGPT可以生成各种形式的文本,例如诗歌、小说、新闻报道、文书、代码等。
  • 语言翻译:ChatGPT可以进行语言翻译,支持多种语言之间的互译。
  • 文本分类:ChatGPT可以将文本进行分类,例如将新闻分类为体育、政治、娱乐等。
  • 信息检索:ChatGPT可以根据关键词和上下文进行信息检索,返回相关的结果。
  • ……

ChatGPT 能够回答各种类型的问题,例如代码生成、Excel 的操作命令、生活小常识、论文写作和翻译等。但对于普通用户来说使用 ChatGPT 的门槛很高,首先得想办法连接外网,其次还得注册官方的账号,最好还得有基础和条件的搭建一个 QQ 机器人。日常生活中想要更加方便的使用 ChatGPT,随时随地的沟通和解决问题,当然是将其设置成微信聊天机器人、QQ 聊天机器人、钉钉机器人、Telegram 机器人等。但一般不建议使用微信机器人,微信与个人信息绑定极为紧密,一个手机号一个身份证只能注册一个微信,并且还有微信钱包等功能,若涉及一些危险言论导致封号,那将是无法挽回的损失。下面给出一个比较优秀的 QQ机器人部署方案。

:针对不同人群,每个人都应该有属于自己的使用方案。

  • 没有 ChatGPT 账号的且不具备软硬件条件的人,仅需要加入已经搭建好的 QQ 机器人群就能使用,但需谨防上当受骗
  • 拥有 ChatGPT 账号的,请安装 ChatGPT桌面版,该方案能够便利的在桌面启动和刷新 ChatGPT,并且拥有聊天记录保存和切换AI等多项功能
  • 有一定代码基础和硬件条件的,熟悉docker、python等常用开发工具的人,可以选择自己搭建一个 QQ 机器人,便利自己且供身边的人使用

!!无论是哪种方式,使用 ChatGPT 时都要遵守法律法规和相关规定,不得进行危害社会稳定、违反公序良俗的言论和行为。

1. 前提准备

  • 需要一个官网注册的,能够正常访问网页的 OpenAI账号
  • 需要一个能够正常交流的 QQ号,建议用小号。(每个手机号可以注册多个QQ)
  • 需要一台 Linux服务器 或者一台 Windows服务器
  • 如果处于国内,需要一个翻墙工具(例如 ClashV2ray 等)或者部署在境外的服务器

2. 软件包下载

chatgpt-mirai-qq-botgithub 上已经进行开源,支持在 Liunxwindow 上部署。

请进入项目的Releases下载最新版的windows-quickstart安装包或者使用最新版的linux一键部署。

img

:GitHub Release 是一个功能,用于发布和分发软件或项目的版本和发布包,一般来说只需要下载最新版的即可。

3. Windows下快速部署

作为一个 AI 模型,ChatGPT 并不会直接连接到 QQ 平台发消息。相反,需要借助一些中间软件来实现与 QQ 的通信,如 Mirai 或 Onebot。

以下是一般情况下连接 ChatGPT 和 QQ 的基本流程:

  1. 初始化:首先需要准备好两个环境,即 Mirai 或 Onebot 的环境和 ChatGPT 的环境。在 Mirai 或 Onebot 环境中,需要安装好对应的插件(例如 Mirai-HTTP 和 Mirai-WebSocket)以及配置文件等。在这个项目中,只需要点击初始化.cmd即可
  2. 配置登录信息:需要编辑配置文件 chatgpt/config.cfg,设置 QQ 号码、密码等登录信息和OpenAI等信息。
  3. 启动 MiraiOnebot:通过命令行启动 Mirai 或 Onebot,使其运行在后台。这样 ChatGPT 就能够通过 API 访问 Mirai 或 Onebot 提供的 QQ 服务了。
  4. 启动 ChatGPT:在 ChatGPT 的环境中,需要编写代码来实现与 Mirai 或 Onebot 的通信。可以使用相应的 SDK 或 API,如 QQbot-sdk 或者 cqhttp-sdk。Mirai 和 chatgpt-mirai-qq-bot 之间则使用 Websocket 进行通信,将两者连接起来。在这个项目里这些都是设定好的。
  5. 连接 QQ 发消息:使用 ChatGPT 的 API,调用 Mirai 或 Onebot 的接口来连接到 QQ 并发送消息。

需要注意的是,这只是一个基本流程,实际应用中可能还需要进行更多的设置和配置。此外,还需要保证 Mirai 或 Onebot 的稳定性和安全性,防止出现一些不必要的问题。

本地解压下载好的安装包后,会有chagptfilesmirai初始化.cmd。双击其中的 初始化.cmd 进行环境初始化,一路回车,期间会跳出来一个conifg.cfg文件,可以直接修改也可以后期修改(在chatgpt/config.cfg里面)

3.1 配置文件完整介绍

配置文件主要包含 onebot连接信息mirai连接信息OpenAI登录信息三大部分。

**注:**onebot 和 mirai 只要填写一个机器人就行,另一个用#全部注释

  • onebot连接信息(使用的是 go-cqhttp 的扫码登录方式,但 QQ 发送图片会出现bug)
1
2
3
4
5
6
7
8
[onebot]
# onebot 相关设置
qq=请修改为你机器人的QQ号
manager_qq = 请修改为机器人管理员的QQ号
# 此处的 reverse_ws_host 和 reverse_ws_port 对应
# go-cqhttp 中的 反向WS Universal 地址,如:ws://localhost:6555/ws
reverse_ws_host = "localhost"
reverse_ws_port = 6555
  • mirai连接信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[mirai]
# Mirai 相关设置
qq = 请填写机器人的 QQ
manager_qq = 请修改为机器人管理员的QQ号

api_key = "1234567890" # mirai-http-api 中的 verifyKey
reverse_ws_host = "0.0.0.0" # 0.0.0.0指任意ip
reverse_ws_port = 8554

# # 下面是 mirai api http 正向连接模式
# 使用此模式时需注释上面的反向连接模式
# 要么http+ws要么直接反代reverse_w,建议用反代
# http_url = "http://localhost:8080"
# ws_url = "http://localhost:8080"
  • OpenAI登录信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[openai]
# OpenAI 相关设置

# 第 1 个 OpenAI 账号的登录信息
[[openai.accounts]]
# 里面是一些设置

# 第 2 个 OpenAI 账号的登录信息
[[openai.accounts]]
# 里面是一些设置

# 第 3 个 OpenAI 账号的登录信息
[[openai.accounts]]
# 里面是一些设置

3.1.1 OpenAI 多账号支持

可以登录多个不同的 OpenAI 账号,当机器人开始产生新对话时,会从你登录的账号中选择一个来使用 ChatGPT 和用户聊天。

(这可以降低聊天频率限制出现的概率)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[openai]
# OpenAI 相关设置

# 第 1 个 OpenAI 账号的登录信息
[[openai.accounts]]
# 里面是一些设置

# 第 2 个 OpenAI 账号的登录信息
[[openai.accounts]]
# 里面是一些设置

# 第 3 个 OpenAI 账号的登录信息
[[openai.accounts]]
# 里面是一些设置

3.1.2 OpenAI的设置(主要是无浏览器模式的接入点设置,不建议使用Web)

2023年3月封禁了大量账户,建议不要用WEB,尽量都使用自己的API。

1
2
3
4
5
6
7
8
9
10
11
[openai]
# OpenAI 相关设置
# 自定义 ChatGPT 的 browserless 接入点
# 自 3月9日 开始,不设置此项将无法正常使用 browserless 模式下的网页版 ChatGPT
# browser模式没法用,browserless要endpoint,如果有可以选择自定义
browserless_endpoint = "https://bypass.duti.tech/"

# 自定义 OpenAI 的 API 接口基础地址
# 通过此功能,你可以搭建一个 OpenAI 的反向代理来避免网络问题
# 例如此项目:https://github.com/Ice-Hazymoon/openai-scf-proxy
# api_endpoint = "https://api.openai.com/v1"

3.1.3 账号登录模式选择

1
2
3
[[openai.accounts]]
# 模式选择
mode = "browserless"

支持的模式有:

  • browser - 浏览器登录。该模式会在你的电脑上启动一个 Chrome 浏览器来登录并验证 OpenAI,该模式成功率较低。
  • browserless - 无浏览器模式。该模式将你的聊天请求发送到第三方服务器进行认证,从而不需要浏览器,该模式成功率较高。(推荐)

3.1.4 邮箱密码登录

1
2
3
4
5
[[openai.accounts]]
# 你的 OpenAI 邮箱
email = "xxxx"
# 你的 OpenAI 密码
password = "xxx"

3.1.5 session_token 登录

对于通过 Google 登录或者微软登录的同学,可以使用 session_token 方式进行登录。使用这种方式登录时不需要填写密码

需要注意的是,session_token 过期比较频繁,过期后需要重新设置。

session_token 的获取方式可参考:请问怎么获取 session_token

1
2
3
4
[[openai.accounts]]

session_token = "一串 ey 开头的东西"
email = "你的邮箱"

3.1.6 access_token 登录

配合 mode="browserless"使用,这种方式登录时不需要填写邮箱和密码、session_token。
这种方法比较适合登录时出现 Unknown error,或者回答问题时出现有关 Access Token报错的情况。
你需要自己登录 OpenAI 网站,然后访问 https://chat.openai.com/api/auth/session ,你可以看到一段类似下面的代码:

1
2
3
4
5
6
7
8
9
10
11
12
{
"user": {
"id": "user-*****",
"name": "***",
"email": "***",
"image": "***",
"picture": "***",
"groups": []
},
"expires": "2023-03-18T09:11:03.546Z",
"accessToken": "eyJhbGciOiJS*****X7GdA"
}

获取以上 JSON 中accessToken 后面的值即可,有效期在 30 天左右。过期后需要重新设置。

1
2
[[openai.accounts]]
access_token = "一串内容为 eyJhbGciOiJS*****X7GdA 的东西"

3.1.7 使用正向代理(国内搭建的记得开代理)

如果你的网络访问 OpenAI 出现一直弹浏览器的问题,或者你的 IP 被封锁了,可以通过配置代理的方式来连接到 OpenAI。

支持使用正向代理方式访问 OpenAI,你需要一个 HTTP/HTTPS 代理服务器:

1
2
3
4
5
6
7
8
[[openai.accounts]]

# 请注意,由于现在 OpenAI 封锁严格,你需要一个
# 尽量使用独立的代理服务器,不要使用和其他人共用 IP 的代理
# 否则会出现无限弹出浏览器的问题
# 在账号下面加入

proxy="http://127.0.0.1:1080"

3.1.8 对话标题自动重命名

如果你的账号产生了太多的对话,看着不舒服,可以开启配置文件中的标题自动重命名和。

1
2
3
4
[[openai.accounts]]
# 在账号下面加入

title_pattern="qq-{session_id}"

当你按照这个格式进行设置之后,新创建的对话将会以 qq-friend-好友QQqq-group-群号 进行命名。

这里的 {session_id} 是一个变量,它在程序启动之后会根据聊天信息的发送者动态变化。

  • 如果是一个好友给机器人发送消息,则 {session_id} 会变成 qq-friend-好友QQ
  • 如果是一个群聊给机器人发送消息,则 {session_id} 会变成 qq-group-群号

3.1.9 其他功能自行探索

  • 管理员命令
  • 预设加载
  • 接入new bing
  • ……

3.2 启动Mirai

简介:Mirai是一个基于Java开发的聊天机器人框架,最初是为QQ平台开发的,但现在也支持其他平台(如微信和Telegram)。Mirai提供了许多插件,如定时发送消息、自动回复、群管理等等,使得开发者可以轻松地定制自己的聊天机器人。

使用步骤:

  • 点击 Mirai.cmd,第一次启动会下载很多环境,无需理会。这个脚本主要用来登录 QQ 机器人账号的
  • 登录机器人命令:login <机器人QQ账号> <机器人QQ密码> <登录协议>

**注:**目前的登录协议有ANDROID_PHONE、ANDROID_PAD、ANDROID_WATCH、IPAD、MACOS

最新版的Mirai官方建议使用MACOS登录协议,以防止账号无法登录的情况,如45、237、238等

  • 第一次启动后,可以在 mirai/config/Console/AutoLogin.yml 里面设置自动登录(设置好后,下次启动Mirai.cmd就不用输入机器人登录命令了)

参考如下设置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
accounts: 
- # 账号, 现只支持 QQ 数字账号
account: 输入你的QQ数字账号
password:
# 密码种类, 可选 PLAIN 或 MD5
kind: PLAIN
# 密码内容, PLAIN 时为密码文本, MD5 时为 16 进制
value: 输入你的密码(密码最好不要超过16位)
# 账号配置. 可用配置列表 (注意大小写):
# "protocol": "ANDROID_PHONE" / "ANDROID_PAD" / "ANDROID_WATCH" / "MACOS" / "IPAD"
# "device": "device.json"
# "enable": true
# "heartbeatStrategy": "STAT_HB" / "REGISTER" / "NONE"
configuration:
protocol: MACOS
device: device.json
enable: true
heartbeatStrategy: STAT_HB

注意:采用mirai反向代理得配置文件在mirai/config/net.mamoe.mirai-api-http/setting.yml

验证key和反向代理要与配置文件config/config.cfg中一样才能进行通信

3.3 启动go-cqhttp,这个可以扫码登录QQ(当使用Onebot机器人的时候)

简介:Onebot是一个基于CQHTTP协议开发的聊天机器人框架,它支持多个平台(如QQ、微信、Telegram等),同时也提供了许多插件和工具,方便开发者创建自己的聊天机器人。Onebot提供了标准化的消息格式和事件处理机制,使得不同平台之间的开发变得更加简单和方便。

简介:go-cqhttp是一个使用Go语言编写的开源跨平台的机器人的HTTP插件,它通过HTTP协议将机器人接入到第三方平台,例如QQ群、Telegram和Discord等。它支持多个账号、多个协议、多个插件,可以满足各种不同场景下的需求。go-cqhttp提供了方便易用的API,可以帮助开发者快速构建自己的机器人应用。同时,它也支持插件机制,开发者可以通过插件来扩展其功能。由于其开源、跨平台、易用的特点,go-cqhttp已经成为了国内外开发者构建机器人应用的主要工具之一。

使用步骤:

注意:下载正确对应的版本

darwin是macos的

amd是X86架构的CPU,32位版;arm是ARM架构的CPU,32位版

amd64是X86架构的CPU,64位版;arm64是ARM架构的CPU,64位版

  • 下载安装包到本地,解压后,运行其中的 go-cqhttp.bat
  • 输入3,会生成配置文件:config.yaml
  • 打开配置文件config.yaml,只需要配置两个地方:account和servers
1
2
3
4
5
6
7
8
9
10
account: # 账号相关
uin: 输入机器人QQ账号 # QQ账号

# 其他保持不动

servers:
- ws-reverse:
universal: ws://localhost:6555/ws # 与onebot信息设置一致才能通信

# 其他保持不动
  • 再次运行 go-cqhttp.bat,生成虚拟文件,这一次不用扫码,只是为了生成虚拟设备文件,然后关闭即可
  • 打开生成的虚拟文件:device.json,将其中的 protocol参数改成2
  • 再重新启动 go-cqhttp,这时候可以扫码登录 QQ 了(注意 go-cqhttp 的启动网络要与扫码网络保持一致)

3.3 启动ChatGPT

  • 设置好chatgpt/config.cfg点击启动 ChatGPT.cmd ,自动会登录 openai

一个简单的基于mirai启动的配置文件实例:

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
[mirai]
qq = 请修改为你机器人的QQ号(小号)

manager_qq = 请修改为机器人管理员的QQ号(大号)

api_key = "1234567890"
reverse_ws_host = "0.0.0.0"
reverse_ws_port = 8554
# # 下面是 mirai api http 正向连接模式
# 使用此模式时需注释上面的反向连接模式
# http_url = "http://localhost:8080"
# ws_url = "http://localhost:8080"

[openai]
browserless_endpoint = "https://bypass.duti.tech/"

# 第一个账号
[[openai.accounts]]
mode = "browserless"

# 你的 OpenAI 邮箱
email = "xxxx"
# 你的 OpenAI 密码
password = "xxx"

# clash代理的端口号
proxy="http://127.0.0.1:7890"

# 使用 ChatGPT Plus(plus 用户此项设置为 true 使用 legacy 模型)
paid = false

# 是否开启标题自动重命名
title_pattern="qq-{session_id}"

# 是否自动删除旧的对话,开启后用户发送重置对话时会自动删除以前的会话内容
auto_remove_old_conversations = true

# 第二个账号
[[openai.accounts]]

api_key="sk-xxxxx"

proxy="http://127.0.0.1:7890"

# 是否开启标题自动重命名
title_pattern="qq-{session_id}"

# 是否自动删除旧的对话,开启后用户发送重置对话时会自动删除以前的会话内容
auto_remove_old_conversations = true

[baiducloud]
#是否启动百度云内容安全审核
check = false

#百度云API_KEY 24位英文数字字符串
baidu_api_key = ""

#百度云SECRET_KEY 32位的英文数字字符串
baidu_secret_key =""

#不合规消息自定义返回
illgalmessage = "[百度云]请珍惜机器人,当前返回内容不合规"

[system]
# 是否自动同意进群邀请
accept_group_invite = false
# 是否自动同意好友请求
accept_friend_request = false

[presets]
# 切换预设的命令: 加载预设 猫娘
command = "加载预设 (\\w+)"
loaded_successful = "预设加载成功!"
scan_dir = "./presets/"

[presets.keywords]
# 预设关键词 <-> 实际文件
"正常" = "presets/default.txt"
"猫娘" = "presets/catgirl.txt"
# "default" = "presets/default.txt" # 默认预设,开启后所有的会话都会先读这个预设,谨慎使用!
  • 登录成功后,说明 QQ 机器人已经连接上了 ChatGPT,此时即可跟机器人聊天了

4. Linux下一键快速部署

在linux服务器上输入最新版的命令即可,命令基于docker容器技术,会自动安装docker并拉取最新版的镜像。

配置文件路径和功能与Windows几乎一致,请参考前文的配置信息。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# chatgpt-qq下的文件
tree
.
├── config.cfg
├── docker-compose.yaml
└── mirai
├── config
│ ├── Console
│ │ ├── AutoLogin.yml
│ │ ├── Command.yml
│ │ ├── Logger.yml
│ │ ├── PermissionService.yml
│ │ └── PluginDependencies.yml
│ └── net.mamoe.mirai-api-http
│ └── setting.yml
└── data
└── xyz.cssxsh.mirai.mirai-device-generator
  • config.cgf 是配置 openai 和 QQ 的文件(修改文件后重新运行即可docker-compose up -d
  • docker-compose.yml 指定了需要启动的容器、服务、映像等信息
  • AutoLogin.yml 是 mirai 的自动登录配置
  • setting.yml 是包含 mirai 的 api 接口信息

一键安装命令本质是执行一个shell脚本,用于自动部署chatgpt-mirai-qq-bot程序。下面是脚本的功能:

  • 自动检测curl,docker和docker-compose是否已安装,如果未安装,则提示安装并安装;
  • 下载docker-compose.yaml和config.cfg文件;
  • 对config.cfg文件进行相应修改;
  • 创建setting.yml文件;

需要用户输入的信息有:

  • OpenAI的API Key;
  • OpenAI的邮箱地址和密码;
  • QQ机器人账号和密码;
  • ……

如果程序已经安装,则提示无法重复安装,并提供升级和重装的命令。

如果用户选择升级,则进行 docker-compose pulldocker-compose up -d 操作。

  • docker-compose up -d 后台启动所有容器(在 docker-compose.yaml 里面都写好)
  • docker-compose logs chatgpt -f 来查看chatgpt的实时日志

5. 其他

5.1 常用命令

5.1.1 切换AI xxx

切换至另一个 AI 引擎。
目前支持的有:

  • chatgpt-web - OpenAI ChatGPT 网页版
  • chatgpt-api - OpenAI ChatGPT API 版
  • bing-c - New Bing (新必应对话风格-创造力)
  • bing-p - New Bing (新必应对话风格-精确)
  • bing-b - New Bing (新必应对话风格-平衡)

5.1.2 文本模式

开启后,接下来的消息都用文字的方式回复。

5.1.3 图片模式

开启后,接下来的消息都用图片的方式回复。

5.1.4 重置会话

清空机器人的记忆,重新开始聊天。

5.1.5 回滚会话

相当于撤回消息,让机器人忘记你最后一次发的内容。

5.1.6 加载预设 xxx

让机器人加载某个特定的预设。 对于预设的玩法,请见右侧菜单。

5.1.7 画 xxx 或 画 + 一张图片

最低版本: 2.2.0

通过 DALL.E 进行 AI 画图(需要你设置 OpenAI 的 api_key)

5.2 管理员命令

5.2.1 .重新加载配置文件

让机器人的配置文件重新加载

5.2.2 设置额度

安装后效果示例

img

img

常见错误分析

在连接 ChatGPT 和 QQ 的过程中,可能会出现以下一些错误:

  1. 环境配置错误:Mirai 或 Onebot 的环境配置不正确,例如缺少依赖库、配置文件格式错误等,都可能导致启动失败。
  2. 登录信息错误:在配置文件中输入的 QQ 号码或密码错误,或者验证码输入错误,都可能导致登录失败。
  3. 网络连接错误:在与 QQ 进行通信的过程中,可能会出现网络连接问题,例如服务器繁忙、网络延迟等,导致消息发送失败或响应超时。
  4. API 使用错误:在调用 API 的过程中,可能会出现参数不正确、接口不存在、API 版本不匹配等问题,导致请求失败。
  5. 安全问题:如果 Mirai 或 Onebot 的权限设置不当,可能会导致账号信息泄露、恶意攻击等安全问题。
  6. 代码错误:在编写 ChatGPT 的代码时,可能会出现语法错误、逻辑错误等问题,导致程序无法正常运行。

针对这些错误,可以通过仔细检查配置文件、排查网络连接问题、检查 API 使用等方式来解决。同时,也可以参考github中的解决方案和文档,以及向相关技术人员寻求帮助。

注意抓住几个核心问题:

  • 在哪一步报错的
  • 报什么错
  • 有可能是什么原因导致的

总结

以上就是部署QQ机器人的流程,当然还有很多功能等着大家探索,可以根据自己的喜好调整,自己探索把。


将ChatGPT接入QQ机器人
https://fulequn.github.io/2023/03/Article202303181/
作者
Fulequn
发布于
2023年3月18日
许可协议