1 用后感

简单地说,chatgpt-on-wechat 是把 ChatGPT 做成一个微信的机器人好友。项目主要是 Python 编写的,所以上手很快;一键部署也很简单,半个小时以内就能搞定。

项目地址:https://github.com/zhayujie/chatgpt-on-wechat

2 功能

  • 整体功能,核心是想解决什么问题
    核心功能是把大模型做成了微信中的聊天机器人。从底层看,它支持多个大模型:GPT-3.5, GPT-4, claude, 文心一言, 讯飞星火等;从上层看,它支持多种终端,如个人微信、微信公众号、企业微信、飞书等。
  • 当前解决了什么问题,哪些问题解决不了
    我觉得它解决了 LLM 接入微信 90% 以上的问题,作为独立软件的完整性很好;同时可作为二创的完美 baseline。
  • 提供哪些功能点,其中哪些是刚需
    整体代码和功能分为两部分:接入模型和接入终端。得用终端的接入,我们可以通过微信提供很多服务,不仅限于大模型。接模型这块做得也比较全,包含了图像和语音的支持,而且支持不同公司模型和对工具的调用。
    尽管可选模型很多,终端支持也不少;但估计绝大多数人都是把 ChatGPT 作为模型,个人微信作为终端。放在群里给大家用,或者是作为自己的机器人好友。
  • 用户使用难度,操作逻辑是否过于复杂
    开箱即用,部署使用难度为 0。

3 技术栈

  • 技术栈是什么
  • 这是一个独立的项目,不需要与其它工具配合使用,它利用微信作为前端。
  • 现有底层工具消化了哪些常用功能
  • 微信相关工具使用 itchat,并且嵌入在项目之中
  • 没有调 langchain 这些工具,相对独立
  • 代码主要集中在哪部分
  • 源码 6M 多,docker image 1.5G;具体占比请见代码分析
  • 代码量和难度(使用 cloc 工具统计)
  • 代码以 Python 为主,11000+ 行
  • 源码非常清晰,一看名字便知其功能;代码整体设计很有章法

4 商业模式

LinkAI 是其收费的兄弟产品,可将 LinkAI 作为此项目的知识库扩展,还实现了联网搜索、数学计算、网页访问等功能。此项目接入了 LinkAI。

看起来收益有两种走向,一种是通过给 LinkAI 充值,由他来提供相应的包装服务以及附加功能的服务,比如进一步实现 AI 智能客服,智能助理等。另外,做了一个应用广场,如果把自己应用放在应用广场,也可以取得收益,可能作者团队也希望能建立一种生态。

详见:https://docs.link-ai.tech/ 价格说明。

5 用法

5.1 安装&运行
wget https://open-1317903499.cos.ap-guangzhou.myqcloud.com/docker-compose.yml
# 至少要修改 OPENAI_API_KEY 和 PROXY
sudo docker compose up -d

此时它启在后台,用 docker ps 可以看到;查看 log,然后扫码登录。

docker logs -f chatgpt-on-wechat

6 修改代码后运行

$ docker run --rm -v /exports/:/opt/xieyan/ -name chatgpt-on-wechat -d zhayujie/chatgpt-on-wechat
$ docker exec -it chatgpt-on-wechat bash
$ cd /opt/xieyan/git/chatgpt-on-wechat
$ source env.sh
$ python app.py
6.1 使用注意事项

部署的版本默认支持绘画,就是有点小贵。

7 代码分析

7.1 主要代码

当前版本全部代码:11400 行,核心代码目录如下:

bot:调用各种大模型,12%
bridge:衔接工具,1%
channel:连接各终端,21%
plugins:插件实现,22%
lib:微信支持库,34%
voice:语音支持,4%
7.2 调用关系

主循环:app.py->channel_factory.py->wechat_channel.py

大模型调用:bridge.py->bot_factory.py->chat_gpt_bot.py

事件走向:chat_channel.py: produce->consume->_handle->_generate_reply->build_reply_content->bridge->bot…

这里的消息使用先进先出队列 (produce 入队 consume 出队),以保持处理的顺序和等待延时。

7.3 插件

事件触发了从接收消息到调用模型再到回复的过程;在加入新功能时,并不需要修改上述主结构代码。

更好的方法是通过插件实现附加功能,使用插件,可以不修改代码主体,以免改乱了,或者无法合并主分支的新代码。

plugins 目录下放置了一些现有的插件,其中 hello 插件非常简单可作为 demo 参考,它的功能是在用户输入 “Hello” 时,回复用户的名字。代码不到 100 行,主要实现了消息处理的过程,以及一些插件描述信息。

如果插件有一次加载错误,就会在chatgpt-on-wechat/plugins/plugins.json自动置为 false,不再启动;需要打开改为true

8 讨论

我真怀疑,是不是真有人把这个东西接在自己的帐号上,让他替自己回复吗?那这人心得多大呀?但从真实应用场景中看,对于某些场景(某些不重要的……),如果下载了之前所有历史对话并加以学习(进一步开发),让他在某种程度上替代自己也是有可能的。

相对来说,把他当作机器人助理比较正常一点。