BotChan · Bot酱
Bot酱使用微信测试号对接任何兼容OpenAI规范的API接口(例如API+、API2D),实现ChatBot。
⚠️ 特别提示
如果配置好以后,服务器端有日志输出,但微信无反应,日志提示 get access token failed,那么恭喜你遇到微信测试号平台的Bug了。尤其是对于刚开通的账号。可以试试手动退出微信测试号平台,重新扫码登录,查看 appsecret 是不是变了,然后改用新的 appsecret 。
安装和配置
准备资料
将页面上的 appID、appsecret作为环境变量
- MP_APPID=appID
- MP_APPSECRET=appsecret
- 随机编写一个Token
- MP_TOKEN=your-random-token
- 设置 OpenAI 接口
如果要使用 OpenAI 官方接口,需要将镜像部署在海外,否则很可能网络不通
OpenAI 配置示例
- DEFAULT_API_URL=https://api.openai.com
- DEFAULT_API_KEY=sk...
- DEFAULT_MODEL=gpt-3.5-turbo
API2D 配置示例
- DEFAULT_API_URL=https://oa.api2d.net
- DEFAULT_API_KEY=fk...
- DEFAULT_MODEL=gpt-3.5-turbo
- 设置触发词
可通过以下环境变量设置触发词,设置后只有包含触发词的对话才会触发AI答复。如果测试为空,那么每一句都可以触发AI答复。
DEFAULT_API_WORD=
- 对话命令和默认参数锁定
设置的默认值可以通过 /setXXX
命令(针对每个人)进行配置,可通过 /help
查看。
但某些参数你可能不希望用户修改,可以用以下环境变量锁定:
LOCK_API_URL=true
LOCK_API_KEY=true
LOCK_API_WORD=true
LOCK_MODEL=true
- 启动服务后(见后),记得将回调地址和Token回填到微信测试号设置页面。
Docker
请按上文介绍修改环境变量
确保对
./data
有写权限,或者挂到有权限的地方去
docker run -d --name bot \
-e MP_APPID= \
-e MP_APPSECRET= \
-e MP_TOKEN= \
-e DEFAULT_API_URL=https://oa.api2d.net \
-e DEFAULT_API_WORD= \
-e DEFAULT_API_KEY=fk... \
-e LOCK_API_URL=true \
-e LOCK_API_KEY=true \
-e LOCK_MODEL=true \
-e DB_TYPE=json \
-v ./data:/data \
-p 80:9000 \
easychen/botchan:latest
Docker-compose
请按上文介绍修改环境变量
确保对
./data
有写权限,或者挂到有权限的地方去
复制 docker-compose.example.yml
为 docker-compose.yml
,并根据需要修改环境变量:
version: '3'
services:
bot:
image: easychen/botchan
environment:
- MP_APPID=
- MP_APPSECRET=
- MP_TOKEN=
- DEFAULT_API_URL=https://oa.api2d.net
- DEFAULT_API_WORD=
- DEFAULT_API_KEY=fk...
- LOCK_API_URL=true
- LOCK_API_KEY=true
- LOCK_MODEL=true
- DB_TYPE=json
volumes:
- ./data:/data
ports:
- 80:9000
启动服务
docker-compose up -d
nodejs 安装见最后
回填Token和回调地址
启动服务后,我们可以获得回调地址
。如果IP/域名是xxx.xxx.xxx.xxx:xxxx
,那么回调地址
是http://xxx.xxx.xxx.xxx:xxxx/wechat
如果你在本机测试,需要使用 ngrok 等内网穿透工具创建一个公网可以访问的域名
回到测试号设置页面,点击 接口配置信息
后的修改链接,会将 回调地址
和 TOKEN
( 即 MP_TOKEN
) 填入并保存。
使用
用微信扫描测试号设置页面的二维码,关注测试号以后,可以发送问题。也可以通过 /setXXX
命令进行针对个人的配置。
可以通过 /help
查看可用命令。
你可以将测试号「发送到桌面」,作为快速进入的入口。这样就不用在微信里边到处找了
高级配置
模型配置
可以进一步指定模型参数优化需要的答复
- MAX_TOKEN=1000 #返回的最大token数
- TEMPERATURE=0.8 #模型的temperature
- TIMEOUT=180 #超时秒数
- STREAM=true #是否采用流式传输
AZURE 支持
Bot酱兼容 Azure 接口,将 DEFAULT_API_URL 指定为 Azure Endpoint( https://xxx.openai.azure.com ) 即可。
Azure 的 Deployment 需要和 azure 的 model name 保持一致。
在通过命令或者配置文件指定模型时,请使用 OpenAI 官方的名称,如 gpt-3.5-turbo
。
截断设置
过长文字可能导致内容无法返回,会截断为多条。
注意:受微信平台限制,每次互动,只能最多回复五条消息,因此不要将字数设置太低,可能导致超过五条
- REPLY_CHUNK_LENGHT=1000 #字数
使用 NodeJS 架设服务
包依赖安装
node18
yarn add api2d body-parser cors cross-fetch dotenv express express-xml-bodyparser knex mysql2 simple-json-db
node16.13.1
yarn add api2d body-parser cors cross-fetch dotenv express express-xml-bodyparser knex [email protected] simple-json-db
启动服务 node index.js
端口 9000
将用户设置保存到数据库
默认情况下,用户设置保存在 /data/db.json
,这要求运行环境可写;你也可将用户设置保存在 MySQL中。
MySQL 表初始化
CREATE TABLE `data` (
`id` int NOT NULL AUTO_INCREMENT,
`key` varchar(255) NOT NULL,
`value` text,
PRIMARY KEY (`id`),
UNIQUE KEY `key` (`key`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
MySQL 环境变量
- DB_HOST
- DB_PORT
- DB_USER
- DB_PASSWD
- DB_NAME
切换用户配置保存模式
- DB_TYPE=mysql2