ChatGPT 接入微信实践

安装方法

参考:https://github.com/zhayujie/chatgpt-on-wechat

1
2
3
4
5
git clone https://github.com/zhayujie/chatgpt-on-wechat
cd chatgpt-on-wechat/

pip3 install -r requirements.txt
pip3 install -r requirements-optional.txt

修改配置文件:

1
2
cp config-template.json config.json
vim config.json
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
{
"open_ai_api_key": "sk-",
"model": "gpt-3.5-turbo",
"channel_type": "wx",
"open_ai_api_base": "https://api.aiproxy.io/v1",
"proxy": "",
"hot_reload": false,
"single_chat_prefix": [
"bot",
"@bot"
],
"single_chat_reply_prefix": "[bot] ",
"group_chat_prefix": [
"@bot"
],
"group_name_white_list": ["ALL_GROUP"],
"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": true,
"linkai_api_base": "https://api.link-ai.tech",
"linkai_api_key": "Link_",
"linkai_app_code": ""
}

API获取

项目默认使用OpenAI接口,需前往 OpenAI注册页面 创建账号,创建完账号则前往 API管理页面 创建一个 API Key 并保存下来,后面需要在项目中配置这个key。接口需要海外网络访问及绑定信用卡支付。

或者使用第三方API。

比如:https://aiproxy.io/。(消费很多)

或者:https://chat.link-ai.tech (推荐,便宜)

注意,配置第三方linkai_api之后,无需再配置open_ai_api_key.

配置文件如下:

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
{
"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": ["ALL_GROUP"],
"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": true,
"linkai_api_base": "https://api.link-ai.tech",
"linkai_api_key": "Link_",
"linkai_app_code": ""
}

常用命令

启动程序

直接启动:python3 app.py

后台运行:nohup python3 app.py & tail -f nohup.out

日志输出到nohup.out

关闭进程

搜索进程并kill

1
2
3
ps -ef | grep app.py | grep -v grep

kill -9 加进程号

tool插件

介绍

https://github.com/goldfishh/chatgpt-on-wechat/blob/master/plugins/tool/README.md

Tool工具: 与操作系统和互联网交互,支持最新信息搜索、数学计算、天气和资讯查询、网页总结,基于 chatgpt-tool-hub 实现

相关API申请方法如下:

https://github.com/goldfishh/chatgpt-tool-hub/blob/master/docs/apply_optional_tool.md

配置tool插件

进入目录配置:plugins/tool

cp config.json.template config.json

配置需要开启的插件,有些需要API

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 1 {
2 "tools": [
3 "news",
4 "morning-news",
5 "wikipedia",
6 "python",
7 "url-get",
8 "terminal",
9 "bing-search",
10 "meteo-weather"],
11 "kwargs": {
12 "llm_api_key": "",
13 "proxy": "",
14 "debug": false,
15 "top_k_results": 2,
16 "no_default": false,
17 "model_name": "gpt-3.5-turbo",
18 "news_api_key": "",
19 "bing_subscription_key": "",
20 "morning_news_api_key": ""
21 }
22 }

使用tool插件

#help tool: 查看tool帮助信息,可查看已加载工具列表
$tool 命令: 根据给出的{命令}使用一些可用工具尽力为你得到结果。
$tool reset: 重置工具。

插件未启用bug

使用一段时间后,提供插件未启用,排查发现是配置文件自动改为了false.

重新修改为true即可。

chatgpt-on-wechat/plugins/plugins.json

1
2
3
4
19         "tool": {
20 "enabled": true,
21 "priority": 0
22 },

知识库平台配置

参考

https://github.com/zhayujie/chatgpt-on-wechat/tree/master/plugins/linkai

https://link-ai.tech/platform/link-app/wechat

获取API

进入控制台:

https://chat.link-ai.tech/console/factory

新用户有免费的600积分。

我充值了1w积分,生成一张图片需要150积分。

配置插件

plugins/linkai 目录下的 config.json.template 配置模板复制为最终生效的 config.json

