1.前言

很早之前我们利用linkai搭建了微信聊天机器人实现了免魔法在微信使用chatgpt(教程链接),并且获得了很高的热度,到现在都是博客里热度第一的文章。

但是实现的功能非常简单随着版本的更新,这个项目能实现的功能已经非常的多,丰富的插件可以集成,包括免魔法不用自己开通订阅就可以mj绘图,知识库问答、文档文章总结、每日早报新闻,联网搜索,微博热榜,打工人摸鱼日历等等。所以便有了这期全新的重置版教程,并且采用全新的部署方式。

创作不易,如果你觉得有用,欢迎请橙子喝杯咖啡☕☕☕

2. 项目展示







3. 相关地址

官方GitHub地址:https://github.com/zhayujie/chatgpt-on-wechat
docker镜像:zhayujie/chatgpt-on-wechat:latest
LinkAi(前置条件):注册地址

4. 搭建视频

4.1 YouTube
视频地址:后续补充…

4.2 哔哩哔哩
哔哩哔哩:后续补充…

5. 搭建方式

5.1 docker compose安装

我们需要修改很多的环境变量和插件参数,所以直接使用docker compose来部署,比平常更方便
直接查看这篇文章 Nas安装docker compose

5.2 创建编辑docker-compose.yml

通过开启调试功能,进入nas命令行后执行以下命令

mkdir -p /root/data/docker/chat-on-wechat
cd /root/data/docker/chat-on-wechat

然后复制下面这段yml配置,修改关键的地方为自己的

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: 'gpt-3.5-turbo'
      PROXY: ''
      SINGLE_CHAT_PREFIX: '["桔子", "bot", "@bot"]'
      SINGLE_CHAT_REPLY_PREFIX: '"[我来喽~] "'
      GROUP_CHAT_PREFIX: '["@bot", "@桔子"]'
      GROUP_NAME_WHITE_LIST: '["TEST","全军覆没OvO","小城故事","吞金兽后援团"]'
      IMAGE_CREATE_PREFIX: '["画", "draw", "Draw", "生成"]'
      CONVERSATION_MAX_TOKENS: 3000
      SPEECH_RECOGNITION: 'False'
      CHARACTER_DESC: '你是ChatGPT, 一个由OpenAI训练的大型语言模型, 你旨在回答并解决人们的任何问题,并且可以使用多种语言与人交流。'
      EXPIRES_IN_SECONDS: 3600
      USE_GLOBAL_PLUGIN_CONFIG: 'False'
      USE_LINKAI: 'True'
      LINKAI_API_KEY: 'Link_MfKnJxxxxxx2mwW1JGFX'
      LINKAI_APP_CODE: 'qPxxxxsq'

USE_GLOBAL_PLUGIN_CONFIG 为False 是因为我们要自定义插件配置

其他的参数具体示意参考如下

# config.json文件内容示例
{
  "open_ai_api_key": "YOUR API KEY",                          # 填入上面创建的 OpenAI API KEY
  "model": "gpt-3.5-turbo",                                   # 模型名称, 支持 gpt-3.5-turbo, gpt-3.5-turbo-16k, gpt-4, wenxin, xunfei, claude-3-opus-20240229
  "claude_api_key":"YOUR API KEY"                             # 如果选用claude3模型的话,配置这个key,同时如想使用生图,语音等功能,仍需配置open_ai_api_key
  "proxy": "",                                                # 代理客户端的ip和端口,国内环境开启代理的需要填写该项,如 "127.0.0.1:7890"
  "single_chat_prefix": ["bot", "@bot"],                      # 私聊时文本需要包含该前缀才能触发机器人回复
  "single_chat_reply_prefix": "[bot] ",                       # 私聊时自动回复的前缀,用于区分真人
  "group_chat_prefix": ["@bot"],                              # 群聊时包含该前缀则会触发机器人回复
  "group_name_white_list": ["ChatGPT测试群", "ChatGPT测试群2"], # 开启自动回复的群名称列表
  "group_chat_in_one_session": ["ChatGPT测试群"],              # 支持会话上下文共享的群名称  
  "image_create_prefix": ["画", "看", "找"],                   # 开启图片回复的前缀
  "conversation_max_tokens": 1000,                            # 支持上下文记忆的最多字符数
  "speech_recognition": false,                                # 是否开启语音识别
  "group_speech_recognition": false,                          # 是否开启群组语音识别
  "use_azure_chatgpt": false,                                 # 是否使用Azure ChatGPT service代替openai ChatGPT service. 当设置为true时需要设置 open_ai_api_base,如 https://xxx.openai.azure.com/
  "azure_deployment_id": "",                                  # 采用Azure ChatGPT时,模型部署名称
  "azure_api_version": "",                                    # 采用Azure ChatGPT时,API版本
  "character_desc": "你是ChatGPT, 一个由OpenAI训练的大型语言模型, 你旨在回答并解决人们的任何问题,并且可以使用多种语言与人交流。",  # 人格描述
  # 订阅消息,公众号和企业微信channel中请填写,当被订阅时会自动回复,可使用特殊占位符。目前支持的占位符有{trigger_prefix},在程序中它会自动替换成bot的触发词。
  "subscribe_msg": "感谢您的关注!\n这里是ChatGPT,可以自由对话。\n支持语音对话。\n支持图片输出,画字开头的消息将按要求创作图片。\n支持角色扮演和文字冒险等丰富插件。\n输入{trigger_prefix}#help 查看详细指令。",
  "use_linkai": false,                                        # 是否使用LinkAI接口,默认关闭,开启后可国内访问,使用知识库和MJ
  "linkai_api_key": "",                                       # LinkAI Api Key
  "linkai_app_code": ""                                       # LinkAI 应用code
}

