参考项目:https://github.com/lss233/chatgpt-mirai-qq-bot
by:雪月三十
采用docker方式搭建 方便快捷
不建议放在云服务器上
克隆项目
git clone https://github.com/lss233/chatgpt-mirai-qq-bot.git
cd chatgpt-qq
cd chatgpt-mirai-qq-bot
配置Mirai
先把项目拉起来 添加上自己的账号
docker-compose run --rm mirai
当你看见终端出现
2022-12-10 04:30:19 I/MCL Addon: iTXTech MCL Version: 2.1.2-61c8bd8
2022-12-10 04:30:19 W/MCL Addon: iTXTech Soyuz 未安装,Soyuz MCL Handler 特性已禁用
2022-12-10 04:30:19 I/main: 3 plugin(s) enabled.
2022-12-10 04:30:19 I/main: Auto-login _________
2022-12-10 04:30:20 W/stderr: ERROR StatusLogger Log4j2 could not find a logging implementation. Please add log4j-core to the classpath. Using SimpleLogger to log to the console...
>
的时候,意味着 Mirai 启动完毕。 接下来执行命令登录机器人 QQ。
login <机器人QQ号> <机器人密码> ANDROID_PAD
然后根据提示进行即可。
当机器人账号登录成功以后,执行
autologin add <机器人QQ号> <机器人密码>
autologin setConfig <机器人QQ号> protocol ANDROID_PAD
让 Mirai 可以自动登录。
设置好后退出容器即可
配置 mirai-http-api
编辑 mirai/config/net.mamoe.mirai-api-http/setting.yml
,填入以下内容:
# 这里是 ChatGPT for QQ 的所有配置文件
# 请注意:以 "#" 开头的文本均为注释
# 不会被程序读取
# 如果你想要使用某个设置,请确保前面没有 "#" 号# 如果你想使用 go-cqhttp,则这么写:
# [onebot]
# qq=请修改为你机器人的QQ号
# manager_qq = 请修改为机器人管理员的QQ号
# 此处的 reverse_ws_host 和 reverse_ws_port 对应
# go-cqhttp 中的 反向WS Universal 地址,如:ws://localhost:6555/ws
# reverse_ws_host = "0.0.0.0"
# reverse_ws_port = 6555# 如果你想正常用 Mirai
# 就用下面这段配置
[mirai]
qq = 2780757168
reverse_ws_host = "0.0.0.0"
reverse_ws_port = 8554
# manager_qq = 请修改为机器人管理员的QQ号api_key = "1234567890"
http_url = "http://mirai:8080"
ws_url = "http://mirai:8080"# ==== OpenAI 账号部分开始
[openai]
# OpenAI 相关设置
# 自定义 ChatGPT 的 browserless 接入点
# 自 3月9日 开始,不设置此项将无法正常使用 browserless 模式下的网页版 ChatGPT
browserless_endpoint = "https://bypass.duti.tech/"# 自定义 OpenAI 的 API 接口基础地址
# 通过此功能,你可以搭建一个 OpenAI 的反向代理来避免网络问题
# 例如此项目:https://github.com/Ice-Hazymoon/openai-scf-proxy
# api_endpoint = "https://api.openai.com/v1"# 你可以用多种不同的方式登录 OpenAI
# 你也可以登录很多个不同的账号(无限多个)
# 下面的例子会向你演示使用不同方式登录时
# 配置文件的写法# 第 1 个 OpenAI 账号
# 使用 邮箱+密码 登录
# 优点:
# 1. 自动刷新 access_token 和 session_token,无需人工操作
# 缺点:
# 1. 需要国外网络环境
# 2. 如果使用代理,需要确保你的代理未被 OpenAI 封禁[[openai.accounts]]
mode = "browserless"# 你的 access_token,登录 OpenAI 后访问`https://chat.openai.com/api/auth/session`获取
access_token = "【这里填你的access】"# # 如果你在国内,需要配置代理
# proxy="http://127.0.0.1:1080"# # 使用 ChatGPT Plus(plus 用户此项设置为 true 使用 legacy 模型)
# paid = false# # 是否开启标题自动重命名
title_pattern="qq-{session_id}"# # 是否自动删除旧的对话
auto_remove_old_conversations = true
# # ===== 结束 =====# # 第 3 个 OpenAI 账号
# # 使用 session_token 登录
# # 此方法已很少人使用
# # 优点:
# # 1. 适用于通过 Google / 微软 注册的 OpenAI 账号
# # 缺点:
# # 1. 有效期较短,具体时间未知
# # 2. 登录过程需要几秒钟时间
# [[openai.accounts]]
# mode = "browserless"# # 你的 session_token,使用方法见 README
# session_token = "一串 ey 开头的东西"# # 如果你在国内,需要配置代理
# proxy="http://127.0.0.1:1080"# # 使用 ChatGPT Plus(plus 用户此项设置为 true 使用 legacy 模型)
# paid = false# # 是否开启标题自动重命名
# title_pattern="qq-{session_id}"# # 是否自动删除旧的对话
# auto_remove_old_conversations = true# 第 4 个 OpenAI 账号
# 使用 api key 登录
# 当你设置了 API Key 之后
# 你就可以使用 OpenAI 中收费的 ChatGPT API、AI 画图等功能
# 优点:
# 1. 响应快
# 缺点:
# 1. 烧钱
# API Key 模式只有这两个配置项要填,别写其他的
# [[openai.accounts]]
# # 你的 API key,可以在这里看: https://platform.openai.com/account/api-keys
# api_key="sk-xxxxx"
# # 如果你在国内,需要配置代理
# proxy="http://127.0.0.1:1080"# # 第 5 个 OpenAI 账号
# # # 理论上你可以添加无限多个 OpenAI 账号
# # # 你可以自行添加或删除配置文件来设置账号信息
# [[openai.accounts]]
# mode = "browserless"# # 你的 OpenAI 邮箱
# email = "xxxx"
# # 你的 OpenAI 密码
# password = "xxx"# # 如果你在国内,需要配置代理
# proxy="http://127.0.0.1:1080"# # 使用 ChatGPT Plus(plus 用户此项设置为 true 使用 legacy 模型)
# paid = false# # 是否开启标题自动重命名
# title_pattern="qq-{session_id}"# # 是否自动删除旧的对话
# auto_remove_old_conversations = true# === OpenAI 账号部分结束# # === Bing 设置部分开始
# # 如果你没有 Bing 账号,可以直接删除这部分
# [bing]# # 第 1 个 Bing 账号
# # 理论上,你可以添加无限多个 Bing 账号。
# # 多账号的配置方法和 OpenAI 的一样。
# [[bing.accounts]]
# # 你的账号 Cookie,获取方法见 README
# cookie_content = '一串很长的文本...'
# === Bing 设置部分结束[system]
# 是否自动同意进群邀请
accept_group_invite = true
# 是否自动同意好友请求
accept_friend_request = true[presets]
# 切换预设的命令: 加载预设 猫娘
command = "加载预设 (\\w+)"
loaded_successful = "预设加载成功!"
scan_dir = "./presets/"[presets.keywords]
# 预设关键词 <-> 实际文件
"正常" = "presets/default.txt"
"猫娘" = "presets/catgirl.txt"
# "default" = "presets/default.txt" # 默认预设,开启后所有的会话都会先读这个预设,谨慎使用!
模板:
# 这里是 ChatGPT for QQ 的所有配置文件
# 请注意:以 "#" 开头的文本均为注释
# 不会被程序读取
# 如果你想要使用某个设置,请确保前面没有 "#" 号
[mirai]
# Mirai 相关设置qq = 请填写机器人的 QQ 号manager_qq = 请修改为机器人管理员的QQ号# 以下设置如果不懂 无需理会api_key = "1234567890" # mirai-http-api 中的 verifyKey
# mirai api http 反向连接模式
# 使用此模式可以将本项目与 mirai 分离在两个不同服务器部署
reverse_ws_host = "localhost"
reverse_ws_port = 8554
# mirai api http 正向连接模式
# 使用此模式时需注释上面的反向连接模式
# http_url = "http://localhost:8080"
# ws_url = "http://localhost:8080"
# ==== OpenAI 账号部分开始
[openai]
# OpenAI 相关设置
# 自定义 ChatGPT 的 browserless 接入点
# 自 3月9日 开始,不设置此项将无法正常使用 browserless 模式下的网页版 ChatGPT
browserless_endpoint = "https://bypass.duti.tech/"# 自定义 OpenAI 的 API 接口基础地址
# 通过此功能,你可以搭建一个 OpenAI 的反向代理来避免网络问题
# 例如此项目:https://github.com/Ice-Hazymoon/openai-scf-proxy
# api_endpoint = "https://api.openai.com/v1"# 你可以用多种不同的方式登录 OpenAI
# 你也可以登录很多个不同的账号(无限多个)
# 下面的例子会向你演示使用不同方式登录时
# 配置文件的写法# 第 1 个 OpenAI 账号
# 使用 access_token 登录
# 优点:
# 1. 适用于在国内网络环境
# 2. 适用于通过 Google / 微软 注册的 OpenAI 账号
# 3. 登录过程较快
# 缺点:
# 1. 有效期为 30 天,到期后需更换
[[openai.accounts]]
mode = "browserless"# 你的 access_token,登录 OpenAI 后访问`https://chat.openai.com/api/auth/session`获取
access_token = "一串 ey 开头的东西"# 下面是所有的 OpenAI 账号都可以有的设置
# ========= 开始 ========# 如果你在国内,需要配置代理
proxy="http://127.0.0.1:1080"# 使用 ChatGPT Plus(plus 用户此项设置为 true 使用 legacy 模型)
paid = false# 是否开启标题自动重命名
# 若为空或保持注释即不开启
# 支持的变量: {session_id} - 此对话对应的上下文 ID,若产生在好友中,则为好友 QQ 号,若产生在群聊中,则为群号
# 具体见 README 中的介绍
# title_pattern="qq-{session_id}"# 是否自动删除旧的对话,开启后用户发送重置对话时会自动删除以前的会话内容
# auto_remove_old_conversations = true# ===== 结束 =====# 第 2 个 OpenAI 账号
# 使用 session_token 登录
# 此方法已很少人使用
# 优点:
# 1. 适用于通过 Google / 微软 注册的 OpenAI 账号
# 缺点:
# 1. 有效期较短,具体时间未知
# 2. 登录过程需要几秒钟时间
[[openai.accounts]]
mode = "browserless"# 你的 session_token,使用方法见 README
session_token = "一串 ey 开头的东西"# 如果你在国内,需要配置代理
proxy="http://127.0.0.1:1080"# 使用 ChatGPT Plus(plus 用户此项设置为 true 使用 legacy 模型)
paid = false# 是否开启标题自动重命名
title_pattern="qq-{session_id}"# 是否自动删除旧的对话
auto_remove_old_conversations = true# 第 3 个 OpenAI 账号
# 使用 邮箱+密码 登录
# 优点:
# 1. 自动刷新 access_token 和 session_token,无需人工操作
# 缺点:
# 1. 需要国外网络环境
# 2. 如果使用代理,需要确保你的代理未被 OpenAI 封禁
[[openai.accounts]]
mode = "browserless"# 你的 OpenAI 邮箱
email = "xxxx"
# 你的 OpenAI 密码
password = "xxx"# 如果你在国内,需要配置代理
proxy="http://127.0.0.1:1080"# 使用 ChatGPT Plus(plus 用户此项设置为 true 使用 legacy 模型)
paid = false# 是否开启标题自动重命名
title_pattern="qq-{session_id}"# 是否自动删除旧的对话
auto_remove_old_conversations = true# 第 4 个 OpenAI 账号
# 使用 api key 登录
# 当你设置了 API Key 之后
# 你就可以使用 OpenAI 中收费的 ChatGPT API、AI 画图等功能
# 优点:
# 1. 响应快
# 缺点:
# 1. 烧钱
[[openai.accounts]]
# 你的 API key,可以在这里看: https://platform.openai.com/account/api-keys
api_key="sk-xxxxx"
# 如果你在国内,需要配置代理
proxy="http://127.0.0.1:1080"# 第 5 个 OpenAI 账号
# 理论上你可以添加无限多个 OpenAI 账号
# 你可以自行添加或删除配置文件来设置账号信息
[[openai.accounts]]
mode = "browserless"# 你的 OpenAI 邮箱
email = "xxxx"
# 你的 OpenAI 密码
password = "xxx"# 如果你在国内,需要配置代理
proxy="http://127.0.0.1:1080"# 使用 ChatGPT Plus(plus 用户此项设置为 true 使用 legacy 模型)
paid = false# 是否开启标题自动重命名
title_pattern="qq-{session_id}"# 是否自动删除旧的对话
auto_remove_old_conversations = true# === OpenAI 账号部分结束# === Bing 设置部分开始
# 如果你没有 Bing 账号,可以直接删除这部分
[bing]# 第 1 个 Bing 账号
# 理论上,你可以添加无限多个 Bing 账号。
# 多账号的配置方法和 OpenAI 的一样。
[[bing.accounts]]
# 你的账号 Cookie,获取方法见 README
cookie_content = 'MUID=xxxxx; SRCHD=AF=xxxx; SRCHUID=V=2&GUID=xxxxxxxx; MicrosoftApplicationsTelemetryDeviceId=xxxxxx-xxxx-xxxx-xxx-xxxxx; ...一串很长的文本...'
# === Bing 设置部分结束[text_to_image]
# 文字转图片# 是否强制开启,设置后所有的消息强制以图片发送,减小风控概率
always = true# 是否默认开启,设置后所有的消息默认以图片发送,减小风控概率
default = true# 字体大小
font_size = 30# 图片宽度
width = 700# 字体
font_path = "fonts/sarasa-mono-sc-regular.ttf" # [备用模式]起始点 X
offset_x = 50 # [备用模式]起始点 Y
offset_y = 50 [trigger]
# 配置机器人要如何响应,下面所有项均可选 (也就是可以直接删掉那一行)# 全局聊天前缀,在群聊和私聊中,符合下面的前缀才会响应,可以自己增减
prefix = [ "",]# 私聊聊天前缀,在私聊中,符合下面的前缀也会响应,可以自己增减
prefix_friend = [ "",]# 群聊聊天前缀,在群聊中,符合下面的前缀也会响应,可以自己增减
prefix_group = [ "",]# 直接和指定的 AI 对话(不切换AI)
# 此处的前缀是在上面的前缀之后的
# 例:
# prefix = [ "ask" ]
# prefix_ai = { "bing-c" = ["bing"] }
# 则用户发送: ask bing 你好
# 则会直接把 “你好” 两个字发给 New Bing AI
prefix_ai = { "chatgpt-web" = ["gpt"], "bing-c" = ["bing"] }# AI 画图的前缀
# 需要有 OpenAI 的 api_key 才能使用
prefix_image = ["画", "看"]
# 配置群里如何让机器人响应,"at" 表示需要群里 @ 机器人,"mention" 表示 @ 或者以机器人名字开头都可以,"none" 表示不需要
require_mention = "at"# 重置会话的命令
reset_command = [ "重置会话",]# 回滚会话的命令
rollback_command = [ "回滚会话",][response]
# 默认使用的 AI 类型,不填写时自动推测
# 目前支持的类型:
# chatgpt-web: 网页版 ChatGPT
# chatgpt-api: API 版 ChatGPT (GPT3.5-turbo)
# bing-c: New Bing (新必应对话风格-创造力)
# bing-p: New Bing (新必应对话风格-精确)
# bing-b: New Bing (新必应对话风格-平衡)
default_ai = "chatgpt-web"
# 匹配指令成功但没有对话内容时发送的消息
placeholder = "您好!我是 Assistant,一个由 OpenAI 训练的大型语言模型。我不是真正的人,而是一个计算机程序,可以通过文本聊天来帮助您解决问题。如果您有任何问题,请随时告诉我,我将尽力回答。\n如果您需要重置我们的会话,请回复`重置会话`。"# 发生错误时要发送的消息
error_format = "出现故障!如果这个问题持续出现,请和我说“重置会话” 来开启一段新的会话,或者发送 “回滚会话” 来回溯到上一条对话,你上一条说的我就当作没看见。\n{exc}"# 发生网络错误时发送的消息,请注意可以插入 {exc} 作为异常占位符
error_network_failure = "网络故障!连接 OpenAI 服务器失败,我需要更好的网络才能服务!\n{exc}"# OpenAI 账号登录失效时的提示
error_session_authenciate_failed = "身份验证失败!无法登录至 ChatGPT 服务器,请检查账号信息是否正确!\n{exc}"# OpenAI 提示 Too many requests(太多请求) 时的提示
error_request_too_many = "糟糕!当前收到的请求太多了,我需要一段时间冷静冷静。你可以选择“重置会话”,或者过一会儿再来找我!\n{exc}"# 服务器提示 Server overloaded(过载) 时的提示
error_server_overloaded = "抱歉,当前服务器压力有点大,请稍后再找我吧!"# 是否要回复触发指令的消息
quote = true# 发送下面那个提醒之前的等待时间
timeout = 30.0# 超过响应时间时要发送的提醒
timeout_format = "我还在思考中,请再等一下~"# 重置会话时发送的消息
reset = "会话已重置。"# 回滚成功时发送的消息
rollback_success = "已回滚至上一条对话,你刚刚发的我就忘记啦!"# 回滚失败时发送的消息
rollback_fail = "回滚失败,没有更早的记录了!"# 等待处理的消息的最大数量,如果要关闭此功能,设置为 0
max_queue_size = 10# 队列满时的提示
queue_full = "抱歉!我现在要回复的人有点多,暂时没有办法接收新的消息了,请过会儿再给我发吧!"# 新消息加入队列会发送通知的长度最小值
queued_notice_size = 3# 新消息进入队列时,发送的通知。 queue_size 是当前排队的消息数
queued_notice = "消息已收到!当前我还有{queue_size}条消息要回复,请您稍等。"[baiducloud]
# 是否启动百度云内容安全审核
# 注册地址: http://console.bce.baidu.com/ai/#/ai/antiporn/overview/index
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 = "预设加载成功!"[presets.keywords]
# 预设关键词 <-> 实际文件
"正常" = "presets/default.txt"
"猫娘" = "presets/catgirl.txt"[ratelimit]
# 额度限制功能,可以在 wiki 中了解此功能的用法# 额度使用达到此比例时进行警告
warning_rate = 0.8# 警告消息
warning_msg = "\n\n警告:额度即将耗尽!\n目前已发送:{usage}条消息,最大限制为{limit}条消息/小时,请调整您的节奏。\n额度限制整点重置,当前服务器时间:{current_time}"# 超额消息
exceed = "已达到额度限制,请等待下一小时继续和我对话。"
启动
接下来就可以启动整个项目了。 你可以用
docker-compose up
来启动。 如果没问题的话,可以 Ctrl + C 退出来,然后换成
docker-compose up -d
在后台启动。
维护
如果你发现你的机器人不回你了,看看是 mirai 那边出问题了,还是 chatgpt 那边出问题了。
docker-compose logs mirai
可以看见 Mirai 的运行输出。
docker-compose logs chatgpt
可以看见本项目 chatgpt 的运行输出。
如果 Mirai 出现问题(比如说需要验证,或者重新登录等),你可以这么做:
- 关闭当前正在运行的 Mirai
docker-compose stop mirai
- 手动启动 Mirai
docker-compose run --rm mirai
然后参考配置Mirai 搞定它。
搞定之后 Ctrl + C 退出来, 然后执行
docker-compose restart
重启就行了。