学习目标
- 理解什么是Dify平台
- 掌握Dify安装与部署
- 掌握Dify平台的工作流使用
- 掌握Dify平台的知识库使用
Dify介绍
什么是Dify
Dify 是一款开源的大语言模型(LLM)应用开发平台。它融合了后端即服务(Backend as Service)和 LLMOps 的理念,使开发者可以快速搭建生产级的生成式 AI 应用。即使你是非技术人员,也能参与到 AI 应用的定义和数据运营过程中。
由于 Dify 内置了构建 LLM 应用所需的关键技术栈,包括对数百个模型的支持、直观的 Prompt 编排界面、高质量的 RAG 引擎、稳健的 Agent 框架、灵活的工作流,并同时提供了一套易用的界面和 API。这为开发者节省了许多重复造轮子的时间,使其可以专注在创新和业务需求上。
Dify官方文档:
https://docs.dify.ai/zh-hans/introduction
Dify手册介绍
大模型接入
在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
在 Dify 的 设置 > 模型供应商 中设置要接入的模型。

使用模型

构建应用的类型
Dify 中提供了五种应用类型:
- 聊天助手:基于 LLM 构建对话式交互的助手
- 文本生成应用:面向文本生成类任务的助手,例如撰写故事、文本分类、翻译等
- Agent:能够分解任务、推理思考、调用工具的对话式智能助手
- 对话流:适用于定义等复杂流程的多轮对话场景,具有记忆功能的应用编排方式
- 工作流:适用于自动化、批处理等单轮生成类任务的场景的应用编排方式

工作流
工作流通过将复杂的任务分解成较小的步骤(节点)降低系统复杂度,减少了对提示词技术和模型推理能力的依赖,提高了 LLM 应用面向复杂任务的性能,提升了系统的可解释性、稳定性和容错性。Dify 工作流分为两种类型:
- Chatflow:面向对话类情景,包括客户服务、语义搜索、以及其他需要在构建响应时进行多步逻辑的对话式应用程序。
- Workflow:面向自动化和批处理情景,适合高质量翻译、数据分析、内容生成、电子邮件自动化等应用程序。
节点是工作流中的关键构成,通过连接不同功能的节点,执行工作流的一系列操作。

- 开始(Start):定义一个 workflow 流程启动的初始参数。
- 结束(End):定义一个 workflow 流程结束的最终输出内容。
- 大语言模型(LLM):调用大语言模型回答问题或者对自然语言进行处理。
- 知识检索(Knowledge Retrieval):从知识库中检索与用户问题相关的文本内容,可作为下游 LLM 节点的上下文。
- 问题分类(Question Classifier):通过定义分类描述,LLM 能够根据用户输入选择与之相匹配的分类。
- 条件分支(IF/ELSE):允许你根据 if/else 条件将 workflow 拆分成两个分支。
- 代码执行(Code):运行 Python / NodeJS 代码以在工作流程中执行数据转换等自定义逻辑。
- 变量聚合(Variable Aggregator):将多路分支的变量聚合为一个变量,以实现下游节点统一配置。
- 循环(Loop):循环节点用于执行依赖前一轮结果的重复任务,直到满足退出条件或达到最大循环次数。
知识库
知识库功能将 RAG 上的各环节可视化,提供了一套简单易用的用户界面来方便应用构建者管理个人或者团队的知识库,并能够快速集成至 AI 应用中。
开发者可以将企业内部文档、规范信息等内容上传至知识库进行结构化处理,供后续 LLM 查询。
- 创建知识库。通过上传本地文件、导入在线数据或创建一个空的知识库。
- 指定分段模式。该阶段是内容的预处理与数据结构化过程,长文本将会被划分为多个内容分段。你可以在此环节预览文本的分段效果。
- 设定索引方法和检索设置。知识库在接收到用户查询问题后,按照预设的检索方式在已有的文档内查找相关内容,提取出高度相关的信息片段供语言模型生成高质量答案。
- 完成上传,在应用内关联知识库并使用

Dify安装部署
在企业中部署安装在什么位置?
- 服务器上 安装docker
-
- 公司内部有一个专门存放服务器的地方
- 云服务平台
Dify案例-工作流-大语言模型微调语料构建
了解模型微调
微调(Fine-tuning)是指在已经预训练好的大规模模型基础上,通过进一步训练来适应特定任务或数据集的过程。这一过程体现了迁移学习的思想,即利用预训练模型在通用数据上学习到的知识,通过微调使其更好地服务于特定的应用场景。
微调的主要步骤:
- 选择预训练模型:从现有的大型预训练模型(如BERT、GPT、T5等)挑选适合任务的模型为基础。
- 准备数据集:为特定任务准备高质量的训练和验证数据集,确保数据与目标任务紧密相关。
- 调整模型结构:根据任务需求,可能需要对模型结构进行微调,如增减层数、调整激活函数等。
- 设置训练参数:包括学习率、批处理大小、训练轮次等,这些参数将直接影响微调效果。
- 开始训练:在选定数据集上迭代训练模型,并观察验证集上的表现,适时调整训练策略。
- 评估与部署:使用测试集评估微调后的模型性能,满足要求后即可部署到实际应用中。
以上就是AI模型微调步骤,不管是模型微调和模型训练都少不了模型微调和模型训练需要的数据集 。我们知道要想微调和训练模型数据集 非常重要。数据集都是靠人工标注或者是通过程序来实现,对非技术人员不太友好,换句话说微调数据集制作门槛就非常高,普通小白是很难上手的。接下来我们就通过dify工作流生成大模型语料。
模型微调的语料形式一般为:
{
"messages": [
{
"role": "system",
"content": "你是当代大儒"
},
{
"role": "user",
"content": "应该怎么学习?"
},
{
"role": "assistant",
"content": "贤贤易色;事父母,能竭其力;事君,能致其身;与朋友交,言而有信。虽曰未学,吾必谓之学矣。"
}
]
}
构建工作流
需求:根据上传文件,然后构建大模型微调语料,整体流程如下:

