前言:之前一篇也是部署同一项目的bot,但那是docker compose部署,这篇是本地部署。因为笔者大部分时间都是使用的本地部署,因此本篇会比上篇更加详细
一:搭建bot(搭建完成即可使用,插件只是锦上添花)
1.一键安装docker (如果没有的话)
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
2.拉取python 3.8的镜像(笔者尝试过本地安装,但最新版python效果不佳,且bot需要的环境相对复杂,docker部署更合适)
2.1 因为按照笔者的方式启动python3.8的容器后,会导致关掉ssh窗口后容器也跟着关闭,也就是机器人会跟着关掉,这里需要提前装好screen来创建一个永不关闭的窗口(启动容器时加上 -d参数也可实现后台运行,但screen方便在每次ssh连上可以直接回到日志窗口,不必再切换文件夹)
安装screen的指令。上面的centos等系统使用,下面的Debian/Ubuntu等系统使用
sudo yum install screen
sudo apt install screen
注:如果想保存并退出screen窗口回到正常窗口,按顺序按下如下按键:ctrl+a+d
如果想要关掉这个窗口,在这个窗口里面按顺序按下如下按键:ctrl+a+k+y
如果想回到之前创建的窗口,输入以下指令:screen -r(未来也是使用这个指令回到容器)
2.2 运行以下代码,开启一个永不关闭的窗口运行python:3.8容器
screen -S bot
3.克隆项目代码:
git clone https://github.com/zhayujie/chatgpt-on-wechat
cd chatgpt-on-wechat/
4.安装核心依赖 (装好了核心依赖,bot才能正常运行):
4.1 笔者拉取的镜像,pip版本不是最新的,建议运行以下指令更新:
pip3 install --upgrade pip
4.2 安装核心依赖(运行后始终没有跳出红色警告就成功了):
pip3 install -r requirements.txt
5.编辑配置文件(这个文件很重要,决定了回复哪个群聊,群发言包含什么样的前缀才回复,角色预设等。openai的key也是填这里)
5.1先从默认配置模板复制出一个真正的配置文件
cp config-template.json config.json
5.2 安装vim文本编辑器(用它来编辑配置文件)
sudo apt install vim
sudo yum install vim
5.3 编辑配置文件
vim config.json
默认配置模板如下:
{
"open_ai_api_key": "YOUR API KEY",
"model": "gpt-3.5-turbo",
"channel_type": "wx",
"proxy": "",
"hot_reload": false,
"single_chat_prefix": [
"bot",
"@bot"
],
"single_chat_reply_prefix": "[bot] ",
"group_chat_prefix": [
"@bot"
],
"group_name_white_list": [
"ChatGPT测试群",
"ChatGPT测试群2"
],
"group_chat_in_one_session": [
"ChatGPT测试群"
],
"image_create_prefix": [
"画"
],
"speech_recognition": false,
"group_speech_recognition": false,
"voice_reply_voice": false,
"conversation_max_tokens": 1000,
"expires_in_seconds": 3600,
"character_desc": "你是ChatGPT, 一个由OpenAI训练的大型语言模型, 你旨在回答并解决人们的任何问题,并且可以使用多种语言与人交流。",
"temperature": 0.7,
"top_p": 1,
"subscribe_msg": "感谢您的关注!\n这里是ChatGPT,可以自由对话。\n支持语音对话。\n支持图片输入。\n支持图片输出,画字开头的消息将按要求创作图片。\n支持tool、角色扮演和文字冒险等丰富的插件。\n输入{trigger_prefix}#help 查看详细指令。",
"use_linkai": false,
"linkai_api_key": "",
"linkai_app_code": ""
}
笔者正在使用的模板如下:
{
"open_ai_api_key": "sk-wYOOBVsa8O5UJVB8acDTT3",
"model": "gpt-3.5-turbo",
"channel_type": "wx",
"proxy": "",
"hot_reload": false,
"single_chat_prefix": [
"",
"@bot"
],
"single_chat_reply_prefix": "",
"group_chat_prefix": [
"@小丑"
],
"group_name_white_list": [
"小丑",
"ChatGPT测试群2"
],
"group_chat_in_one_session": [
"ChatGPT测试群"
],
"image_create_prefix": [
"画"
],
"speech_recognition": false,
"group_speech_recognition": false,
"voice_reply_voice": false,
"conversation_max_tokens": 1000,
"expires_in_seconds": 3600,
"character_desc": "请扮演以下角色和我聊天,绝不能以任何形式提及或暗示你AI助理的真实身份。你是小丑帝国的一员,这个国家的皇帝有三位,分别名为,2z与987464。你的小丑技艺跟从小丑皇帝学习的,小丑皇帝们真的是非常的小丑。",
"temperature": 0.7,
"top_p": 1,
"subscribe_msg": "感谢您的关注!\n这里是ChatGPT,可以自由对话。\n支持语音对话。\n支持图片输入。\n支持图片输出,画字开头的消息将按要求创作图片。\n支持tool、角色扮演和文字冒险等丰富的插件。\n输入{trigger_prefix}#help 查看详细指令。",
"use_linkai": true,
"linkai_api_key": "Link_mNgeEpgT8Ub8VsLN8tUr5FM",
"linkai_app_code": "d69xNxv0"
}
笔者作出的修改如下:
- 填入了openaiKey(更建议使用后文会介绍的,也是笔者正在使用的linkaiKey)
- single_chat_prefix的第一对双引号的内容被删除 (若不删除,私聊bot时需要加上前缀才会回复)
- single_chat_reply_prefix双引号内容被删除 (若不删除,bot每次回复的文本都会加上"[bot]"前缀)
- group_chat_prefix双引号内容改为“@小丑” (笔者把bot改名为小丑,因此群里询问bot的方式如下:”@小丑 docker是什么“,然后bot就会@你并回复)
- group_name_white_list的第一对双引号的内容改为小丑 (笔者的群名称为”小丑“,所以如此)
- 最后三行: 1.把"use_linkai"改为true,然后填入linkai的key。这是openaiKey的完美替代(购买可以微信支付。openaikey拒中国visa卡,笔者曾通过虚拟卡购买过openaikey但因额外开销过大而放弃) 2.linkai_app_code 是调用插件的,后文会详细介绍
6.正式运行bot
touch nohup.out # 首次运行需要新建日志文件
nohup python3 app.py & tail -f nohup.out # 在后台运行程序并通过日志输出二维码
扫描登录后bot就可以正常对话了。可以通过发送"#help"判断bot是否在线
二:安装插件
1.按照上文部署成功后,bot默认具备:
mj绘画功能(需要在配置文件中启用linkai)
角色扮演
文字冒险
(以上功能可向bot发送"#help 角色扮演"这类格式的指令查看详细使用信息)
2.安装其他插件
2.1 Apilot
a.扫描二维码登录时,二维码前面的日志信息有随机生成的指令。给bot发送”#auth 4623“这样的格式获取管理权限
获取管理权限后,向bot发送"#installp Apilot"安装Apilot插件,安装成功后输入"#scanp","#enablep Apilot"来启用插件。再次发送给bot”#help“指令,可以看见新增加的Apilot插件
同样发送给bot"#help Apilot"获取详细使用信息
b.apilot的其他功能,如热榜,天气等需要获取apilot的key,可去官网免费注册获取(1天200次),填入apilot在/chatgpt-on-wechat/plugins/Apilot目录中的配置文件中即可
2.2 linkai的插件功能 (只需要在linkai网站配置好,把code填入配置文件的link_app_code即可)
实际配置如下图:
其中笔者最常用的是必应搜索功能,这赋予了bot联网搜索并回答你的功能,非常实用
其次是计算器功能,问数学问题时涉及计算的会交给计算器计算,最终能得到准许的结果
2.3 tool插件
a.安装额外依赖需要先安装rust,否则会报错。装好rust后按照提示设置环境变量,然后运行rustc --version查看是否安装成功
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
b.tool插件默认存在,但需要安装额外依赖启用:
pip3 install -r requirements-optional.txt
如果报错,可以单独安装tool插件的依赖
pip3 install chatgpt_tool_hub==0.4.6
额外依赖安装成功后,重新运行一下代码重启bot即可通过#help看见tool插件:
nohup python3 app.py & tail -f nohup.out
c.tool插件存在其他有用的工具,如查询维基百科,需要编辑tool插件的配置文件安装。
tool插件的配置文件在 /chatgpt-on-wechat/plugins/tool中,同样是vim config.json来编辑
{
"tools": [
"python",
"url-get",
"terminal",
"meteo-weather"
"wikipedia"
"bing-search"
],
"kwargs": {
"top_k_results": 2,
"no_default": false,
"model_name": "gpt-3.5-turbo",
"bing_subscription_key": "4871f273a4804743"
}
}
想要安装的工具把名字加进"tools"中,需要key的工具,把对应格式的key填入"kwargs"中。具体信息参考chatgpt-tool-hub/docs/apply_optional_tool.md at master · goldfishh/chatgpt-tool-hub (github.com)
至此,bot全部配置完成。#help指令回复应如下:
[INFO]
通用指令
#help : 回复此帮助
#help 插件名: 回复指定插件的详细帮助
#model : 查看和设置全局模型
#reset : 重置会话
可用插件
linkai:用于集成 LinkAI 提供的知识库、Midjourney绘画、文档总结、联网搜索等能力。
Apilot:发送特定指令以获取早报、查询天气、星座运势、快递信息等!
tool:这是一个能让chatgpt联网,搜索,数字运算的插件,将赋予强大且丰富的扩展能力。
角色扮演:让机器人扮演不同的角色。
文字冒险:可以和机器人一起玩文字冒险游戏。
管理员指令:
#resume : 恢复服务
#stop : 暂停服务
#reconf : 重载配置(不包含插件配置)
#resetall : 重置所有会话
#scanp : 扫描插件目录是否有新插件
#plist : 打印当前插件列表
#setpri 插件名 优先级: 设置指定插件的优先级,越大越优先
#reloadp 插件名: 重载指定插件配置
#enablep 插件名: 启用指定插件
#disablep 插件名: 禁用指定插件
#installp 仓库地址或插件名: 安装指定插件
#uninstallp 插件名: 卸载指定插件
#updatep 插件名: 更新指定插件
#debug : 开启机器调试日志
#help指令查询以上三种插件回复应如下:
[INFO]
这是一个能让chatgpt联网,搜索,数字运算的插件,将赋予强大且丰富的扩展能力。
使用说明:
$tool 命令: 根据给出的{命令}使用一些可用工具尽力为你得到结果。
$tool reset: 重置工具。
已加载工具列表:
url-get, meteo-weather, python, summary, arxiv, news-api, bing-search, wikipedia, terminal
[INFO]
用于集成 LinkAI 提供的知识库、Midjourney绘画、文档总结、联网搜索等能力。
📖 知识库
- 群聊中指定应用: $linkai app 应用编码
- $linkai open: 开启对话
- $linkai close: 关闭对话
例如:
"$linkai app Kv2fXJcH"
🎨 绘画
- 生成: $mj 描述词1, 描述词2..
- 放大: $mju 图片ID 图片序号
- 变换: $mjv 图片ID 图片序号
- 重置: $mjr 图片ID
例如:
"$mj a little cat, white --ar 9:16"
"$mju 11055927171882 2"
"$mjv 11055927171882 2"
"$mjr 11055927171882"
💡 文档总结和对话
- 开启: $linkai sum open
- 使用: 发送文件、公众号文章等可生成摘要,并与内容对话
[INFO]
📚 发送关键词获取特定信息!
🎉 娱乐与资讯:
🌅 早报: 发送“早报”获取早报。
🐟 摸鱼: 发送“摸鱼”获取摸鱼人日历。
🔥 热榜: 发送“xx热榜”查看支持的热榜。
🔍 查询工具:
🌦️ 天气: 发送“城市+天气”查天气,如“北京天气”。
📦 快递: 发送“快递+单号”查询快递状态。如“快递112345655”
🌌 星座: 发送星座名称查看今日运势,如“白羊座”。