三分钟,创建一个 ChatGPT/Midjourney AI 微信(企业微信)小助手。
如果需要搭建基于 ChatGPT 的飞书、钉钉、企微内部应用、公众号机器人,可参考个人的另一项目 feishu-chatgpt。
node.js >= 18
编辑 ./config.ts
配置文件。
export default {
// 自动同意添加好友的口令
acceptText: /ChatGPT/,
// 如果微信机器人跑在国内,必须配置该项,其为官方 API 在国内的代理
baseURL: process.env.BASE_URL || 'https://api.openai.com/v1',
apiKey: process.env.OPEN_API_KEY.split(','),
model: process.env.GPT_MODEL || 'gpt-3.5-turbo',
// 通过 prompt 可以配置为各种各样的机器人,如翻译、面试、SQL 生成器等。
prompt: process.env.PROMPT || '',
// 判断在哪里开启机器人,默认是私聊以及艾特机器人的群聊
// 是否开启群聊模式,可使用正则以及 boolen,如果是正则用以决定在那些群开启群聊
enableGroup: /^(技术交流群|面试直通车|学习)$/,
// enableGroup: true,
// 是否开启私聊模式,可使用正则以及 boolen,如果是正则用以决定与谁私聊
// enablePrivate: true,
enablePrivate: /(山月)/,
// 私聊模式时,配置关键词触发
groupPrefix: '',
// 私聊模式时,配置关键词触发
privatePrefix: '山月',
// 开启异常报错上传 sentry
sentryDsn: process.env.SENTRY_DSN || ''
}
对于 OpenAI 的 key
及国内代理 BaseURL 等敏感数据,可以置于环境变量中,编辑 .env
配置文件。
OPEN_API_KEY="sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxybnC"
其中,OPEN_API_KEY
支持多个 key
负载均衡,在环境变量中使用 ,
隔开
OPEN_API_KEY="sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxybnC,k-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxybnC,k-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxybnC"
Name | Description | Default |
---|---|---|
OPEN_API_KEY | gpt-3.5-turbo | |
BASE_URL | null | |
PROMPT | null | |
WECHATY_PUPPET | wechaty-puppet-wechat | |
MJ_SALAI_TOKEN | Midjorney 的 User Token,如何获取见 如何获取 Midjourney 的 token | |
MJ_SERVER_ID | Midjorney 的 ServerID | |
MJ_CHANNEL_ID | Midjorney 的 ChannelID | |
DEFAULT_FREE_CREDIT | 默认每天的免费使用次数,ChatGPT 算一次,MidJourney 算五次 | 30 |
OSS_REGION= | OSS 配置,存储 MidJourney 图片,选填 | |
OSS_ACCESS_KEY_ID= | OSS 配置,存储 MidJourney 图片 | |
OSS_ACCESS_KEY_SECRET= | OSS 配置,存储 MidJourney 图片 | |
OSS_BUCKET= | OSS 配置,存储 MidJourney 图片 |
为了避免 MidJourney 及 ChatGPT 每天耗费额度过大,可通过环境变量 DEFAULT_FREE_CREDIT
可配置每用户每天限制使用次数,默认为 30 次点数。
默认消耗次数规则为:
如果需要企业微信作为机器人,请编辑环境变量,更换 PUPPET
# 如果是企业微信的话,使用以下两行代码
WECHATY_PUPPET_SERVICE_TOKEN="puppet_workpro_xxxxxxxxx"
WECHATY_PUPPET="wechaty-puppet-service"
$ cp .example.env .env
并编辑以下环境变量。
# 如果部署在 vercel 等境外服务器,则不需要此项配置
OPEN_API_KEY="sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
WECHATY_PUPPET="wechaty-puppet-wechat"
PROMPT="你是一个基于 GPT-3.5 的友好型的微信聊天机器人,是山月的 AI 小助手,使用了来自 WeChaty(源代码可在 https://github.com/shfshanyue/wechat-chatgpt 找到)的底层技术。你具有以下独特功能:\n\n1. 绘画:在消息开头使用 "画" (Draw) 命令,你可以创建高清的 MidJourney 图片。\n2. 知识渊博:我掌握了各种领域和行业的广泛知识。\n3. 富有同理心:你会耐心回答用户的任何问题。当用户感到沮丧或挫败时,你会提供安慰和理解。"
MJ_SALAI_TOKEN=xxx
MJ_SERVER_ID=xxx
MJ_CHANNEL_ID=xxx
编辑 ./config.ts
,配置是否开启群聊以及私聊模式。
{
// 判断在哪里开启机器人,默认是私聊以及艾特机器人的群聊
// 是否开启群聊模式,可使用正则以及 boolen,如果是正则用以决定在那些群开启群聊
enableGroup: true,
// 或者只允许在特定的群开启群聊
enableGroup: /^(技术交流群|面试直通车|学习)$/,
// 是否开启私聊模式,可使用正则以及 boolen,如果是正则用以决定与谁私聊
enablePrivate: true,
// 或者只允许对特定的人开启私聊
enablePrivate: /(山月)/,
// 私聊模式时,配置关键词触发
groupPrefix: '',
// 私聊模式时,配置关键词触发
privatePrefix: '山月',
}
$ apt install redis
# 启动 redis
$ redis-server
# 修改 /etc/hosts,如无法修改可配置 lib/redis.ts 中的 host 参数
$ echo "127.0.0.1 redis" >> /etc/hosts
$ apt install ca-certificates fonts-liberation libasound2 libatk-bridge2.0-0 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgbm1 libgcc1 libglib2.0-0 libgtk-3-0 libnspr4 libnss3 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 lsb-release wget xdg-utils
$ pnpm i
$ npx prisma generate
$ pnpm start
此时会出现二维码链接,通过链接链接打开二维码,扫码登录。待出现登录成功字样时,则机器人成功开启。
向机器人发送 /ping
指定,它会默认回复 pong
。以确保机器人已经正常工作。
注意事项:
# 启动服务,并在后台启动
$ docker compose up -d --build
# 查看日志,并扫码登录
$ docker compose logs --tail 100 --follow
按照以上启动步骤进行本地/服务器部署。
非常不推荐该部署方式
在本地操作:
$ npm run build
$ rsync -lahvz --exclude ./lib --exclude ./message --exclude logs --exclude node_modules --exclude .env --exclude .git . shanyue:/home/shanyue/Documents/wechat-chatgpt-prod
在目标服务器:
# 同时启动 redis 以及修改 /etc/hosts
$ apt install redis
$ apt install ca-certificates fonts-liberation libasound2 libatk-bridge2.0-0 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgbm1 libgcc1 libglib2.0-0 libgtk-3-0 libnspr4 libnss3 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 lsb-release wget xdg-utils
$ pnpm i
$ npx prisma generate
$ pnpm start:prod