
欢迎来到预见猿份,本站项目均为站长原创,学习中有问题可直接提交给站长老苗解决(微信:mrt_0607)。
苗润土老师,20余年一线项目经验,2014年加入黑马,星辰wms、云岚到家、学成在线项目作者,历任高级讲师、教学主管及课程研究员。 b站老苗
Dify研究
学习目标
- 理解什么是Dify平台
- 掌握Dify安装与部署
- 掌握Dify平台的工作流使用
- 掌握Dify平台的知识库使用
1 Dify基本使用
1.1 安装Dify
1)Dify是什么
Dify 由苏州语灵人工智能科技公司于2023年推出,定位为开源的大语言模型(LLM)应用开发平台。它融合了后端即服务(Backend as Service)和 LLMOps 的理念,使开发者可以快速搭建生产级的生成式 AI 应用。即使你是非技术人员,也能参与到 AI 应用的定义和数据运营过程中。
LLMOps(Large Language Model Operations)是一个涵盖了大型语言模型(如GPT系列)开发、部署、维护和优化的一整套实践和流程。LLMOps 的目标是确保高效、可扩展和安全地使用这些强大的 AI 模型来构建和运行实际应用程序。它涉及到模型训练、部署、监控、更新、安全性和合规性等方面。
由于 Dify 内置了构建 LLM 应用所需的关键技术栈,包括对数百个模型的支持、直观的 Prompt 编排界面、高质量的 RAG 引擎、稳健的 Agent 框架、灵活的工作流,并同时提供了一套易用的界面和 API。这为开发者节省了许多重复造轮子的时间,使其可以专注在创新和业务需求上。
Dify官方文档:https://docs.dify.ai/zh-hans/introduction
2)安装
参考“Dify安装部署”在服务器上部署Dify
虚拟机导入完成进入Dify
在浏览器访问Dify:http://192.168.101.65:88

用户名:24965575@qq.com
密码:miaoruntu888
1.2 快速入门
1)支持的大模型
在Dify中,我们按照模型的使用场景将模型分为以下4类:
- 系统推理模型。 在创建的应用中,用的是该类型的模型。智聊、对话名称生成、下一步问题建议用的也是推理模型。
已支持的系统推理模型供应商:OpenAI、Azure OpenAI Service、Anthropic、Hugging Face Hub、Replicate、Xinference、OpenLLM、讯飞星火、文心一言、通义千问、Minimax、ZHIPU(ChatGLM)
- Embedding 模型。在知识库中,将分段过的文档做 Embedding 用的是该类型的模型。在使用了知识库的应用中,将用户的提问做 Embedding 处理也是用的该类型的模型。
已支持的 Embedding 模型供应商:OpenAI、ZHIPU(ChatGLM)、Jina AI(Jina Embeddings)
- Rerank 模型。Rerank 模型用于增强检索能力,改善 LLM 的搜索结果。
已支持的 Rerank 模型供应商:Cohere、Jina AI(Jina Reranker)
- 语音转文字模型。在对话型应用中,将语音转文字用的是该类型的模型。
已支持的语音转文字模型供应商:OpenAI
这里我们接入阿里云百炼平台
在头像-设置中配置模型凭证:

选择“通义千问”,点击安装


安装完成

设置api-key

API-Key从阿里云百炼平台获取:

2)创建工作流
下边我们在Dify创建一个工作流,实现英汉翻译。
Dify 中提供了五种应用类型:
- 聊天助手:基于 LLM 构建对话式交互的助手
- 文本生成应用:面向文本生成类任务的助手,例如撰写故事、文本分类、翻译等
- Agent:能够分解任务、推理思考、调用工具的对话式智能助手
- 对话流:适用于定义等复杂流程的多轮对话场景,具有记忆功能的应用编排方式
- 工作流:适用于自动化、批处理等单轮生成类任务的场景的应用编排方式
在首页工作空间找到工作流-创建空白应用:

选择工作流:

