作者:韩方圆,"Dify on WeChat"开源项目作者
1. 概述
微信作为最热门的即时通信软件,拥有巨大的流量。
微信友好的聊天窗口是天然的AI应用LUI(Language User Interface)/CUI(Command User Interface)。
微信不仅有个人微信,同时提供了公众号、企业微信、企业微信应用、企业微信客服等对话渠道,拥有良好的微信生态。
把Dify应用接入微信生态,就能打造一个功能强大的智能客服,大大降低客服成本,同时也能够提升客户体验。本篇教程就是手摸手地教你如何利用Dify on WeChat项目,把Dify应用接入微信生态。
2. Dify接入个人微信### 2.1. 准备工作
2.1.1. 创建聊天助手
(1)Dify简介
Dify是一个优秀的LLMOps(大型语言模型运维)平台,Dify的详细介绍请移步官方文档欢迎使用 Dify | 中文 | Dify。
(2)登录Dify官方应用平台
首先,登录Dify官方应用平台,你可以选择使用Github登录或者使用Google登录。此外,你也可以参考Dify官方教程Docker Compose 部署 | 中文 | Dify 私有部署,Dify是开源项目,支持私有部署。
(3)创建Dify基础编排聊天助手应用
登录成功后,进入Dify页面,我们按照下方步骤创建一个基础编排聊天助手应用
- 点击页面上方的工作室
- 创建空白应用
- 应用类型选择聊天助手
- 聊天助手编排方式选择基础编排
- 选择应用图标并为应用填写一个名称,比如基础编排聊天助手
- 点击创建
创建成功后我们会跳转到上图所示页面,我们继续配置应用
- 选择模型,如gpt-3.5-turbo-0125
- 设置模型参数
- 填写应用提示词
在配置完成后,我们可以在右侧对话框进行测试,在测试完成后,进行如下操作
- 发布
- 更新
- 访问API
(4)生成基础编排聊天助手API密钥
在点击"访问API"后,我们会跳转到上图的API管理页面,在这个页面我们按照如下步骤获取API密钥:
- 点击右上角API密钥
- 点击创建密钥
- 复制保存密钥
在保存密钥后,还需要查看右上角的API服务器,如果是Dify官网的应用,API服务器地址为 "https://api.dify.ai/v1", 如果是私有部署的,请确认你自己的API服务器地址。
至此,创建聊天助手的准备工作结束,在此小节中我们只需要保存好两个东西:API密钥与API服务器地址
2.1.2. 下载Dify on WeChat项目
(1)Dify on WeChat项目简介
Dify on WeChat是 ChatGPT on WeChat的下游分支,额外实现了对接Dify API,支持Dify聊天助手、支持Agent调用工具和知识库,支持Dify工作流,详情请查看GitHub仓库Dify on WeChat。
(2)下载代码并安装依赖
- 下载项目代码
Copy
gitclonehttps://github.com/hanfangyuan4396/dify-on-wechat
cddify-on-wechat/
- 安装python
Dify on WeChat项目使用python语言编写,请在python官网下载安装python,推荐安装python3.8以上版本,我在ubuntu测试过3.11.6版本,可以正常运行。
- 安装核心依赖(必选):
Copy
pip3install-rrequirements.txt# 国内可以在该命令末尾添加 "-i https://mirrors.aliyun.com/pypi/simple" 参数,使用阿里云镜像源安装依赖
- 拓展依赖 (可选,建议安装):
Copy
pip3install-rrequirements-optional.txt# 国内可以在该命令末尾添加 "-i https://mirrors.aliyun.com/pypi/simple" 参数,使用阿里云镜像源安装依赖
(3)填写配置文件
我们在项目根目录创建名为config.json的文件,文件内容如下,我们在2.1.1小节(4) 最后保存了API密钥与 API服务器地址 ,请把dify_api_base配置为 API服务器地址 ;dify_api_key配置为API密钥其他配置保持不变。
(PS: 很多朋友可能并不是严格按照我教程给出的步骤创建聊天助手类型的Dify应用,在此特别说明一下dify_app_type配置方法,如果你创建了聊天助手应用请配置为 chatbot ;创建了Agent应用请配置为 agent ; 创建了工作流应用请配置为 workflow 。)
Copy
{
"dify_api_base":"https://api.dify.ai/v1",
"dify_api_key":"app-xxx",
"dify_app_type":"chatbot",
"channel_type":"wx",
"model":"dify",
"single_chat_prefix": [""],
"single_chat_reply_prefix":"",
"group_chat_prefix": ["@bot"],
"group_name_white_list": ["ALL_GROUP"]
}
2.2. 把基础编排聊天助手接入微信
2.2.1. 快速启动测试
(1)在Dify on Wechat项目根目录执行如下命令
Copy
cddify-on-wechat
python3app.py# windows环境下该命令通常为 python app.py
(2)扫码登录
本项目使用itchat实现个人微信登录,有封号风险,建议使用实名认证过的微信小号进行测试,在执行上述命令后,我们可以在控制台看到打印如上图所示二维码,使用微信扫码登录,登录后当看到"itchat:Start auto replying."字符,表示登录成功,我们可以进行测试。
(3)对话测试
我们看到,微信机器人的回复与在Dify测试页面上的回复一致。至此,恭喜你成功把Dify接入了个人微信🎉🎉🎉
(PS: 有些朋友到这里可能在日志中看到正常回复了消息,但是微信中没有收到消息,请 不要用自己的微信给自己发消息 )
(4)服务器部署
- 源码部署
Copy
cddify-on-wechat
nohuppython3app.py&tail-fnohup.out# 在后台运行程序并通过日志输出二维码
- docker compose部署
容器的环境变量会覆盖config.json文件的配置,请修改docker/docker-compose.yml文件环境变量为你实际的配置,配置方法与2.1.1小节(4) 的config.json配置一致。
请确保正确配置 DIFY_API_BASE , DIFY_API_KEY与DIFY_APP_TYPE环境变量。
Copy
version:'2.0'
services:
dify-on-wechat:
image:hanfangyuan/dify-on-wechat
container_name:dify-on-wechat
security_opt:
- seccomp:unconfined
environment:
DIFY_API_BASE:'https://api.dify.ai/v1'
DIFY_API_KEY:'app-xx'
DIFY_APP_TYPE:'chatbot'
MODEL:'dify'
SINGLE_CHAT_PREFIX:'[""]'
SINGLE_CHAT_REPLY_PREFIX:'""'
GROUP_CHAT_PREFIX:'["@bot"]'
GROUP_NAME_WHITE_LIST:'["ALL_GROUP"]'
然后执行如下命令启动容器
Copy
cddify-on-wechat/docker# 进入docker目录
dockercomposeup-d# 启动docker容器
dockerlogs-fdify-on-wechat# 查看二维码并登录
2.3. 把工作流编排聊天助手接入微信
在把Dify基础的聊天助手应用接入微信后,我们接下来增加难度,尝试把工作流编排聊天助手应用接入微信,实现一个具有Dify平台知识的微信智能客服,为我们解答Dify工作流相关知识。
2.3.1. 创建知识库
(1)下载知识库文件
我们到dify文档仓库下载Dify工作流介绍的文档。
(2)Dify中导入知识库
进入知识库页面,创建知识库
选择导入已有文本,上传刚才下载的introduce.md文件,点击下一步
选择如下配置
- 分段设置:自动分段与清洗
- 索引方式:高质量
- 检索设置:向量检索
最后点击保存并处理
我们看到知识库正在进行嵌入处理,稍等片刻,即可嵌入成功。
2.3.2. 创建工作流编排聊天助手
我们进入Dify工作室,点击从应用模板创建
我们使用知识库+聊天机器人类型的模板,设置应用图标与名称,点击创建
跳转到工作流编排页面后,先点击知识检索节点,点击最右侧"+"添加知识库。我们选择之前上传好的introduce.md知识库,该知识库是对Dify工作流的基本介绍。最后我们点击添加,知识库节点设置完成。
接下来选择LLM节点,点击设置上下文,我们选择result变量,该变量存有知识检索的结果。
设置完LLM节点后,我们点击预览进行测试,输入问题:请介绍一下dify工作流。可以看到最终输出了Dify工作流的正确介绍。测试正常后,我们返回编辑模式。
返回编辑模式后,依次点击发布、更新、访问API
2.3.3. 生成工作流编排聊天助手API密钥
在跳转到API管理页面后,我们参照2.1.1小节(4)获取"知识库+聊天机器人"应用的API密钥与API服务器地址
2.3.4. 接入微信
与2.1.2小节(3)类似,我们在项目根目录创建名为config.json的文件,文件内容如下,同样把dify_api_base配置为知识库+聊天机器人应用的API服务器地址, dify_api_key配置为知识库+聊天机器人应用的API密钥,其他配置保持不变
Copy
{
"dify_api_base":"https://api.dify.ai/v1",
"dify_api_key":"app-xxx",
"dify_app_type":"chatbot",
"channel_type":"wx",
"model":"dify",
"single_chat_prefix": [""],
"single_chat_reply_prefix":"",
"group_chat_prefix": ["@bot"],
"group_name_white_list": ["ALL_GROUP"]
}
我们按照2.2.1小节启动程序并扫码登录,然后给微信机器人发送消息,进行测试
微信机器人的回复与在Dify测试页面上的回复一致。恭喜你更进一步,把工作流编排应用接入了个人微信,你可以向知识库中导入更多的Dify官方文档,让微信机器人为你解答更多的Dify相关问题。
2.4. 把Agent接入微信
2.4.1. 创建Agent应用
进入工作室页面,点击创建空白应用,选择Agent,设置图标和应用名称,最后点击创建
创建成功后,我们会进入Agent应用配置页面,在这个页面我们选择好对话模型,然后添加工具。我们首先添加DALL-E绘画工具,首次使用该工具需要授权,一般我们设置好OpenAI API key和OpenAI base URL即可使用该DALL-E绘画工具。
授权成功后,我们添加DALL-E 3绘画工具
接着,继续添加DuckDuckGo搜索引擎和数学工具,进行后续的工具测试
我们输入问题"搜索开源项目Dify的star数量,这个数量乘以3.14是多少",确认应用能够正常调用工具,我们依次点击发布、更新、访问API
2.4.2. 生成Agent API密钥
我们继续参照2.1.1小节(4)获取智能助手应用的API密钥与API服务器地址
2.4.3. 接入微信
我们在项目根目录创建名为config.json的文件,文件内容如下,同样把dify_api_base配置为智能助手应用的API服务器地址;dify_api_key配置为智能助手应用的API密钥,注意该应用为智能助手类型应用,还需要把dify_app_type设置为 agent ,其他配置保持不变
Copy
{
"dify_api_base":"https://api.dify.ai/v1",
"dify_api_key":"app-xxx",
"dify_app_type":"agent",
"channel_type":"wx",
"model":"dify",
"single_chat_prefix": [""],
"single_chat_reply_prefix":"",
"group_chat_prefix": ["@bot"],
"group_name_white_list": ["ALL_GROUP"]
}
继续参照2.2.1小节启动程序并扫码登录,然后给微信机器人发送消息,进行测试
可以看到微信机器人可以正常使用搜索和绘画工具。再一次恭喜你,把Dify Agent应用接入微信。也恭喜我,写到这里可以先睡觉了。
2.5. 把工作流接入微信
2.5.1. 创建工作流应用
首先你需要提前下载好我预先创建的DSL文件,点击此处下载。下载完成后,进入工作室页面,点击导入DSL文件,上传提前下载好的文件,最后点击创建。
创建完成后,按照上图步骤进行测试。点击运行,输入你好,确保该工作流能正常输出结果。
你可以在此工作流的基础上进行修改,但是对于工作流类型的应用,它的输入变量名称十分灵活,,为了更方便地接入微信机器人,Dify on WeChat项目约定工作流类型的应用输入变量命名为<strong>query</strong>
,输出变量命名为<strong>text</strong>
。
测试没有问题后,按照上图步骤发布应用,依次点击发布、更新、访问API。
2.5.2. 生成工作流API密钥
我们同样参照2.1.1小节(4)获取工作流应用的API密钥与 API服务器地址 。
2.5.3. 接入微信
我们在项目根目录创建名为config.json的文件,文件内容如下,同样把dify_api_base配置为工作流应用的API服务器地址;dify_api_key配置为工作流应用的API密钥,注意该应用为工作流类型应用,还需要把dify_app_type设置为 workflow ,其他配置保持不变
Copy
{
"dify_api_base":"https://api.dify.ai/v1",
"dify_api_key":"app-xxx",
"dify_app_type":"workflow",
"channel_type":"wx",
"model":"dify",
"single_chat_prefix": [""],
"single_chat_reply_prefix":"",
"group_chat_prefix": ["@bot"],
"group_name_white_list": ["ALL_GROUP"]
}
同样参照2.2.1小节启动程序并扫码登录,然后给微信机器人发送消息,进行测试。
可以看到机器人成功接通了工作流api并进行了回复,至此我们已经完全掌握了如何创建Dify所有类型的应用:基础聊天助手、工作流聊天助手、智能助手、工作流,我们也学会了如何把上述应用发布为API,并接入微信。
接下来我将会介绍如何把应用接入到微信的其他通道,如公众号、企业微信应用、企业微信客服等。
3. Dify接入企业微信个人号(仅限windows环境)
- 有 封号风险 ,请使用企业微信小号测试
- 在登录旧版本的企业微信时可能会出现企业微信版本过低,无法登录情况,参考issue1525,请尝试更换其他企业微信号重试
3.1. 下载安装企业微信
确保你有一台windows系统的电脑,然后在此电脑下载安装特定版本的企业微信,官方下载链接,备用下载链接。
3.2. 创建Dify应用
我们已经在前面的 2.1.1 、 2.3.2 、2.4.1与2.5.1小节分别介绍了创建基础聊天助手、工作流聊天助手、智能助手、工作流这4种不同的Dify应用,你可以根据上面的教程任意创建一种应用。
3.3. 下载安装Dify on WeChat
根据 2.1.2(2) 步骤,下载代码并安装依赖,为了后续能按照ntwork依赖, 请确保你安装的python版本为3.8、3.9或3.10 。
3.4. 安装ntwork依赖
由于ntwork的安装源不是很稳定,可以下载对应的whl文件,使用whl文件离线安装ntwork
首先需要查看你的python版本,在命令行中输入python查看版本信息,然后在ntwork-whl目录下找到对应的whl文件,运行pip install xx.whl
安装ntwork依赖,注意"xx.whl"更换为whl文件的 实际路径 。
例如我的python版本信息为
"Python 3.8.5 (default, Sep 3 2020, 21:29:08) [MSC v.1916 64 bit (AMD64)]"
可以看到python版本是 3.8.5 ,并且是 AMD64 ,所以对应的whl文件为 ntwork-0.1.3-cp38-cp38-win_amd64.whl ,需要执行如下命令安装
Copy
pipinstallyour-path/ntwork-0.1.3-cp38-cp38-win_amd64.whl
3.5. 填写配置文件
我们在Dify on WeChat项目根目录创建名为config.json的文件,下面是以Dify智能助手应用作为示例的配置文件,请正确填写你刚刚创建应用的dify_api_base、dify_api_key、dify_app_type信息,请注意channel_type填写为 wework
Copy
{
"dify_api_base":"https://api.dify.ai/v1",
"dify_api_key":"app-xxx",
"dify_app_type":"agent",
"channel_type":"wework",
"model":"dify",
"single_chat_prefix": [""],
"single_chat_reply_prefix":"",
"group_chat_prefix": ["@bot"],
"group_name_white_list": ["ALL_GROUP"]
}
3.6. 登录企业微信
务必提前在电脑扫码登录企业微信
3.7. 启动微信个人号机器人
运行如下命令启动机器人
Copy
cddify-on-wechat
pythonapp.py
我们可以看到终端输出如下信息, 等待wework程序初始化完成 ,最后启动成功~
Copy
[INFO][2024-04-30 21:16:04][wework_channel.py:185] - 等待登录······
[INFO][2024-04-30 21:16:05][wework_channel.py:190] - 登录信息:>>>user_id:xxx>>>>>>>>name:
[INFO][2024-04-30 21:16:05][wework_channel.py:191] - 静默延迟60s,等待客户端刷新数据,请勿进行任何操作······
[INFO][2024-04-30 21:17:05][wework_channel.py:224] - wework程序初始化完成········
现在我们给机器人发送消息,可以看到接入成功!
4. Dify接入公众号
待更新~
5. Dify接入企业微信应用
待更新~
6. Dify接入企业微信客服
待更新~
7. 后记
我是社畜打工人,精力实在有限,只能晚上下班还有周末空闲时间维护Dify on WeChat项目,单靠我个人开发项目进度十分缓慢,希望大家能一起参与进来这个项目,多多提PR,让Dify的生态变得更好~