部署 微信 AI 机器人 chatgpt-on-wechat

1,176 阅读7分钟

演示&体验:

VX: Cap-011117

介绍:

本项目是基于大模型的智能对话机器人,支持企业微信、微信公众号、飞书、钉钉接入,可选择GPT3.5/GPT4.0/Claude/文心一言/讯飞星火/通义千问/Gemini/LinkAI/ZhipuAI,能处理文本、语音和图片,通过插件访问操作系统和互联网等外部资源,支持基于自有知识库定制企业AI应用

项目地址:github.com/zhayujie/ch…

功能:

  • 个人聊天中,支持使用关键字触发回复,也可以直接触发
  • 群组聊天中,支持在允许的群聊天中使用,艾特回复
  • 群组聊天中,支持自己艾特回复自己
  • 支持配置新人进群固定欢迎语,不配置则使用随机风格欢迎
  • 支持语音识别,文字回复
  • 支持语音识别,语音回复(需要配置 wechaty)
  • 自定义关键词,触发可画图
  • 用户昵称黑名单
  • 更多功能可看下面的 docker-compose.yml 配置文件

服务器部署 docker 部署

  1. 如果没有 key 需要前往 api.spoony.pro 登录创建key也就是令牌(点击查看创建教程
  2. 使用 SSH 连接服务器
  3. 创建docker-compose.yml文件
  4. 配置文件说明
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: 'sk-xxxxxxxxxxxxxxxxxxxxxxxxx' # 填入在 Chat Key 上面创建的 令牌
      MODEL: 'gpt-3.5-turbo' # 这个模型就可以了
      open_ai_api_base: 'https://api.spoony.pro/v1' # 固定地址
      PROXY: '' # 不用填
      SINGLE_CHAT_PREFIX: '["bot", "@bot"]' # 私聊时 触发机器人的关键字 为空则不用触发即可自动回复
      SINGLE_CHAT_REPLY_PREFIX: '"[bot] "' # 机器人 回复的前缀 可用于区分真人,可为空
      single_chat_reply_suffix: ""  # 私聊时自动回复的后缀,\n 可以换行
      GROUP_CHAT_PREFIX: '["@bot"]' # 群聊时包含该前缀则会触发机器人回复 艾特也会触发
      group_chat_reply_prefix: ""  # 群聊时自动回复的前缀
      group_chat_reply_suffix: ""  # 群聊时自动回复的后缀,\n 可以换行
      group_chat_keyword: '[]'  # 群聊时包含该关键词则会触发机器人回复
      group_at_off: 'False'  # 是否关闭群聊时@bot的触发
      GROUP_NAME_WHITE_LIST: '["OpenAI"]' # 开启自动回复的群名称列表
      group_name_keyword_white_list: '[]'  # 开启自动回复的群名称关键词列表
      group_chat_in_one_session: '["ChatGPT测试群"]'  # 支持会话上下文共享的群名称
      nick_name_black_list: '[]'  # 用户昵称黑名单
      group_welcome_msg: "欢迎进入XXXXXXXXXXX"  # 配置新人进群固定欢迎语,不配置则使用随机风格欢迎
      trigger_by_self: 'False' # 是否允许机器人触发
      IMAGE_CREATE_PREFIX: '["画", "看", "找"]' # 开启图片回复的前缀
      text_to_image: "dall-e-2"  # 图片生成模型,可选 dall-e-2, dall-e-3
      image_proxy: 'True'  # 是否需要图片代理,国内访问LinkAI时需要
      concurrency_in_session: '1'  # 同一会话最多有多少条消息在处理中,大于1可能乱序
      image_create_size: "256x256"  # 图片大小,可选有 256x256, 512x512, 1024x1024 (dall-e-3默认为1024x1024)
      group_chat_exit_group: 'False' 
      # chatgpt会话参数
      EXPIRES_IN_SECONDS: 3600  # 无操作会话的过期时间
      CONVERSATION_MAX_TOKENS: 1000 # 支持上下文记忆的最多字符数
      # 人格描述
      character_desc: "你是ChatGPT, 一个由OpenAI训练的大型语言模型, 你旨在回答并解决人们的任何问题,并且可以使用多种语言与人交流。"
      # chatgpt限流配置
      rate_limit_chatgpt: 20  # chatgpt的调用频率限制
      rate_limit_dalle: 50  # openai dalle的调用频率限制
      # chatgpt api参数 参考https://platform.openai.com/docs/api-reference/chat/create
      temperature: 0.9
      top_p: 1
      frequency_penalty: 0
      presence_penalty: 0
      timeout: 120  # chatgpt重试超时时间,在这个时间内,将会自动重试
      # wework的通用配置
      wework_smart: 'True'  # 配置wework是否使用已登录的企业微信,False为多开
      # 语音设置
      SPEECH_RECOGNITION: 'False' # 是否开启语音识别
      group_speech_recognition: 'False'  # 是否开启群组语音识别
      voice_reply_voice: 'False'  # 是否使用语音回复语音,需要设置对应语音合成引擎的api key
      always_reply_voice: 'False'  # 是否一直使用语音回复
      voice_to_text: "openai"  # 语音识别引擎,支持openai,baidu,google,azure
      text_to_voice: "openai"  # 语音合成引擎,支持openai,baidu,google,pytts(offline),azure,elevenlabs,edge(online)
      text_to_voice_model: "tts-1"
      tts_voice_id: "alloy"
      # baidu 语音api配置, 使用百度语音识别和语音合成时需要
      baidu_app_id: ""
      baidu_api_key: ""
      baidu_secret_key: ""
      # 1536普通话(支持简单的英文识别) 1737英语 1637粤语 1837四川话 1936普通话远场
      baidu_dev_pid: "1536"
      # azure 语音api配置, 使用azure语音识别和语音合成时需要
      azure_voice_api_key: ""
      azure_voice_region: "japaneast"
      # elevenlabs 语音api配置
      xi_api_key: ""    #获取ap的方法可以参考https://docs.elevenlabs.io/api-reference/quick-start/authentication
      xi_voice_id: ""   #ElevenLabs提供了9种英式、美式等英语发音id,分别是“Adam/Antoni/Arnold/Bella/Domi/Elli/Josh/Rachel/Sam”
      # 服务时间限制,目前支持itchat
      chat_time_module: 'False'  # 是否开启服务时间限制
      chat_start_time: "00:00" # 服务开始时间
      chat_stop_time: "24:00"  # 服务结束时间
      # 翻译api
      translate: "baidu"  # 翻译api,支持baidu
      # baidu翻译api的配置
      baidu_translate_app_id: ""  # 百度翻译api的appid
      baidu_translate_app_key: ""  # 百度翻译api的秘钥
      # itchat的配置
      hot_reload: 'False'  # 是否开启热重载
      # wechaty的配置
      wechaty_puppet_service_token: ""  # wechaty的token
      # wechatmp的配置
      wechatmp_token: ""  # 微信公众平台的Token
      wechatmp_port: 8080  # 微信公众平台的端口,需要端口转发到80或443
      wechatmp_app_id: ""  # 微信公众平台的appID
      wechatmp_app_secret: ""  # 微信公众平台的appsecret
      wechatmp_aes_key: ""  # 微信公众平台的EncodingAESKey,加密模式需要
      # wechatcom的通用配置
      wechatcom_corp_id: ""  # 企业微信公司的corpID
      # wechatcomapp的配置
      wechatcomapp_token: ""  # 企业微信app的token
      wechatcomapp_port: 9898  # 企业微信app的服务端口,不需要端口转发
      wechatcomapp_secret: ""  # 企业微信app的secret
      wechatcomapp_agent_id: ""  # 企业微信app的agent_id
      wechatcomapp_aes_key: ""  # 企业微信app的aes_key
      # 飞书配置
      feishu_port: 80  # 飞书bot监听端口
      feishu_app_id: ""  # 飞书机器人应用APP Id
      feishu_app_secret: ""  # 飞书机器人APP secret
      feishu_token: ""  # 飞书 verification token
      feishu_bot_name: ""  # 飞书机器人的名字
      # 钉钉配置
      dingtalk_client_id: ""  # 钉钉机器人Client ID 
      dingtalk_client_secret: ""  # 钉钉机器人Client Secret 
      # chatgpt指令自定义触发词
      clear_memory_commands: '["#清除记忆"]'  # 重置会话指令,必须以#开头
      # channel配置
      channel_type: "wx"  # 通道类型,支持:{wx,wxy,terminal,wechatmp,wechatmp_service,wechatcom_app}
      subscribe_msg: ""  # 订阅消息, 支持: wechatmp, wechatmp_service, wechatcom_app
      debug: 'False'  # 是否开启debug模式,开启后会打印更多日志
      appdata_dir: ""  # 数据目录
      # 插件配置
      plugin_trigger_prefix: "$"  # 规范插件提供聊天相关指令的前缀,建议不要和管理员指令前缀"#"冲突
      # 是否使用全局插件配置
      USE_GLOBAL_PLUGIN_CONFIG: 'True'
      max_media_send_count: 3     # 单次最大发送媒体资源的个数
      media_send_interval: 1  # 发送图片的事件间隔,单位秒
      # 智谱AI 平台配置
      zhipu_ai_api_key: ""
      zhipu_ai_api_base: "https://open.bigmodel.cn/api/paas/v4"
      # LinkAI平台配置      
      use_linkai: 'False'
      linkai_api_key: ""
      linkai_app_code: ""
      linkai_api_base: "https://api.link-ai.chat"  # linkAI服务地址,若国内无法访问或延迟较高可改为 https://api.link-ai.tech
  1. 启动容器:在docker-compose.yml所在目录下执行以下命令启动容器
sudo docker compose up -d
  1. 扫码登录即可完成
  2. 如果修改了配置文件 需要关闭服务,重新启动才可以,分别执行以下命令
sudo docker ps # 查看容器是否运行
sudo docker compose down # 停止当前容器服务
sudo docker compose up -d # 启动服务
sudo docker logs -f chatgpt-on-wechat # 获取二维码 扫码登录

windows 部署

(1) 克隆项目代码:

git clone https://github.com/zhayujie/chatgpt-on-wechat
cd chatgpt-on-wechat/

(2) 安装核心依赖 (必选):

能够使用itchat创建机器人,并具有文字交流功能所需的最小依赖集合。

pip3 install -r requirements.txt

(3) 拓展依赖(任选,建议安装):

pip3 install -r requirements-optional.txt

(4) 运行:

如果是开发机本地运行,直接在项目根目录下执行:

python3 app.py     # windows环境下该命令通常为 
python app.py

终端输出二维码后,使用微信进行扫码,当输出“开始自动回复”时表示自动回复程序已经成功运行了(注意:用于登录的微信需要在支付处已完成实名认证)。之后你的账号就成为机器人了,可以在手机端通过配置的关键词触发自动回复(任意好友发送消息给你,或者自己发消息给好友)

如果某项依赖安装失败可注释掉对应的行再继续