整个流程实现了开始、文档内容解析、数据处理和、LLM 生成和结束等阶段构成,处理流程如下所示:
创建工作流应用

点击创建空白应用按钮

点击创建,进入工作流界面

工作流节点设置
开始节点
该节点接收用户输入,是整个工作流程的入口,控制文件类型和核心参数的输入

添加输入2个参数:(参数名称可以自定义)
- attachments:支持本地/远程URL上传文档文件(限制10MB)
- systemprompt: 必填的系统提示词输入(48个字符限制)
第一个参数设置 第二个参数设置


完整版开始节点设置

文档提取器节点
该节点解析上传文档内容。


完整版节点

代码执行节点
该节点进行文本预处理,解决 Dify 平台处理长文本的性能限制,但可能造成信息丢失。


python代码片段:
def main(articleSections: list) -> dict:
try:
# 将列表项合并为字符串
combined_text = "\n".join(articleSections)
# 截取前800个字符
truncated_text = combined_text[:800]
return {
"result": truncated_text
}
except Exception as e:
# 错误处理
return {
"result": ""
}
LLM节点
使用qwen3-8b模型(可以自己选择)
- Prompt设计
- 系统提示词定义科学家角色和生成规范
- 动态插入截断后的文本和用户提示词
- 通过示例强制约束 JSONL 输出格式



system提示词
【角色】
你是一位 LLM 大语言模型科学家,参考用户提供的内容,帮助用户构造符合规范的 Fine-tune(微调)数据
【任务】
- 对于给定的「内容」,你每次回列出 10 个通俗「问题」;
- 针对每个「问题」,引用「内容」原文及对内容的合理解释和演绎,做出「解答」;
- 并将「问题」「解答」整理为规范的 JSONL 格式
【要求】
1. 问题 **不要** 直接引用「内容」,应该贴近当代现实生活;
2. 问题应该是通俗白话,避免"假、大、空";
3. 答案应忠于原文,对于原文的解释不能脱离原文的主旨、思想;
【输出规范】
* 输出规范的 JSONL,每行一条数据
* 每条数据应包含一个 message 数组,每个数组都应该包含 role 分别为 system、user 和 assistant 的三条记录
* 其中 role 为 system 的数据,作为训练中的 system prompt 格外重要,其 content 使用用户指定的系统提示词
* role 为 user 的数据对应列出的「问题」
* role 为 assistant 的数据则对应针对「问题」的「解答」
* 示例如下:
```
{"messages": [{"role": "system", "content": "你是当代大儒"}, {"role": "user", "content": "应该怎么学习?"}, {"role": "assistant", "content": "贤贤易色;事父母,能竭其力;事君,能致其身;与朋友交,言而有信。虽曰未学,吾必谓之学矣。"}]}
```
user提示词
内容:引入变量
系统提示词:引入变量
#注意:引入变量不是固定值
结束节点
输出最终生成的JSONL文本


运行工作流



