今天我们将要继续企业应用之旅,让Dify变成一个超级中间站,能将开源的大几千MCP服务为我所用。
学习完成,你将会让自己的Dify也拥有更专业的使用MCP的能力。
**01.**准备环节我们之前详细学习了MCP所有关键的内容,是时候来表演了。
不过Dify是一个服务端运行的系统,它不像本地可以为MCP服务去准备运行环境。如果让Dify集成stdio方式的MCP,那改动就有点大了。
但是现存海量的MCP服务,绝大多数都是stdio方式,所以关键一点就是打通这个使用方式上的差异。
因此使用一个叫mcp-proxy的工具,就来的如此的顺理成章。(如果听不懂stdio的话,请复习前面的博文)
大模型的得力干将MCP(5) - 应用场景和发展方向,窥探先机,不容错过
为了不影响本地电脑的环境配置等,我们同样以容器的方式,去运行这个mcp-proxy。
根据它的说明文档,有两个地方需要修改为自己的。
重新打包一下镜像,加入uv运行环境。新建一个mcp-proxy.Dockerfile文件,内容如下:
2.以上述镜像,加入需要代理的MCP服务,我们以mysql_mcp_server为例。新 ...
今天我们将要继续企业应用之旅,让Dify也变成一个简单的BI系统,可以让数据变成有图有真相。
学习完成,你将能举一反三,让数据自己说话。
**01.**动手做一做今天的动手实验,需要有处理数据的代码能力。如果对你来说难度太大,建议收藏慢慢学习。
首先,我们简化核心步骤,把不相干的节点全部删除。掌握了之后,可以集成进前面课程有关数据SQL的部分
既然是和数据相关,那准备的部分必然涉及到数据库。假设我们有一个数据表名为automation,记录了企业中,对订单进行自动化处理的情况。
该表设计的思路是,针对每个订单,都会进行自动化处理,并记录处理结果。并且按业务规则,运行失败时会进行一定次数的重试,以避免因资源等环境问题导致的暂时失败,而影响可以自动化的任务。
记录自动化处理的结果字段为code,0表示不符合自动化处理条件,1表示自动化处理成功,大于1的值表示自动化程序内部的错误。
我们需要按照订单的日期来查询按天统计的订单处理情况。查询语句和结果如下图所示。
有了上述准备之后,开始进行Dify应用开发。
添加”SQL Execute”节点(如果没有,需要安装插件后,进入工具选择, ...
今天我们将要开启企业应用之旅,让Dify真正的在企业中用起来。
学习完成,你将能配置后台的文件存储改为S3或兼容S3的Minio对象存储。
**01.**动手做一做今天的动手实验,与运维相关。如果不感兴趣,可以划走。
首先,需要让Dify知道使用对象存储方式来保存文件。
进入到项目下的docker目录,打开由.env.example文件复制而来的.env文件。找到文件存储配置段,大概在第293行,改动STORAGE_TYPE为S3。
S3除了可以是AWS的S3服务,还可以是兼容S3的对象存储,如Minio等。注意这里,如果对象存储服务是Minio,S3_ENDPOINT需要为实际Minio的API地址,S3_BUCKET_NAME可以改为实际用的桶名,如difyai。而ACCESS_KEY和SECRET_KEY,分别是Minio的用户名和密码,并非像S3使用的KEY。
接着,需要重新启动Dify所有服务。使用命令docker compose restart。
如果测试没有生效,可以reload环境变量文件,或者简单点重启Linux服务器。
上述操作完成之后,接下来就是使用部分。
将C ...
今天我们要学习工作流中对于多路分支进行结果上的合并。
学习完成,你将进一步简化工作流的重复节点,拆分场景后,将其合并到主流程中。
**01.**动手做一做今天的任务基于”医小助”。之前我们先对用户的输入,进行了问题分类。将用户提问,转变为是否为”发热”和”眼科”或者其他的分类之后,再进行处理。
为了提高对问题识别的准确性,我们将进一步使用RAG的方法,对分诊的规范文档的知识进行查询后,再使用LLM进行识别和回答。
但是如果按照之前的工作流,后面会分别接两个相同的”LLM”节点。我们希望对此进行优化,就需要用到今天的主题”变量聚合器”。
因此在”知识检索”和”LLM”节点之间,添加一个新的节点”变量聚合器”。
接着删除第二个”知识检索”和”LLM”节点之间的连线,然后连接第二个”知识检索”和”变量聚合器”节点。最后按下图进行设置
保存后,进行测试。
**02.**补充说明
变量聚合节点是工作流程中的一个关键节点,它负责整合不同分支的输出结果,确保无论哪个分支被执行,其结果都能通过一个统一的变量来引用和访问。这在多分支的情况下非常有用,可将不同分支下相同作用的变量映射为一个输出变 ...
今天我们学习大语言模型的Function Calling的使用。
学习完成,你将初步获得调用工具的能力。本节内容,非常考察动手能力,建议需要反复调试,并理解大语言模型的基础能力知识。
**01.**动手做一做今天的任务需要重开一个对话应用。当条件成熟之后,才能将今日所学集成进之前的AI应用开发中。
将默认生成的3个节点中的第2个删除。并添加”Agent”节点。
接着对该节点做配置,按下图步骤进行设置。
选择完Function Callinging之后,就会出现真实的配置。
首先需要手动选择一个配置的大语言模型。这里需要注意,不是所有的大模型都内在支持Function Calling,所以这就要求我们对大模型基础有一定的了解。比方说这一段时间非常热门的DeepSeek模型,就并没有支持Function Calling。
然后添加大模型调用的工具。这里添加了时间获取和查询天气这两个工具。
“指令”输入框中添加如下内容:
如果用户问到天气问题,你可以使用工具来帮你完成任务。
1. 根据城市和日期查询天气,使用时必须提供城市和日期两个参数,提供参数的方式要满足如下结构:
...
上一节Dify应用实战课,我们继续对新项目,智能医疗分诊助手,进行了分支条件的拆解。
今天我们学习数据库的查询操作。
学习完成,你将掌握如何对数据库中的数据进行获取。
**01.**动手做一做今天的任务基于智能分诊应用”医小助”。在”条件分支”的”case1”后新增一个”SQL查询”节点。
但是,需要先准备一下插件的安装(v1.0.0之后,已经升级需要安装插件)。
插件安装之后,按下图所示进行添加,先点击”工具”,再找到刚才安装的”Database”,展开后选中”SQL Execute”。
第一次使用会让先授权,按下图步骤进行设置。直接点”去授权”,不用管下面的API端点。这个以后有需要再说。
授权之后,如果再用”数据库”工具,就不会再要求进行授权了。授权需要输入的内容如下:
1mysql+pymysql://root:123456@192.168.0.101:3306/hospital
如果用的postgresql或者sqlite,就查询一下插件的说明文档即可。
现在我们就可以填入查询SQL语句了
1SELECT name, title, description FRO ...
本文适用对象:初级水平
目标:对一个结果可能出现多种情况,进行条件分支处理
上一节Dify应用实战课,我们学习了迭代循环处理。而新项目,智能医疗分诊助手,暂停了一期,现在我们继续。
今天我们学习和上节课循环处理类似的方法,分支条件处理。
学习完成,你将掌握如何对一个结果可能存在多种情况时,按不同情况的值,进行不同的处理。
**01.**动手做一做今天的任务基于智能分诊应用”医小助”。在”问题分类器”的”分类2”后新增一个”LLM”节点。
如图所示,添加提示词内容“对
提及的有关视力的部分,进一步进行识别处理,处理结果输出为如下json格式,
1234567{ "type": 0, "result":"","raw":""}如果是咨询近视有关的,将type设置为1;如果是咨询眼睛疾病,将type设置为2;对输入的问题的解释结果,设置为result的值。”
这次我们把大模型的输出格式修改一下,如下图
接着添加”代码”节点,将上一步生成的JSON结果,提取问题 ...
本文适用对象:初级水平
目标:利用迭代的方法,对多个数据条目进行相同的处理
上一节Dify应用实战课,我们继续对新项目智能医疗分诊助手,进行了分解学习。
今天我们又将暂停一下,先学一下循环的处理。
学习完成,你将掌握如何对多条相同形式的数据,按照遍历处理的方法,进行加工处理。
**01.**动手做一做今天的任务会新开一个workflow,完成后可以合并至”每日智选”应用内。
再复习一下”每日智选”的内容,通过获取天气API,得到天气信息,输出到图片和语音中。而现在最主要的内容,是热点新闻和解读。接下来会获取每日热点新闻10条,然后填充进结果图。
添加节点”HTTP请求”,配置该节点为获取热点新闻。
接着在其后,添加节点”LLM”,设置如下,上下文选择”HTTP请求”的请求结果。提示词填写:
123456789根据获得的 上下文 内容,对其进行内容提取:1\. 需要得到author\_name新闻来源,title新闻标题和url文章链接2.严格按照json格式输出,参照key为类型,值为内容的形式,不需要解释。3.新闻来源需要有影响力的媒体,不要采收自媒体类型的。4.一次提取只需要10 ...
本文适用对象:初级水平
目标:利用问题分类将对话拆分为不同场景,将复杂使用场景转为多个单一场景
上一节Dify应用实战课,我们开启了一个新的项目,智能医疗分诊助手。
今天我们将基于智能医疗分诊助手,进行更为复杂的智能问答。
学习完成,你将掌握如何构建一个应用,能处理复杂场景的任务,通过场景拆解,达到化繁为简的目的。
**01.**动手做一做上次课的分诊应用,只有关键的一步,利用了大语言模型内在的自注意力机制,就能完成识别症状与导流的工作。
今天我们来要来增加这个智能医疗分诊助手”医小智”的能力。
因为在实际的场景中,有可能还是要确定大致问题的范围,然后再做出更加精准的判断。所以,就需要用到Dify的另一个组件”问题分类器”。
在上一课的流程基础上,我们在"开始"之后添加一个"问题分类器",分类器同样也是需要选择一个大语言模型的,但是组件会约束大语言模型去匹配给定的分支的结果。
然后在每个分支后都能添加一个行动,可以是直接回复,也可以调用"LLM",进一步对前面对话所获取的"信息",和当前节点给予的&qu ...
今天我们开启一个新的项目 – 智能医疗分诊助手。
学习完成,你将掌握如何构建多轮对话应用,获得更为准确的信息,以实现特定的任务。
**01.**动手做一做暂时先将之前的案例放一放,大家需要新建一个对话流。放心,之前的图文生成和语音项目还未最终完成,但已经变得有点复杂了。如果是刚开始学的同学,可能有点跟不上。所以,我们为了降低难度,先再开启一个新项目,把没学的内容补齐。
最后会做完完整版的工作流。麦金叔先卖个关子,记得点赞、关注、收藏不迷路。
今天我们来动手做一做智能医疗分诊助手”医小智”的开发。
还是老规矩,这次我们选新建空白应用,类型用”Chatflow”。这其实和Workflow是差不多的,只是有一点差异,Chatflow是基于对话的,并且内置了记忆能力,即能将多轮对话的历史记忆保存并传递给下一轮对话。
新创建完成,自动会添加三个节点:”开始”,”LLM”和”直接回复”。
此时,就已经可以点击”预览”,进行对话调试了。
好了,准备工作就绪,我们正式开始项目开发。
“医小智”是一台放在医院大门口的机器人,它将代替问诊台的服务人员,初步判断来医院就诊的客人,属于什么病因,引导 ...