Dify提供的工作流节点类型:

- 开始(Start) :定义一个 workflow 流程启动的初始参数。
- 结束(End) :定义一个 workflow 流程结束的最终输出内容。
- 大语言模型(LLM) :调用大语言模型回答问题或者对自然语言进行处理。
- 知识检索(Knowledge Retrieval) :从知识库中检索与用户问题相关的文本内容,可作为下游 LLM 节点的上下文。
- 问题分类(Question Classifier) :通过定义分类描述,LLM 能够根据用户输入选择与之相匹配的分类。
- 条件分支(IF/ELSE) :允许你根据 if/else 条件将 workflow 拆分成两个分支。
- 代码执行(Code) :运行 Python / NodeJS 代码以在工作流程中执行数据转换等自定义逻辑。
- 变量聚合(Variable Aggregator) :将多路分支的变量聚合为一个变量,以实现下游节点统一配置。
- 循环(Loop) :循环节点用于执行依赖前一轮结果的重复任务,直到满足退出条件或达到最大循环次数。
创建开始节点,并新增一个变量question:

创建一个问题分类器节点:

输入下面内容:
模型选择:qwen3-max
分类1:将中文翻译为英文
分类2:将英文翻译为中文

在分类1后创建LLM节点:

为LLM节点添加一个结束节点:

参考分类1的创建过程,创建分类2,添加LLM节点,将英文翻译为中文,并添加结束节点。

3)测试工作流
创建完上述工作流后,测试流程工作,点击右上角运行,输入问题:


可以看到,流程按分类1的分支执行,并输出结果:

1.3 知识库
1)创建知识库
知识库功能将 RAG 上的各环节可视化,提供了一套简单易用的用户界面来方便应用构建者管理个人或者团队的知识库,并能够快速集成至 AI 应用中。
开发者可以将企业内部文档、规范信息等内容上传至知识库进行结构化处理,供后续 LLM 查询。
- 创建知识库。通过上传本地文件、导入在线数据或创建一个空的知识库。
- 指定分段模式。该阶段是内容的预处理与数据结构化过程,长文本将会被划分为多个内容分段。你可以在此环节预览文本的分段效果。
- 设定索引方法和检索设置。知识库在接收到用户查询问题后,按照预设的检索方式在已有的文档内查找相关内容,提取出高度相关的信息片段供语言模型生成高质量答案。
- 完成上传,在应用内关联知识库并使用
切换到知识库页面,创建一个知识库


点击“创建一个空知识库”并输入知识库的名称


创建成功,进入知识点管理界面。
2)上传文档
进入文档列表,选择一个本地文件并上传

点击“下一步”,设置分段参数
分段设置
系统按照用户自定义的规则将内容拆分为独立的分段。当用户输入问题后,系统自动分析问题中的关键词,并计算关键词与知识库中各内容分段的相关度。根据相关度排序,选取最相关的内容分段并发送给 LLM,辅助其处理与更有效地回答。

⚠️ 在该模式下,你需要根据不同的文档格式或场景要求,参考以下设置项,手动设置文本的 分段规则 。
- 分段标识符 ,默认值为
\n,即按照文章段落进行分块。- 分段最大长度 ,指定分段内的文本字符数最大上限,超出该长度时将强制分段。默认值为 500 Tokens,分段长度的最大上限为 4000 Tokens;
- 分段重叠长度 ,指的是在对数据进行分段时,段与段之间存在一定的重叠部分。这种重叠可以帮助提高信息的保留和分析的准确性,提升召回效果。建议设置为分段长度 Tokens 数的 10-25%; 文本预处理规则, 过滤知识库内部分无意义的内容。提供以下选项:
- 替换连续的空格、换行符和制表符
- 删除所有 URL 和电子邮件地址 配置完成后,点击“预览区块”即可查看分段后的效果。你可以直观的看到每个区块的字符数。如果重新修改了分段规则,需要重新点击按钮以查看新的内容分段。
索引模式
分为经济模式和高质量模式。
在经济模式下,每个区块内使用 10 个关键词进行检索,降低了准确度但无需产生费用。对于检索到的区块,仅提供倒排索引方式选择最相关的区块。
在高质量模式下,使用 Embedding 嵌入模型将已分段的文本块转换为数字向量,帮助更加有效地压缩与存储大量文本信息; 使得用户问题与文本之间的匹配能够更加精准 。
将内容块向量化并录入至数据库后,需要通过有效的检索方式调取与用户问题相匹配的内容块。高质量模式提供向量检索、全文检索和混合检索三种检索设置。
选择向量模型
使用高质量模式时需要选择向量模式。