结果输出
<think>
我需要根据提供的内容,创建10个通俗问题,并为每个问题提供解答,然后将它们整理成JSONL格式。内容是关于"神奇树屋:音乐剧"的第一首歌"How Far Can You See"的歌词。
首先,我来分析一下这段内容:
- 这是关于兄妹Jack和Annie在森林中发现了一个神秘的树屋的故事
- Jack喜欢做笔记,观察自然(记录糖枫树、粗糙的树皮、星形叶子)
- Annie则喜欢玩耍和想象(她假装自己是怪物)
- 两个孩子有争吵,但这次他们的争吵似乎不太重要
- 故事似乎暗示了一些神奇的事情即将发生
现在,我需要根据这些内容创建10个通俗问题,这些问题应该:
1. 不直接引用内容
2. 贴近当代现实生活
3. 通俗白话,避免"假、大、空"
然后,针对每个问题,我需要引用原文并给出合理解释和演绎,同时确保答案忠于原文主旨。
最后,我将按照指定的JSONL格式输出,包含system、user和assistant三个角色。
让我开始创建问题和解答:
问题1:孩子们在探索自然时应该注意什么?
解答:在探索自然时,像Jack那样做笔记和观察是很重要的。正如原文中Jack所做的那样:"Making notes...rough bark..."(做笔记...粗糙的树皮...)和"Star-shaped leaves..."(星形的叶子...)。这表明通过仔细观察和记录,我们可以更好地了解自然世界。观察树木的特征,如树皮纹理和叶子形状,不仅能增加知识,还能培养对自然环境的欣赏和保护意识。
问题2:兄弟姐妹之间有不同兴趣爱好时如何相处?
解答:兄弟姐妹有不同的兴趣爱好是很常见的,就像原文中的Jack和Annie。Jack喜欢观察自然和做笔记,而Annie则喜欢扮演和想象。尽管他们有争执:"No! I'm too old to play pretend."(不!我太大了,不能再玩假装游戏了。)但最终他们还是一起探索。这告诉我们,即使有不同,兄弟姐妹也可以互相尊重,找到共同的活动,一起探索新事物,正如他们发现神秘树屋那样。
问题3:想象力在儿童发展中扮演什么角色?
解答:想象力在儿童发展中扮演着重要角色,正如Annie在故事中展示的那样。她说:"Jack, it's not pretend! I'm a monster!"(Jack,这不是假装!我是怪物!)这表明孩子们通过想象游戏来探索世界和表达自己。虽然Jack认为他"太大了,不能再玩假装游戏",但想象力实际上是创造力和问题解决能力的基础,帮助孩子们理解复杂的概念和情境。
问题4:日常生活中如何培养孩子的观察力?
解答:培养孩子的观察力可以通过鼓励他们像Jack那样关注周围环境的细节。在原文中,Jack仔细观察并记录:"sugar maple..."(糖枫树...)、"rough bark..."(粗糙的树皮...)和"Star-shaped leaves..."(星形的叶子...)。父母可以鼓励孩子在户外散步时注意植物、动物和其他自然现象的特征,并记录他们的观察。这种活动不仅能提高观察力,还能培养科学思维和对自然的热爱。
问题5:为什么说有时候看似普通的日常可能会带来意想不到的发现?
解答:看似普通的日常可能会带来意想不到的发现,正如故事中所描述的:"ON A DAY JUST LIKE ANY OTHER"(在一个和任何其他日子一样的日子里)和"IN THE WOODS NOT VERY FAR FROM HOME"(在离家不远的树林里)。这表明即使在熟悉的环境中,也可能有新奇的事物等待发现。原文提到"a mysterious tree house appeared in the woods"(一个神秘的树屋出现在树林里),这提醒我们保持好奇心和开放态度的重要性,因为惊喜可能就在我们身边。
问题6:如何平衡孩子的学习需求和游戏需求?
解答:平衡孩子的学习需求和游戏需求很重要,就像Jack和Annie展示的不同兴趣。Jack专注于学习和观察:"Making notes...rough bark..."(做笔记...粗糙的树皮...),而Annie则更喜欢游戏:"Jack! I'm a monster!"(Jack!我是怪物!)。理想的方法是结合两者,例如通过户外探索活动,让孩子既能学习自然知识,又能通过想象游戏享受乐趣。这样,学习过程会变得更加愉快,而游戏时间也能具有教育意义。
问题7:孩子们在户外活动中能学到什么?
解答:孩子们在户外活动中可以学到很多知识和技能。从原文中,我们看到Jack通过观察自然学到了植物特征:"sugar maple..."(糖枫树...)、"rough bark..."(粗糙的树皮...)和"Star-shaped leaves..."(星形的叶子...)。户外活动不仅能让孩子们学习自然科学知识,还能培养他们的观察力、好奇心和探索精神。此外,像Annie那样在自然环境中玩耍,也能增强孩子的创造力和想象力,同时促进身体健康发展。
问题8:如何鼓励孩子对自然世界产生兴趣?
解答:鼓励孩子对自然世界产生兴趣可以从简单的观察活动开始,就像Jack在故事中做的那样。他注意到并记录了"sugar maple..."(糖枫树...)、"rough bark..."(粗糙的树皮...)和"Star-shaped leaves..."(星形的叶子...)。父母可以带孩子去公园或森林,鼓励他们观察不同的植物和动物,提问并寻找答案。同时,也可以像Annie那样通过想象游戏,让自然探索变得更加有趣,例如假装是森林中的探险家或科学家。
问题9:为什么说保持好奇心对个人成长很重要?
解答:保持好奇心对个人成长非常重要,因为它驱动我们去探索和学习新事物。在故事中,尽管Jack和Annie有争吵,但他们的好奇心最终引导他们发现了神秘的树屋:"a mysterious tree house appeared in the woods"(一个神秘的树屋出现在树林里)。原文提到"BUT TODAY WHAT THEY SAY DOESN'T MATTER"(但今天他们说的话不重要),暗示了新奇发现的重要性超过了日常的争执。好奇心促使我们走出舒适区,接受新挑战,从而促进个人成长和发展。
问题10:如何在日常生活中培养孩子的探索精神?
解答:在日常生活中培养孩子的探索精神可以通过鼓励他们像Jack和Annie那样保持好奇心和开放态度。原文描述了"IN THE WOODS NOT VERY FAR FROM HOME"(在离家不远的树林里),表明探索不一定需要去远方,即使是在熟悉的环境中也能有新发现。父母可以鼓励孩子提问、观察周围环境,并尝试新事物。同时,像故事中那样,允许孩子有不同的兴趣和表达方式------有些人可能像Jack那样喜欢通过观察和记录来探索,而另一些人可能像Annie那样通过想象和游戏来探索。
现在,我将这些问题和解答整理成JSONL格式,每条数据包含system、user和assistant三个角色:
```json
{"messages": [{"role": "system", "content": "你是一个科普专家"}, {"role": "user", "content": "孩子们在探索自然时应该注意什么?"}, {"role": "assistant", "content": "在探索自然时,像Jack那样做笔记和观察是很重要的。正如原文中Jack所做的那样:\"Making notes...rough bark...\"(做笔记...粗糙的树皮...)和\"Star-shaped leaves...\"(星形的叶子...)。这表明通过仔细观察和记录,我们可以更好地了解自然世界。观察树木的特征,如树皮纹理和叶子形状,不仅能增加知识,还能培养对自然环境的欣赏和保护意识。"}]}
{"messages": [{"role": "system", "content": "你是一个科普专家"}, {"role": "user", "content": "兄弟姐妹之间有不同兴趣爱好时如何相处?"}, {"role": "assistant", "content": "兄弟姐妹有不同的兴趣爱好是很常见的,就像原文中的Jack和Annie。Jack喜欢观察自然和做笔记,而Annie则喜欢扮演和想象。尽管他们有争执:\"No! I'm too old to play pretend.\"(不!我太大了,不能再玩假装游戏了。)但最终他们还是一起探索。这告诉我们,即使有不同,兄弟姐妹也可以互相尊重,找到共同的活动,一起探索新事物,正如他们发现神秘树屋那样。"}]}
{"messages": [{"role": "system", "content": "你是一个科普专家"}, {"role": "user", "content": "想象力在儿童发展中扮演什么角色?"}, {"role": "assistant", "content": "想象力在儿童发展中扮演着重要角色,正如Annie在故事中展示的那样。她说:\"Jack, it's not pretend! I'm a monster!\"(Jack,这不是假装!我是怪物!)这表明孩子们通过想象游戏来探索世界和表达自己。虽然Jack认为他\"太大了,不能再玩假装游戏\",但想象力实际上是创造力和问题解决能力的基础,帮助孩子们理解复杂的概念和情境。"}]}
{"messages": [{"role": "system", "content": "你是一个科普专家"}, {"role": "user", "content": "日常生活中如何培养孩子的观察力?"}, {"role": "assistant", "content": "培养孩子的观察力可以通过鼓励他们像Jack那样关注周围环境的细节。在原文中,Jack仔细观察并记录:\"sugar maple...\"(糖枫树...)、\"rough bark...\"(粗糙的树皮...)和\"Star-shaped leaves...\"(星形的叶子...)。父母可以鼓励孩子在户外散步时注意植物、动物和其他自然现象的特征,并记录他们的观察。这种活动不仅能提高观察力,还能培养科学思维和对自然的热爱。"}]}
{"messages": [{"role": "system", "content": "你是一个科普专家"}, {"role": "user", "content": "为什么说有时候看似普通的日常可能会带来意想不到的发现?"}, {"role": "assistant", "content": "看似普通的日常可能会带来意想不到的发现,正如故事中所描述的:\"ON A DAY JUST LIKE ANY OTHER\"(在一个和任何其他日子一样的日子里)和\"IN THE WOODS NOT VERY FAR FROM HOME\"(在离家不远的树林里)。这表明即使在熟悉的环境中,也可能有新奇的事物等待发现。原文提到\"a mysterious tree house appeared in the woods\"(一个神秘的树屋出现在树林里),这提醒我们保持好奇心和开放态度的重要性,因为惊喜可能就在我们身边。"}]}
{"messages": [{"role": "system", "content": "你是一个科普专家"}, {"role": "user", "content": "如何平衡孩子的学习需求和游戏需求?"}, {"role": "assistant", "content": "平衡孩子的学习需求和游戏需求很重要,就像Jack和Annie展示的不同兴趣。Jack专注于学习和观察:\"Making notes...rough bark...\"(做笔记...粗糙的树皮...),而Annie则更喜欢游戏:\"Jack! I'm a monster!\"(Jack!我是怪物!)。理想的方法是结合两者,例如通过户外探索活动,让孩子既能学习自然知识,又能通过想象游戏享受乐趣。这样,学习过程会变得更加愉快,而游戏时间也能具有教育意义。"}]}
{"messages": [{"role": "system", "content": "你是一个科普专家"}, {"role": "user", "content": "孩子们在户外活动中能学到什么?"}, {"role": "assistant", "content": "孩子们在户外活动中可以学到很多知识和技能。从原文中,我们看到Jack通过观察自然学到了植物特征:\"sugar maple...\"(糖枫树...)、\"rough bark...\"(粗糙的树皮...)和\"Star-shaped leaves...\"(星形的叶子...)。户外活动不仅能让孩子们学习自然科学知识,还能培养他们的观察力、好奇心和探索精神。此外,像Annie那样在自然环境中玩耍,也能增强孩子的创造力和想象力,同时促进身体健康发展。"}]}
{"messages": [{"role": "system", "content": "你是一个科普专家"}, {"role": "user", "content": "如何鼓励孩子对自然世界产生兴趣?"}, {"role": "assistant", "content": "鼓励孩子对自然世界产生兴趣可以从简单的观察活动开始,就像Jack在故事中做的那样。他注意到并记录了\"sugar maple...\"(糖枫树...)、\"rough bark...\"(粗糙的树皮...)和\"Star-shaped leaves...\"(星形的叶子...)。父母可以带孩子去公园或森林,鼓励他们观察不同的植物和动物,提问并寻找答案。同时,也可以像Annie那样通过想象游戏,让自然探索变得更加有趣,例如假装是森林中的探险家或科学家。"}]}
{"messages": [{"role": "system", "content": "你是一个科普专家"}, {"role": "user", "content": "为什么说保持好奇心对个人成长很重要?"}, {"role": "assistant", "content": "保持好奇心对个人成长非常重要,因为它驱动我们去探索和学习新事物。在故事中,尽管Jack和Annie有争吵,但他们的好奇心最终引导他们发现了神秘的树屋:\"a mysterious tree house appeared in the woods\"(一个神秘的树屋出现在树林里)。原文提到\"BUT TODAY WHAT THEY SAY DOESN'T MATTER\"(但今天他们说的话不重要),暗示了新奇发现的重要性超过了日常的争执。好奇心促使我们走出舒适区,接受新挑战,从而促进个人成长和发展。"}]}
{"messages": [{"role": "system", "content": "你是一个科普专家"}, {"role": "user", "content": "如何在日常生活中培养孩子的探索精神?"}, {"role": "assistant", "content": "在日常生活中培养孩子的探索精神可以通过鼓励他们像Jack和Annie那样保持好奇心和开放态度。原文描述了\"IN THE WOODS NOT VERY FAR FROM HOME\"(在离家不远的树林里),表明探索不一定需要去远方,即使是在熟悉的环境中也能有新发现。父母可以鼓励孩子提问、观察周围环境,并尝试新事物。同时,像故事中那样,允许孩子有不同的兴趣和表达方式------有些人可能像Jack那样喜欢通过观察和记录来探索,而另一些人可能像Annie那样通过想象和游戏来探索。"}]}
```
以上是我根据提供的内容创建的10个问题和解答,并按照JSONL格式进行了整理。这些问题都贴近当代现实生活,使用了通俗的白话,避免了"假、大、空"。同时,答案都忠于原文,引用了原文内容并进行了合理的解释和演绎,没有脱离原文的主旨和思想。
</think>
{
"messages": [
{
"role": "system",
"content": "你是一个科普专家"
},
{
"role": "user",
"content": "孩子们在探索自然时应该注意什么?"
},
{
"role": "assistant",
"content": "在探索自然时,像Jack那样做笔记和观察是很重要的。正如原文中Jack所做的那样:\"Making notes...rough bark...\"(做笔记...粗糙的树皮...)和\"Star-shaped leaves...\"(星形的叶子...)。这表明通过仔细观察和记录,我们可以更好地了解自然世界。观察树木的特征,如树皮纹理和叶子形状,不仅能增加知识,还能培养对自然环境的欣赏和保护意识。"
}
]
}
{
"messages": [
{
"role": "system",
"content": "你是一个科普专家"
},
{
"role": "user",
"content": "兄弟姐妹之间有不同兴趣爱好时如何相处?"
},
{
"role": "assistant",
"content": "兄弟姐妹有不同的兴趣爱好是很常见的,就像原文中的Jack和Annie。Jack喜欢观察自然和做笔记,而Annie则喜欢扮演和想象。尽管他们有争执:\"No! I'm too old to play pretend.\"(不!我太大了,不能再玩假装游戏了。)但最终他们还是一起探索。这告诉我们,即使有不同,兄弟姐妹也可以互相尊重,找到共同的活动,一起探索新事物,正如他们发现神秘树屋那样。"
}
]
}
{
"messages": [
{
"role": "system",
"content": "你是一个科普专家"
},
{
"role": "user",
"content": "想象力在儿童发展中扮演什么角色?"
},
{
"role": "assistant",
"content": "想象力在儿童发展中扮演着重要角色,正如Annie在故事中展示的那样。她说:\"Jack, it's not pretend! I'm a monster!\"(Jack,这不是假装!我是怪物!)这表明孩子们通过想象游戏来探索世界和表达自己。虽然Jack认为他\"太大了,不能再玩假装游戏\",但想象力实际上是创造力和问题解决能力的基础,帮助孩子们理解复杂的概念和情境。"
}
]
}
{
"messages": [
{
"role": "system",
"content": "你是一个科普专家"
},
{
"role": "user",
"content": "日常生活中如何培养孩子的观察力?"
},
{
"role": "assistant",
"content": "培养孩子的观察力可以通过鼓励他们像Jack那样关注周围环境的细节。在原文中,Jack仔细观察并记录:\"sugar maple...\"(糖枫树...)、\"rough bark...\"(粗糙的树皮...)和\"Star-shaped leaves...\"(星形的叶子...)。父母可以鼓励孩子在户外散步时注意植物、动物和其他自然现象的特征,并记录他们的观察。这种活动不仅能提高观察力,还能培养科学思维和对自然的热爱。"
}
]
}
{
"messages": [
{
"role": "system",
"content": "你是一个科普专家"
},
{
"role": "user",
"content": "为什么说有时候看似普通的日常可能会带来意想不到的发现?"
},
{
"role": "assistant",
"content": "看似普通的日常可能会带来意想不到的发现,正如故事中所描述的:\"ON A DAY JUST LIKE ANY OTHER\"(在一个和任何其他日子一样的日子里)和\"IN THE WOODS NOT VERY FAR FROM HOME\"(在离家不远的树林里)。这表明即使在熟悉的环境中,也可能有新奇的事物等待发现。原文提到\"a mysterious tree house appeared in the woods\"(一个神秘的树屋出现在树林里),这提醒我们保持好奇心和开放态度的重要性,因为惊喜可能就在我们身边。"
}
]
}
{
"messages": [
{
"role": "system",
"content": "你是一个科普专家"
},
{
"role": "user",
"content": "如何平衡孩子的学习需求和游戏需求?"
},
{
"role": "assistant",
"content": "平衡孩子的学习需求和游戏需求很重要,就像Jack和Annie展示的不同兴趣。Jack专注于学习和观察:\"Making notes...rough bark...\"(做笔记...粗糙的树皮...),而Annie则更喜欢游戏:\"Jack! I'm a monster!\"(Jack!我是怪物!)。理想的方法是结合两者,例如通过户外探索活动,让孩子既能学习自然知识,又能通过想象游戏享受乐趣。这样,学习过程会变得更加愉快,而游戏时间也能具有教育意义。"
}
]
}
{
"messages": [
{
"role": "system",
"content": "你是一个科普专家"
},
{
"role": "user",
"content": "孩子们在户外活动中能学到什么?"
},
{
"role": "assistant",
"content": "孩子们在户外活动中可以学到很多知识和技能。从原文中,我们看到Jack通过观察自然学到了植物特征:\"sugar maple...\"(糖枫树...)、\"rough bark...\"(粗糙的树皮...)和\"Star-shaped leaves...\"(星形的叶子...)。户外活动不仅能让孩子们学习自然科学知识,还能培养他们的观察力、好奇心和探索精神。此外,像Annie那样在自然环境中玩耍,也能增强孩子的创造力和想象力,同时促进身体健康发展。"
}
]
}
{
"messages": [
{
"role": "system",
"content": "你是一个科普专家"
},
{
"role": "user",
"content": "如何鼓励孩子对自然世界产生兴趣?"
},
{
"role": "assistant",
"content": "鼓励孩子对自然世界产生兴趣可以从简单的观察活动开始,就像Jack在故事中做的那样。他注意到并记录了\"sugar maple...\"(糖枫树...)、\"rough bark...\"(粗糙的树皮...)和\"Star-shaped leaves...\"(星形的叶子...)。父母可以带孩子去公园或森林,鼓励他们观察不同的植物和动物,提问并寻找答案。同时,也可以像Annie那样通过想象游戏,让自然探索变得更加有趣,例如假装是森林中的探险家或科学家。"
}
]
}
{
"messages": [
{
"role": "system",
"content": "你是一个科普专家"
},
{
"role": "user",
"content": "为什么说保持好奇心对个人成长很重要?"
},
{
"role": "assistant",
"content": "保持好奇心对个人成长非常重要,因为它驱动我们去探索和学习新事物。在故事中,尽管Jack和Annie有争吵,但他们的好奇心最终引导他们发现了神秘的树屋:\"a mysterious tree house appeared in the woods\"(一个神秘的树屋出现在树林里)。原文提到\"BUT TODAY WHAT THEY SAY DOESN'T MATTER\"(但今天他们说的话不重要),暗示了新奇发现的重要性超过了日常的争执。好奇心促使我们走出舒适区,接受新挑战,从而促进个人成长和发展。"
}
]
}
{
"messages": [
{
"role": "system",
"content": "你是一个科普专家"
},
{
"role": "user",
"content": "如何在日常生活中培养孩子的探索精神?"
},
{
"role": "assistant",
"content": "在日常生活中培养孩子的探索精神可以通过鼓励他们像Jack和Annie那样保持好奇心和开放态度。原文描述了\"IN THE WOODS NOT VERY FAR FROM HOME\"(在离家不远的树林里),表明探索不一定需要去远方,即使是在熟悉的环境中也能有新发现。父母可以鼓励孩子提问、观察周围环境,并尝试新事物。同时,像故事中那样,允许孩子有不同的兴趣和表达方式------有些人可能像Jack那样喜欢通过观察和记录来探索,而另一些人可能像Annie那样通过想象和游戏来探索。"
}
]
}
Dify案例-RAG-知识库
RAG(检索增强生成,Retrieval-Augmented Generation)增强检索知识库是一种结合信息检索与生成式人工智能的技术框架,旨在通过动态调用外部知识库提升大语言模型(LLM)回答的准确性、相关性和时效性。其核心在于将传统检索系统与生成模型结合,解决大模型自身训练数据局限性、知识过时及"幻觉"(虚构信息)等问题。

