搭建个人聊天机器人:结合chatgpt-on-wechat与星火大模型API
在追求技术创新的时代,人工智能已经成为我们生活中不可或缺的一部分。之前,我们尝试通过QQ平台利用GtToken搭建了聊天机器人,尽管功能丰富,但GtToken易过期的问题仍然是一个困扰。如今,我探索到了一个新的项目——zhayujie/chatgpt-on-wechat
,它不仅能通过微信公众号接入强大的星火大模型API,还允许我们免费试用,稳定性也更胜一筹。
1. 准备工作
1.1 环境配置
- 服务器选择:选择一个性能稳定的云服务器,如阿里云或腾讯云等。
- 系统安装:安装Linux操作系统,推荐使用Ubuntu或CentOS。
- 软件依赖:确保服务器上安装了Docker和Docker Compose。
1.2 项目地址
星火大模型:讯飞开放平台-以语音交互为核心的人工智能开放平台 (xfyun.cn)
企业微信:https://mp.weixin.qq.com/
1.3获取必要的API密钥
星火大模型API:申请并获取星火大模型的API接入权限。
项目默认使用 OpenAI接口 进行对话,项目默认支持OpenAI接口,然而由于其费用和代理配置上的不便,我们转向使用星火大模型API。项目同时也支持文心、讯飞、GPT-3、GPT-4 等模型,所以这里选择使用星火大模型的API。
(1)首次使用的用户会看到免费试用的选项。由于我已经使用过API,所以显示的是在线调试界面。
完成个人认证后,你可以免费领取200万Tokens,足够长期使用。接下来需要创建一个应用并将套餐分配给该应用以便使用。
完成应用信息填写后,点击提交可创建应用,然后返回平台首页。
点击创建的应用查看APPID、APISecret和APIKey,这些信息将用于配置API。
微信公众号:注册并认证微信公众号
需要前往 微信公众平台 注册一个公众号,项目支持的公众号类型有两种,可根据你的需求进行选择:
类型 | 要求 | 特点 |
---|---|---|
个人号 | 个人可申请 | 在收到消息时会回复用户一条消息,回复生成后需要用户主动发消息获取 |
企业号 | 企业可申请,同时需要通过微信认证开通客服接口 | 回复生成后可主动推送给用户 |
根据个人或企业的需求,我们可以选择合适的公众号类型进行注册。对于个人来说,订阅号是个不错的选择,尽管其交互能力有限;若是企业,则可以选择服务号并通过认证来获得更丰富的功能。
2. 部署zhayujie/chatgpt-on-wechat
2.1 chatgpt-on-wechat项目
项目作者提供了四种安装方式:
运行方式 | 需要的资源 | 优势 | 劣势 |
---|---|---|---|
Docker部署 | 服务器 + docker环境 | 不用关心python环境和依赖 | 插件配置稍麻烦 |
本地运行 | 个人机器 + 本地代理 + python环境 | 方便本地代码调试 | 不适合长时间稳定运行 |
服务器部署 | 服务器 + python环境 | 方便配置和源码修改、稳定运行 | 需要简单的linux基础 |
Railway部署 | 一个超过半年的github账号 | 一键部署 | 免费额度有限,插件等高级功能使用不便 |
我这里选择使用服务器 + docker进行部署,配置相对简单方便。
2.2 配置Docker Compose文件
采用Docker部署的方式,我们编辑docker-compose.yml
文件,填入必要的API密钥和微信公众号信息。通过简单的几个命令,即可轻松启动容器并完成配置。编辑docker-compose.yml
文件,修改或添加所需的配置,如 OPEN_AI_API_KEY
和 GROUP_NAME_WHITE_LIST
等必填配置,其他配置参考 配置说明。这里我设置了微信公众号信息和星火大模型API密钥。
version: '2.0'
services:
chatgpt-on-wechat:
image: zhayujie/chatgpt-on-wechat
container_name: chatgpt-on-wechat
security_opt:
- seccomp:unconfined
environment:
OPEN_AI_API_KEY: 'YOUR API KEY'
MODEL: 'xunfei'
XUNFEI_APP_ID: 'xxxx'#前面获取的APPID,APISecret和APIKey
XUNFEI_API_KEY: 'xxxxx'
XUNFEI_API_SECRET: 'xxxxxx'
PROXY: ''
SINGLE_CHAT_PREFIX: '[""]'
SINGLE_CHAT_REPLY_PREFIX: " "
GROUP_CHAT_PREFIX: '["@bot"]'
GROUP_NAME_WHITE_LIST: '["ChatGPT测试群", "ChatGPT测试群2"]'
IMAGE_CREATE_PREFIX: '["画", "看", "找"]'
CONVERSATION_MAX_TOKENS: 1000
SPEECH_RECOGNITION: 'False'
CHARACTER_DESC: '你是基于大语言模型的AI智能助手,旨在回答并解决人们的任何问题,并且可以使用多种语言与人交流。'
EXPIRES_IN_SECONDS: 3600
USE_GLOBAL_PLUGIN_CONFIG: 'True'
USE_LINKAI: 'False'
LINKAI_API_KEY: ''
LINKAI_APP_CODE: ''
# wechatmp的配置
channel_type: "wechatmp" #选择使用微信公众号
wechatmp_token: 'xxxxx' # 微信公众平台的Token
wechatmp_port: 443 # 微信公众平台的端口需要端口转发到80或443
wechatmp_app_id: 'xxxxxx' # 微信公众平台的appID
wechatmp_app_secret: 'xxxxxxx' # 微信公众平台的appsecret
wechatmp_aes_key: 'xxxxxxx' # 微信公众平台的EncodingAESKey,加密模式需要
ports:
- "18443:443"
volumes:
- ./config.json:/app/plugins/config.json
我这里选择将容器的443端口映射到服务器18443端口,后续使用nginx将域名反代到服务器的18443,实现外网通过域名访问容器443端口。同时,将配置文件config.json映射到本地,方便后续对配置进行更改,我这里也给出我的配置文件作为参考:
{
"channel_type": "wechatmp",
"wechatmp_token": xxxxx" # 微信公众平台的Token
"wechatmp_port": 443 # 微信公众平台的端口需要端口转发到80或443
"wechatmp_app_id": "xxxxxx" # 微信公众平台的appID
"wechatmp_app_secret": "xxxxxx" # 微信公众平台的appsecret
"wechatmp_aes_key": "xxxxxxxx" # 微信公众平台的EncodingAESKey,加密模式需要
"model": "xunfei",
"xunfei_app_id":"xxxxxxxx",
"xunfei_api_key":"xxxxxxx",
"xunfei_api_secret":"xxxxxxx",
"open_ai_api_key": "YOUR API KEY",
"claude_api_key": "YOUR API KEY",
"text_to_image": "dall-e-2",
"voice_to_text": "openai",
"text_to_voice": "openai",
"proxy": "",
"hot_reload": false,
"single_chat_prefix": [
""
],
"single_chat_reply_prefix": "",
"group_chat_prefix": [
"@bot"
],
"group_name_white_list": [
"ChatGPT测试群",
"ChatGPT测试群2"
],
"image_create_prefix": [
"画"
],
"speech_recognition": true,
"group_speech_recognition": false,
"voice_reply_voice": false,
"conversation_max_tokens": 2500,
"expires_in_seconds": 3600,
"character_desc": "你是基于大语言模型的AI智能助手,旨在回答并解决人们的任何问题,并且可以使用多种语言与人交流。",
"temperature": 0.7,
"subscribe_msg": "感谢您的关注!\n这里是AI智能助手,可以自由对话。\n支持语音对话。\n支持图片输入。\n支持图片输出,画字开头的消息将按要求创作图片。\n支持tool、角色扮演和文字冒险等丰富的插件。\n输入{trigger_prefix}#help 查看详细指令。",
"use_linkai": false,
"linkai_api_key": "",
"linkai_app_code": ""
}
2.3 启动容器
docker-compose up -d
为了让外部网络能够访问我们的聊天机器人,我采用了Nginx反向代理,并将一个域名指向了服务器的18443端口,这样用户便可通过HTTPS协议安全地与机器人交互。因为后续接入微信公众号平台的URL必须是HTTP/HTTPS协议,所以无法使用除80/443以外的端口。我这里选择使用nginx进行反代,首先将一个域名例如wechat.test.com解析到云服务器,然后使用nginx将wechat.test.com转发到服务器的18443端口,同时配置SSL证书,实现https协议访问云服务器的18443端口。我这里直接使用宝塔面板进行配置。
2.4 接入微信公众号平台
docker compose.yml中的配置需要和 微信公众号后台 中的保持一致,进入页面后,在左侧菜单选择 "设置与开发 - 基本配置 - 服务器配置",按下图进行配置:
配置的流程如下:
-
在公众平台启用开发者密码 (对应配置
wechatmp_app_secret
),并将服务器ip填入白名单中; -
按上图填写
config.json
中与公众号相关的配置,要与公众号后台的配置一致; -
在启动程序后会监听443端口;
-
在公众号后台启用服务器配置并提交,如果保存成功则表示已经成功配置。注意 "服务器地址(URL)" 这一项需要配置为
http或https://{HOST}/wx
的格式,其中 {HOST} 可以是服务器的ip或域名。 -
在完成配置后,可以到docker的后台日志查看是否成功接入,当日志中显示如下内容,则表示聊天机器人已成功接入公众号。
3. 使用和测试
可以看到,由于受订阅号限制,回复内容较短的情况下 (15s内),可以立即完成回复,但耗时较长的回复则会先回复一句 "正在思考中",后续需要用户输入任意文字主动获取答案,而服务号则可以通过客服接口解决这一问题。
其他问题
- 语音识别:可利用微信自带的语音识别功能,提供语音输入能力。需要在公众号管理页面的 "设置与开发 -> 接口权限" 页面开启 "接收语音识别结果"
- 语音回复:利用项目中的语音生成能力,项目作者推荐使用 azure 语音接口
5. 结语
通过上述步骤,你不仅能够成功搭建一个基于zhayujie/chatgpt-on-wechat
的微信聊天机器人,还能通过实际操作加深对Docker、微信公众平台和AI API的理解。希望本指南能帮助你顺利搭建起属于自己的聊天机器人。