检索设置
知识库在接收到用户查询问题后,按照预设的检索方式在已有的文档内查找相关内容,提取出高度相关的信息片段供语言模型生成高质量答案。这将决定 LLM 所能获取的背景信息,从而影响生成结果的准确性和可信度。
常见的检索方式包括:基于向量相似度的语义检索、基于关键词的精准匹配。
- 基于向量相似度的语义检索是将文本内容块和问题查询转化为向量,通过计算向量相似度匹配更深层次的语义关联;

- 基于关键词检查是通过倒排索引(搜索引擎常用的检索方法)匹配问题与关键字内容。
倒排索引方式 是一种用于快速检索文档中关键词的索引结构,常用于在线搜索引擎。倒排索引仅支持 TopK 设置项。用于筛选与用户问题相似度最高的文本片段。系统同时会根据选用模型上下文窗口大小动态调整片段数量。系统默认值为 3 。数值越高,预期被召回的文本分段数量越多。

向量化
设置完成,点击“保存并处理”,文档开始向量化

点击“前往文档”查看上传成功的文档:

点击文档名称,查看文档分段信息

召回测试

3) 参数设置
进入知识库参数设置界面:

1.4 工具集成
工具可以扩展 LLM 的能力,比如联网搜索、科学计算或绘制图片,赋予并增强了 LLM 连接外部世界的能力。Dify 提供了两种工具类型:内置工具和自定义工具。你可以直接使用 Dify 生态提供的第一方内置工具,或者轻松导入自定义的 API 工具(目前支持 OpenAPI / Swagger 和 OpenAI Plugin 规范)。
1) 工具的安装
找到工具这一栏,然后可以进行下载,下载会后即可使用,不过有很多工具需要三方授权才可以使用,比如,我们可以在dify中集成网页网页搜索能力,可以安装下边的插件

安装成功之后,可以在已有的工具进行查看

此工具需要授权,进入插件详情页面,

进入官网 https://open.bochaai.com/
注册账号,免费领取1000次调用资源、创建apiKey(创建时一定复制apikey)

使用复制的api-key在博查插件进行授权。


2) 集成到智能体中使用
创建AI Agent

我们打开之前创建好的agent智能体,可以进行配置系统提示词、大模型、工具,如下图:

系统提示词:
你是问答助手,可以友好的回答用户提出的问题,提出专业问题的时候,先到工具bocha_search中进行查询,如果工具中没有再用大模型回答问题配置工具:

更新发布智能体之后,可以进行测试:
从测试结果可以看出使用了添加的工具

1.5 Dify接入MCP
1.5.1 测试MCP
1) 什么是MCP
模型上下文协议(Model Context Protocol,MCP) ,2024年11月底,由Anthropic 推出的一种开放标准。旨在为大语言模型(LLM)提供统一的、标准化方式与外部数据源和工具之间进行通信。
MCP协议 就是一套标准化的规则,或者说是一个接口,它的目标是让LLM跳出静态的知识库,主动、实时地去外部获取数据、调用工具。