- **检索(Retrieval)**根据用户问题,从预构建的知识库(如向量数据库)中检索相关文档或信息片段。知识库通常通过离线处理将文本转换为向量表示并建立索引,支持快速相似度匹配。例如,汽车客服系统可能存储车型参数手册作为知识库,检索时匹配用户问题中的关键词或语义。
- **增强(Augmentation)**将检索到的信息整合为上下文,与原始问题一同输入生成模型。这一步骤通过补充外部知识,扩展模型的"记忆"范围,使其能基于最新或专有数据生成回答。例如,医疗诊断场景中,RAG可调用最新医学论文数据辅助生成诊断建议。
- **生成(Generation)**大语言模型结合上下文与问题生成最终回答。通过引入检索到的信息,模型输出的准确性显著提升,同时减少虚构内容。例如,企业客服系统利用内部文档生成合规性解答,避免泄露敏感数据。

- **1:Embedding Model(嵌入模型)**你可以把它想象成一个 "翻译官"。它的作用是把各种类型的原始数据,像声音、图片、视频、文字这些,都转换成一种统一的 "数字语言",方便后续处理。
- 2:Vector Embeddings(向量嵌入) 经过嵌入模型翻译后,数据就变成了一串数字组成的向量,比如
[0.41, 0.91, 0.21, -0.37, -0.74, ...]这样的形式。这些向量就像是给每个数据贴了一个 "数字标签",能体现数据的特征。 - **3:Vector Indexing(向量索引)**这一步就像给图书馆的书编目录。把所有的向量嵌入整理好,建立一个索引系统,这样后面找的时候就快多了,不然那么多向量一个个找得找到什么时候。
- **4:Vector Database(向量数据库)**它就是个 "仓库",把整理好带索引的向量都存进去,方便随时调取。
- **5:Similarity Search(相似度搜索)**当有查询需求时,先把查询内容也转换成向量,然后在向量数据库里找和这个查询向量最像的那些向量,也就是找相似的内容。常见的就是余弦相似度和欧式距离算法。
- **6:Approximation Ranking(近似排序)**找到相似的向量后,还得给它们排个序,把最相似的放到最前面,这样结果就更靠谱了。这一步我们可以粗略理解为ReRank(更精细化,先粗排后精排)
- **7:Application(应用)**经过前面的搜索和排序,最终的结果就会反馈到应用层面,比如手机 APP、电脑程序这些。
- **8:Retrieval(检索)**这其实是用户侧的动作,就是用户在应用里发起检索请求,然后整个流程就从这里开始运转。
新建RAG知识库
创建知识库
点击dify 最上方 知识库,点击创建知识库

