diff --git a/docs.json b/docs.json
index fd8485df..ac471a1b 100644
--- a/docs.json
+++ b/docs.json
@@ -367,8 +367,8 @@
"zh-cn/user-guide/knowledge-base/metadata",
"zh-cn/user-guide/knowledge-base/integrate-knowledge-within-application",
"zh-cn/user-guide/knowledge-base/retrieval-test-and-citation",
- "zh-cn/user-guide/knowledge-base/connect-external-knowledge-base",
- "zh-cn/user-guide/knowledge-base/external-knowledge-api-documentation"
+ "zh-cn/user-guide/knowledge-base/knowledge-base-creation/connect-external-knowledge-base",
+ "zh-cn/user-guide/knowledge-base/api-documentation/external-knowledge-api-documentation"
]
},
{
diff --git a/zh-cn/user-guide/build-app/agent.mdx b/zh-cn/user-guide/build-app/agent.mdx
new file mode 100644
index 00000000..aecb7744
--- /dev/null
+++ b/zh-cn/user-guide/build-app/agent.mdx
@@ -0,0 +1,64 @@
+---
+title: Agent
+version: '简体中文'
+---
+
+### 定义
+
+智能助手(Agent Assistant),利用大语言模型的推理能力,能够自主对复杂的人类任务进行目标规划、任务拆解、工具调用、过程迭代,并在没有人类干预的情况下完成任务。
+
+### 如何使用智能助手
+
+为了方便快速上手使用,您可以在“探索”中找到智能助手的应用模板,添加到自己的工作区,或者在此基础上进行自定义。在全新的 Dify 工作室中,你也可以从零编排一个专属于你自己的智能助手,帮助你完成财务报表分析、撰写报告、Logo 设计、旅程规划等任务。
+
+
+
+选择智能助手的推理模型,智能助手的任务完成能力取决于模型推理能力,我们建议在使用智能助手时选择推理能力更强的模型系列如 gpt-4 以获得更稳定的任务完成效果。
+
+
+
+你可以在“提示词”中编写智能助手的指令,为了能够达到更优的预期效果,你可以在指令中明确它的任务目标、工作流程、资源和限制等。
+
+
+
+### 添加助手需要的工具
+
+在“上下文”中,你可以添加智能助手可以用于查询的知识库工具,这将帮助它获取外部背景知识。
+
+在“工具”中,你可以添加需要使用的工具。工具可以扩展 LLM 的能力,比如联网搜索、科学计算或绘制图片,赋予并增强了 LLM 连接外部世界的能力。Dify 提供了两种工具类型:**第一方工具**和**自定义工具**。
+
+你可以直接使用 Dify 生态提供的第一方内置工具,或者轻松导入自定义的 API 工具(目前支持 OpenAPI / Swagger 和 OpenAI Plugin 规范)。
+
+
+
+“工具”功能允许用户借助外部能力,在 Dify 上创建出更加强大的 AI 应用。例如你可以为智能助理型应用(Agent)编排合适的工具,它可以通过任务推理、步骤拆解、调用工具完成复杂任务。
+
+另外工具也可以方便将你的应用与其他系统或服务连接,与外部环境交互。例如代码执行、对专属信息源的访问等。你只需要在对话框中谈及需要调用的某个工具的名字,即可自动调用该工具。
+
+
+
+### 配置 Agent
+
+在 Dify 上为智能助手提供了 Function calling(函数调用)和 ReAct 两种推理模式。已支持 Function Call 的模型系列如 gpt-3.5/gpt-4 拥有效果更佳、更稳定的表现,尚未支持 Function calling 的模型系列,我们支持了 ReAct 推理框架实现类似的效果。
+
+在 Agent 配置中,你可以修改助手的迭代次数限制。
+
+
+
+
+
+### 配置对话开场白
+
+您可以为智能助手配置一套会话开场白和开场问题,配置的对话开场白将在每次用户初次对话中展示助手可以完成什么样的任务,以及可以提出的问题示例。
+
+
+
+### 调试与预览
+
+编排完智能助手之后,你可以在发布成应用之前进行调试与预览,查看助手的任务完成效果。
+
+
+
+### 应用发布
+
+
diff --git a/zh-cn/user-guide/build-app/chatbot.mdx b/zh-cn/user-guide/build-app/chatbot.mdx
new file mode 100644
index 00000000..c1bfc2ea
--- /dev/null
+++ b/zh-cn/user-guide/build-app/chatbot.mdx
@@ -0,0 +1,93 @@
+---
+title: 对话型应用
+version: '简体中文'
+---
+
+对话型应用采用一问一答模式与用户持续对话。
+
+## 适用场景
+
+对话型应用可以用在客户服务、在线教育、医疗保健、金融服务等领域。这些应用可以帮助组织提高工作效率、减少人工成本和提供更好的用户体验。
+
+## 如何编排
+
+对话型应用的编排支持:对话前提示词,变量,上下文,开场白和下一步问题建议。
+
+下面以做一个 **面试官** 的应用为例来介绍编排对话型应用。
+
+### 创建应用
+
+在首页点击 "创建应用" 按钮创建应用。填上应用名称,应用类型选择**聊天助手**。
+
+
+
+### 编排应用
+
+创建应用后会自动跳转到应用概览页,你可以在此处为聊天应用设置变量、添加上下文以及额外的聊天功能。
+
+
+
+#### 应用编排
+
+**填写提示词**
+
+提示词用于约束 AI 给出专业的回复,让回应更加精确。你可以借助内置的提示生成器,编写合适的提示词。提示词内支持插入表单变量,例如 `{{input}}`。提示词中的变量的值会替换成用户填写的值。
+
+示例:
+1. 输入提示指令,要求给出一段面试场景的提示词。
+2. 右侧内容框将自动生成提示词。
+3. 你可以在提示词内插入自定义变量。
+
+
+
+为了更好的用户体验,可以加上对话开场白:`你好,{{name}}。我是你的面试官,Bob。你准备好了吗?`。点击页面底部的 "添加功能" 按钮,打开 "对话开场白" 的功能:
+
+
+
+编辑开场白时,还可以添加数个开场问题:
+
+
+
+#### 添加上下文
+
+如果想要让 AI 的对话范围局限在知识库内,例如企业内的客服话术规范,可以在"上下文"内引用知识库。
+
+
+
+### 调试
+
+在右侧填写用户输入项,输入内容进行调试。
+
+
+
+如果回答结果不理想,可以调整提示词和底层模型。你也可以使用多个模型同步进行调试,搭配出合适的配置。
+
+
+
+**多个模型进行调试:**
+
+如果使用单一模型调试时感到效率低下,你也可以使用 **"多个模型进行调试"** 功能,批量检视模型的回答效果。
+
+
+
+最多支持同时添加 4 个大模型。
+
+
+
+⚠️ 使用多模型调试功能时,如果仅看到部分大模型,这是因为暂未添加其它大模型的 Key。你可以在"增加新供应商"内手动添加多个模型的 Key。
+
+### 发布应用
+
+调试好应用后,点击右上角的 **"发布"** 按钮生成独立的 AI 应用。除了通过公开 URL 体验该应用,你也进行基于 APIs 的二次开发、嵌入至网站内等操作。详情请参考[发布应用](/zh-cn/user-guide/application-publishing/launch-your-webapp-quickly/web-app-settings)。
+
+如果想定制已发布的应用,可以 Fork 我们的开源的 WebApp 的模版。基于模版改成符合你的情景与风格需求的应用。
+
+## 常见问题
+
+**如何在聊天助手内添加第三方工具?**
+
+聊天助手类型应用不支持添加第三方工具,你可以在 Agent 类型应用内添加第三方工具。
+
+**如何在创建聊天助手应用时,使用元数据功能筛选知识库内文档?**
+
+如需了解如何使用元数据功能筛选文档,请参阅 [在应用内集成知识库](https://docs.dify.ai/zh-hans/guides/knowledge-base/integrate-knowledge-within-application) 中的“**使用元数据筛选知识 > 聊天助手**”章节。
diff --git a/zh-cn/user-guide/build-app/flow-app/additional-feature.mdx b/zh-cn/user-guide/build-app/flow-app/additional-feature.mdx
new file mode 100644
index 00000000..694b19c7
--- /dev/null
+++ b/zh-cn/user-guide/build-app/flow-app/additional-feature.mdx
@@ -0,0 +1,137 @@
+---
+title: 附加功能
+version: '简体中文'
+---
+
+Workflow 和 Chatflow 应用均支持开启附加功能以增强使用者的交互体验。例如添加文件上传入口、给 LLM 应用添加一段自我介绍或使用欢迎语,让应用使用者获得更加丰富的交互体验。
+
+点击应用右上角的 **"功能"** 按钮即可为应用添加更多功能。
+
+
+
+### Workflow
+
+> 不再推荐使用该方法为 Workflow 应用添加文件上传功能。建议应用开发者改用自定义文件变量为 Workflow 应用添加文件上传功能。
+
+Workflow 类型应用仅支持 **"图片上传"** 功能。开启后,Workflow 应用的使用页将出现图片上传入口。
+
+
+
+**用法:**
+
+**对于应用使用者而言:** 已开启图片上传功能的应用的使用页将出现上传按钮,点击按钮或粘贴文件链接即可完成图片上传,你将会收到 LLM 对于图片的回答。
+
+**对于应用开发者而言:** 开启文件图片上传功能后,使用者所上传的图片文件将存储在 `sys.files` 变量内。接下来添加 LLM 节点,选中具备视觉能力的大模型并在其中开启 VISION 功能,选择 `sys.files` 变量,使得 LLM 能够读取该图片文件。
+
+最后在 END 节点内选择 LLM 节点的输出变量即可完成设置。
+
+
+
+
+
+### Chatflow
+
+Chatflow 类型应用支持以下功能:
+
+* **对话开场白**
+
+ 让 AI 主动发送一段话,可以是欢迎语或 AI 的自我介绍,以拉近与使用者的距离。
+* **下一步问题建议**
+
+ 在对话完成后,自动添加下一步问题建议,以提升对话的话题深度与频率。
+* **文字转语音**
+
+ 在问答文字框中添加一个音频播放按钮,使用 TTS 服务(需在[模型供应商](user-guide/getting-started/readme/model-providers.md)内置)并朗读其中的文字。
+* **文件上传**
+
+ 支持以下文件类型:文档、图片、音频、视频以及其它文件类型。开启此功能后,应用使用者可以在应用对话的过程中随时上传并更新文件。最多支持同时上传 10 个文件,每个文件的大小上限为 15MB。
+
+
+
+
+
+* **引用和归属**
+
+ 常用于配合["知识检索"](node/knowledge-retrieval.md)节点共同使用,显示 LLM 给出答复的参考源文档及归属部分。
+* **内容审查**
+
+ 支持使用审查 API 维护敏感词库,确保 LLM 能够回应和输出安全内容,详细说明请参考[敏感内容审查](../application-orchestrate/app-toolkits/moderation-tool.md)。
+
+**用法:**
+
+除了 **文件上传** 功能以外,Chatflow 应用内的其它功能用法较为简单,开启后可以在应用交互页直观使用。
+
+本章节将主要介绍 **文件上传** 功能的具体用法:
+
+**对于应用使用者而言:** 已开启文件上传功能的 Chatflow 应用将会在对话框右侧出现 "回形针" 标识,点击后即可上传文件并与 LLM 交互。
+
+
+
+
+
+**对于应用开发者而言:**
+
+开启文件上传功能后,使用者发送的文件将上传至 `sys.files` 变量内。用户在同一场对话发送新的消息后,该变量将更新。
+
+根据上传的文件差异,不同类型的文件对应不同的应用编排方式。
+
+* **文档文件**
+
+LLM 并不具备直接读取文档文件的能力,因此需要使用 [文档提取器](node/doc-extractor.md) 节点预处理 `sys.files` 变量内的文件。编排步骤如下:
+
+1. 开启 Features 功能,并在文件类型中仅勾选 "文档"。
+2. 在[文档提取器](node/doc-extractor.md)节点的输入变量中选中 `sys.files` 变量。
+3. 添加 LLM 节点,在系统提示词中选中文档提取器节点的输出变量。
+4. 在末尾添加 "直接回复" 节点,填写 LLM 节点的输出变量。
+
+使用此方法搭建出的 Chatflow 应用无法记忆已上传的文件内容。应用使用者每次对话时都需要在聊天框中上传文档文件。如果你希望应用能够记忆已上传的文件,请参考 [《文件上传:在开始节点添加变量》](file-upload.md#fang-fa-er-zai-tian-jia-wen-jian-bian-liang)。
+
+
+
+
+
+* **图片文件**
+
+部分 LLM 支持直接获取图片中的信息,因此无需添加额外节点处理图片。
+
+编排步骤如下:
+
+1. 开启 Features 功能,并在文件类型中仅勾选 "图片"。
+2. 添加 LLM 节点,启 VISION 功能并选择 `sys.files` 变量。
+3. 在末尾添加 "直接回复" 节点,填写 LLM 节点的输出变量。
+
+
+
+
+
+* **混合文件类型**
+
+若希望应用具备同时处理文档文件 + 图片文件的能力,需要用到 [列表操作](node/list-operator.md) 节点预处理 `sys.files` 变量内的文件,提取更加精细的变量后发送至对应的处理节点。编排步骤如下:
+
+1. 开启 Features 功能,并在文件类型中勾选 "图片" + "文档文件" 类型。
+2. 添加两个列表操作节点,在 "过滤" 条件中提取图片与文档变量。
+3. 提取文档文件变量,传递至 "文档提取器" 节点;提取图片文件变量,传递至 "LLM" 节点。
+4. 在末尾添加 "直接回复" 节点,填写 LLM 节点的输出变量。
+
+应用使用者同时上传文档文件和图片后,文档文件自动分流至文档提取器节点,图片文件自动分流至 LLM 节点以实现对于文件的共同处理。
+
+
+
+
+
+* **音视频文件**
+
+LLM 尚未支持直接读取音视频文件,Dify 平台也尚未内置相关文件处理工具。应用开发者可以参考 [外部数据工具](../extension/api-based-extension/external-data-tool.md) 接入工具自行处理文件信息。
+
diff --git a/zh-cn/user-guide/build-app/flow-app/concepts.mdx b/zh-cn/user-guide/build-app/flow-app/concepts.mdx
new file mode 100644
index 00000000..e98680d4
--- /dev/null
+++ b/zh-cn/user-guide/build-app/flow-app/concepts.mdx
@@ -0,0 +1,34 @@
+---
+title: 关键概念
+version: '简体中文'
+---
+
+### 节点
+
+**节点是工作流的关键构成**,通过连接不同功能的节点,执行工作流的一系列操作。
+
+工作流的核心节点请查看[节点 - 开始](./nodes/start)。
+
+***
+
+### 变量
+
+**变量用于串联工作流内前后节点的输入与输出**,实现流程中的复杂处理逻辑,包含系统变量、环境变量和会话变量。详细说明请参考 [变量](./variables)。
+
+***
+
+### Chatflow 和 Workflow
+
+**应用场景**
+
+* **Chatflow**:面向对话类情景,包括客户服务、语义搜索、以及其他需要在构建响应时进行多步逻辑的对话式应用程序。
+* **Workflow**:面向自动化和批处理情景,适合高质量翻译、数据分析、内容生成、电子邮件自动化等应用程序。
+
+**使用入口**
+
+**可用节点差异**
+
+1. End 节点属于 Workflow 的结束节点,仅可在流程结束时选择。
+2. Answer 节点属于 Chatflow ,用于流式输出文本内容,并支持在流程中间步骤输出。
+3. Chatflow 内置聊天记忆(Memory),用于存储和传递多轮对话的历史消息,可在 LLM 、问题分类等节点内开启,Workflow 无 Memory 相关配置,无法开启。
+4. Chatflow 的开始节点内置变量包括:`sys.query`,`sys.files`,`sys.conversation_id`,`sys.user_id`。Workflow 的开始节点内置变量包括:`sys.files`,`sys.user_id`
diff --git a/zh-cn/user-guide/build-app/flow-app/create-flow-app.mdx b/zh-cn/user-guide/build-app/flow-app/create-flow-app.mdx
new file mode 100644
index 00000000..db3db99d
--- /dev/null
+++ b/zh-cn/user-guide/build-app/flow-app/create-flow-app.mdx
@@ -0,0 +1,37 @@
+---
+title: 创建应用
+version: '简体中文'
+---
+
+## Chatflow
+
+**适用场景:**
+
+面向对话类情景,包括客户服务、语义搜索、以及其他需要在构建响应时进行多步逻辑的对话式应用程序。该类型应用的特点在于支持对生成的结果进行多轮对话交互,调整生成的结果。
+
+常见的交互路径:给出指令 → 生成内容 → 就内容进行多次讨论 → 重新生成结果 → 结束。
+
+在 "工作室" 页,轻点左侧 “创建空白应用”,然后选择 “聊天助手” 中的 “工作流编排”。
+
+
+
+## Workflow
+
+**适用场景:**
+
+面向自动化和批处理情景,适合高质量翻译、数据分析、内容生成、电子邮件自动化等应用程序。该类型应用无法对生成的结果进行多轮对话交互。
+
+常见的交互路径:给出指令 → 生成内容 → 结束
+
+在 "工作室" 页,轻点左侧 “创建空白应用”,然后选择 “工作流” 完成创建。
+
+
+
+## 两者之间的差异
+
+**应用类型差异**
+
+1. End 节点属于 Workflow 的结束节点,仅可在流程结束时选择。
+2. Answer 节点属于 Chatflow ,用于流式输出文本内容,并支持在流程中间步骤输出。
+3. Chatflow 内置聊天记忆(Memory),用于存储和传递多轮对话的历史消息,可在 LLM 、问题分类等节点内开启,Workflow 无 Memory 相关配置,无法开启。
+4. Chatflow 的开始节点内置变量包括:`sys.query`,`sys.files`,`sys.conversation_id`,`sys.user_id`。Workflow 的开始节点内置变量包括:`sys.files`,`sys.user_id`
diff --git a/zh-cn/user-guide/build-app/flow-app/file-upload.mdx b/zh-cn/user-guide/build-app/flow-app/file-upload.mdx
new file mode 100644
index 00000000..c3512840
--- /dev/null
+++ b/zh-cn/user-guide/build-app/flow-app/file-upload.mdx
@@ -0,0 +1,181 @@
+---
+title: 文件上传
+version: '简体中文'
+---
+
+相较于聊天文本,文档文件能够承载大量的信息,例如学术报告、法律合同。受限于 LLM 自身仅能够支持文件或图片,难以获取文件内更加丰富的上下文信息,应用的使用者不得不手动复制粘贴大量信息与 LLM 对话,增加了许多不必要的使用成本。
+
+文件上传功能允许将文件以 File variables 的形式在工作流应用中上传、解析、引用、和下载。**开发者现可轻松构建能理解和处理图片、音频、视频的复杂工作。**
+
+### 应用场景
+
+1. **文档分析**: 上传学术研究报告文件,LLM 可以快速总结要点,根据文件内容回答相关问题。
+2. **代码审查**: 开发者上传代码文件,获得优化建议与 bug 检测。
+3. **学习辅导**: 学生上传作业或学习资料,获得个性化的解释和指导。
+4. **法律援助**: 上传完整的合同文本,由 LLM 协助审查条款,指出潜在风险。
+
+### 文件上传与知识库的区别
+
+文件上传和知识库都是为 LLM 提供额外上下文信息的方式,但它们在使用场景和功能上有明显区别:
+
+1. **信息来源**:
+ * 文件上传:允许终端用户在对话过程中动态上传文件,提供即时的、个性化的上下文信息。
+ * 知识库:由应用开发者预先设置和管理,包含相对固定的信息集合。
+2. **使用灵活性**:
+ * 文件上传:更加灵活,用户可以根据具体需求上传不同类型的文件。
+ * 知识库:内容相对固定,但可以被多个会话重复利用。
+3. **信息处理**:
+ * 文件上传:需要通过文档提取器或其他工具将文件内容转换为 LLM 可理解的文本。
+ * 知识库:通常已经过预处理和索引,可以直接进行检索。
+4. **应用场景**:
+ * 文件上传:适用于需要处理用户特定文档的场景,如文档分析、个性化学习辅导等。
+ * 知识库:适用于需要访问大量预设信息的场景,如客户服务、产品咨询等。
+5. **数据持久性**:
+ * 文件上传:通常为临时使用,不会长期存储在系统中。
+ * 知识库:作为应用的一部分长期存在,可以持续更新和维护。
+
+### 快速开始
+
+Dify 支持在 [ChatFlow](key-concept.md#chatflow-he-workflow) 和 [WorkFlow](key-concept.md#chatflow-he-workflow) 类型应用中上传文件,并通过[变量](variables.md)交由 LLM 处理。应用开发者可以参考以下方法为应用开启文件上传功能:
+
+* 在 Workflow 应用中:
+ * 在 ["开始节点"](node/start.md) 添加文件变量
+* 在 ChatFlow 应用中:
+ * 在 ["附加功能"](additional-features.md) 中开启文件上传,允许在聊天窗中直接上传文件
+ * 在 ["开始节点"](node/start.md) 添加文件变量
+ * 注意:这两种方法可以同时配置,它们是彼此独立的。附加功能中的文件上传设置(包括上传方式和数量限制)不会影响开始节点中的文件变量。例如只想通过开始节点创建文件变量,则无需开启附加功能中的文件上传功能。
+
+这两种方法为应用提供了灵活的文件上传选项,以满足不同场景的需求。
+
+#### File Types
+
+file variables 和 array[file] variables 支持以下文件类型与格式:
+
+| 文件类型 | 支持格式 |
+|---------|---------|
+| 文档 | TXT, MARKDOWN, PDF, HTML, XLSX, XLS, DOCX, CSV, EML, MSG, PPTX, PPT, XML, EPUB. |
+| 图片 | JPG, JPEG, PNG, GIF, WEBP, SVG. |
+| 音频 | MP3, M4A, WAV, WEBM, AMR. |
+| 视频 | MP4, MOV, MPEG, MPGA. |
+| 其他 | 自定义后缀名支持 |
+
+#### 方法一:在应用聊天框中开启文件上传(仅适用于 Chatflow)
+
+1. 点击 Chatflow 应用右上角的 **"功能"** 按钮即可为应用添加更多功能。
+
+ 开启此功能后,应用使用者可以在应用对话的过程中随时上传并更新文件。最多支持同时上传 10 个文件,每个文件的大小上限为 15MB。
+
+
+
+
+
+开启该功能并不意味着赋予 LLM 直接读取文件的能力,还需要配备[**文档提取器**](node/doc-extractor.md)将文档解析为文本供 LLM 理解。
+
+* 对于音频文件,可以使用 gpt-4o-audio-preview 等支持多模态输入的模型直接处理音频,无需额外的提取器。
+* 对于视频和其他文件类型,暂无对应的提取器,需要应用开发者接入[外部工具](../tools/advanced-tool-integration.md)进行处理
+
+2. 添加[文档提取器](node/doc-extractor.md)节点,在输入变量中选中 `sys.files` 变量。
+3. 添加 LLM 节点,在系统提示词中选中文档提取器节点的输出变量。
+4. 在末尾添加 "直接回复" 节点,填写 LLM 节点的输出变量。
+
+
+
+
+
+开启后,用户可以在对话框中上传文件并进行对话。但通过此方式, LLM 应用并不具备记忆文件内容的能力,每次对话时需要上传文件。
+
+
+
+
+
+若希望 LLM 能够在对话中记忆文件内容,请参考下文。
+
+#### 方法二:通过添加文件变量开启文件上传功能
+
+#### 1. 在"开始"节点添加文件变量
+
+在应用的["开始"](node/start.md)节点内添加输入字段,选择 **"单文件"** 或 **"文件列表"** 字段类型的变量。
+
+
+
+* **单文件**
+
+ 仅允许应用使用者上传单个文件。
+* **文件列表**
+
+ 允许应用使用者单词批量上传多个文件。
+
+> 为了便于操作,将使用单文件变量作为示例。
+
+#### 文件解析
+
+文件变量的使用方式主要分为两种:
+
+1. 使用工具节点转换文件内容:
+ * 对于文档类型的文件,可以使用"文档提取器"节点将文件内容转换为文本形式。
+ * 这种方法适用于需要将文件内容解析为模型可理解的格式(如 string、array[string] 等)的情况。
+2. 直接在 LLM 节点中使用文件变量:
+ * 对于某些特定类型的文件(如图片),可以在 LLM 节点中直接使用文件变量。
+ * 例如,对于图片类型的 file variables,可以在 LLM 节点中启用 vision 功能,然后在变量选择器中直接引用对应的文件变量。
+
+选择哪种方式取决于文件类型和您的具体需求。接下来,我们将详细介绍这两种方法的具体操作步骤。
+
+#### 2. 添加文档提取器节点
+
+上传文件后将存储至单文件变量内,LLM 暂不支持直接读取变量中的文件。因此需要先添加 [**"文档提取器"**](node/doc-extractor.md)节点,从已上传的文档文件内提取内容并发送至 LLM 节点完成信息处理。
+
+将"开始"节点内的文件变量作为 **"文档提取器"** 节点的输入变量。
+
+
+
+
+
+将"文档提取器"节点的输出变量填写至 LLM 节点的系统提示词内。
+
+
+
+
+
+完成上述设置后,应用的使用者可以在 WebApp 内粘贴文件 URL 或上传本地文件,然后就文档内容与 LLM 展开互动。应用使用者可以在对话过程中随时替换文件,LLM 将获取最新的文件内容。
+
+
+
+
+
+**在 LLM 节点中引用文件变量**
+
+对于某些特定类型的文件(如图片),可以在 LLM 节点中直接使用文件变量。这种方法特别适用于需要视觉分析的场景。以下是具体步骤:
+
+1. 在 LLM 节点中,启用 vision 功能。这允许模型处理图像输入(模型需要支持 vision)。
+2. 在 LLM 节点的变量选择器中,直接引用之前创建的文件变量如果是通过附加功能开启的文件上传,则选择 `sys.files` 变量。
+3. 在系统提示词中,指导模型如何处理图像输入。例如,你可以要求模型描述图像内容或回答关于图像的问题。
+
+下面是一个示例配置:
+
+
+
+
+
+需要注意的是,直接在 LLM 节点中使用文件变量时,我们需要确保文件变量仅包含图片文件,否则可能会导致错误。如果用户可能上传不同类型的文件,我们需要使用列表操作来进行过滤。
+
+#### 文件下载
+
+将文件变量放置到 answer 节点或者 end 节点中,当应用运行到该节点都时候将会在会话框中提供文件下载卡片。点击卡片即可下载文件。
+
+
+
+
+
+### 进阶使用
+
+若希望应用能够支持上传多种文件,例如允许用户同时上传文档文件、图片和音视频文件,此时需要在 "开始节点" 中添加 "文件列表" 变量,并通过"列表操作"节点针对不同的文件类型进行处理。详细说明请参考[列表操作](node/list-operator.md)节点。
+
+
+
+
diff --git a/zh-cn/user-guide/build-app/flow-app/nodes/README.mdx b/zh-cn/user-guide/build-app/flow-app/nodes/README.mdx
new file mode 100644
index 00000000..836abd41
--- /dev/null
+++ b/zh-cn/user-guide/build-app/flow-app/nodes/README.mdx
@@ -0,0 +1,7 @@
+# 节点说明
+
+**节点是工作流中的关键构成**,通过连接不同功能的节点,执行工作流的一系列操作。
+
+### 核心节点
+
+
| 开始(Start) | 定义一个 workflow 流程启动的初始参数。 | |
| 结束(End) | 定义一个 workflow 流程结束的最终输出内容。 | |
| 回复(Answer) | 定义一个 Chatflow 流程中的回复内容。 | |
| 大语言模型(LLM) | 调用大语言模型回答问题或者对自然语言进行处理。 | |
| 知识检索(Knowledge Retrieval) | 从知识库中检索与用户问题相关的文本内容,可作为下游 LLM 节点的上下文。 | |
| 问题分类(Question Classifier) | 通过定义分类描述,LLM 能够根据用户输入选择与之相匹配的分类。 | |
| 条件分支(IF/ELSE) | 允许你根据 if/else 条件将 workflow 拆分成两个分支。 | |
| 代码执行(Code) | 运行 Python / NodeJS 代码以在工作流程中执行数据转换等自定义逻辑。 | |
| 模板转换(Template) | 允许借助 Jinja2 的 Python 模板语言灵活地进行数据转换、文本处理等。 | |
| 变量聚合(Variable Aggregator) | 将多路分支的变量聚合为一个变量,以实现下游节点统一配置。 | |
| 参数提取器(Parameter Extractor) | 利用 LLM 从自然语言推理并提取结构化参数,用于后置的工具调用或 HTTP 请求。 | |
| 迭代(Iteration) | 对列表对象执行多次步骤直至输出所有结果。 | |
| HTTP 请求(HTTP Request) | 允许通过 HTTP 协议发送服务器请求,适用于获取外部检索结果、webhook、生成图片等情景。 | |
| 工具(Tools) | 允许在工作流内调用 Dify 内置工具、自定义工具、子工作流等。 | |
| 变量赋值(Variable Assigner) | 变量赋值节点用于向可写入变量(例如会话变量)进行变量赋值。 |
+
+
+
+***
+
+### 2 场景
+
+这个节点的一个实用特性是能够根据场景需要,在请求的不同部分动态插入变量。比如在处理客户评价请求时,你可以将用户名或客户ID、评价内容等变量嵌入到请求中,以定制化自动回复信息或获取特定客户信息并发送相关资源至特定的服务器。
+
+
+
+
+
+HTTP 请求的返回值包括响应体、状态码、响应头和文件。值得注意的是,如果响应中包含了文件(目前仅支持图片类型),这个节点能够自动将文件保存下来,供流程后续步骤使用。这样的设计不仅提高了处理效率,也使得处理带有文件的响应变得简单直接。
diff --git a/zh-cn/user-guide/build-app/flow-app/nodes/ifelse.mdx b/zh-cn/user-guide/build-app/flow-app/nodes/ifelse.mdx
new file mode 100644
index 00000000..680f836a
--- /dev/null
+++ b/zh-cn/user-guide/build-app/flow-app/nodes/ifelse.mdx
@@ -0,0 +1,55 @@
+---
+title: 条件分支
+version: '简体中文'
+---
+
+### 定义
+
+根据 If/else/elif 条件将 Chatflow / Workflow 流程拆分成多个分支。
+
+### 节点功能
+
+条件分支的运行机制包含以下六个路径:
+
+* IF 条件:选择变量,设置条件和满足条件的值;
+* IF 条件判断为 `True`,执行 IF 路径;
+* IF 条件判断为 `False`,执行 ELSE 路径;
+* ELIF 条件判断为 `True`,执行 ELIF 路径;
+* ELIF 条件判断为 `False`,继续判断下一个 ELIF 路径或执行最后的 ELSE 路径;
+
+**条件类型**
+
+支持设置以下条件类型:
+
+* 包含(Contains)
+* 不包含(Not contains)
+* 开始是(Start with)
+* 结束是(End with)
+* 是(Is)
+* 不是(Is not)
+* 为空(Is empty)
+* 不为空(Is not empty)
+
+***
+
+### 场景
+
+
+
+
+
+以**文本总结工作流**作为示例说明各个条件:
+
+* IF 条件: 选择开始节点中的 `summarystyle` 变量,条件为**包含** `技术`;
+* IF 条件判断为 `True`,执行 IF 路径,通过知识检索节点查询技术相关知识再到 LLM 节点回复(图中上半部分);
+* IF 条件判断为 `False`,但添加了 `ELIF` 条件,即 `summarystyle` 变量输入**不包含**`技术`,但 `ELIF` 条件内包含 `科技`,会检查 `ELIF` 内的条件是否为 `True`,然后执行路径内定义的步骤;
+* `ELIF` 内的条件为 `False`,即输入变量既不不包含 `技术`,也不包含 `科技`,继续判断下一个 ELIF 路径或执行最后的 ELSE 路径;
+* IF 条件判断为 `False`,即 `summarystyle` 变量输入**不包含** `技术`,执行 ELSE 路径,通过 LLM2 节点进行回复(图中下半部分);
+
+**多重条件判断**
+
+涉及复杂的条件判断时,可以设置多重条件判断,在条件之间设置 **AND** 或者 **OR**,即在条件之间取**交集**或者**并集**。
+
+
+
+
diff --git a/zh-cn/user-guide/build-app/flow-app/nodes/iteration.mdx b/zh-cn/user-guide/build-app/flow-app/nodes/iteration.mdx
new file mode 100644
index 00000000..e9e00184
--- /dev/null
+++ b/zh-cn/user-guide/build-app/flow-app/nodes/iteration.mdx
@@ -0,0 +1,186 @@
+---
+title: 迭代
+version: '简体中文'
+---
+
+### 定义
+
+对数组执行多次步骤直至输出所有结果。
+
+迭代步骤在列表中的每个条目(item)上执行相同的步骤。使用迭代的条件是确保输入值已经格式化为列表对象。迭代节点允许 AI 工作流处理更复杂的处理逻辑,迭代节点是循环节点的友好版本,它在自定义程度上做出了一些妥协,以便非技术用户能够快速入门。
+
+***
+
+### 场景
+
+#### **示例1:长文章迭代生成器**
+
+
+
+
+
+1. 在 **开始节点** 内输入故事标题和大纲
+2. 使用 **LLM 节点=** 基于用户输入的故事标题和大纲,让 LLM 开始编写内容
+3. 使用 **参数提取节点** 将 LLM 输出的完整内容转换成数组格式
+4. 通过 **迭代节点** 包裹的 **LLM 节点** 循环多次生成各章节内容
+5. 将 **直接回复** 节点添加在迭代节点内部,实现在每轮迭代生成之后流式输出
+
+**具体配置步骤**
+
+1. 在 **开始节点** 配置故事标题(title)和大纲(outline);
+
+
+
+
+
+2. 选择 **LLM 节点** 基于用户输入的故事标题和大纲,让 LLM 开始编写文本;
+
+
+
+
+
+3. 选择 **参数提取节点**,将故事文本转换成为数组(Array)结构。提取参数为 `sections` ,参数类型为 `Array[Object]`
+
+
+
+
+
+> 参数提取效果受模型推理能力和指令影响,使用推理能力更强的模型,在**指令**内增加示例可以提高参数提取的效果。
+
+4. 将数组格式的故事大纲作为迭代节点的输入,在迭代节点内部使用 **LLM 节点** 进行处理
+
+
+
+
+
+在 LLM 节点内配置输入变量 `GenerateOverallOutline/output` 和 `Iteration/item`
+
+
+
+
+
+> 迭代的内置变量:`items[object]` 和 `index[number]`
+>
+> `items[object] 代表以每轮迭代的输入条目;`
+>
+> `index[number] 代表当前迭代的轮次;`
+
+5. 在迭代节点内部配置 **直接回复节点** ,可以实现在每轮迭代生成之后流式输出。
+
+
+
+
+
+6. 完整调试和预览
+
+
+
+
+
+#### **示例 2:长文章迭代生成器(另一种编排方式)**
+
+
+
+
+
+* 在 **开始节点** 内输入故事标题和大纲
+* 使用 **LLM 节点** 生成文章小标题,以及小标题对应的内容
+* 使用 **代码节点** 将完整内容转换成数组格式
+* 通过 **迭代节点** 包裹的 **LLM 节点** 循环多次生成各章节内容
+* 使用 **模板转换** 节点将迭代节点输出的字符串数组转换为字符串
+* 在最后添加 **直接回复节点** 将转换后的字符串直接输出
+
+### 什么是数组内容
+
+列表是一种特定的数据类型,其中的元素用逗号分隔,以 `[` 开头,以 `]` 结尾。例如:
+
+**数字型:**
+
+```
+[0,1,2,3,4,5]
+```
+
+**字符串型:**
+
+```
+["monday", "Tuesday", "Wednesday", "Thursday"]
+```
+
+**JSON 对象:**
+
+```
+[
+ {
+ "name": "Alice",
+ "age": 30,
+ "email": "alice@example.com"
+ },
+ {
+ "name": "Bob",
+ "age": 25,
+ "email": "bob@example.com"
+ },
+ {
+ "name": "Charlie",
+ "age": 35,
+ "email": "charlie@example.com"
+ }
+]
+```
+
+***
+
+### 支持返回数组的节点
+
+* 代码节点
+* 参数提取
+* 知识库检索
+* 迭代
+* 工具
+* HTTP 请求
+
+### 如何获取数组格式的内容
+
+**使用 CODE 节点返回**
+
+
+
+
+
+**使用 参数提取 节点返回**
+
+
+
+
+
+### 如何将数组转换为文本
+
+迭代节点的输出变量为数组格式,无法直接输出。你可以使用一个简单的步骤将数组转换回文本。
+
+**使用代码节点转换**
+
+
+
+
+
+代码示例:
+
+```python
+def main(articleSections: list):
+ data = articleSections
+ return {
+ "result": "\n".join(data)
+ }
+```
+
+**使用模板节点转换**
+
+
+
+
+
+代码示例:
+
+```django
+{{ articleSections | join("\n") }}
+```
\ No newline at end of file
diff --git a/zh-cn/user-guide/build-app/flow-app/nodes/knowledge-retrieval.mdx b/zh-cn/user-guide/build-app/flow-app/nodes/knowledge-retrieval.mdx
new file mode 100644
index 00000000..a45dc237
--- /dev/null
+++ b/zh-cn/user-guide/build-app/flow-app/nodes/knowledge-retrieval.mdx
@@ -0,0 +1,53 @@
+---
+title: 知识检索
+version: '简体中文'
+---
+
+
+### 定义
+
+从知识库中检索与用户问题相关的文本内容,可作为下游 LLM 节点的上下文来使用。
+
+***
+
+### 应用场景
+
+常见情景:构建基于外部数据/知识的 AI 问答系统(RAG)。了解更多关于 RAG 的[基本概念](../../../learn-more/extended-reading/retrieval-augment/)。
+
+下图为一个最基础的知识库问答应用示例,该流程的执行逻辑为:知识库检索作为 LLM 节点的前置步骤,在用户问题传递至 LLM 节点之前,先在知识检索节点内将匹配用户问题最相关的文本内容并召回,随后在 LLM 节点内将用户问题与检索到的上下文一同作为输入,让 LLM 根据检索内容来回复问题。
+
+
+
+***
+
+### 配置指引
+
+**配置流程:**
+
+1. 选择查询变量。查询变量通常代表用户输入的问题,该变量可以作为输入项并检索知识库中的相关文本分段。在常见的对话类应用中一般将开始节点的 `sys.query` 作为查询变量,知识库所能接受的最大查询内容为 200 字符;
+2. 选择需要查询的知识库,可选知识库需要在 Dify 知识库内预先[创建](../../knowledge-base/create-knowledge-and-upload-documents/);
+3. 在 元数据筛选 板块中配置元数据的筛选条件,使用元数据功能筛选知识库内的文档。详情请参阅[在应用内集成知识库](https://docs.dify.ai/zh-hans/guides/knowledge-base/integrate-knowledge-within-application)中的 **使用元数据筛选知识** 章节。
+4. 指定[召回模式](../../../learn-more/extended-reading/retrieval-augment/retrieval.md)。自 9 月 1 日后,知识库的召回模式将自动切换为多路召回,不再建议使用 N 选 1 召回模式;
+5. 连接并配置下游节点,一般为 LLM 节点;
+
+
+
+**输出变量**
+
+
+
+知识检索的输出变量 `result` 为从知识库中检索到的相关文本分段。其变量数据结构中包含了分段内容、标题、链接、图标、元数据信息。
+
+**配置下游节点**
+
+在常见的对话类应用中,知识库检索的下游节点一般为 LLM 节点,知识检索的**输出变量** `result` 需要配置在 LLM 节点中的 **上下文变量** 内关联赋值。关联后你可以在提示词的合适位置插入 **上下文变量**。
+
+
+
+
+***
+
+### 应用场景
+
+LLM 节点是 Chatflow/Workflow 的核心节点。该节点能够利用大语言模型的对话/生成/分类/处理等能力,根据给定的提示词处理广泛的任务类型,并能够在工作流的不同环节使用。
+
+* **意图识别**,在客服对话情景中,对用户问题进行意图识别和分类,导向下游不同的流程。
+* **文本生成**,在文章生成情景中,作为内容生成的节点,根据主题、关键词生成符合的文本内容。
+* **内容分类**,在邮件批处理情景中,对邮件的类型进行自动化分类,如咨询/投诉/垃圾邮件。
+* **文本转换**,在文本翻译情景中,将用户提供的文本内容翻译成指定语言。
+* **代码生成**,在辅助编程情景中,根据用户的要求生成指定的业务代码,编写测试用例。
+* **RAG**,在知识库问答情景中,将检索到的相关知识和用户问题重新组织回复问题。
+* **图片理解**,使用 vision 能力的多模态模型,能对图像内的信息进行理解和问答。
+
+选择合适的模型,编写提示词,你可以在 Chatflow/Workflow 中构建出强大、可靠的解决方案。
+
+***
+
+### 配置示例
+
+在应用编辑页中,点击鼠标右键或轻点上一节点末尾的 + 号,添加节点并选择 LLM。
+
+
+
+
+
+**配置步骤:**
+
+1. **选择模型**,Dify 提供了全球主流模型的[支持](user-guide/getting-started/readme/model-providers.md),包括 OpenAI 的 GPT 系列、Anthropic 的 Claude 系列、Google 的 Gemini 系列等,选择一个模型取决于其推理能力、成本、响应速度、上下文窗口等因素,你需要根据场景需求和任务类型选择合适的模型。
+
+> 如果你是初次使用 Dify ,在 LLM 节点选择模型之前,需要在 **系统设置—模型供应商** 内提前完成[模型配置](../../model-configuration/)。
+
+2. **配置模型参数**,模型参数用于控制模型的生成结果,例如温度、TopP,最大标记、回复格式等,为了方便选择系统同时提供了 3 套预设参数:创意,平衡和精确。如果你对以上参数并不熟悉,建议选择默认设置。若希望应用具备图片分析能力,请选择具备视觉能力的模型。
+3. **填写上下文(可选)**,上下文可以理解为向 LLM 提供的背景信息,常用于填写[知识检索](knowledge-retrieval.md)的输出变量。
+4. **编写提示词**,LLM 节点提供了一个易用的提示词编排页面,选择聊天模型或补全模型,会显示不同的提示词编排结构。如果选择聊天模型(Chat model),你可以自定义系统提示词(SYSTEM)/用户(USER)/ 助手(ASSISTANT)三部分内容。
+
+
+
+
+
+如果在编写系统提示词(SYSTEM)时没有好的思路,也可以使用提示生成器功能,借助 AI 能力快速生成适合实际业务场景的提示词。
+
+
+
+
+
+在提示词编辑器中,你可以通过输入 **"/"** 呼出 **变量插入菜单**,将 **特殊变量块** 或者 **上游节点变量** 插入到提示词中作为上下文内容。
+
+
+
+
+
+5. **高级设置**,可以开关记忆功能并设置记忆窗口、开关 Vision 功能或者使用 Jinja-2 模版语言来进行更复杂的提示词等。
+
+***
+
+### 特殊变量说明
+
+**上下文变量**
+
+上下文变量是一种特殊变量类型,用于向 LLM 提供背景信息,常用于在知识检索场景下使用。详细说明请参考[知识检索节点](knowledge-retrieval.md)。
+
+**图片文件变量**
+
+具备视觉能力的 LLM 可以通过变量读取应用使用者所上传的图片。开启 VISION 后,选择图片文件的输出变量完成设置。
+
+
+
+
+
+**会话历史**
+
+为了在文本补全类模型(例如 gpt-3.5-turbo-Instruct)内实现聊天型应用的对话记忆,Dify 在原[提示词专家模式(已下线)](user-guide/learn-more/extended-reading/prompt-engineering/prompt-engineering-1/)内设计了会话历史变量,该变量沿用至 Chatflow 的 LLM 节点内,用于在提示词中插入 AI 与用户之间的聊天历史,帮助 LLM 理解对话上文。
+
+> 会话历史变量应用并不广泛,仅在 Chatflow 中选择文本补全类模型时可以插入使用。
+
+
+
+
+
+**模型参数**
+
+模型的参数会影响模型的输出效果。不同模型的参数会有所区别。下图为`gpt-4`的参数列表。
+
+
+
+
+
+主要的参数名词解释如下:
+
+* **温度:** 通常是0-1的一个值,控制随机性。温度越接近0,结果越确定和重复,温度越接近1,结果越随机。
+* **Top P:** 控制结果的多样性。模型根据概率从候选词中选择,确保累积概率不超过预设的阈值P。
+* **存在惩罚:** 用于减少重复生成同一实体或信息,通过对已经生成的内容施加惩罚,使模型倾向于生成新的或不同的内容。参数值增加时,对于已经生成过的内容,模型在后续生成中被施加更大的惩罚,生成重复内容的可能性越低。
+* **频率惩罚:** 对过于频繁出现的词或短语施加惩罚,通过降低这些词的生成概率。随着参数值的增加,对频繁出现的词或短语施加更大的惩罚。较高的参数值会减少这些词的出现频率,从而增加文本的词汇多样性。
+
+如果你不理解这些参数是什么,可以选择**加载预设**,从创意、平衡、精确三种预设中选择。
+
+
+
+
+
+***
+
+### 高级功能
+
+**记忆:** 开启记忆后问题分类器的每次输入将包含对话中的聊天历史,以帮助 LLM 理解上文,提高对话交互中的问题理解能力。
+
+**记忆窗口:** 记忆窗口关闭时,系统会根据模型上下文窗口动态过滤聊天历史的传递数量;打开时用户可以精确控制聊天历史的传递数量(对数)。
+
+**对话角色名设置:** 由于模型在训练阶段的差异,不同模型对于角色名的指令遵循程度不同,如 Human/Assistant,Human/AI,人类/助手等等。为适配多模型的提示响应效果,系统提供了对话角色名的设置,修改对话角色名将会修改会话历史的角色前缀。
+
+**Jinja-2 模板:** LLM 的提示词编辑器内支持 Jinja-2 模板语言,允许你借助 Jinja2 这一强大的 Python 模板语言,实现轻量级数据转换和逻辑处理,参考[官方文档](https://jinja.palletsprojects.com/en/3.1.x/templates/)。
+
+***
+
+### 使用案例
+
+* **读取知识库内容**
+
+想要让工作流应用具备读取 ["知识库"](/zh-cn/user-guide/knowledge-base/) 内容的能力,例如搭建智能客服应用,请参考以下步骤:
+
+1. 在 LLM 节点上游添加知识库检索节点;
+2. 将知识检索节点的 **输出变量** `result` 填写至 LLM 节点中的 **上下文变量** 内;
+3. 将 **上下文变量** 插入至应用提示词内,赋予 LLM 读取知识库内的文本能力。
+
+
+
+
+
+[知识检索节点](knowledge-retrieval.md)输出的变量 `result` 还包含了分段引用信息,你可以通过 [**引用与归属**](../../knowledge-base/retrieval-test-and-citation.md#id-2-yin-yong-yu-gui-shu) 功能查看信息来源。
+
+> 上游节点的普通变量同样可以填写至上下文变量内,例如开始节点的字符串类型变量,但 **引用与归属** 功能将会失效。
+
+* **读取文档文件**
+
+想要让工作流应用具备读取读取文档内容的能力,例如搭建 ChatPDF 应用,可以参考以下步骤:
+
+* 在 “开始” 节点内添加文件变量;
+* 在 LLM 节点上游添加文档提取器节点,将文件变量作为输入变量;
+* 将文档提取器节点的 **输出变量** `text` 填写至 LLM 节点中的提示词内。
+
+如需了解更多,请参考[文件上传](/zh-cn/user-guide/build-app/flow-app/file-upload)。
+
+
+
+
diff --git a/zh-cn/user-guide/build-app/flow-app/nodes/parameter-extractor.mdx b/zh-cn/user-guide/build-app/flow-app/nodes/parameter-extractor.mdx
new file mode 100644
index 00000000..37965e6a
--- /dev/null
+++ b/zh-cn/user-guide/build-app/flow-app/nodes/parameter-extractor.mdx
@@ -0,0 +1,73 @@
+---
+title: 参数提取
+version: '简体中文'
+---
+
+### 定义
+
+利用 LLM 从自然语言推理并提取结构化参数,用于后置的工具调用或 HTTP 请求。
+
+Dify 工作流内提供了丰富的[工具](/zh-cn/user-guide/tools/introduction)选择,其中大多数工具的输入为结构化参数,参数提取器可以将用户的自然语言转换为工具可识别的参数,方便工具调用。
+
+工作流内的部分节点有特定的数据格式传入要求,如[迭代](./iteration)节点的输入要求为数组格式,参数提取器可以方便的实现结构化参数的转换。
+
+***
+
+### 场景
+
+1. **从自然语言中提供工具所需的关键参数提取**,如构建一个简单的对话式 Arxiv 论文检索应用。
+
+在该示例中:Arxiv 论文检索工具的输入参数要求为 **论文作者** 或 **论文编号**,参数提取器从问题"这篇论文中讲了什么内容:2405.10739"中提取出论文编号 **2405.10739**,并作为工具参数进行精确查询。
+
+
+
+
+
+2. **将文本转换为结构化数据**,如长故事迭代生成应用中,作为[迭代节点](iteration.md)的前置步骤,将文本格式的章节内容转换为数组格式,方便迭代节点进行多轮生成处理。
+
+
+
+
+
+3. **提取结构化数据并使用** [**HTTP 请求**](./http-request) ,可请求任意可访问的 URL ,适用于获取外部检索结果、webhook、生成图片等情景。
+
+***
+
+### 3 如何配置
+
+
+
+
+
+**配置步骤**
+
+1. 选择输入变量,一般为用于提取参数的变量输入。输入变量支持 file
+2. 选择模型,参数提取器的提取依靠的是 LLM 的推理和结构化生成能力
+3. 定义提取参数,可以手动添加需要提取的参数,也可以**从已有工具中快捷导入**
+4. 编写指令,在提取复杂的参数时,编写示例可以帮助 LLM 提升生成的效果和稳定性
+
+**高级设置**
+
+**推理模式**
+
+部分模型同时支持两种推理模式,通过函数/工具调用或是纯提示词的方式实现参数提取,在指令遵循能力上有所差别。例如某些模型在函数调用效果欠佳的情况下可以切换成提示词推理。
+
+* Function Call/Tool Call
+* Prompt
+
+**记忆**
+
+开启记忆后问题分类器的每次输入将包含对话中的聊天历史,以帮助 LLM 理解上文,提高对话交互中的问题理解能力。
+
+**图片**
+
+开启图片
+
+**输出变量**
+
+* 提取定义的变量
+* 节点内置变量
+
+`__is_success Number 提取是否成功` 成功时值为 1,失败时值为 0。
+
+`__reason String` 提取错误原因
\ No newline at end of file
diff --git a/zh-cn/user-guide/build-app/flow-app/nodes/question-classifier.mdx b/zh-cn/user-guide/build-app/flow-app/nodes/question-classifier.mdx
new file mode 100644
index 00000000..b354bbb6
--- /dev/null
+++ b/zh-cn/user-guide/build-app/flow-app/nodes/question-classifier.mdx
@@ -0,0 +1,65 @@
+---
+title: 问题分类
+version: '简体中文'
+---
+
+### **定义**
+
+通过定义分类描述,问题分类器能够根据用户输入,使用 LLM 推理与之相匹配的分类并输出分类结果,向下游节点提供更加精确的信息。
+
+***
+
+### **场景**
+
+常见的使用情景包括**客服对话意图分类、产品评价分类、邮件批量分类**等。
+
+在一个典型的产品客服问答场景中,问题分类器可以作为知识库检索的前置步骤,对用户输入问题意图进行分类处理,分类后导向下游不同的知识库查询相关的内容,以精确回复用户的问题。
+
+下图为产品客服场景的示例工作流模板:
+
+
+
+
+
+在该场景中我们设置了 3 个分类标签/描述:
+
+* 分类 1 :**与售后相关的问题**
+* 分类 2:**与产品操作使用相关的问题**
+* 分类 3 :**其他问题**
+
+当用户输入不同的问题时,问题分类器会根据已设置的分类标签 / 描述自动完成分类:
+
+* "**iPhone 14 如何设置通讯录联系人?**" —> "**与产品操作使用相关的问题**"
+* "**保修期限是多久?**" —> "**与售后相关的问题**"
+* "**今天天气怎么样?**" —> "**其他问题**"
+
+***
+
+### 如何配置
+
+
+
+
+
+**配置步骤:**
+
+1. **选择输入变量**,指用于分类的输入内容,支持输入[文件变量](broken-reference)。客服问答场景下一般为用户输入的问题 `sys.query`;
+2. **选择推理模型**,问题分类器基于大语言模型的自然语言分类和推理能力,选择合适的模型将有助于提升分类效果;
+3. **编写分类标签/描述**,你可以手动添加多个分类,通过编写分类的关键词或者描述语句,让大语言模型更好的理解分类依据。
+4. **选择分类对应的下游节点,** 问题分类节点完成分类之后,可以根据分类与下游节点的关系选择后续的流程路径。
+
+#### **高级设置:**
+
+**指令:** 你可以在 **高级设置-指令** 里补充附加指令,比如更丰富的分类依据,以增强问题分类器的分类能力。
+
+**记忆:** 开启记忆后问题分类器的每次输入将包含对话中的聊天历史,以帮助 LLM 理解上文,提高对话交互中的问题理解能力。
+
+**图片分析:** 仅适用于具备图片识别能力的 LLM,允许输入图片变量。
+
+**记忆窗口:** 记忆窗口关闭时,系统会根据模型上下文窗口动态过滤聊天历史的传递数量;打开时用户可以精确控制聊天历史的传递数量(对数)。
+
+**输出变量:**
+
+`class_name`
+
+即分类之后输出的分类名。你可以在下游节点需要时使用分类结果变量。
\ No newline at end of file
diff --git a/zh-cn/user-guide/build-app/flow-app/nodes/start.mdx b/zh-cn/user-guide/build-app/flow-app/nodes/start.mdx
new file mode 100644
index 00000000..b26ad423
--- /dev/null
+++ b/zh-cn/user-guide/build-app/flow-app/nodes/start.mdx
@@ -0,0 +1,68 @@
+---
+title: 开始
+version: '简体中文'
+---
+
+## 定义
+
+**"开始"** 节点是每个工作流应用(Chatflow / Workflow)必备的预设节点,为后续工作流节点以及应用的正常流转提供必要的初始信息,例如应用使用者所输入的内容、以及[上传的文件](../file-upload)等。
+
+### 配置节点
+
+在开始节点的设置页,你可以看到两部分设置,分别是 **"输入字段"** 和预设的[**系统变量**](../variables.md#xi-tong-bian-liang)。
+
+
+
+### 输入字段
+
+输入字段功能由应用开发者设置,通常用于让应用使用者主动补全更多信息。例如在周报应用中要求使用者按照格式预先提供更多背景信息,如姓名、工作日期区间、工作详情等。这些前置信息将有助于 LLM 生成质量更高的答复。
+
+支持以下六种类型输入变量,所有变量均可设置为必填项:
+
+* **文本**:短文本,由应用使用者自行填写内容,最大长度 256 字符。
+* **段落**:长文本,允许应用使用者输入较长字符。
+* **下拉选项**:由应用开发者固定选项,应用使用者仅能选择预设选项,无法自行填写内容。
+* **数字**:仅允许用户输入数字。
+* **单文件**:允许应用使用者单独上传文件,支持文档类型文件、图片、音频、视频和其它文件类型。支持通过本地上传文件或粘贴文件 URL。详细用法请参考[文件上传](../file-upload.md)。
+* **文件列表**:允许应用使用者批量上传文件,支持文档类型文件、图片、音频、视频和其它文件类型。支持通过本地上传文件或粘贴文件 URL。详细用法请参考[文件上传](../file-upload.md)。
+
+> Dify 内置的文档提取器节点只能够处理部分格式的文档文件。如需处理图片、音频或视频类型文件,请参考[外部数据工具](../../extension/api-based-extension/external-data-tool.md)搭建对应文件的处理节点。
+
+配置完成后,用户在使用应用前将按照输入项指引,向 LLM 提供必要信息。更多的信息将有助于 LLM 提升问答效率。
+
+
+
+### 系统变量
+
+系统变量指的是在 Chatflow / Workflow 应用内预设的系统级参数,可以被应用内的其它节点全局读取。通常用于进阶开发场景,例如搭建多轮次对话应用、收集应用日志与监控、记录不同应用和用户的使用行为等。
+
+**Workflow**
+
+Workflow 类型应用提供以下系统变量:
+
+| 变量名称 | 数据类型 | 说明 | 备注 |
+|---------|--------|------|------|
+| `sys.files` [LEGACY] | Array[File] | 文件参数,存储用户初始使用应用时上传的图片 | 图片上传功能需在应用编排页右上角的 "功能" 处开启 |
+| `sys.user_id` | String | 用户 ID,每个用户在使用工作流应用时,系统会自动向用户分配唯一标识符,用以区分不同的对话用户 | |
+| `sys.app_id` | String | 应用 ID,系统会向每个 Workflow 应用分配一个唯一的标识符,用以区分不同的应用,并通过此参数记录当前应用的基本信息 | 面向具备开发能力的用户,通过此参数区分并定位不同的 Workflow 应用 |
+| `sys.workflow_id` | String | Workflow ID,用于记录当前 Workflow 应用内所包含的所有节点信息 | 面向具备开发能力的用户,可以通过此参数追踪并记录 Workflow 内的包含节点信息 |
+| `sys.workflow_run_id` | String | Workflow 应用运行 ID,用于记录 Workflow 应用中的运行情况 | 面向具备开发能力的用户,可以通过此参数追踪应用的历次运行情况 |
+
+
+
+**Chatflow**
+
+Chatflow 类型应用提供以下系统变量:
+
+| 变量名称 | 数据类型 | 说明 | 备注 |
+|---------|--------|------|------|
+| `sys.query` | String | 用户在对话框中初始输入的内容 | |
+| `sys.files` | Array[File] | 用户在对话框内上传的图片 | 图片上传功能需在应用编排页右上角的 "功能" 处开启 |
+| `sys.dialogue_count` | Number | 用户在与 Chatflow 类型应用交互时的对话轮数。每轮对话后自动计数增加 1,可以和 if-else 节点搭配出丰富的分支逻辑。例如到第 X 轮对话时,回顾历史对话并给出分析 | |
+| `sys.conversation_id` | String | 对话框交互会话的唯一标识符,将所有相关的消息分组到同一个对话中,确保 LLM 针对同一个主题和上下文持续对话 | |
+| `sys.user_id` | String | 分配给每个应用用户的唯一标识符,用以区分不同的对话用户 | |
+| `sys.app_id` | String | 应用 ID,系统会向每个 Workflow 应用分配一个唯一的标识符,用以区分不同的应用,并通过此参数记录当前应用的基本信息 | 面向具备开发能力的用户,通过此参数区分并定位不同的 Workflow 应用 |
+| `sys.workflow_id` | String | Workflow ID,用于记录当前 Workflow 应用内所包含的所有节点信息 | 面向具备开发能力的用户,可以通过此参数追踪并记录 Workflow 内的包含节点信息 |
+| `sys.workflow_run_id` | String | Workflow 应用运行 ID,用于记录 Workflow 应用中的运行情况 | 面向具备开发能力的用户,可以通过此参数追踪应用的历次运行情况 |
+
+
\ No newline at end of file
diff --git a/zh-cn/user-guide/build-app/flow-app/nodes/template.mdx b/zh-cn/user-guide/build-app/flow-app/nodes/template.mdx
new file mode 100644
index 00000000..380d0a25
--- /dev/null
+++ b/zh-cn/user-guide/build-app/flow-app/nodes/template.mdx
@@ -0,0 +1,48 @@
+---
+title: 模板转换
+version: '简体中文'
+---
+
+### 定义
+
+允许借助 Jinja2 的 Python 模板语言灵活地进行数据转换、文本处理等。
+
+### 什么是 Jinja?
+
+> Jinja is a fast, expressive, extensible templating engine.
+>
+> Jinja 是一个快速、表达力强、可扩展的模板引擎。
+
+—— [https://jinja.palletsprojects.com/en/3.1.x/](https://jinja.palletsprojects.com/en/3.1.x/)
+
+### 场景
+
+模板节点允许你借助 Jinja2 这一强大的 Python 模板语言,在工作流内实现轻量、灵活的数据转换,适用于文本处理、JSON 转换等情景。例如灵活地格式化并合并来自前面步骤的变量,创建出单一的文本输出。这非常适合于将多个数据源的信息汇总成一个特定格式,满足后续步骤的需求。
+
+**示例1:** 将多个输入(文章标题、介绍、内容)拼接为完整文本
+
+
+
+
+
+**示例2:** 将知识检索节点获取的信息及其相关的元数据,整理成一个结构化的 Markdown 格式
+
+```Plain
+{% for item in chunks %}
+### Chunk {{ loop.index }}.
+### Similarity: {{ item.metadata.score | default('N/A') }}
+
+#### {{ item.title }}
+
+##### Content
+{{ item.content | replace('\n', '\n\n') }}
+
+---
+{% endfor %}
+```
+
+
+
+
+
+你可以参考 Jinja 的[官方文档](https://jinja.palletsprojects.com/en/3.1.x/templates/),创建更为复杂的模板来执行各种任务。
\ No newline at end of file
diff --git a/zh-cn/user-guide/build-app/flow-app/nodes/tools.mdx b/zh-cn/user-guide/build-app/flow-app/nodes/tools.mdx
new file mode 100644
index 00000000..280e68f5
--- /dev/null
+++ b/zh-cn/user-guide/build-app/flow-app/nodes/tools.mdx
@@ -0,0 +1,31 @@
+---
+title: 工具
+version: '简体中文'
+---
+
+“工具”节点可以为工作流提供强大的第三方能力支持,分为以下三种类型:
+
+* **内置工具**,Dify 第一方提供的工具,使用该工具前可能需要先给工具进行 **授权**。
+* **自定义工具**,通过 [OpenAPI/Swagger 标准格式](https://swagger.io/specification/)导入或配置的工具。如果内置工具无法满足使用需求,你可以在 **Dify 菜单导航 --工具** 内创建自定义工具。
+* **工作流**,你可以编排一个更复杂的工作流,并将其发布为工具。详细说明请参考[工具配置说明](/zh-cn/user-guide/tools/introduction)。
+
+### 添加工具节点
+
+添加节点时,选择右侧的 “工具” tab 页。配置工具节点一般分为两个步骤:
+
+1. 对工具授权/创建自定义工具/将工作流发布为工具
+2. 配置工具输入和参数
+
+
+
+
+
+工具节点可以连接其它节点,通过[变量](/zh-cn/user-guide/build-app/flow-app/variables)处理和传递数据。
+
+
+
+
+
+### 将工作流应用发布为工具
+
+工作流应用可以被发布为工具,并被其它工作流内的节点所应用。关于如何创建自定义工具和配置工具,请参考[工具配置说明](/zh-cn/user-guide/tools/introduction)。
diff --git a/zh-cn/user-guide/build-app/flow-app/nodes/variable-aggregation.mdx b/zh-cn/user-guide/build-app/flow-app/nodes/variable-aggregation.mdx
new file mode 100644
index 00000000..0be9e8f2
--- /dev/null
+++ b/zh-cn/user-guide/build-app/flow-app/nodes/variable-aggregation.mdx
@@ -0,0 +1,48 @@
+---
+title: 变量聚合
+version: '简体中文'
+---
+
+# 变量聚合
+
+### 定义
+
+将多路分支的变量聚合为一个变量,以实现下游节点统一配置。
+
+变量聚合节点(原变量赋值节点)是工作流程中的一个关键节点,它负责整合不同分支的输出结果,确保无论哪个分支被执行,其结果都能通过一个统一的变量来引用和访问。这在多分支的情况下非常有用,可将不同分支下相同作用的变量映射为一个输出变量,避免下游节点重复定义。
+
+***
+
+### 场景
+
+通过变量聚合,可以将诸如问题分类或条件分支等多路输出聚合为单路,供流程下游的节点使用和操作,简化了数据流的管理。
+
+**问题分类后的多路聚合**
+
+未添加变量聚合,分类1 和 分类 2 分支经不同的知识库检索后需要重复定义下游的 LLM 和直接回复节点。
+
+
+
+
+
+添加变量聚合,可以将两个知识检索节点的输出聚合为一个变量。
+
+
+
+
+
+**IF/ELSE 条件分支后的多路聚合**
+
+
+
+
+
+### 格式要求
+
+变量聚合器支持聚合多种数据类型,包括字符串(`String`)、数字(`Number`)、文件(`File`)对象(`Object`)以及数组(`Array`)
+
+**变量聚合器只能聚合同一种数据类型的变量**。若第一个添加至变量聚合节点内的变量数据格式为 `String`,后续连线时会自动过滤可添加变量为 `String` 类型。
+
+**聚合分组**
+
+开启聚合分组后,变量聚合器可以聚合多组变量,各组内聚合时要求同一种数据类型。
\ No newline at end of file
diff --git a/zh-cn/user-guide/build-app/flow-app/nodes/variable-assigner.mdx b/zh-cn/user-guide/build-app/flow-app/nodes/variable-assigner.mdx
new file mode 100644
index 00000000..fbdb04e0
--- /dev/null
+++ b/zh-cn/user-guide/build-app/flow-app/nodes/variable-assigner.mdx
@@ -0,0 +1,167 @@
+---
+title: 变量赋值
+version: '简体中文'
+---
+
+### 定义
+
+变量赋值节点用于向可写入变量进行变量赋值,已支持以下可写入变量:
+
+* [会话变量](../key-concept.md#hui-hua-bian-liang)。
+
+用法:通过变量赋值节点,你可以将工作流内的变量赋值到会话变量中用于临时存储,并可以在后续对话中持续引用。
+
+
+
+
+
+***
+
+### 使用场景示例
+
+通过变量赋值节点,你可以将会话过程中的**上下文、上传至对话框的文件(即将上线)、用户所输入的偏好信息**等写入至会话变量,并在后续对话中引用已存储的信息导向不同的处理流程或者进行回复。
+
+**场景 1**
+
+**自动判断提取并存储对话中的信息**,在会话内通过会话变量数组记录用户输入的重要信息,并在后续对话中让 LLM 基于会话变量中存储的历史信息进行个性化回复。
+
+示例:开始对话后,LLM 会自动判断用户输入是否包含需要记住的事实、偏好或历史记录。如果有,LLM 会先提取并存储这些信息,然后再用这些信息作为上下文来回答。如果没有新的信息需要保存,LLM 会直接使用自身的相关记忆知识来回答问题。
+
+
+
+
+
+**配置流程:**
+
+1. **设置会话变量**:首先设置一个会话变量数组 `memories`,类型为 array\[object],用于存储用户的事实、偏好和历史记录。
+2. **判断和提取记忆**:
+ * 添加一个条件判断节点,使用 LLM 来判断用户输入是否包含需要记住的新信息。
+ * 如果有新信息,走上分支,使用 LLM 节点提取这些信息。
+ * 如果没有新信息,走下分支,直接使用现有记忆回答。
+3. **变量赋值/写入**:
+ * 在上分支中,使用变量赋值节点,将提取出的新信息追加(append)到 `memories` 数组中。
+ * 使用转义功能将 LLM 输出的文本字符串转换为适合存储在 array\[object] 中的格式。
+4. **变量读取和使用**:
+ * 在后续的 LLM 节点中,将 `memories` 数组中的内容转换为字符串,并插入到 LLM 的提示词 Prompts 中作为上下文。
+ * LLM 使用这些历史信息来生成个性化回复。
+
+图中的 code 节点代码如下:
+
+1. 将字符串转义为 object
+
+```python
+import json
+
+def main(arg1: str) -> object:
+ try:
+ # Parse the input JSON string
+ input_data = json.loads(arg1)
+
+ # Extract the memory object
+ memory = input_data.get("memory", {})
+
+ # Construct the return object
+ result = {
+ "facts": memory.get("facts", []),
+ "preferences": memory.get("preferences", []),
+ "memories": memory.get("memories", [])
+ }
+
+ return {
+ "mem": result
+ }
+ except json.JSONDecodeError:
+ return {
+ "result": "Error: Invalid JSON string"
+ }
+ except Exception as e:
+ return {
+ "result": f"Error: {str(e)}"
+ }
+```
+
+2. 将 object 转义为字符串
+
+```python
+import json
+
+def main(arg1: list) -> str:
+ try:
+ # Assume arg1[0] is the dictionary we need to process
+ context = arg1[0] if arg1 else {}
+
+ # Construct the memory object
+ memory = {"memory": context}
+
+ # Convert the object to a JSON string
+ json_str = json.dumps(memory, ensure_ascii=False, indent=2)
+
+ # Wrap the JSON string in
+
+
+**配置流程:**
+
+**设置会话变量**:首先设置一个会话变量 `language`,在会话流程开始时添加一个条件判断节点,用来判断 `language` 变量的值是否为空。
+
+**变量写入/赋值**:首轮对话开始时,若 `language` 变量值为空,则使用 LLM 节点来提取用户输入的语言,再通过变量赋值节点将该语言类型写入到会话变量 `language` 中。
+
+**变量读取**:在后续对话轮次中 `language` 变量已存储用户语言偏好。在后续对话中,LLM 节点通过引用 language 变量,使用用户的偏好语言类型进行回复。
+
+**场景 3**
+
+**辅助 Checklist 检查**,在会话内通过会话变量记录用户的输入项,更新 Checklist 中的内容,并在后续对话中检查遗漏项。
+
+示例:开始对话后,LLM 会要求用户在对话框内输入 Checklist 所涉及的事项,用户一旦提及了 Checklist 中的内容,将会更新并存储至会话变量内。LLM 会在每轮对话后提醒用户继续补充遗漏项。
+
+
+
+
+
+**配置流程:**
+
+* **设置会话变量:** 首先设置一个会话变量 `ai_checklist`,在 LLM 内引用该变量作为上下文进行检查。
+* **变量赋值/写入:** 每一轮对话时,在 LLM 节点内检查 `ai_checklist` 内的值并比对用户输入,若用户提供了新的信息,则更新 Checklist 并将输出内容通过变量赋值节点写入到 `ai_checklist` 内。
+* **变量读取:** 每一轮对话读取 `ai_cheklist` 内的值并比对用户输入直至所有 checklist 完成。
+
+***
+
+### 使用变量赋值节点
+
+点击节点右侧 + 号,选择"变量赋值"节点,填写"赋值的变量"和"设置变量"。
+
+
+
+
+
+**设置变量:**
+
+赋值的变量:选择被赋值变量,即指定需要被赋值的目标会话变量。
+
+设置变量:选择需要赋值的变量,即指定需要被转换的源变量。
+
+以上图赋值逻辑为例:将上一个节点的文本输出项 `Language Recognition/text` 赋值到会话变量 `language` 内。
+
+**写入模式:**
+
+* 覆盖,将源变量的内容覆盖至目标会话变量
+* 追加,指定变量为 Array 类型时
+* 清空,清空目标会话变量中的内容
\ No newline at end of file
diff --git a/zh-cn/user-guide/build-app/flow-app/orchestrate-node.mdx b/zh-cn/user-guide/build-app/flow-app/orchestrate-node.mdx
new file mode 100644
index 00000000..7f839e1b
--- /dev/null
+++ b/zh-cn/user-guide/build-app/flow-app/orchestrate-node.mdx
@@ -0,0 +1,138 @@
+---
+title: 编排节点
+version: '简体中文'
+---
+
+Chatflow 和 Workflow 类型应用内的节点均可以通过可视化拖拉拽的形式进行编排,支持**串行**和**并行**两种编排设计模式。
+
+
+
+
+
+## 串行设计
+
+该结构要求节点按照预设顺序依次执行,每个节点需等待前一个节点完成并输出结果后才能开始工作,有助于**确保任务按照逻辑顺序执行。**
+
+例如,在一个采用串行结构设计的"小说生成" AI 应用内,用户输入小说风格、节奏和角色后,LLM 按照顺序补全小说大纲、小说剧情和结尾;每个节点都基于前一个节点的输出结果展开工作,确保小说的风格一致性。
+
+### 设计串行结构
+
+点击两个节点中间连线的 + 号即可在中间添加一个串行节点;按照顺序将节点依次串线连接,最后将线收拢至\*\*"结束"节点\*\*(Workflow) **"直接回复"节点** (Chatflow)完成设计。
+
+
+
+
+
+### 查看串行结构应用日志
+
+串行结构应用内的日志将按照顺序展示各个节点的运行情况。点击对话框右上角的 「查看日志-追踪」,查看工作流完整运行过程各节点的输入 / 输出、Token 消耗、运行时长等。
+
+
+
+
+
+## 并行设计
+
+该设计模式允许多个节点在同一时间内共同执行,前置节点可以同时触发位于并行结构内的多个节点。并行结构内的节点不存在依赖关系,能够同时执行任务,更好地提升**节点的任务执行效率。**
+
+例如,在某个并行设计的翻译工作流应用内,用户输入源文本触发工作流后,位于并行结构内的节点将共同收到前置节点的流转指令,同时开展多语言的翻译任务,缩短任务的处理耗时。
+
+
+
+
+
+### 新建并行结构
+
+你可以参考以下四种方式,通过新建节点或拖拽的方式创建并行结构。
+
+**方式 1**
+
+将鼠标 Hover 至某个节点,显示 `+` 按钮,支持新建多个节点,创建后自动形成并行结构。
+
+
+
+
+
+**方式 2**
+
+拖拽节点末尾的 `+` 按钮,拉出连线形成并行结构。
+
+
+
+
+
+**方式 3**
+
+如果画布存在多个节点,通过可视化拖拽的方式组成并行结构。
+
+
+
+
+
+**方式 4**
+
+除了在画布中通过直接添加并行节点或可视化拖拽方式组成并行结构,你也可以在节点右侧清单的"下一步"中添加并行节点,自动生成并行结构。
+
+
+
+
+
+**Tips:**
+
+* 画布上的"线"可以被删除;
+* 并行结构的下游节点可以是任意节点;
+* 在 Workflow 类型应用内需确定唯一的 "end" 节点;
+* Chatflow 类型应用支持添加多个 **"直接回复"** 节点,该类型应用内的所有并行结构在末尾处均需要配置 **"直接回复"** 节点才能正常输出各个并行结构里的内容;
+* 所有的并行结构都会同时运行;并行结构内的节点处理完任务后即输出结果,**输出结果时不存在顺序关系**。并行结构越简单,输出结果的速度越快。
+
+
+
+
+
+### 设计并行结构应用
+
+下文将展示四种常见的并行节点设计思路。
+
+1. **普通并行**
+
+普通并行指的是 `开始 | 并行结构 | 结束` 三层关系也是并行结构的最小单元。这种结构较为直观,用户输入内容后,工作流能同时执行多条任务。
+
+> 并行分支的上限数为 10 个。
+
+
+
+
+
+2. **嵌套并行**
+
+嵌套并行指的是 `开始 | 多个并行结构 | 结束`多层关系,它适用于内部较为复杂的工作流,例如需要在某个节点内请求外部 API,将返回的结果同时交给下游节点处理。
+
+一个工作流内最多支持 3 层嵌套关系。
+
+
+
+
+
+3. **条件分支 + 并行**
+
+并行结构也可以和条件分支共同使用。
+
+
+
+
+
+4. **迭代分支 + 并行**
+
+迭代分支内同样支持编排并行结构,加速迭代内各节点的执行效率。
+
+
+
+
+
+### 查看并行结构应用日志
+
+包含并行结构的应用的运行日志支持以树状结构进行展示,你可以折叠并行节点组以更好地查看各个节点的运行日志。
+
+
+
+
\ No newline at end of file
diff --git a/zh-cn/user-guide/build-app/flow-app/publish.mdx b/zh-cn/user-guide/build-app/flow-app/publish.mdx
new file mode 100644
index 00000000..f23775ed
--- /dev/null
+++ b/zh-cn/user-guide/build-app/flow-app/publish.mdx
@@ -0,0 +1,21 @@
+---
+title: 应用发布
+version: '简体中文'
+---
+
+调试完成之后点击右上角的「发布」可以将该工作流保存并快速发布成为不同类型的应用。
+
+对话型应用支持发布为:
+
+* 直接运行
+* 嵌入网站
+* 访问 API
+
+工作流应用支持发布为:
+
+* 直接运行
+* 批处理
+* 访问 API
+* 发布为工具
+
+你也可以点击 **恢复** 预览上一次发布的应用版本,确认恢复将会使用上一次发布的工作流版本覆盖当前的工作流版本。
diff --git a/zh-cn/user-guide/build-app/flow-app/variables.mdx b/zh-cn/user-guide/build-app/flow-app/variables.mdx
new file mode 100644
index 00000000..6d3020b5
--- /dev/null
+++ b/zh-cn/user-guide/build-app/flow-app/variables.mdx
@@ -0,0 +1,178 @@
+---
+title: 变量
+version: '简体中文'
+---
+
+Workflow 和 Chatflow 类型应用由独立节点相构成。大部分节点设有输入和输出项,但每个节点的输入信息不一致,各个节点所输出的答复也不尽相同。
+
+如何用一种固定的符号**指代动态变化的内容?** 变量作为一种动态数据容器,能够存储和传递不固定的内容,在不同的节点内被相互引用,实现信息在节点间的灵活通信。
+
+### **系统变量**
+
+系统变量指的是在 Chatflow / Workflow 应用内预设的系统级参数,可以被其它节点全局读取。系统级变量均以 `sys` 开头。
+
+#### Workflow
+
+Workflow 类型应用提供以下系统变量:
+
+| 变量名称 | +数据类型 | +说明 | +备注 | +
|---|---|---|---|
|
+ Array[File] | +文件参数,存储用户初始使用应用时上传的图片 | +图片上传功能需在应用编排页右上角的 "功能" 处开启 | +
sys.user_id |
+ String | +用户 ID,每个用户在使用工作流应用时,系统会自动向用户分配唯一标识符,用以区分不同的对话用户 | ++ |
sys.app_id |
+ String | +应用 ID,系统会向每个 Workflow 应用分配一个唯一的标识符,用以区分不同的应用,并通过此参数记录当前应用的基本信息 | +面向具备开发能力的用户,通过此参数区分并定位不同的 Workflow 应用 | +
sys.workflow_id |
+ String | +Workflow ID,用于记录当前 Workflow 应用内所包含的所有节点信息 | +面向具备开发能力的用户,可以通过此参数追踪并记录 Workflow 内的包含节点信息 | +
sys.workflow_run_id |
+ String | +Workflow 应用运行 ID,用于记录 Workflow 应用中的运行情况 | +面向具备开发能力的用户,可以通过此参数追踪应用的历次运行情况 | +
| 变量名称 | +数据类型 | +说明 | +备注 | +
|---|---|---|---|
sys.query |
+ String | +用户在对话框中初始输入的内容 | ++ |
sys.files |
+ Array[File] | +用户在对话框内上传的图片 | +图片上传功能需在应用编排页右上角的 "功能" 处开启 | +
sys.dialogue_count |
+ Number | +用户在与 Chatflow 类型应用交互时的对话轮数。每轮对话后自动计数增加 1,可以和 if-else 节点搭配出丰富的分支逻辑。 例如到第 X 轮对话时,回顾历史对话并给出分析 |
+ + |
sys.conversation_id |
+ String | +对话框交互会话的唯一标识符,将所有相关的消息分组到同一个对话中,确保 LLM 针对同一个主题和上下文持续对话 | ++ |
sys.user_id |
+ String | +分配给每个应用用户的唯一标识符,用以区分不同的对话用户 | ++ |
sys.app_id |
+ String | +应用 ID,系统会向每个 Workflow 应用分配一个唯一的标识符,用以区分不同的应用,并通过此参数记录当前应用的基本信息 | +面向具备开发能力的用户,通过此参数区分并定位不同的 Workflow 应用 | +
sys.workflow_id |
+ String | +Workflow ID,用于记录当前 Workflow 应用内所包含的所有节点信息 | +面向具备开发能力的用户,可以通过此参数追踪并记录 Workflow 内的包含节点信息 | +
sys.workflow_run_id |
+ String | +Workflow 应用运行 ID,用于记录 Workflow 应用中的运行情况 | +面向具备开发能力的用户,可以通过此参数追踪应用的历次运行情况 | +
-
+
### API 调用示例
diff --git a/zh-cn/user-guide/knowledge-base/create-knowledge-and-upload-documents/import-content-data/readme.mdx b/zh-cn/user-guide/knowledge-base/create-knowledge-and-upload-documents/import-content-data/readme.mdx
index 0bef15fb..68fd20a8 100644
--- a/zh-cn/user-guide/knowledge-base/create-knowledge-and-upload-documents/import-content-data/readme.mdx
+++ b/zh-cn/user-guide/knowledge-base/create-knowledge-and-upload-documents/import-content-data/readme.mdx
@@ -1,5 +1,5 @@
---
-title: 导入文本数据简介
+title: 1. 导入文本数据
---
轻点 Dify 平台顶部导航中 **"知识库"** → "**创建知识库"**。你可以通过上传本地文件或导入在线数据两种方式上传文档至知识库内。
@@ -19,11 +19,11 @@ title: 导入文本数据简介
创建知识库时支持通过在线数据导入。知识库支持导入以下两种在线数据:
-
+
**可调参数**
@@ -75,7 +73,106 @@ Dify 目前支持多个 Rerank 模型,进入 “模型供应商” 页填入 R
用于设置文本片段筛选的相似度阈值。向量检索的相似度分数需要超过设置的分数后才会被召回,数值越高,预期被召回的文本数量越少。
-多路召回模式在多知识库检索时能够获得质量更高的召回效果,因此更**推荐将召回模式设置为多路召回**。
+### 使用元数据筛选知识
+
+#### 聊天流/工作流
+
+在 **聊天流/工作流** 的 **知识检索** 节点中,你可以使用 **元数据筛选** 功能精确检索文档。该功能有助于你根据文档的元数据字段(如标签、类别或访问权限)优化检索结果。
+
+##### 配置步骤
+
+1. 选择筛选模式
+
+ - **禁用模式**(默认):禁用 **元数据筛选** 功能,不配置任何筛选条件。
+
+ - **自动模式**:系统会根据传输给该 **知识检索** 节点的 **查询变量** 自动配置筛选条件,适用于简单的筛选需求。
+
+ > 启用自动模式后,你依然需要在 **模型** 栏中选择合适的大模型以执行文档检索任务。
+
+ 
+
+ - **手动模式**:用户可以手动配置筛选条件,自由设置筛选规则,适用于复杂的筛选需求。
+
+
+
+2. *(可选)* 如果你选择了 **手动模式**,请参照以下步骤配置筛选条件:
+
+ 1. 点击 **条件** 按钮,弹出配置框。
+
+ 
+
+ 2. 点击配置框中的 **+添加条件** 按钮:
+
+ - 可以从下拉列表中选择一个已选中知识库内的元数据字段,添加到筛选条件列表中。
+
+ > 如果你同时选择了多个知识库,下拉列表只会显示这些知识库共有的元数据字段。
+
+ - 可以在 **搜索元数据** 搜索框中搜索你需要的字段,添加到筛选条件列表中。
+
+ 
+
+ 3. *(可选)* 如果需要添加多条字段,可以重复点击 **+添加条件** 按钮。
+
+ 
+
+ 4. 配置字段类型的筛选条件:
+
+ | 字段类型 | 筛选条件 | 筛选条件说明与示例 |
+ | --- | --- | --- |
+ | 字符串 | is | 字段的值必须与你输入的值完全匹配。例如,如果你设置筛选条件为 `is "Published"`,则只会返回标记为 "Published" 的文档。 |
+ | | is not | 字段的值不能与你输入的值匹配。例如,如果你设置筛选条件为 `is not "Draft"`,则会返回所有未标记为 "Draft" 的文档。 |
+ | | is empty | 字段的值为空。如果你配置了此条件,可以检索到未标记该字符串的文档。 |
+ | | is not empty | 字段的值不为空。如果你配置了此条件,可以检索到标记了该字符串的文档。 |
+ | | contains | 字段的值包含你输入的文本。例如,如果你设置筛选条件为 `contains "Report"`,则会返回所有包含"Report"的文档,如"Monthly Report" 或 "Annual Report"。 |
+ | | not contains | 字段的值不包含你输入的文本。例如,如果你设置筛选条件为 `not contains "Draft"`,则会返回所有不包含 "Draft" 的文档。 |
+ | | starts with | 字段的值以你输入的文本开头。例如,如果你设置筛选条件为 `starts with "Doc"`,则会返回所有以"Doc"开头的文档,如 "Doc1"、"Document"等。 |
+ | | ends with | 字段的值以你输入的文本结尾。例如,如果你设置筛选条件为 `ends with "2024"`,则会返回所有以"2024"结尾的文档,如"Report 2024"、"Summary 2024"等。 |
+ | 数字 | = | 字段的值必须等于你输入的数字。例如,`= 10` 会匹配所有数字标记为 10 的文档。 |
+ | | ≠ | 字段的值不能等于你输入的数字。例如,`≠ 5` 会返回所有数字未标记为 5 的文档。 |
+ | | > | 字段的值必须大于你输入的数字。例如,`100` 会返回所有数字标记为大于 100 的文档。 |
+ | | `<` | 字段的值必须小于你输入的数字。例如,`< 50` 会返回所有数字标记为小于 50 的文档。 |
+ | | ≥ | 字段的值必须大于或等于你输入的数字。例如,`≥ 20` 会返回所有数字标记为大于或等于 20 的文档。 |
+ | | ≤ | 字段的值必须小于或等于你输入的数字。例如,`≤ 200` 会返回所有数字标记为小于或等于 200 的文档。 |
+ | 时间 | is | 字段的时间值必须与你选择的时间完全匹配。例如,`is "2024-01-01"` 只会返回标记为 2024 年 1 月 1 日的文档。 |
+ | | before | 字段的时间值必须早于你选择的时间。例如,`before "2024-01-01"` 会返回所有标记为 2024 年 1 月 1 日之前的文档。 |
+ | | after | 字段的时间值必须晚于你选择的时间。例如,`after "2024-01-01"` 会返回所有标记为 2024 年 1 月 1 日之后的文档。 |
+ | | is empty | 字段的时间值为空。如果你配置了此条件,可以检索到未标记该时间信息的文档。 |
+ | | is not empty | 字段的时间值不为空。如果你配置了此条件,可以检索到标记了该时间信息的文档。 |
+
+ 5. 选择并添加元数据筛选值:
+ - **变量**:选择 **变量(Variable)**,并选择该**聊天流/工作流**中需要用于筛选文档的变量。
+
+ 
+
+ - **常量**:选择 **常量(Constant)**,并手动输入你需要的常量值。
+
+ > **时间** 字段类型仅支持使用常量筛选文档。如果你选用时间字段筛选文档,系统会弹出时间选择器,供你选择具体的时间节点。
+
+ 
+
+
+
以下是连接外部知识的详细步骤:
+
+
填写以下参数:
* **知识库名称与描述**
* **外部知识库 API** 选择在第二步中关联的外部知识库 API;Dify 将通过 API 连接的方式,调用存储在外部知识库的文本内容;
- * **外部知识库 ID** 指定需要被关联的特定的外部知识库 ID,详细说明请参考[外部知识库 API](/zh-cn/user-guide/knowledge-base/api-connection/external-knowledge-api-documentation)。
+ * **外部知识库 ID** 指定需要被关联的特定的外部知识库 ID,详细说明请参考[外部知识库 API](../knowledge-and-documents-maintenance/maintain-dataset-via-api)。
* **调整召回设置**
**Top K:** 用户发起提问时,将请求外部知识 API 获取相关性较高的内容分段。该参数用于筛选与用户问题相似度较高的文本片段。默认值为 3,数值越高,召回存在相关性的文本分段也就越多。
@@ -62,7 +62,7 @@ version: '简体中文'
**Score 阈值:** 文本片段筛选的相似度阈值,只召回超过设置分数的文本片段,默认值为 0.5。数值越高说明对于文本与问题要求的相似度越高,预期被召回的文本数量也越少,结果也会相对而言更加精准。
-
+
+
+
- **Chatflow / Workflow 类型应用**
@@ -87,7 +87,7 @@ version: '简体中文'
在 Chatflow / Workflow 类型应用内添加 **“知识检索”** 节点,选中带有 `EXTERNAL` 标签的外部知识库。
- .png)

| 操作方式 | +操作方法 | +示例图 | +影响范围 | +结果 | +
|---|---|---|---|---|
| 在知识库管理界面删除某条元数据字段 | +在知识库管理界面,点击某条元数据字段右侧的删除图标,删除该字段。 | +
+
+ |
+ 从知识库管理列表中完全删除该元数据字段及其所有字段值。 | +该字段从知识库中移除,所有文档中的该字段及包含的所有字段值也会消失。 | +
| 在编辑元数据弹窗中删除已选文档的某条元数据字段 | +在编辑元数据弹窗中,点击某条元数据字段右侧的删除图标,删除该字段。 | +
+
+ |
+ 仅删除已选文档的该字段与字段值,字段本身依然保留在知识库管理列表中。 | +选中文档中的字段与字段值被移除,但字段仍保留在知识库内,字段值计数会发生数值上的变化。 | +
| 在文档详情界面删除某条元数据字段 | +在文档详情界面中的元数据编辑模式里,点击某条元数据字段右侧的删除图标,删除该字段。 | +
+
+ |
+ 仅删除该文档的该字段与字段值,字段本身依然保留在知识库管理列表中。 | +该文档中的字段与字段值被移除,但字段仍保留在知识库内,字段值计数会发生数值上的变化。 | +