传统AI集成的问题:架构碎片化,难以扩展,限制了AI获取必要上下文信息的能力。
MCP解决方案:提供统一且可靠的方式来访问所需数据,克服了以往集成方法的局限性。
常见的MCP平台
| 名称 | 网址 |
|---|---|
| 魔搭社区 | https://www.modelscope.cn/mcp |
| MCP Marketplace | https://mcp.higress.ai/ |
| MCP.so | https://mcp.so/ |
| Smithery | https://smithery.ai/ |
| glama | https://glama.ai/mcp/servers |
| pulse | https://www.pulsemcp.com/ |
| Cline平台 | https://cline.bot/mcp-marketplace |
| Model Context Protocol 官方网站 | https://modelcontextprotocol.io |
2) 测试魔搭社区MCP
注册账号并授权
我们以魔搭举例来说明MCP的使用,打开魔搭社区,注册账号并登录
进入MCP广场https://www.modelscope.cn/mcp



测试高德地图组件
这些mcp的server有的需要申请平台中的apikey才可以使用,有的则不需要。比如:
高德地图中需要申请高德提供的API KEYS才能使用这个mcp server 申请方式
一些mcp server没用到第三方的组件,则不需要类似的API KEYS,一般是开发者自己开发并发布的
- 生活相关
- 文档生成
找到高德地图 MCP 服务,如下图

点击去查看详情,必须要有高德地图的api key

参考链接,来申请api key:https://lbs.amap.com/api/mcp-server/create-project-and-key
输入高德秘钥之后,可以看到有配置信息可用

图中需要生成配置信息,复制下来,可以进行测试或调用
打开MCP 实验场,可以测试我们开通的MCP 服务

在对话框的能力中添加mcp服务

测试功能:可以随便让地图做一个路线规划,可以发现使用了高德地图的mcp服务

测试生成doc/pdf文档
选择搜索插件 文档生成

点进去查看详情

上图中需要生成配置信息,复制下来,可以进行测试或调用
打开MCP 实验场,可以测试我们开通的MCP 服务

在对话框的能力中添加mcp服务

我们随便输入一些生成的需求,如下图,最后可以下载生成后的word文档

1.5.2 Dify中集成魔搭MCP
1) 插件安装
打开 插件->安装插件->选择 Marketplace->搜索 mcp->安装 Agent 策略(支持MCP工具)
如下图的操作:
搜索:mcp,找到Agent策略(支持MCP工具)

2) 工作流集成mcp
- 创建一个工作流

- 开始节点,新增一个输入变量 input

- 添加问题分类节点

- 在两个分类中分别添加agent节点
高德地图mcp配置

上图中mcp服务配置 需要从魔搭社区拷贝高德地图的url
将下边代码中黄色部分替换你自己在魔塔社区的高德地图url。
{
"server_name": {
"transport": "streamable_http",
"url": "https://mcp.api-inference.modelscope.net/89aaf5340b0746/mcp"
}
}下图指示如何找高德地图的url:

下边配置文档生成mcp,方法同高德地图:

- 结束节点

最终的流程如下:

测试:




3)常见问题
错误
Failed to transform agent message: PluginInvokeError: {"args":
检查 自己配置的魔塔社区的url是否输入正确:

2 项目集成 Dify
2.1 API调用
通过Dify 的工作流api功能,在项目中快速调用Dify工作流,获得处理结果。
1)发布工作流
进入工作流界面,点击“发布”--》“发布更新”

2)创建API密钥
如果想通过API访问工作流,需要创建工作流专属的API秘钥,Dify通过API秘钥来区分究竟是调用哪个工作流。

查看API文档,并拷贝API密钥

创建新密钥:


复制密钥。

3)测试API
下边我们可以先用Apifox测试,根据接口文档进行测试如下:
新增测试

注意:在header中设置api密钥

根据dify提示的接口协议,在apifox中输入

这里使用阻塞方式:response_mode:"blocking"