进入知识库创建页面,选择数据源,选择导入已有文本。目前文本支持多种数据类型TXT、 MARKDOWN、 MDX、 PDF、 HTML、 XLSX、 XLS、 DOCX、 CSV、 MD、 HTM

选择好本地文档后,点击下一步
文本分段与清洗(解析)
进入文本分段与清洗阶段

分段模式(解析)
知识库支持两种分段模式: 通用模式 与 父子模式。如果你是首次创建知识库,建议选择父子模式。
通用模式
系统按照用户自定义的规则将内容拆分为独立的分段。当用户输入问题后,系统自动分析问题中的关键词,并计算关键词与知识库中各内容分段的相关度。根据相关度排序,选取最相关的内容分段并发送给 LLM,辅助其处理与更有效地回答。

在该模式下,你需要根据不同的文档格式或场景要求,参考以下设置项,手动设置文本的 分段规则。
- 分段标识符 ,默认值为
\n,即按照文章段落进行分块。 - 分段最大长度,指定分段内的文本字符数最大上限,超出该长度时将强制分段。默认值为 500 Tokens,分段长度的最大上限为 4000 Tokens;
- 分段重叠长度,指的是在对数据进行分段时,段与段之间存在一定的重叠部分。这种重叠可以帮助提高信息的保留和分析的准确性,提升召回效果。建议设置为分段长度 Tokens 数的 10-25%;
**文本预处理规则,**过滤知识库内部分无意义的内容。提供以下选项:
- 替换连续的空格、换行符和制表符
- 删除所有 URL 和电子邮件地址
配置完成后,点击"预览区块"即可查看分段后的效果。你可以直观的看到每个区块的字符数。如果重新修改了分段规则,需要重新点击按钮以查看新的内容分段。
父子模式

