当前位置: 首页 > news >正文

【LLMOps】手摸手教你把 Dify 接入微信生态

作者:韩方圆 "Dify on WeChat"开源项目作者

概述

微信作为最热门即时通信软件,拥有巨大的流量。
微信友好的聊天窗口是天然的AI应用LUI(Language User Interface)/CUI(Conversation User Interface)。
微信不仅有个人微信,同时提供了公众号、企业微信、企业微信应用、企业微信客服等对话渠道,拥有良好的微信生态。
把Dify应用接入微信生态,就能打造一个功能强大的智能客服,大大降低客服成本,同时也能够提升客户体验。本篇教程就是手摸手地教你如何利用Dify on WeChat项目,把Dify应用接入微信生态。

Dify接入个人微信

准备工作

创建聊天助手
(1)Dify简介

Dify是一个优秀的LLMOps(大型语言模型运维)平台,Dify的详细介绍请移步官方文档欢迎使用 Dify | 中文 | Dify。

(2)登录Dify官方应用平台

首先,登录Dify官方应用平台,你可以选择使用Github登录或者使用Google登录。此外,你也可以参考Dify官方教程Docker Compose 部署 | 中文 | Dify 私有部署,Dify是开源项目,支持私有部署。
login-large.jpg

(3)创建Dify基础编排聊天助手应用

create-basic-chatbot.jpg
登录成功后,进入Dify页面,我们按照下方步骤创建一个基础编排聊天助手应用

  1. 点击页面上方的工作室
  2. 创建空白应用
  3. 应用类型选择聊天助手
  4. 聊天助手编排方式选择基础编排
  5. 选择应用图标并为应用填写一个名称,比如基础编排聊天助手
  6. 点击创建

config-basic-chatbot.jpg
创建成功后我们会跳转到上图所示页面,我们继续配置应用

  1. 选择模型,如gpt-3.5-turbo-0125
  2. 设置模型参数
  3. 填写应用提示词

publish-basic-chatbot.jpg
在配置完成后,我们可以在右侧对话框进行测试,在测试完成后,进行如下操作

  1. 发布
  2. 更新
  3. 访问API
(4)生成基础编排聊天助手API密钥

create-basic-chatbot-apikey.jpg
在点击"访问API"后,我们会跳转到上图的API管理页面,在这个页面我们按照如下步骤获取API密钥:

  1. 点击右上角API密钥
  2. 点击创建密钥
  3. 复制保存密钥

在保存密钥后,还需要查看右上角的API服务器,如果是Dify官网的应用,API服务器地址为 “https://api.dify.ai/v1”,如果是私有部署的,请确认你自己的API服务器地址。

至此,创建聊天助手的准备工作结束,在此小节中我们只需要保存好两个东西:API密钥API服务器地址

下载Dify on WeChat项目
(1)Dify on WeChat项目简介

Dify on WeChat是 ChatGPT on WeChat的下游分支,额外实现了对接Dify API,支持Dify聊天助手、支持Agent调用工具和知识库,支持Dify工作流,详情请查看GitHub仓库Dify on WeChat。

(2)下载代码并安装依赖
  1. 下载项目代码
git clone https://github.com/hanfangyuan4396/dify-on-wechat
cd dify-on-wechat/
  1. 安装python

Dify on WeChat项目使用python语言编写,请在python官网下载安装python,推荐安装python3.8以上版本,我在ubuntu测试过3.11.6版本,可以正常运行。

  1. 安装核心依赖(必选):
pip3 install -r requirements.txt  # 国内可以在该命令末尾添加 "-i https://mirrors.aliyun.com/pypi/simple" 参数,使用阿里云镜像源安装依赖
  1. 拓展依赖 (可选,建议安装):
pip3 install -r requirements-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密钥。**其他配置保持不变

{ "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"]
}

把基础编排聊天助手接入微信

快速启动测试
(1)在Dify on Wechat项目根目录执行如下命令
cd dify-on-wechat
python3 app.py   # windows环境下该命令通常为 python app.py
(2)扫码登录

wechat-login.jpg
本项目使用itchat实现个人微信登录,有封号风险,建议使用实名认证过的微信小号进行测试,在执行上述命令后,我们可以在控制台看到打印如上图所示二维码,使用微信扫码登录,登录后当看到"itchat:Start auto replying."字符,表示登录成功,我们可以进行测试。

(3)对话测试