4)java调用api
首先定义请求体类:
package org.jeecg.dify;
import com.alibaba.fastjson2.JSONObject;
import lombok.Data;
@Data
public class DifyWorkFlowReq {
/**
* 自定义变量
*/
private JSONObject inputs;
/**
* 客户端用户ID
*/
private String user;
/**
* 返回响应模式
* blocking 阻塞返回
* streaming 流式返回
*/
private String response_mode;
}测试类:
package org.jeecg.dify;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.MediaType;
import org.springframework.web.client.RestTemplate;
/**
* @author Mr.M
* @version 1.0
* @description 测试java调用dify
* @date 2025/11/13 10:53
*/
@Slf4j
public class DifyTest {
@Test
public void testDify() {
RestTemplate restTemplate = new RestTemplate();
String workflowUrl = "http://192.168.101.65:88/v1/workflows/run";
String difyApiKey = "app-QiybNLr9y41P4lYkwZHztTfq";
DifyWorkFlowReq req = new DifyWorkFlowReq();
JSONObject inputs = new JSONObject();
inputs.put("input", "你好,认请规划北京西站到郑州黑马程序员的路线识你很高兴");
req.setInputs(inputs);
req.setUser("wms-iot-client");
req.setResponse_mode("blocking");
restTemplate.getInterceptors().add((request, body, execution) -> {
request.getHeaders().add("Authorization", "Bearer " + difyApiKey);
request.getHeaders().setContentType(MediaType.APPLICATION_JSON);
return execution.execute(request, body);
});
JSONObject resp = restTemplate.postForObject(workflowUrl, req, JSONObject.class);
log.info("dify工作流响应结果:{}", JSON.toJSONString(resp));
}
}2.2 Agent嵌入项目
2.2.1 发布工作流
在AI助手中使用工作流需要先将工作流发布为工具。
1 ) 发布工作流
将工作流发布为工具

工具入参选择LLM填入:

发布成功可在工具界面查看

2)创建Agent
下边我们在Dify中创建AI助手,通过iframe方式嵌入项目中。
首先创建应用,选择“Chatflow”



设置工作流工具的输入变量

设置直接回复节点的输出为工作流工具的输出

测试结果:

3)常见问题
报错:Run failed: Failed to transform tool message: Failed to transform agent message: PluginInvokeError: {"args":
原因:mcp链接已过期,需要进入魔搭更新链接。

链接更新成功后进入dify mcp配置界面更新链接

在Dify平台删除原来发布的mcp工具,再重新将工作流发布工具。
而后需要在Agent中重新添加工具。
2.2.2 嵌入项目
1)嵌入方式
对于Dify创建的Agent、chatFlow嵌入你的网站。
在AI Agent编排中,有一个功能可以进行嵌入网站功能,可以利用代码方式调用Agent

点击嵌入网站按钮

有三种方式可以嵌入
- 第一种是利用iframe框架
- 第二种利用js方式
- 第三种利用浏览器插件
2)复制嵌入代码
下边使用iframe方式将Agent嵌入项目。
首先复制Agent嵌入项目的代码

3)创建 vue
在前端工程创建vue

代码如下:
注意:端口改为88,和虚拟机上部署的dify端口保持一致。
<template>
<div>
<!-- 使用v-html插入iframe的HTML字符串 -->
<div v-html="iframeHtml"></div>
</div>
</template>
<script>
export default {
data() {
return {
// iframe的HTML字符串
iframeHtml: '<iframe src="http://192.168.101.65:88/chatbot/13YNLaTjyqEi1ZB4" style="width: 100%; height: 100%; min-height: 700px" frameborder="0" allow="microphone" </iframe>'
};
}
}
</script>4)添加菜单
在AI大模型菜单下添加子菜单并为管理员分配角色

添加完成并为管理角色分配角色,刷新 页面,效果如下:

5) 测试
点击菜单:AI大模型-->AI助手,效果如下:


常见问题
找不到大模型

解决方法:
首先检查虚拟机是否可以ping 外网,可以ping www.baidu.com测试
再检查在dify上安装的通义千问插件的版本,教程使用的是0.1.0