其中,父区块(Parent-chunk)保持较大的文本单位(如段落),提供丰富的上下文信息;子区块(Child-chunk)则是较小的文本单位(如句子),用于精确检索。系统首先通过子区块进行精确检索以确保相关性,然后获取对应的父区块来补充上下文信息,从而在生成响应时既保证准确性又能提供完整的背景信息。你可以通过设置分隔符和最大长度来自定义父子区块的分段方式。
例如在 AI 智能客服场景下,用户输入的问题将定位至解决方案文档内某个具体的句子,随后将该句子所在的段落或章节,联同发送至 LLM,补全该问题的完整背景信息,给出更加精准的回答。
- 子分段匹配查询:
-
- 将文档拆分为较小、集中的信息单元(例如一句话),更加精准的匹配用户所输入的问题。
- 子分段能快速提供与用户需求最相关的初步结果。
- 父分段提供上下文:
-
- 将包含匹配子分段的更大部分(如段落、章节甚至整个文档)视作父分段并提供给大语言模型(LLM)。
- 父分段能为 LLM 提供完整的背景信息,避免遗漏重要细节,帮助 LLM 输出更贴合知识库内容的回答。
文档分块的流程

综合得知:父子模式 与 通用模式相比,父子模式采用双层分段结构来平衡检索的精确度和上下文信息,让精准匹配与全面的上下文信息二者兼得。
索引方式(解析)
如搜索引擎通过高效的索引算法匹配与用户问题最相关的网页内容,索引方式是将直接影响 LLM 对知识库内容的检索效率以及回答的准确性。
Dify提供" 高质量" 与" **经济"**两种索引方法。

