botchan
botchan copied to clipboard
基于微信测试号的ChatBot,对接OpenAI API
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