然后回到终端的chat-on-wechat目录下 执行

vi docker-compose.yml

然后 鼠标右击将改完的内容直接粘贴进去,按ESC,在英文输入法的前提下输入 :wq,然后回车保存

5.3 插件配置文件

复制并修改以下插件配置信息

{
    "godcmd": {
        "password": "12345",
        "admin_users": []
    },
    "banwords": {
        "action": "replace",
        "reply_filter": true,
        "reply_action": "ignore"
    },
    "tool": {
        "tools": [
            "python",
            "url-get",
            "terminal",
            "meteo-weather"
        ],
        "kwargs": {
            "top_k_results": 2,
            "no_default": false,
            "model_name": "gpt-3.5-turbo"
        }
    },
    "Apilot":{
        "alapi_token": "自己去https://github.com/6vision/Apilot 申请token 主要功能是早报、微博热榜、日历等等",
        "morning_news_text_enabled": false
    },
    "linkai": {
        "group_app_map": {
            "TEST": "qxxxxq",
            "全军覆没OvO": "qxxxxq",
            "小城故事": "qxxxxq",
            "吞金兽后援团": "bxxxxrw"
        },
        "midjourney": {
            "enabled": true,
            "auto_translate": true,
            "img_proxy": true,
            "max_tasks": 3,
            "max_tasks_per_user": 1,
            "use_image_create_prefix": true
        },
        "summary": {
            "enabled": true,
            "group_enabled": true,
            "max_file_size": 5000,
            "type": ["FILE", "SHARING"]
        }
    }
}

Apilot插件需自行申请token,group_app_map 是可以指定不同的群使用不同的应用,比如吞金兽后援团 我绑定的就是一个喂了很多育儿知识文档的知识库应用,根据自己的实际情况填写,其他的完全可以照搬
然后回到终端的chat-on-wechat目录下 执行

vi config.json

然后 鼠标右击将改完的内容直接粘贴进去,按ESC,在英文输入法的前提下输入 :wq,然后回车保存

5.4 启动容器

在chat-on-wechat目录下 执行

docker-compose up -d

就能启动容器啦,然后我们查看容器的日志就能直接微信扫码了

docker logs -f chatgpt-on-wechat

6.使用教程

6.1 godcmd(管理员插件)

私聊你的机器人 输入私聊触发前缀 然后添加命令 实现管理员操作

#resume : 恢复服务
#stop : 暂停服务
#reconf : 重载配置(不包含插件配置)
#resetall : 重置所有会话
#scanp : 扫描插件目录是否有新插件
#plist : 打印当前插件列表
#setpri 插件名 优先级: 设置指定插件的优先级,越大越优先
#reloadp 插件名: 重载指定插件配置
#enablep 插件名: 启用指定插件
#disablep 插件名: 禁用指定插件
#installp 仓库地址或插件名: 安装指定插件
#uninstallp 插件名: 卸载指定插件
#updatep 插件名: 更新指定插件
#debug : 开启机器调试日志

6.2 Apilot和linkai插件

首先我们需要私聊然后认证管理员后下载和启用插件
管理员认证

#auth 12345

下载插件

#installp https://github.com/6vision/Apilot.git

扫描启用插件

#scanp
#enablep Apilot
#enablep linkai


6.2 插件使用

聊天功能直接艾特就能用来,之前的旧版教程里都有。

mj绘画插件可以用我们之前在yml里的关键词去触发
比如我设置的是画、draw

回复提示给出的$mj 命令可以完成放大、变换等操作

日报我们只需要艾特机器人 然后加上早报

摸鱼日历是艾特机器人 然后加上日历

微博热榜是艾特机器人 然后加上日历微博热榜

你在群里发送文档和文章链接机器人会自动总结,回复对应命令可以开启内容问答

如果你想隐藏端口,可以通过nginx添加反向代理(Nginx Proxy Manager安装搭建),不想通过ip访问,可以选择一个域名(摆脱IP 如何挑选购买域名)然后设置内网穿透(用NPS搭建内网穿透 比frp更好用)实现外网的无端口域名访问

7. 总结

好了大体功能就是这些,其实还有些其他的插件比如入群欢迎、拍一拍提示、敏感词检测等,大家有兴趣可以自行去研究。
如果大家想使用现成的免部署的ai聚合应用可以使用cheeseai (点我前往
同样也有手机端,另外提供同款的ai网站搭建服务,可以小型团队使用也是想利用ai挣钱的小伙伴不二的选择因为支付注册等等都是完善的,nas也能搭建

祝大家搭建成功用的开心,有问题可以去 GitHub 提 Issues,也可以在评论区互相交流探讨。 如果问题负责留言讨论无法解决的,欢迎咖啡名单的小伙伴添加微信,会远程帮你远程解决问题。
同时,有能力给项目做贡献的同学,也欢迎积极加入到项目中来,贡献自己的一份力量!
最后,感谢开发人员们的辛苦付出,让我们能用到这么优秀的项目!

创作不易,如果你觉得有用,欢迎请橙子喝杯咖啡☕☕☕

参考资料
https://github.com/zhayujie/chatgpt-on-wechat