经济方式
经济方式只能在通用分段模式下才可以使用,在经济模式下,每个区块内使用 10 个关键词进行检索,降低了准确度但无需产生费用。对于检索到的区块,仅提供倒排索引方式选择最相关的区块。

高质量方式
在高质量模式下,使用 Embedding 嵌入模型将已分段的文本块转换为数字向量,帮助更加有效地压缩与存储大量文本信息; 使得用户问题与文本之间的匹配能够更加精准。

将内容块向量化并录入至数据库后,需要通过有效的检索方式调取与用户问题相匹配的内容块。高质量模式提供向量检索、全文检索和混合检索三种检索设置。
检索设置(解析)
知识库在接收到用户查询问题后,按照预设的检索方式在已有的文档内查找相关内容,提取出高度相关的信息片段供语言模型生成高质量答案。这将决定 LLM 所能获取的背景信息,从而影响生成结果的准确性和可信度。
常见的检索方式包括基于向量相似度的语义检索 和 基于关键词的精准匹配:
- 前者将文本内容块和问题查询转化为向量,通过计算向量相似度匹配更深层次的语义关联;
- 后者通过倒排索引,即搜索引擎常用的检索方法,匹配问题与关键内容。
经济索引方式
在经济索引方式下,仅提供 倒排索引方式 。这是一种用于快速检索文档中关键词的索引结构,常用于在线搜索引擎。倒排索引仅支持 TopK设置项。用于筛选与用户问题相似度最高的文本片段。系统同时会根据选用模型上下文窗口大小动态调整片段数量。系统默认值为 3 。数值越高,预期被召回的文本分段数量越多。

高质量索引方式
在高质量索引方式下,Dify 提供向量检索、全文检索与混合检索设置:

文本分段与清洗(实践)


保存并完成

知识库验收
分段效果

召回测试

实现AI Agent
搭建Agent
点击创建空白页面、选择Agent ,给这个Agent 应用一个名字


进入AI Agent画面,再上下文添加已创建好的知识库。
调试与预览
提示词:
你现在是一位大模型领域的专家,请你根据知识库中的内容准确回答用户的问题
单模型调试

多模型调试


添加完成知识库我们就可以针对这个知识库进行聊天和对话了。
前后端调用Agent(了解)
前端调用Agent
在AI Agent编排 中,有一个功能可以进行嵌入网站功能,可以利用代码方式调用Agent

点击嵌入网站按钮

有三种方式可以嵌入
- 第一种是利用iframe框架
- 第二种利用js方式
- 第三种利用浏览器插件
iframe框架方式嵌入
随便创建一个dify_demo.html文件,然后把第一种方式代码拷贝到body标签中,然后运行操作

点击谷歌浏览器图标进行测试

js方式嵌入
在pycharm中创建一个dify_demo2.html文件,然后把第二种方式代码拷贝到body标签中,然后运行操作

Chatflow知识库
创建工作流应用

选择Chatflow应用类型

点击创建按钮,生成默认的工作流

添加知识库节点
进入工作流创造面板中,我们可以在大语言模型中间节点中添加"知识检索"