basic-chatbot-on-wechat.jpg
我们看到,微信机器人的回复与在Dify测试页面上的回复一致。至此,恭喜你成功把Dify接入了个人微信🎉🎉🎉

(4)服务器部署
  1. 源码部署
cd dify-on-wechat
nohup python3 app.py & tail -f nohup.out   # 在后台运行程序并通过日志输出二维码
  1. docker部署
cd dify-on-wechat/docker       # 进入docker目录
docker compose up -d           # 启动docker容器
docker logs -f dify-on-wechat  # 查看二维码并登录

把工作流编排聊天助手接入微信

在把Dify基础的聊天助手应用接入微信后,我们接下来增加难度,尝试把工作流编排聊天助手应用接入微信,实现一个具有Dify平台知识的微信智能客服,为我们解答Dify工作流相关知识。

创建知识库
(1)下载知识库文件

download-dify-workflow-knowledge.jpg
我们到dify文档仓库下载Dify工作流介绍的文档。

(2)Dify中导入知识库

create-knowledge-1.jpg
进入知识库页面,创建知识库

create-knowledge-2.jpg
选择导入已有文本,上传刚才下载的introduce.md文件,点击下一步

create-knowledge-3.jpg
create-knowledge-4.jpg
选择如下配置

  • 分段设置:自动分段与清洗
  • 索引方式:高质量
  • 检索设置:向量检索

最后点击保存并处理

create-knowledge-5.jpg
我们看到知识库正在进行嵌入处理,稍等片刻,即可嵌入成功。

创建工作流编排聊天助手

create-workflow-chatbot-1.jpg
我们进入Dify工作室,点击从应用模板创建

create-workflow-chatbot-2.jpg
我们使用知识库+聊天机器人类型的模板,设置应用图标与名称,点击创建

create-workflow-chatbot-3.jpg
跳转到工作流编排页面后,先点击知识检索节点,点击最右侧"+"添加知识库。我们选择之前上传好的introduce.md知识库,该知识库是对Dify工作流的基本介绍。最后我们点击添加,知识库节点设置完成。

create-workflow-chatbot-4.jpg
接下来选择LLM节点,点击设置上下文,我们选择result变量,该变量存有知识检索的结果。

create-workflow-chatbot-5.jpg
设置完LLM节点后,我们点击预览进行测试,输入问题:请介绍一下dify工作流。可以看到最终输出了Dify工作流的正确介绍。测试正常后,我们返回编辑模式。

create-workflow-chatbot-6.jpg
返回编辑模式后,依次点击发布、更新、访问API

生成工作流编排聊天助手API密钥

在跳转到API管理页面后,我们参照2.1.1小节(4)获取"知识库+聊天机器人"应用的API密钥API服务器地址

接入微信

与2.1.2小节(3)类似,我们在项目根目录创建名为config.json的文件,文件内容如下,同样把dify_api_base配置为**"知识库+聊天机器人"应用的API服务器地址;dify_api_key配置为"知识库+聊天机器人"应用的API密钥。**其他配置保持不变

