当前位置: 首页 > 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)有效地留存历史对话信息。通过这一功能,使得大语言模型在对话过程中能够更出色地维持上下文的连贯性和一致性,进而能够像人类的记忆运作方式那样,进行更为自然、流畅且智能化的交互。 它仿佛…...

系统设计 --- MongoDB亿级数据查询优化策略

系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log&#xff0c;共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题&#xff0c;不能使用ELK只能使用…...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

sqlserver 根据指定字符 解析拼接字符串

DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

Kafka入门-生产者

生产者 生产者发送流程&#xff1a; 延迟时间为0ms时&#xff0c;也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于&#xff1a;异步发送不需要等待结果&#xff0c;同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...

libfmt: 现代C++的格式化工具库介绍与酷炫功能

libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库&#xff0c;提供了高效、安全的文本格式化功能&#xff0c;是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全&#xff1a…...

uniapp 集成腾讯云 IM 富媒体消息(地理位置/文件)

UniApp 集成腾讯云 IM 富媒体消息全攻略&#xff08;地理位置/文件&#xff09; 一、功能实现原理 腾讯云 IM 通过 消息扩展机制 支持富媒体类型&#xff0c;核心实现方式&#xff1a; 标准消息类型&#xff1a;直接使用 SDK 内置类型&#xff08;文件、图片等&#xff09;自…...

深入浅出WebGL:在浏览器中解锁3D世界的魔法钥匙

WebGL&#xff1a;在浏览器中解锁3D世界的魔法钥匙 引言&#xff1a;网页的边界正在消失 在数字化浪潮的推动下&#xff0c;网页早已不再是静态信息的展示窗口。如今&#xff0c;我们可以在浏览器中体验逼真的3D游戏、交互式数据可视化、虚拟实验室&#xff0c;甚至沉浸式的V…...

拟合问题处理

在机器学习中&#xff0c;核心任务通常围绕模型训练和性能提升展开&#xff0c;但你提到的 “优化训练数据解决过拟合” 和 “提升泛化性能解决欠拟合” 需要结合更准确的概念进行梳理。以下是对机器学习核心任务的系统复习和修正&#xff1a; 一、机器学习的核心任务框架 机…...

算法刷题-回溯

今天给大家分享的还是一道关于dfs回溯的问题&#xff0c;对于这类问题大家还是要多刷和总结&#xff0c;总体难度还是偏大。 对于回溯问题有几个关键点&#xff1a; 1.首先对于这类回溯可以节点可以随机选择的问题&#xff0c;要做mian函数中循环调用dfs&#xff08;i&#x…...

6.计算机网络核心知识点精要手册

计算机网络核心知识点精要手册 1.协议基础篇 网络协议三要素 语法&#xff1a;数据与控制信息的结构或格式&#xff0c;如同语言中的语法规则语义&#xff1a;控制信息的具体含义和响应方式&#xff0c;规定通信双方"说什么"同步&#xff1a;事件执行的顺序与时序…...