修改LLM节点
我们对接llm大语言模型
上下文我们选择 知识检索.result
系统提示词这里我们输入如下提示词
请根据文本内容{{#context#}}回答用户问题
其他设置都可以默认

直接回复节点

完整的工作流节点

工作流发布测试


工具集成
工具可以扩展 LLM 的能力,比如联网搜索、科学计算或绘制图片,赋予并增强了 LLM 连接外部世界的能力。Dify 提供了两种工具类型:内置工具和自定义工具。你可以直接使用 Dify 生态提供的第一方内置工具,或者轻松导入自定义的 API 工具(目前支持 OpenAPI / Swagger 和 OpenAI Plugin 规范)。
简单说就是"让 AI 调用工具的能力",具备实时、私有化业务调用能力:
- 工具可以是计算器、搜索引擎、数据库、API 接口等(比如查实时天气的接口);
- 普通 AI 只能 "说",但有了 Tool Calling,AI 可以根据问题判断 "我需要用工具",然后自己调用工具获取信息,再整理成答案。
- 例如你问 "今天北京的天气",AI 会调用天气 API拿到数据后告诉你 "今天北京晴,25℃"
工具的安装
找到工具这一栏,然后可以进行下载,下载会后即可使用,不过有很多工具需要三方授权才可以使用,比如,我们可以在dify中集成网页爬虫的能力和维基百科的能力,可以安装这两个插件

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

目前有5个工具可以使用
集成到智能体中使用
我们打开之前创建好的agent智能体,可以进行配置工具,如下图:

更新发布智能体之后,可以进行测试:

提示词:
你是问答助手,可以友好的回答用户提出的问题,提出专业问题的时候,先到工具wikipedia_search中进行查询,如果工具中没有再用大模型回答问题
Dify接入MCP
什么是MCP
MCP 全称是 "模型调用协议"(Model Calling Protocol),是一种 "通用规则":
- 不同的大模型(如 GPT、文心一言、讯飞星火)调用方式不一样(比如 API 接口格式不同);
- MCP 就是制定一套统一的 "沟通语言",让开发者用同一套代码就能调用各种大模型,不用为每个模型单独写适配代码,方便切换和管理。
**传统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 |

测试魔搭社区MCP
我们以魔搭举例来说明MCP的使用,打开魔搭中的MCP广场:https://www.modelscope.cn/home

这些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
输入高德秘钥之后,可以看到有配置信息可用
注意下面换这个,一定要是SSE,后续Dify是需要这种MCP配置的

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

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

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

分析生成过程
用户需要查询从北京建材城西路金燕龙到北京南站的路线。
针对该需求,我进行了详细拆解和规划,需要按照如下步骤来解决问题:
首先需要获取起点"北京建材城西路金燕龙"的精确经纬度坐标。
然后获取终点"北京南站"的精确经纬度坐标。
使用这两个坐标的经纬度,调用合适的路径规划工具(如驾车、公交、步行等)来获取路线信息。由于是城市内较长距离出行,通常公交或驾车较为合理,但用户未指定交通方式,我可以优先提供驾车路线,也可视情况补充其他方式。
首先我应当选择 @amap/amap-maps---maps_geo 工具,由于该工具可以将结构化地址解析为经纬度坐标,适用于获取"北京建材城西路金燕龙"的坐标。该工具的入参需要 address 参数,可选 city 参数以提高准确性。
🔧 调用 MCP 工具 [高德地图] @amap/amap-maps---maps_geo
我仔细查看了工具返回值,该工具的返回值符合我的要求,已成功获取"北京建材城西路金燕龙"的经纬度坐标为 116.341263,40.059304。
接下来,我需要获取终点"北京南站"的经纬度坐标。我将继续使用 @amap/amap-maps---maps_geo 工具进行地址解析。
🔧 调用 MCP 工具 [高德地图] @amap/amap-maps---maps_geo
我仔细查看了工具返回值,该工具的返回值符合我的要求,已成功获取"北京南站"的经纬度坐标为 116.378059,39.867679。
现在我已经获取了起点和终点的经纬度:
起点:建材城西路金燕龙(116.341263,40.059304)
终点:北京南站(116.378059,39.867679)
接下来,我需要查询从起点到终点的路线。由于这是城市内较长距离的出行,我将优先提供驾车路线。我应调用 @amap/amap-maps---maps_direction_driving 工具进行驾车路径规划。
🔧 调用 MCP 工具 [高德地图] @amap/amap-maps---maps_direction_driving
用户需要查询从北京建材城西路金燕龙到北京南站的路线。
针对该需求,我进行了详细拆解和规划,需要按照如下步骤来解决问题:
获取起点"北京建材城西路金燕龙"的经纬度坐标。
获取终点"北京南站"的经纬度坐标。
使用驾车路径规划工具获取路线详情。
我已经完成了上述步骤:
起点坐标:116.341263,40.059304(北京建材城西路金燕龙)
终点坐标:116.378059,39.867679(北京南站)
已调用驾车路径规划工具获取路线信息。
路线详情(驾车):
总距离:约 27.8 公里
预计耗时:约 39 分钟(2363 秒)
主要行驶步骤:
沿 建材城西路 向东行驶 117 米后左转调头。
继续沿 建材城西路 向西行驶约 1.2 公里,靠左进入主路。
左转进入 G6辅路,行驶约 1.1 公里后向左前方行驶。
进入 G6京藏高速,途经清河大桥,行驶约 4.2 公里通过收费站。
沿 G6京藏高速 经德胜门外大街、德胜门桥向南行驶约 7.4 公里。
在 德胜门桥 右转,进入 德胜门西大街。
进入 北二环,经北二环、西二环向西南行驶约 6.4 公里。
沿 西二环 向南行驶约 4.0 公里,靠左进入左岔路。
进入 南二环,向东行驶约 2.0 公里后右转进入辅路。
经 右安门东滨河路 行驶 353 米后右转进入 开阳路。
沿 开阳路 向南行驶 286 米后左转。
沿 南站幸福路 向东行驶 301 米,到达 北京南站。
该路线主要途经城市快速路和高速公路,建议避开早晚高峰以减少拥堵。如需公交或步行路线,可进一步查询。
测试生成doc/pdf文档
选择搜索插件 文档生成

点进去查看详情

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

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

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

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

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

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

- 添加问题分类节点

- 在两个分类中分别添加agent节点

- 高德地图agent的配置


另外一个节点是文本生成mcp,配置跟上述类似
- 结束节点

最终的流程如下:

测试:
