Files
chatgpt-on-wechat/channel/wechatmp
2023-04-04 03:17:19 +08:00
..
2023-04-04 03:17:19 +08:00
2023-04-04 03:17:19 +08:00
2023-04-04 03:17:19 +08:00
2023-04-04 03:17:19 +08:00

个人微信公众号channel

鉴于个人微信号在服务器上通过itchat登录有封号风险这里新增了个人微信公众号channel提供无风险的服务。 但是由于个人微信公众号的众多接口限制目前支持的功能有限实现简陋提供了一个最基本的文本对话服务支持加载插件优化了命令格式支持私有api_key。暂未实现图片输入输出、语音输入输出等交互形式。 如有公众号是企业主体且可以通过微信认证,即可获得更多接口,解除大多数限制。欢迎大家提供更多的支持。

使用方法

在开始部署前你需要一个拥有公网IP的服务器以提供微信服务器和我们自己服务器的连接。或者你需要进行内网穿透否则微信服务器无法将消息发送给我们的服务器。

此外需要在我们的服务器上安装额外的依赖web.py和redis其中redis用来储存用户私有的配置信息。 以ubuntu为例(在ubuntu 22.04上测试):

sudo apt-get install redis
sudo systemctl start redis
pip3 install redis
pip3 install web.py

然后在微信公众平台注册一个自己的公众号,类型选择订阅号,主体为个人即可。

然后根据接入指南的说明,在微信公众平台的“设置与开发”-“基本配置”-“服务器配置”中填写服务器地址(URL)和令牌(Token)。这个Token是你自己编的一个特定的令牌。消息加解密方式目前选择的是明文模式。相关的服务器验证代码已经写好你不需要再添加任何代码。你只需要将本项目根目录的app.py中channel_name改成"mp",将上述的Token填写在本项目根目录的config.json中,例如"wechatmp_token": "Your Token", 然后运行python3 app.py启动web服务器然后在刚才的“服务器配置”中点击提交即可验证你的服务器。

随后在微信公众平台启用服务器关闭手动填写规则的自动回复即可实现ChatGPT的自动回复。

个人微信公众号的限制

由于目前测试的公众号不是企业主体所以没有客服接口因此公众号无法主动发出消息只能被动回复。而微信官方对被动回复有5秒的时间限制最多重试2次因此最多只有15秒的自动回复时间窗口。因此如果问题比较复杂或者我们的服务器比较忙ChatGPT的回答就没办法及时回复给用户。为了解决这个问题这里做了回答缓存它需要你在回复超时后再次主动发送任意文字例如1来尝试拿到回答缓存。为了优化使用体验目前设置了两分钟120秒的timeout用户在至多两分钟后即可得到查询到回复或者错误原因。

另外由于微信官方的限制自动回复有长度限制。因此这里将ChatGPT的回答拆分分成每段600字回复限制大约在700字

私有api_key

公共api有访问频率限制免费账号每分钟最多20次ChatGPT的API调用这在服务多人的时候会遇到问题。因此这里多加了一个设置私有api_key的功能私有的api_key将储存在redis中。另外后续计划利用redis储存更多的用户个人配置。目前通过godcmd插件的命令来设置私有api_key。

命令优化

之前plugin中#和$符号混用,且$这个符号在微信中和中文会有较大间隔,体验实在不好。这里我将所有命令更改成了以#开头。添加了一个叫finish的plugin来最后处理所有#结尾的命令防止未知命令变成ChatGPT的query。

测试范围

目前在RoboStyle这个公众号上进行了测试感兴趣的可以关注并体验。开启了godcmd, Banwords, role, dungeon, finish这五个插件其他的插件还没有测试。百度的接口暂未测试。语音对话没有测试。图片直接以链接形式回复没有临时素材上传接口的权限