配置项中 group_app_map 部分是用于映射群聊与LinkAI平台上的应用, midjourney 部分是 mj 画图的配置,summary 部分是文档总结及对话功能的配置。三部分的配置相互独立,可按需开启。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
{
"group_app_map": { # 群聊 和 应用编码 的映射关系
"测试群名称1": "default", # 表示在名称为 "测试群名称1" 的群聊中将使用app_code 为 default 的应用
"测试群名称2": "Kv2fXJcH"
},
"midjourney": {
"enabled": true, # midjourney 绘画开关
"auto_translate": true, # 是否自动将提示词翻译为英文
"img_proxy": true, # 是否对生成的图片使用代理,如果你是国外服务器,将这一项设置为false会获得更快的生成速度
"max_tasks": 3, # 支持同时提交的总任务个数
"max_tasks_per_user": 1, # 支持单个用户同时提交的任务个数
"use_image_create_prefix": true # 是否使用全局的绘画触发词,如果开启将同时支持由`config.json`中的 image_create_prefix 配置触发
},
"summary": {
"enabled": true, # 文档总结和对话功能开关
"group_enabled": true, # 是否支持群聊开启
"max_file_size": 5000 # 文件的大小限制,单位KB,默认为5M,超过该大小直接忽略
}
}

主配置文件

添加下面几行。

1
2
3
4
"use_linkai": true,
"linkai_api_key": "",
"linkai_app_code": "", #选填
"linkai_api_base": "https://api.link-ai.chat", # linkAI服务地址,若国内无法访问或延迟较高可改为 https://api.link-ai.tech

刚开始没有写linkai_api_base,会报错。加入这个参数之后可以正常使用。

Midjourney绘图功能

开启之后,艾特机器人,并输入提示词”画”,就会根据要求输出图片。

文档总结功能

该功能依赖 LinkAI的知识库及对话功能,需要在项目根目录的config.json中设置 linkai_api_key, 同时根据上述插件配置说明,在插件config.json添加 summary 部分的配置,设置 enabled 为 true。

如果不想创建 plugins/linkai/config.json 配置,可以直接通过 $linkai sum open 指令开启该功能。

功能开启后,向机器人发送 文件分享链接卡片 即可生成摘要,进一步可以与文件或链接的内容进行多轮对话。

  1. 文件目前 支持 txt, docx, pdf, md, csv格式,文件大小由 max_file_size 限制,最大不超过15M,文件字数最多可支持百万字的文件。但不建议上传字数过多的文件,一是token消耗过大,二是摘要很难覆盖到全部内容,只能通过多轮对话来了解细节。
  2. 分享链接 目前仅支持 公众号文章,后续会支持更多文章类型及视频链接等
  3. 总结及对话的 费用与 LinkAI 3.5-4K 模型的计费方式相同,按文档内容的tokens进行计算

语音功能

暂时报错,未解决。

提示缺少ffmpeg ,安装后发现后台运行会报错,且未解决问题。

于是直接关闭语音识别和回复语音的功能。

1
2
3
23   "speech_recognition": false,
24 "group_speech_recognition": false,
25 "voice_reply_voice": false,

效果演示

工具列表

tools

今日新闻

news

操作电脑终端

terminal

Midjourney画图

Midjourney

Url-Get

urlget

生成摘要

zhaiyao

总结

花了一整天时间,成功接入微信。效果还是很不错,可以当作群助手,配置tool插件后提供了更强大了功能。

比如:

1
2
已加载工具列表: 
python, url-get, python, summary, terminal, browser, url-get, wikipedia, arxiv, hello-tool, google-search, wolfram-alpha, debug, answer-user, news-api, finance-news, morning-news, news, bing-search, searxng-search, meteo-weather, morning-news, wikipedia, meteo-weather, terminal

需要服务器资源,GPT API资源,以及linkai资源以接入Midjourney.使用人数多的话,也是一笔不小的支出。

参考

https://www.wangpc.cc/aigc/wechat_com-chatgpt/

https://www.zsanjin.de/posts-gpt4api.html