{ "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小节启动程序并扫码登录,然后给微信机器人发送消息,进行测试
workflow-chatbot-on-wechat.jpg
微信机器人的回复与在Dify测试页面上的回复一致。恭喜你更进一步,把工作流编排应用接入了个人微信,你可以向知识库中导入更多的Dify官方文档,让微信机器人为你解答更多的Dify相关问题。

把Agent接入微信

创建Agent应用

create-agent.jpg
进入工作室页面,点击创建空白应用,选择Agent,设置图标和应用名称,最后点击创建

config-agent-auth-dalle.jpg
创建成功后,我们会进入Agent应用配置页面,在这个页面我们选择好对话模型,然后添加工具。我们首先添加DALL-E绘画工具,首次使用该工具需要授权,一般我们设置好OpenAI API key和OpenAI base URL即可使用该DALL-E绘画工具。

config-agent-add-dalle.jpg
授权成功后,我们添加DALL-E 3绘画工具

config-agent-add-duck-calc.jpg
接着,继续添加DuckDuckGo搜索引擎和数学工具,进行后续的工具测试

publish-agent.jpg
我们输入问题"搜索开源项目Dify的star数量,这个数量乘以3.14是多少",确认应用能够正常调用工具,我们依次点击发布、更新、访问API

生成Agent API密钥

我们继续参照2.1.1小节(4)获取"智能助手"应用的API密钥API服务器地址

接入微信

我们在项目根目录创建名为config.json的文件,文件内容如下,同样把dify_api_base配置为**"智能助手"应用的API服务器地址;dify_api_key配置为"智能助手"应用的API密钥注意该应用为智能助手类型应用,还需要把dify_app_type设置为agent**,其他配置保持不变

  {"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小节启动程序并扫码登录,然后给微信机器人发送消息,进行测试
agent-on-wechat.jpg
可以看到微信机器人可以正常使用搜索和绘画工具。再一次恭喜你,把Dify Agent应用接入微信。也恭喜我,写到这里可以先睡觉了。

把工作流接入微信

创建工作流应用

待更新~

接入微信

待更新~

Dify接入公众号

待更新~

Dify接入企业微信应用

待更新~

Dify接入微信其他渠道

Dify on WeChat项目后续会逐步支持Dify接入微信的其他渠道,包括企业微信客服、企业微信个人号。
另外,我是社畜打工人,精力实在有限,只能晚上下班还有周末空闲时间维护这个项目,单靠我个人开发项目进度十分缓慢,希望大家能一起参与进来这个项目,多多提PR,让Dify的生态变得更好~

相关文章:

【LLMOps】手摸手教你把 Dify 接入微信生态

作者:韩方圆 "Dify on WeChat"开源项目作者 概述 微信作为最热门即时通信软件,拥有巨大的流量。 微信友好的聊天窗口是天然的AI应用LUI(Language User Interface)/CUI(Conversation User Interface)。 微信不仅有个人微信,同时提供…...

Ftrans文件摆渡方案:重塑文件传输与管控的科技先锋

一、哪些行业会用到文件摆渡相关方案 文件摆渡相关的产品和方案通常用于需要在不同的网络、安全域、网段之间传输数据的场景,主要是一些有核心数据需要保护的行业,做了网络隔离和划分。以下是一些应用比较普遍的行业: 金融行业:…...

LaTeX中的除号表示方法详解

/除号 LaTeX中的除号表示方法详解1. 使用斜杠 / 表示除号优点缺点 2. 使用 \frac{} 表示分数形式的除法优点缺点 3. 使用 \div 表示标准除号优点缺点 4. 使用 \over 表示分数形式的除法优点缺点 5. 使用 \dfrac{} 和 \tfrac{} 表示大型和小型分数优点缺点 总结 LaTeX中的除号表…...

DID、DID文档、VC、VP分别是什么 有什么关系

DID(去中心化身份) 定义:DID 是一种去中心化的唯一标识符,用于表示个体、组织或设备的身份。DID 不依赖于中央管理机构,而是由去中心化网络(如区块链)生成和管理。 用途:DID 允许用…...

网络安全应急响应

前言\n在网络安全领域,有一句广为人知的话:“没有绝对的安全”。这意味着任何系统都有可能被攻破。安全攻击的发生并不可怕,可怕的是从头到尾都毫无察觉。当系统遭遇攻击时,企业的安全人员需要立即进行应急响应,以将影…...

Qt数据和视图分离——中MCV和MVVM

智能指针 一、背景知识二、命令式编程 vs 声明式编程2.1 命令式编程(Imperative Programming)2.2 声明式编程(Declarative Programming) 三、 MVC(Model-View-Controller)3.1 模型(Model)3.2 视图&#xff…...

重定义变量类型:如#define FLOAT float和typedef float FLOAT的区别

在 C 或 C 中, #define 和 typedef 都可以用来为类型或值创建别名,但它们之间存在一些关键的区别: 预处理指令 ( #define ): #define 是预处理器指令,用于定义宏。 当编译器处理源代码时,预处理器会先运行&#…...

Qt 使用阿里矢量图标库

前言 阿里矢量图标库非常好用,里面有各种丰富的图标,完全免费,还支持自定义图标,还可以将图标打包到一个项目中,使用起来非常方便。 第一步: 打开阿里矢量图标库 第二步: 搜索图标&#x…...

仓颉语言运行时轻量化实践

杨勇勇 华为语言虚拟机实验室架构师,目前负责仓颉语言静态后端的开发工作 仓颉语言运行时轻量化实践 仓颉Native后端(CJNative)是仓颉语言的高性能、轻量化实现。这里的“轻量化”意指仓颉程序运行过程中占用系统资源(内存、CPU等…...

深入理解Python中的subprocess模块

目录 subprocess模块简介常用函数执行外部命令管道通信子进程管理错误处理实际应用示例最佳实践 subprocess模块简介 subprocess模块是Python标准库的一部分,提供了一个跨平台的方法来生成新进程、连接其输入/输出/错误管道,并获取其返回码。该模块旨…...

从零开始搭建 EMQX 集群压测框架

从零开始搭建 EMQX 集群压测框架 架构 在设计以EMQX为中心的MQTT消息队列集群压力测试框架时,我们采用微服务架构模式。EMQX作为消息队列的核心,负责处理MQTT协议的消息发布和订阅。Nginx作为EMQX的反向代理,负责负载均衡和SSL/TLS终端。MQT…...

ArkUI基本介绍

ArkUI:提供HarmonyOS应用UI开发框架,几件开发、精致体验、跨设备/跨平台。 ArkUI(方舟UI框架)为应用的UI开发提供了完整的基础设施,包括简洁的UI语法、丰富的UI功能(组件、布局、动画以及交互事件&#xff…...

vue2+OpenLayers 天地图上打点并且显示相关的信息(2)

上次是在地图上打点 这次鼠标移动在图标上面显示相关的信息 首先有两个事件 鼠标移入 和 鼠标移出事件 pointermove pointerout 鼠标放上去之前 放上去后 代码如下 <template><div class"container"><div id"vue-openlayers" class&quo…...

c++继承(二)

一、友元函数的继承 友元函数不能被继承&#xff0c;就像爸爸的朋友不是你的朋友&#xff0c;如果要有友元函数&#xff0c;在子类重新定义一个。 二、静态成员的继承 静态成员的继承仍然是那个成员&#xff0c;普通成员的继承是不同的。 父类的静态成员属于当前类&#xf…...

低代码开发的崛起:机遇与挑战

近年来&#xff0c;“低代码”开发平台的迅速崛起&#xff0c;已经成为IT行业中不可忽视的趋势。这些平台承诺让非专业人士也能快速构建应用程序&#xff0c;通过减少代码编写的需求&#xff0c;大幅提高开发效率。对于许多企业而言&#xff0c;低代码开发工具成为了一个加速数…...

Json-JacksonUtils工具类

为了创建一个通用的 Jackson 工具类,我们可以定义一个名为 JacksonUtils 的工具类,该类将提 供多种方法来支持不同类型的 JSON 转换需求。下面是一个示例实现,包括基本的 JSON 到 Java 对象的转换、Java 对象到 JSON 的转换、以及更复杂的类型如 CommonResult 的转换。 C…...

svn客户端装完后没有svn.exe

如果SVN客户端&#xff08;如TortoiseSVN&#xff09;安装完成后&#xff0c;在预期的安装目录&#xff08;通常是bin目录&#xff09;中没有找到svn.exe文件&#xff0c;这通常是因为在安装过程中没有选择安装命令行客户端工具&#xff08;Command Line Client Tools&#xff…...

TinyWebserver的复现与改进(4):主线程的具体实现

GitHub - yzfzzz/MyWebServer: Linux高并发服务器项目&#xff0c;参考了TinyWebServer&#xff0c;将在此基础上进行性能改进与功能增加。为方便读者学习&#xff0c;附带详细注释和博客&#xff01; TinyWebserver的复现与改进&#xff08;1&#xff09;&#xff1a;服务器环…...

DaemonSet 不能帮助我们做什么事情?

DaemonSet 不能帮助我们做什么事情&#xff1f; A. 保证集群内每一个(或者一些)节点都运行一组相同的Pod B. 跟踪集群节点状态&#xff0c;保证新加入的节点自动创建对应的Pod C. 跟踪集群节点状态&#xff0c;保证移除的节点删除对应的Pod D. 能够设置Pod重试次数&#xff0c;…...

开源模型应用落地-LangChain高阶-记忆组件-RedisChatMessageHistory正确使用(八)

一、前言 LangChain 的记忆组件发挥着至关重要的作用,其旨在协助大语言模型(LLM)有效地留存历史对话信息。通过这一功能,使得大语言模型在对话过程中能够更出色地维持上下文的连贯性和一致性,进而能够像人类的记忆运作方式那样,进行更为自然、流畅且智能化的交互。 它仿佛…...

为什么软件开发偏爱 Linux?深度剖析 Linux 相较于 Windows 的核心优势

引言 在软件开发的世界里&#xff0c;一个有趣的现象是&#xff1a;无论是大型互联网公司的服务器集群&#xff0c;还是资深程序员的个人开发机&#xff0c;Linux 操作系统的身影无处不在。与之形成鲜明对比的是&#xff0c;尽管 Windows 在个人消费市场占据绝对主导地位&…...

CANoe诊断测试没CDD文件怎么办?手把手教你用Fault Memory窗口和CAPL脚本读取解析DTC故障码

CANoe诊断测试无CDD文件的实战解决方案&#xff1a;从Fault Memory到CAPL脚本全解析当CDD文件缺失或定义不清晰时&#xff0c;诊断测试工程师常常陷入困境。本文将深入探讨如何利用Fault Memory窗口的基础功能&#xff0c;并通过CAPL脚本实现更灵活、更强大的故障码读取与解析方…...

探索Windows 10上的Android世界:揭秘WSA-Windows-10项目的3个技术突破

探索Windows 10上的Android世界&#xff1a;揭秘WSA-Windows-10项目的3个技术突破 【免费下载链接】WSA-Windows-10 This is a backport of Windows Subsystem for Android to Windows 10. 项目地址: https://gitcode.com/gh_mirrors/ws/WSA-Windows-10 想象一下&#…...

百度深度学习研究院的“叛将“,带着一颗芯片改变了中国智能驾驶——地平线余凯,从ImageNet冠军到征程出货1000万

大家好&#xff0c;我是写代码的篮球球痴。这篇文章跟我自己有点关系——我开的是理想汽车。理想的智驾系统 AD Pro&#xff0c;搭载的就是地平线征程 5 芯片。2026 年 1 月理想 AD Pro 4.0 推送&#xff0c;基于单颗征程 6M 实现了城市 NOA——这是行业里第一个用单颗 128TOPS…...

AI算法工程师如何进行模型部署?这2个工具+3个技巧,快速上线

对于软件测试从业者来说&#xff0c;模型部署并不是一个陌生的概念——随着AI功能逐渐渗透到各类应用软件中&#xff0c;测试工程师不仅需要验证模型输出的准确性&#xff0c;更需要理解部署流程对模型稳定性、响应速度和结果一致性的影响。很多测试同学会有这样的困惑&#xf…...

Cesium动态数据可视化实战:CallbackProperty结合setInterval打造实时运动轨迹

Cesium动态数据可视化实战&#xff1a;CallbackProperty结合setInterval打造实时运动轨迹 在三维地理信息系统中&#xff0c;实时数据可视化一直是开发者面临的挑战之一。想象一下&#xff0c;当我们需要在地球表面追踪一架正在飞行的无人机&#xff0c;或者监控城市中数百辆出…...

解决claude code频繁封号与token不足的taotoken接入方案

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 解决Claude Code频繁封号与Token不足的Taotoken接入方案 1. 问题背景&#xff1a;Claude Code用户面临的挑战 对于依赖Claude Cod…...

Linux 负载均衡的 cache_nice_tries:缓存友好的迁移尝试

简介现如今服务器、嵌入式设备、工控主板普遍采用多核、NUMA 架构 CPU&#xff0c;多进程多线程并发运行模式成为常态。Linux 内核依靠调度域分层负载均衡机制&#xff0c;分散 CPU 运行压力&#xff0c;避免单核心负载过高、其余核心空闲浪费硬件算力。但任务跨核心迁移是一把…...

终极虚拟显示器解决方案:ParsecVDisplay完整使用指南

终极虚拟显示器解决方案&#xff1a;ParsecVDisplay完整使用指南 【免费下载链接】parsec-vdd ✨ Perfect virtual display for game streaming 项目地址: https://gitcode.com/gh_mirrors/pa/parsec-vdd ParsecVDisplay是一个基于Parsec虚拟显示驱动(VDD)的独立应用程序…...

收藏2026版|大模型应用开发入门全攻略,小白程序员转行AI避坑学习指南

打算踏入大模型领域、转行AI赛道的新手与程序员&#xff0c;正式规划学习路径前&#xff0c;务必先吃透AI应用开发工程师的岗位定位与工作内容。清晰认知岗位核心价值&#xff0c;才能规避无效学习&#xff0c;精准找准发力方向。2026年大模型技术全面迈入商业化落地阶段&#…...