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 设计、旅程规划等任务。 + +![](/zh-cn/img/40d3342c49dc56350356eade970454c3.png) + +选择智能助手的推理模型,智能助手的任务完成能力取决于模型推理能力,我们建议在使用智能助手时选择推理能力更强的模型系列如 gpt-4 以获得更稳定的任务完成效果。 + +![](/zh-cn/img/6c538b11885e24394906e3b7e5c19b17.png) + +你可以在“提示词”中编写智能助手的指令,为了能够达到更优的预期效果,你可以在指令中明确它的任务目标、工作流程、资源和限制等。 + +![](/zh-cn/img/a04ab941483c2d50633011a6ad5b69fb.png) + +### 添加助手需要的工具 + +在“上下文”中,你可以添加智能助手可以用于查询的知识库工具,这将帮助它获取外部背景知识。 + +在“工具”中,你可以添加需要使用的工具。工具可以扩展 LLM 的能力,比如联网搜索、科学计算或绘制图片,赋予并增强了 LLM 连接外部世界的能力。Dify 提供了两种工具类型:**第一方工具**和**自定义工具**。 + +你可以直接使用 Dify 生态提供的第一方内置工具,或者轻松导入自定义的 API 工具(目前支持 OpenAPI / Swagger 和 OpenAI Plugin 规范)。 + +![](/zh-cn/img/e5cfc25900fd8b2ca8e9c88402affd72.png) + +“工具”功能允许用户借助外部能力,在 Dify 上创建出更加强大的 AI 应用。例如你可以为智能助理型应用(Agent)编排合适的工具,它可以通过任务推理、步骤拆解、调用工具完成复杂任务。 + +另外工具也可以方便将你的应用与其他系统或服务连接,与外部环境交互。例如代码执行、对专属信息源的访问等。你只需要在对话框中谈及需要调用的某个工具的名字,即可自动调用该工具。 + +![](/zh-cn/user-guide/.gitbook/assets/zh-agent-dalle3.png) + +### 配置 Agent + +在 Dify 上为智能助手提供了 Function calling(函数调用)和 ReAct 两种推理模式。已支持 Function Call 的模型系列如 gpt-3.5/gpt-4 拥有效果更佳、更稳定的表现,尚未支持 Function calling 的模型系列,我们支持了 ReAct 推理框架实现类似的效果。 + +在 Agent 配置中,你可以修改助手的迭代次数限制。 + +![](/zh-cn/img/85526d52781ea5b45c8e54679af90c03.png) + +![](/zh-cn/img/876dfa7271d17166f160638ca43eeb21.png) + +### 配置对话开场白 + +您可以为智能助手配置一套会话开场白和开场问题,配置的对话开场白将在每次用户初次对话中展示助手可以完成什么样的任务,以及可以提出的问题示例。 + +![](/zh-cn/img/d4adbbfb1c6a6d020e06972713ad7c7c.png) + +### 调试与预览 + +编排完智能助手之后,你可以在发布成应用之前进行调试与预览,查看助手的任务完成效果。 + +![](/zh-cn/img/651df066bc2dc78deffed189b718b8b4.png) + +### 应用发布 + +![](/zh-cn/img/1eb90b9b3d0905e525010ad3376cb626.png) 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: '简体中文' +--- + +对话型应用采用一问一答模式与用户持续对话。 + +## 适用场景 + +对话型应用可以用在客户服务、在线教育、医疗保健、金融服务等领域。这些应用可以帮助组织提高工作效率、减少人工成本和提供更好的用户体验。 + +## 如何编排 + +对话型应用的编排支持:对话前提示词,变量,上下文,开场白和下一步问题建议。 + +下面以做一个 **面试官** 的应用为例来介绍编排对话型应用。 + +### 创建应用 + +在首页点击 "创建应用" 按钮创建应用。填上应用名称,应用类型选择**聊天助手**。 + +![](/zh-cn/img/5d9711956466aa6b5237d0c3b6e97f81.png) + +### 编排应用 + +创建应用后会自动跳转到应用概览页,你可以在此处为聊天应用设置变量、添加上下文以及额外的聊天功能。 + +![](/zh-cn/img/e008292270ae03d31b83bba99253f3a4.png) + +#### 应用编排 + +**填写提示词** + +提示词用于约束 AI 给出专业的回复,让回应更加精确。你可以借助内置的提示生成器,编写合适的提示词。提示词内支持插入表单变量,例如 `{{input}}`。提示词中的变量的值会替换成用户填写的值。 + +示例: +1. 输入提示指令,要求给出一段面试场景的提示词。 +2. 右侧内容框将自动生成提示词。 +3. 你可以在提示词内插入自定义变量。 + +![](/zh-cn/img/e3b94de2caed9bfc57362effa1b86de5.png) + +为了更好的用户体验,可以加上对话开场白:`你好,{{name}}。我是你的面试官,Bob。你准备好了吗?`。点击页面底部的 "添加功能" 按钮,打开 "对话开场白" 的功能: + +![](/zh-cn/img/4bf2bc75b3ce6b328efc461682a6ec78.png) + +编辑开场白时,还可以添加数个开场问题: + +![](/zh-cn/img/2698f7edc53d7886007c6c78faba698e.png) + +#### 添加上下文 + +如果想要让 AI 的对话范围局限在知识库内,例如企业内的客服话术规范,可以在"上下文"内引用知识库。 + +![](/zh-cn/img/f99d63b2c6ab6c5bd20d036374cd803c.png) + +### 调试 + +在右侧填写用户输入项,输入内容进行调试。 + +![](/zh-cn/img/87c80411733a228aadbf3ba0a4fdacb1.png) + +如果回答结果不理想,可以调整提示词和底层模型。你也可以使用多个模型同步进行调试,搭配出合适的配置。 + +![](/zh-cn/img/c56f9168146fe003847e5551d41c5023.png) + +**多个模型进行调试:** + +如果使用单一模型调试时感到效率低下,你也可以使用 **"多个模型进行调试"** 功能,批量检视模型的回答效果。 + +![](/zh-cn/img/ce4d5b43f6fc051cb6544c9560fc73dc.png) + +最多支持同时添加 4 个大模型。 + +![](/zh-cn/img/f533501fa1e8d07701825cdf7dd024c7.png) + +⚠️ 使用多模型调试功能时,如果仅看到部分大模型,这是因为暂未添加其它大模型的 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 节点的输出变量即可完成设置。 + + + LLM节点中开启视觉分析能力的设置界面 + + +### Chatflow + +Chatflow 类型应用支持以下功能: + +* **对话开场白** + + 让 AI 主动发送一段话,可以是欢迎语或 AI 的自我介绍,以拉近与使用者的距离。 +* **下一步问题建议** + + 在对话完成后,自动添加下一步问题建议,以提升对话的话题深度与频率。 +* **文字转语音** + + 在问答文字框中添加一个音频播放按钮,使用 TTS 服务(需在[模型供应商](user-guide/getting-started/readme/model-providers.md)内置)并朗读其中的文字。 +* **文件上传** + + 支持以下文件类型:文档、图片、音频、视频以及其它文件类型。开启此功能后,应用使用者可以在应用对话的过程中随时上传并更新文件。最多支持同时上传 10 个文件,每个文件的大小上限为 15MB。 + + + Chatflow应用中文件上传功能的设置界面 + + +* **引用和归属** + + 常用于配合["知识检索"](node/knowledge-retrieval.md)节点共同使用,显示 LLM 给出答复的参考源文档及归属部分。 +* **内容审查** + + 支持使用审查 API 维护敏感词库,确保 LLM 能够回应和输出安全内容,详细说明请参考[敏感内容审查](../application-orchestrate/app-toolkits/moderation-tool.md)。 + +**用法:** + +除了 **文件上传** 功能以外,Chatflow 应用内的其它功能用法较为简单,开启后可以在应用交互页直观使用。 + +本章节将主要介绍 **文件上传** 功能的具体用法: + +**对于应用使用者而言:** 已开启文件上传功能的 Chatflow 应用将会在对话框右侧出现 "回形针" 标识,点击后即可上传文件并与 LLM 交互。 + + + Chatflow应用中使用文件上传功能的界面 + + +**对于应用开发者而言:** + +开启文件上传功能后,使用者发送的文件将上传至 `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 节点的输出变量。 + + + 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 + +**适用场景:** + +面向对话类情景,包括客户服务、语义搜索、以及其他需要在构建响应时进行多步逻辑的对话式应用程序。该类型应用的特点在于支持对生成的结果进行多轮对话交互,调整生成的结果。 + +常见的交互路径:给出指令 → 生成内容 → 就内容进行多次讨论 → 重新生成结果 → 结束。 + +在 "工作室" 页,轻点左侧 “创建空白应用”,然后选择 “聊天助手” 中的 “工作流编排”。 + +![](/zh-cn/img/8eb5a12939c298bc7cb9a778d10d42db.png) + +## Workflow + +**适用场景:** + +面向自动化和批处理情景,适合高质量翻译、数据分析、内容生成、电子邮件自动化等应用程序。该类型应用无法对生成的结果进行多轮对话交互。 + +常见的交互路径:给出指令 → 生成内容 → 结束 + +在 "工作室" 页,轻点左侧 “创建空白应用”,然后选择 “工作流” 完成创建。 + +![](/zh-cn/user-guide/.gitbook/assets/workflow.png) + +## 两者之间的差异 + +**应用类型差异** + +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。 + + + Chatflow应用中文件上传功能的设置界面 + + +开启该功能并不意味着赋予 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 节点的系统提示词内。 + + + LLM节点中粘贴系统提示词的界面 + + +完成上述设置后,应用的使用者可以在 WebApp 内粘贴文件 URL 或上传本地文件,然后就文档内容与 LLM 展开互动。应用使用者可以在对话过程中随时替换文件,LLM 将获取最新的文件内容。 + + + WebApp中粘贴URL进行对话的界面 + + +**在 LLM 节点中引用文件变量** + +对于某些特定类型的文件(如图片),可以在 LLM 节点中直接使用文件变量。这种方法特别适用于需要视觉分析的场景。以下是具体步骤: + +1. 在 LLM 节点中,启用 vision 功能。这允许模型处理图像输入(模型需要支持 vision)。 +2. 在 LLM 节点的变量选择器中,直接引用之前创建的文件变量如果是通过附加功能开启的文件上传,则选择 `sys.files` 变量。 +3. 在系统提示词中,指导模型如何处理图像输入。例如,你可以要求模型描述图像内容或回答关于图像的问题。 + +下面是一个示例配置: + + + LLM节点中直接使用文件变量的配置界面 + + +需要注意的是,直接在 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)变量赋值节点用于向可写入变量(例如会话变量)进行变量赋值。
diff --git a/zh-cn/user-guide/build-app/flow-app/nodes/answer.mdx b/zh-cn/user-guide/build-app/flow-app/nodes/answer.mdx new file mode 100644 index 00000000..fe80c088 --- /dev/null +++ b/zh-cn/user-guide/build-app/flow-app/nodes/answer.mdx @@ -0,0 +1,21 @@ +--- +title: 直接回复 +version: '简体中文' +--- + +### 定义 + +定义一个 Chatflow 流程中的回复内容。 + +你可以在文本编辑器中自由定义回复格式,包括自定义一段固定的文本内容、使用前置步骤中的输出变量作为回复内容、或者将自定义文本与变量组合后回复。 + +可随时加入节点将内容流式输出至对话回复,支持所见即所得配置模式并支持图文混排,如: + +1. 输出 LLM 节点回复内容 +2. 输出生成图片 +3. 输出纯文本 + + +直接回复节点可以不作为最终的输出节点,作为流程过程节点时,可以在中间步骤流式输出结果。 + + diff --git a/zh-cn/user-guide/build-app/flow-app/nodes/code.mdx b/zh-cn/user-guide/build-app/flow-app/nodes/code.mdx new file mode 100644 index 00000000..01dd980a --- /dev/null +++ b/zh-cn/user-guide/build-app/flow-app/nodes/code.mdx @@ -0,0 +1,101 @@ +--- +title: 代码 +version: '简体中文' +--- + +## 目录 + +* [介绍](code.md#介绍) +* [使用场景](code.md#使用场景) +* [本地部署](code.md#本地部署) +* [安全策略](code.md#安全策略) + +## 介绍 + +代码节点支持运行 Python / NodeJS 代码以在工作流程中执行数据转换。它可以简化您的工作流程,适用于Arithmetic、JSON transform、文本处理等情景。 + +该节点极大地增强了开发人员的灵活性,使他们能够在工作流程中嵌入自定义的 Python 或 Javascript 脚本,并以预设节点无法达到的方式操作变量。通过配置选项,你可以指明所需的输入和输出变量,并撰写相应的执行代码: + +![](/zh-cn/img/904eeba8ee23e89c189497c5fd90f499.png) + +## 配置 + +如果您需要在代码节点中使用其他节点的变量,您需要在`输入变量`中定义变量名,并引用这些变量,可以参考[变量引用](../key-concept.md#变量)。 + +## 使用场景 + +使用代码节点,您可以完成以下常见的操作: + +### 结构化数据处理 + +在工作流中,经常要面对非结构化的数据处理,如JSON字符串的解析、提取、转换等。最典型的例子就是HTTP节点的数据处理,在常见的API返回结构中,数据可能会被嵌套在多层JSON对象中,而我们需要提取其中的某些字段。代码节点可以帮助您完成这些操作,下面是一个简单的例子,它从HTTP节点返回的JSON字符串中提取了`data.name`字段: + +```python +def main(http_response: str) -> str: + import json + data = json.loads(http_response) + return { + # 注意在输出变量中声明result + 'result': data['data']['name'] + } +``` + +### 数学计算 + +当工作流中需要进行一些复杂的数学计算时,也可以使用代码节点。例如,计算一个复杂的数学公式,或者对数据进行一些统计分析。下面是一个简单的例子,它计算了一个数组的平方差: + +```python +def main(x: list) -> float: + return { + # 注意在输出变量中声明result + 'result' : sum([(i - sum(x) / len(x)) ** 2 for i in x]) / len(x) + } +``` + +### 拼接数据 + +有时,也许您需要拼接多个数据源,如多个知识检索、数据搜索、API调用等,代码节点可以帮助您将这些数据源整合在一起。下面是一个简单的例子,它将两个知识库的数据合并在一起: + +```python +def main(knowledge1: list, knowledge2: list) -> list: + return { + # 注意在输出变量中声明result + 'result': knowledge1 + knowledge2 + } +``` + +## 本地部署 + +如果您是本地部署的用户,您需要启动一个沙盒服务,它会确保恶意代码不会被执行,同时,启动该服务需要使用Docker服务,您可以在[这里](https://github.com/langgenius/dify/tree/main/docker/docker-compose.middleware.yaml)找到Sandbox服务的具体信息,您也可以直接通过`docker-compose`启动服务: + +```bash +docker-compose -f docker-compose.middleware.yaml up -d +``` + +> 如果您的系统安装了 Docker Compose V2 而不是 V1,请使用 `docker compose` 而不是 `docker-compose`。通过`$ docker compose version`检查这是否为情况。在[这里](https://docs.docker.com/compose/#compose-v2-and-the-new-docker-compose-command)阅读更多信息。 + +## 安全策略 + +无论是 Python3 还是 Javascript 代码执行器,它们的执行环境都被严格隔离(沙箱化),以确保安全性。这意味着开发者不能使用那些消耗大量系统资源或可能引发安全问题的功能,例如直接访问文件系统、进行网络请求或执行操作系统级别的命令。这些限制保证了代码的安全执行,同时避免了对系统资源的过度消耗。 + +### 常见问题 + +**在代码节点内填写代码后为什么无法保存?** + +请检查代码是否包含危险行为。例如: + +```python +def main() -> dict: + return { + "result": open("/etc/passwd").read(), + } +``` + +这段代码包含以下问题: + +* **未经授权的文件访问:** 代码试图读取 "/etc/passwd" 文件,这是 Unix/Linux 系统中存储用户账户信息的关键系统文件。 +* **敏感信息泄露:** "/etc/passwd" 文件包含系统用户的重要信息,如用户名、用户 ID、组 ID、home 目录路径等。直接访问可能会导致信息泄露。 + +危险代码将会被 Cloudflare WAF 自动拦截,你可以通过 “网页调试工具” 中的 “网络” 查看是否被拦截。 + +![](/zh-cn/img/7d29e700be8e5b6dfb91ff1263624368.png) diff --git a/zh-cn/user-guide/build-app/flow-app/nodes/doc-extractor.mdx b/zh-cn/user-guide/build-app/flow-app/nodes/doc-extractor.mdx new file mode 100644 index 00000000..f9429894 --- /dev/null +++ b/zh-cn/user-guide/build-app/flow-app/nodes/doc-extractor.mdx @@ -0,0 +1,65 @@ +--- +title: 文档提取器 +version: '简体中文' +--- + +### 定义 + +LLM 自身无法直接读取或解释文档的内容。因此需要将用户上传的文档,通过文档提取器节点解析并读取文档文件中的信息,转化文本之后再将内容传给 LLM 以实现对于文件内容的处理。 + +### 应用场景 + +* 构建能够与文件进行互动的 LLM 应用,例如 ChatPDF 或 ChatWord; +* 分析并检查用户上传的文件内容; + +### 节点功能 + +文档提取器节点可以理解为一个信息处理中心,通过识别并读取输入变量中的文件,提取信息后并转化为 string 类型输出变量,供下游节点调用。 + +![](/zh-cn/img/0cbfd9c1d9d56e6a528b134bd07662ec.png) + +文档提取器节点结构分为输入变量、输出变量。 + +#### 输入变量 + +文档提取器仅接受以下数据结构的变量: + +* `File`,单独一个文件 +* `Array[File]`,多个文件 + +文档提取器仅能够提取文档类型文件中的信息,例如 TXT、Markdown、PDF、HTML、DOCX 格式文件的内容,无法处理图片、音频、视频等格式文件。 + +#### 输出变量 + +输出变量固定命名为 text。输出的变量类型取决于输入变量: + +* 输入变量为 `File`,输出变量为 `string` +* 输入变量为 `Array[File]`,输出变量为 `array[string]` + +> Array 数组变量一般需配合列表操作节点使用,详细说明请参考 [list-operator.md](list-operator.md "mention")。 + +### 配置示例 + +在一个典型的文件交互问答场景中,文档提取器可以作为 LLM 节点的前置步骤,提取应用的文件信息并传递至下游的 LLM 节点,回答用户关于文件的问题。 + +本章节将通过一个典型的 ChatPDF 示例工作流模板,介绍文档提取器节点的使用方法。 + +![](/zh-cn/img/46a1f939088176a76e843422360ea948.png) + +**配置流程:** + +1. 为应用开启文件上传功能。在 [“开始”](start.md) 节点中添加**单文件变量**并命名为 `pdf`。 +2. 添加文档提取节点,并在输入变量内选中 `pdf` 变量。 +3. 添加 LLM 节点,在系统提示词内选中文档提取器节点的输出变量。LLM 可以通过该输出变量读取文件中的内容。 + +![](/zh-cn/img/4f307d5ece35155a24eac7013766f9ee.png) + +4\. 配置结束节点,在结束节点中选择 LLM 节点的输出变量。 + +配置完成后,应用将具备文件上传功能,使用者可以上传 PDF 文件并展开对话。 + +![](/zh-cn/img/0ae3f13cf725cb2c52c72cc354e592ee.png) + + +如需了解如何在聊天对话中上传文件并与 LLM 互动,请参考 [附加功能](../additional-features.md)。 + diff --git a/zh-cn/user-guide/build-app/flow-app/nodes/end.mdx b/zh-cn/user-guide/build-app/flow-app/nodes/end.mdx new file mode 100644 index 00000000..1a2862f8 --- /dev/null +++ b/zh-cn/user-guide/build-app/flow-app/nodes/end.mdx @@ -0,0 +1,30 @@ +--- +title: 结束 +version: '简体中文' +--- + +### 1 定义 + +定义一个工作流程结束的最终输出内容。每一个工作流在完整执行后都需要至少一个结束节点,用于输出完整执行的最终结果。 + +结束节点为流程终止节点,后面无法再添加其他节点,工作流应用中只有运行到结束节点才会输出执行结果。若流程中出现条件分叉,则需要定义多个结束节点。 + +结束节点需要声明一个或多个输出变量,声明时可以引用任意上游节点的输出变量。 + + +*** + +### 2 场景 + +在以下[长故事生成工作流](iteration.md#shi-li-2-chang-wen-zhang-die-dai-sheng-cheng-qi-ling-yi-zhong-bian-pai-fang-shi)中,结束节点声明的变量 `Output` 为上游代码节点的输出,即该工作流会在 Code3 节点执行完成之后结束,并输出 Code3 的执行结果。 + +![](/zh-cn/img/a686f00a80c78f84d88e01712f880386.png) + +**单路执行示例:** + +![](/zh-cn/img/463291f9ab3d62ff3b4094e97d8ea543.png) + +**多路执行示例:** + +![](/zh-cn/img/6dfcb4a8e25ae2132c663299eef596ea.png) + diff --git a/zh-cn/user-guide/build-app/flow-app/nodes/http-request.mdx b/zh-cn/user-guide/build-app/flow-app/nodes/http-request.mdx new file mode 100644 index 00000000..43faaa75 --- /dev/null +++ b/zh-cn/user-guide/build-app/flow-app/nodes/http-request.mdx @@ -0,0 +1,36 @@ +--- +title: HTTP 请求 +version: '简体中文' +--- + +### 1 定义 + +允许通过 HTTP 协议发送服务器请求,适用于获取外部数据、webhook、生成图片、下载文件等情景。它让你能够向指定的网络地址发送定制化的 HTTP 请求,实现与各种外部服务的互联互通。 + +该节点支持常见的 HTTP 请求方法: + +* **GET**,用于请求服务器发送某个资源。 +* **POST**,用于向服务器提交数据,通常用于提交表单或上传文件。 +* **HEAD**,类似于 GET 请求,但服务器不返回请求的资源主体,只返回响应头。 +* **PATCH**,用于在请求-响应链上的每个节点获取传输路径。 +* **PUT**,用于向服务器上传资源,通常用于更新已存在的资源或创建新的资源。 +* **DELETE**,用于请求服务器删除指定的资源。 + +你可以通过配置 HTTP 请求的包括 URL、请求头、查询参数、请求体内容以及认证信息等。 + + + 长故事迭代生成应用流程图 + + + +*** + +### 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 开始编写文本; + + + LLM节点配置界面 + + +3. 选择 **参数提取节点**,将故事文本转换成为数组(Array)结构。提取参数为 `sections` ,参数类型为 `Array[Object]` + + + 参数提取节点配置界面 + + +> 参数提取效果受模型推理能力和指令影响,使用推理能力更强的模型,在**指令**内增加示例可以提高参数提取的效果。 + +4. 将数组格式的故事大纲作为迭代节点的输入,在迭代节点内部使用 **LLM 节点** 进行处理 + + + 迭代节点配置界面 + + +在 LLM 节点内配置输入变量 `GenerateOverallOutline/output` 和 `Iteration/item` + + + LLM节点内部配置界面 + + +> 迭代的内置变量:`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 节点返回** + + + 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 根据检索内容来回复问题。 + +![知识库问答应用示例](https://assets-docs.dify.ai/dify-enterprise-mintlify/zh_CN/guides/workflow/node/34eefebfe8737186d89cc3cf2662a99c.png) + +*** + +### 配置指引 + +**配置流程:** + +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 节点; + +![知识检索配置](https://assets-docs.dify.ai/dify-enterprise-mintlify/zh_CN/guides/workflow/node/843b0c0899356335c728854821606fc3.png) + +**输出变量** + +![输出变量](https://assets-docs.dify.ai/dify-enterprise-mintlify/zh_CN/guides/workflow/node/ca3d688cb8644b6e0e1f7ce54256ee34.png) + +知识检索的输出变量 `result` 为从知识库中检索到的相关文本分段。其变量数据结构中包含了分段内容、标题、链接、图标、元数据信息。 + +**配置下游节点** + +在常见的对话类应用中,知识库检索的下游节点一般为 LLM 节点,知识检索的**输出变量** `result` 需要配置在 LLM 节点中的 **上下文变量** 内关联赋值。关联后你可以在提示词的合适位置插入 **上下文变量**。 + + +上下文变量是 LLM 节点内定义的特殊变量类型,用于在提示词内插入外部检索的文本内容。 + + +当用户提问时,若在知识检索中召回了相关文本,文本内容会作为上下文变量中的值填入提示词,提供 LLM 回复问题;若未在知识库检索中召回相关的文本,上下文变量值为空,LLM 则会直接回复用户问题。 + +![配置下游 LLM 节点](https://assets-docs.dify.ai/dify-enterprise-mintlify/zh_CN/guides/workflow/node/a9cb49ad4b8e0dee1f8bb20f49d1fe79.png) + +该变量除了可以作为 LLM 回复问题时的提示词上下文作为外部知识参考引用,另外由于其数据结构中包含了分段引用信息,同时可以支持应用端的 [**引用与归属**](../../knowledge-base/retrieval-test-and-citation.md#id-2-yin-yong-yu-gui-shu) 功能。 diff --git a/zh-cn/user-guide/build-app/flow-app/nodes/list-operator.mdx b/zh-cn/user-guide/build-app/flow-app/nodes/list-operator.mdx new file mode 100644 index 00000000..1675ec02 --- /dev/null +++ b/zh-cn/user-guide/build-app/flow-app/nodes/list-operator.mdx @@ -0,0 +1,88 @@ +--- +title: 列表操作 +version: '简体中文' +--- + +文件列表变量支持同时上传文档文件、图片、音频与视频文件等多种文件。应用使用者在上传文件时,所有文件都存储在同一个 `Array[File]` 数组类型变量内,**不利于后续单独处理文件。** + +> `Array`数据类型意味着该变量的实际值可能为 \[1.mp3, 2.png, 3.doc],LLM 仅支持读取图片文件或文本内容等单一值作为输入变量,无法直接读取数组变量。 + +### 节点功能 + +列表过滤器可以对文件的格式类型、文件名、大小等属性进行过滤与提取,将不同格式的文件传递给对应的处理节点,以实现对不同文件处理流的精确控制。 + +例如在一个应用中,允许用户同时上传文档文件和图片文件。不同的文件需要通过**列表操作节点**进行分拣,将不同的文件交由不同的流程处理。 + +![](/zh-cn/img/43ab9a37624bdba10ff37a5b9004db7f.png) + +列表操作节点一般用于提取数组变量中的信息,通过设置条件将其转化为能够被下游节点所接受的变量类型。它的结构分为输入变量、过滤条件、排序、取前 N 项、输出变量。 + +![](/zh-cn/img/faaffe7d19591aeb9983629b94f53a66.png) + +#### 输入变量 + +列表操作节点仅接受以下数据结构变量: + +* Array\[string] +* Array\[number] +* Array\[file] + +#### 过滤条件 + +处理输入变量中的数组,添加过滤条件。从数组中分拣所有满足条件的数组变量,可以理解为对变量的属性进行过滤。 + +举例:文件中可能包含多重维度的属性,例如文件名、文件类型、文件大小等属性。过滤条件允许设置筛选条件,选择并提取数组变量中的特定文件。 + +支持提取以下变量: + +* type 文件类别,包含图片,文档,音频和视频类型 +* size 文件大小 +* name 文件名 +* url 指的是应用使用者通过 URL 上传的文件,可填写完整 URL 进行筛选 +* extension 文件拓展名 +* mime\_type + + [MIME 类型](https://datatracker.ietf.org/doc/html/rfc2046)是用来标识文件内容类型的标准化字符串。示例: "text/html" 表示 HTML 文档。 +* transfer\_method + + 文件上传方式,分为本地上传或通过 URL 上传 + +#### 排序 + +提供对于输入变量中数组的排序能力,支持根据文件属性进行排序。 + +* 升序排列 + + 默认排序选项,按照从小到大排序。对于字母和文本,按字母表顺序排列(A - Z) +* 降序排列 + + 由大到小排序,对于字母和文本,按字母表倒序排列(Z - A) + +该选项常用于配合输出变量中的 first\_record 及 last\_record 使用。 + +#### 取前 N 项 + +可以在 1-20 中选值,用途是为了选中数组变量的前 n 项。 + +#### 输出变量 + +满足各项过滤条件的数组元素。过滤条件、排序和限制可以单独开启。如果同时开启,则返回符合所有条件的数组元素。 + +* Result,过滤结果,数据类型为数组变量。若数组中仅包含 1 个文件,则输出变量仅包含 1 个数组元素; +* first\_record,筛选完的数组的首元素,即 result\[0]; +* last\_record,筛选完的数组的尾元素,即 result\[array.length-1]。 + +*** + +### 配置案例 + +在文件交互问答场景中,应用使用者可能会同时上传文档文件或图片文件。LLM 仅支持识别图片文件的能力,不支持读取文档文件。此时需要用到 [列表操作](list-operator.md) 节点预处理文件变量的数组,将不同的文件类型并发送至对应的处理节点。编排步骤如下: + +1. 开启 [Features](../additional-features.md) 功能,并在文件类型中勾选 “图片” + “文档文件” 类型。 +2. 添加两个列表操作节点,在 “过滤” 条件中分别设置提取图片与文档变量。 +3. 提取文档文件变量,传递至 “文档提取器” 节点;提取图片文件变量,传递至 “LLM” 节点。 +4. 在末尾添加 “直接回复” 节点,填写 LLM 节点的输出变量。 + +![](/zh-cn/img/1eb561e0c60741f668a93533ed98bfb5.png) + +应用使用者同时上传文档文件和图片后,文档文件自动分流至文档提取器节点,图片文件自动分流至 LLM 节点以实现对于混合文件的共同处理。 diff --git a/zh-cn/user-guide/build-app/flow-app/nodes/llm.mdx b/zh-cn/user-guide/build-app/flow-app/nodes/llm.mdx new file mode 100644 index 00000000..538b7721 --- /dev/null +++ b/zh-cn/user-guide/build-app/flow-app/nodes/llm.mdx @@ -0,0 +1,159 @@ +--- +title: LLM +version: '简体中文' +--- + +### 定义 + +调用大语言模型的能力,处理用户在 "开始" 节点中输入的信息(自然语言、上传的文件或图片),给出有效的回应信息。 + + + LLM 节点 + + +*** + +### 应用场景 + +LLM 节点是 Chatflow/Workflow 的核心节点。该节点能够利用大语言模型的对话/生成/分类/处理等能力,根据给定的提示词处理广泛的任务类型,并能够在工作流的不同环节使用。 + +* **意图识别**,在客服对话情景中,对用户问题进行意图识别和分类,导向下游不同的流程。 +* **文本生成**,在文章生成情景中,作为内容生成的节点,根据主题、关键词生成符合的文本内容。 +* **内容分类**,在邮件批处理情景中,对邮件的类型进行自动化分类,如咨询/投诉/垃圾邮件。 +* **文本转换**,在文本翻译情景中,将用户提供的文本内容翻译成指定语言。 +* **代码生成**,在辅助编程情景中,根据用户的要求生成指定的业务代码,编写测试用例。 +* **RAG**,在知识库问答情景中,将检索到的相关知识和用户问题重新组织回复问题。 +* **图片理解**,使用 vision 能力的多模态模型,能对图像内的信息进行理解和问答。 + +选择合适的模型,编写提示词,你可以在 Chatflow/Workflow 中构建出强大、可靠的解决方案。 + +*** + +### 配置示例 + +在应用编辑页中,点击鼠标右键或轻点上一节点末尾的 + 号,添加节点并选择 LLM。 + + + 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**,并作为工具参数进行精确查询。 + + + Arxiv 论文检索工具流程图 + + +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)。 + +![](/zh-cn/img/ddca497c976020d9b8466ae1db553fd0.png) + +### 输入字段 + +输入字段功能由应用开发者设置,通常用于让应用使用者主动补全更多信息。例如在周报应用中要求使用者按照格式预先提供更多背景信息,如姓名、工作日期区间、工作详情等。这些前置信息将有助于 LLM 生成质量更高的答复。 + +支持以下六种类型输入变量,所有变量均可设置为必填项: + +* **文本**:短文本,由应用使用者自行填写内容,最大长度 256 字符。 +* **段落**:长文本,允许应用使用者输入较长字符。 +* **下拉选项**:由应用开发者固定选项,应用使用者仅能选择预设选项,无法自行填写内容。 +* **数字**:仅允许用户输入数字。 +* **单文件**:允许应用使用者单独上传文件,支持文档类型文件、图片、音频、视频和其它文件类型。支持通过本地上传文件或粘贴文件 URL。详细用法请参考[文件上传](../file-upload.md)。 +* **文件列表**:允许应用使用者批量上传文件,支持文档类型文件、图片、音频、视频和其它文件类型。支持通过本地上传文件或粘贴文件 URL。详细用法请参考[文件上传](../file-upload.md)。 + +> Dify 内置的文档提取器节点只能够处理部分格式的文档文件。如需处理图片、音频或视频类型文件,请参考[外部数据工具](../../extension/api-based-extension/external-data-tool.md)搭建对应文件的处理节点。 + +配置完成后,用户在使用应用前将按照输入项指引,向 LLM 提供必要信息。更多的信息将有助于 LLM 提升问答效率。 + +![](/zh-cn/img/b6ead0b90a97e0a79075a57798b883cc.png) + +### 系统变量 + +系统变量指的是在 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 应用中的运行情况 | 面向具备开发能力的用户,可以通过此参数追踪应用的历次运行情况 | + +![](/zh-cn/img/cb39be409f0037549d45f4b7d05aa9ce.png) + +**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 应用中的运行情况 | 面向具备开发能力的用户,可以通过此参数追踪应用的历次运行情况 | + +![](/zh-cn/img/233efef6802ae700489f3ab3478bca6b.png) \ 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 %} +``` + + + 知识检索节点输出转换为 Markdown示例 + + +你可以参考 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 条件分支后的多路聚合** + + + 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 tags + result = f"{json_str}" + + return { + "result": result + } + except Exception as e: + return { + "result": f"Error: {str(e)}" + } +``` + +**场景 2** + +**记录用户的初始偏好信息**,在会话内记住用户输入的语言偏好,在后续对话中持续使用该语言类型进行回复。 + +示例:用户在对话开始前,在 `language` 输入框内指定了 "中文",该语言将会被写入会话变量,LLM 在后续进行答复时会参考会话变量中的信息,在后续对话中持续使用"中文"进行回复。 + + + 记录用户的初始偏好信息流程图 + + +**配置流程:** + +**设置会话变量**:首先设置一个会话变量 `language`,在会话流程开始时添加一个条件判断节点,用来判断 `language` 变量的值是否为空。 + +**变量写入/赋值**:首轮对话开始时,若 `language` 变量值为空,则使用 LLM 节点来提取用户输入的语言,再通过变量赋值节点将该语言类型写入到会话变量 `language` 中。 + +**变量读取**:在后续对话轮次中 `language` 变量已存储用户语言偏好。在后续对话中,LLM 节点通过引用 language 变量,使用用户的偏好语言类型进行回复。 + +**场景 3** + +**辅助 Checklist 检查**,在会话内通过会话变量记录用户的输入项,更新 Checklist 中的内容,并在后续对话中检查遗漏项。 + +示例:开始对话后,LLM 会要求用户在对话框内输入 Checklist 所涉及的事项,用户一旦提及了 Checklist 中的内容,将会更新并存储至会话变量内。LLM 会在每轮对话后提醒用户继续补充遗漏项。 + + + 辅助 Checklist 检查流程图 + + +**配置流程:** + +* **设置会话变量:** 首先设置一个会话变量 `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 至某个节点,显示 `+` 按钮,支持新建多个节点,创建后自动形成并行结构。 + + + 新建并行结构方式1 + + +**方式 2** + +拖拽节点末尾的 `+` 按钮,拉出连线形成并行结构。 + + + 新建并行结构方式2 + + +**方式 3** + +如果画布存在多个节点,通过可视化拖拽的方式组成并行结构。 + + + 新建并行结构方式3 + + +**方式 4** + +除了在画布中通过直接添加并行节点或可视化拖拽方式组成并行结构,你也可以在节点右侧清单的"下一步"中添加并行节点,自动生成并行结构。 + + + 新建并行结构方式4 + + +**Tips:** + +* 画布上的"线"可以被删除; +* 并行结构的下游节点可以是任意节点; +* 在 Workflow 类型应用内需确定唯一的 "end" 节点; +* Chatflow 类型应用支持添加多个 **"直接回复"** 节点,该类型应用内的所有并行结构在末尾处均需要配置 **"直接回复"** 节点才能正常输出各个并行结构里的内容; +* 所有的并行结构都会同时运行;并行结构内的节点处理完任务后即输出结果,**输出结果时不存在顺序关系**。并行结构越简单,输出结果的速度越快。 + + + 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 类型应用提供以下系统变量: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
变量名称数据类型说明备注

sys.files

[LEGACY]

Array[File]文件参数,存储用户初始使用应用时上传的图片图片上传功能需在应用编排页右上角的 "功能" 处开启
sys.user_idString用户 ID,每个用户在使用工作流应用时,系统会自动向用户分配唯一标识符,用以区分不同的对话用户
sys.app_idString应用 ID,系统会向每个 Workflow 应用分配一个唯一的标识符,用以区分不同的应用,并通过此参数记录当前应用的基本信息面向具备开发能力的用户,通过此参数区分并定位不同的 Workflow 应用
sys.workflow_idStringWorkflow ID,用于记录当前 Workflow 应用内所包含的所有节点信息面向具备开发能力的用户,可以通过此参数追踪并记录 Workflow 内的包含节点信息
sys.workflow_run_idStringWorkflow 应用运行 ID,用于记录 Workflow 应用中的运行情况面向具备开发能力的用户,可以通过此参数追踪应用的历次运行情况
+ +![](/zh-cn/img/c405efa31fd5708542fdc3bd7c0cb708.png) + +#### Chatflow + +Chatflow 类型应用提供以下系统变量: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
变量名称数据类型说明备注
sys.queryString用户在对话框中初始输入的内容
sys.filesArray[File]用户在对话框内上传的图片图片上传功能需在应用编排页右上角的 "功能" 处开启
sys.dialogue_countNumber

用户在与 Chatflow 类型应用交互时的对话轮数。每轮对话后自动计数增加 1,可以和 if-else 节点搭配出丰富的分支逻辑。

例如到第 X 轮对话时,回顾历史对话并给出分析

sys.conversation_idString对话框交互会话的唯一标识符,将所有相关的消息分组到同一个对话中,确保 LLM 针对同一个主题和上下文持续对话
sys.user_idString分配给每个应用用户的唯一标识符,用以区分不同的对话用户
sys.app_idString应用 ID,系统会向每个 Workflow 应用分配一个唯一的标识符,用以区分不同的应用,并通过此参数记录当前应用的基本信息面向具备开发能力的用户,通过此参数区分并定位不同的 Workflow 应用
sys.workflow_idStringWorkflow ID,用于记录当前 Workflow 应用内所包含的所有节点信息面向具备开发能力的用户,可以通过此参数追踪并记录 Workflow 内的包含节点信息
sys.workflow_run_idStringWorkflow 应用运行 ID,用于记录 Workflow 应用中的运行情况面向具备开发能力的用户,可以通过此参数追踪应用的历次运行情况
+ +![](/zh-cn/img/e387366fe2643688d57e6b9a69eacb1b.png) + +### 环境变量 + +**环境变量用于保护工作流内所涉及的敏感信息**,例如运行工作流时所涉及的 API 密钥、数据库密码等。它们被存储在工作流程中,而不是代码中,以便在不同环境中共享。 + +![](/zh-cn/img/d27ebecdc87e630212fb0ed866bf8e9e.png) + +支持以下三种数据类型: + +* String 字符串 +* Number 数字 +* Secret 密钥 + +环境变量拥有以下特性: + +* 环境变量可在大部分节点内全局引用; +* 环境变量命名不可重复; +* 环境变量为只读变量,不可写入; + +### 会话变量 + +> 会话变量面向多轮对话场景,而 Workflow 类型应用的交互是线性而独立的,不存在多次对话交互的情况,因此会话变量仅适用于 Chatflow 类型(聊天助手 → 工作流编排)应用。 + +**会话变量允许应用开发者在同一个 Chatflow 会话内,指定需要被临时存储的特定信息,并确保在当前工作流内的多轮对话内都能够引用该信息**,如上下文、上传至对话框的文件(即将上线)、 用户在对话过程中所输入的偏好信息等。好比为 LLM 提供一个可以被随时查看的"备忘录",避免因 LLM 记忆出错而导致的信息偏差。 + +例如你可以将用户在首轮对话时输入的语言偏好存储至会话变量中,LLM 在回答时将参考会话变量中的信息,并在后续的对话中使用指定的语言回复用户。 + +![](/zh-cn/img/338f93f401142fea4936a67a615eba32.png) + +**会话变量**支持以下六种数据类型: + +* String 字符串 +* Number 数值 +* Object 对象 +* Array\[string] 字符串数组 +* Array\[number] 数值数组 +* Array\[object] 对象数组 + +**会话变量**具有以下特性: + +* 会话变量可在大部分节点内全局引用; +* 会话变量的写入需要使用[变量赋值](./nodes/variable-assigner)节点; +* 会话变量为可读写变量; + +关于如何将会话变量与变量赋值节点配合使用,请参考[变量赋值](./nodes/variable-assigner)节点说明。 + +### 注意事项 + +* 为避免变量名重复,节点命名不可重复 +* 节点的输出变量一般为固定变量,不可编辑 \ No newline at end of file diff --git a/zh-cn/user-guide/build-app/text-generator.mdx b/zh-cn/user-guide/build-app/text-generator.mdx new file mode 100644 index 00000000..8189cdfc --- /dev/null +++ b/zh-cn/user-guide/build-app/text-generator.mdx @@ -0,0 +1,87 @@ +--- +title: 文本生成应用 +version: '简体中文' +--- + +文本生成应用是一种专门产出特定内容格式的应用类型,这类应用允许用户输入具体需求或参数,随后自动生成符合预设格式的文本输出。 + +与提供持续对话能力的聊天助手不同,文本生成应用处理单次输入并生成结果,提供一次性的内容生成服务,例如 Midjourney Prompt Generator 或其它固定格式内容的生成器。 + +## 适用场景 + +文本生成应用适合于需要快速、批量生成标准化内容的场景,如报告撰写、模板化内容批处理生成等领域。 + +## 创建与编排应用 + +下文以一个 **周报生成器** 应用为例来介绍编排对话型应用。 + +### 1. 创建应用 + +在首页点击 "创建应用" 按钮创建应用。填上应用名称,应用类型选择**文本生成应用**。 + +![创建文本生成应用](https://assets-docs.dify.ai/2025/02/e18899de028f6faddcbf3e1d8ef94efb.png) + +### 2. 选择模型供应商 + +聊天助手应用的底层驱动能力为 AI 大模型,不同的底层模型将影响问答质量,因此需要先在[模型供应商](/zh-cn/user-guide/models/model-configuration)内配置所需的 API Key。 + +### 3. 编排应用 + +创建应用后会自动跳转到应用概览页,你可以在此处为聊天应用设置变量、添加上下文以及额外的聊天功能。 + +![](/zh-cn/img/ed7368f117afa02ca5359472ea1167e8.png) + +**填写提示词** + +提示词用于约束 AI 给出专业的回复,让回应更加精确。你可以借助内置的提示生成器,编写合适的提示词。提示词内支持插入表单变量,例如 `{{input}}`。提示词中的变量的值会替换成用户填写的值。 + +示例: +1. 输入提示指令,要求给出一段周报编写场景的提示词。 +2. 右侧内容框将自动生成提示词。 +3. 你可以在提示词内插入自定义变量。 + +![](/zh-cn/img/592adde305ffe7a9b2f538b20a14483e.png) + +### 添加上下文 + +如果想要让 AI 基于知识库中的内容生成文本,例如生成符合企业内部标准的内容,,可以在应用的“上下文"内引用知识库。 + +![](https://assets-docs.dify.ai/2025/02/838312f6b88927a08c9f113c9a557608.png) + +## 调试应用 + +在右侧填写用户输入项,输入内容进行调试。 + +![](/zh-cn/img/302d73e248bc80a357e83ab3d65dcf32.png) + +如果回答结果不理想,可以调整提示词和底层模型。你也可以使用多个模型同步进行调试,搭配出合适的配置。 + +![](/zh-cn/img/241e9bd270b26a8b9658a784ecf9bf13.png) + +**多个模型进行调试:** + +如果使用单一模型调试时感到效率低下,你也可以使用 **"多个模型进行调试"** 功能,批量检视模型的回答效果。 + +![](/zh-cn/img/5a6cff31c1fa94912ee39306739a2d6e.png) + +最多支持同时添加 4 个大模型。 + +![](/zh-cn/img/60109394134b665cb856505503f4d975.png) + +⚠️ 使用多模型调试功能时,如果仅看到部分大模型,这是因为暂未添加其它大模型的 Key。你可以在"增加新供应商"内手动添加多个模型的 Key。 + +### 应用扩展功能 + +若希望提升用户在使用应用时的体验,可以为应用添加额外的扩展功能,例如对话开场白、文件上传等功能。 + +## 发布应用 + +调试好应用后,点击右上角的 **"发布"** 按钮生成独立的 AI 应用。除了通过公开 URL 体验该应用,你也进行基于 APIs 的二次开发、嵌入至网站内等操作。详情请参考[发布应用](/zh-cn/user-guide/application-publishing/launch-your-webapp-quickly/web-app-settings)。 + +如果想定制已发布的应用,可以 Fork 我们的开源的 WebApp 的模版。基于模版改成符合你的情景与风格需求的应用。 + +## 常见问题 + +**如何在文本生成器内添加自定义工具?** + +文本生成器类型应用不支持添加第三方工具,你可以在 Agent 类型应用内添加自定义工具。 diff --git a/zh-cn/user-guide/knowledge-base/api-documentation/maintain-dataset-via-api.mdx b/zh-cn/user-guide/knowledge-base/api-documentation/maintain-dataset-via-api.mdx index fdda8d39..9a8852a6 100644 --- a/zh-cn/user-guide/knowledge-base/api-documentation/maintain-dataset-via-api.mdx +++ b/zh-cn/user-guide/knowledge-base/api-documentation/maintain-dataset-via-api.mdx @@ -20,9 +20,7 @@ version: '简体中文' 进入知识库页面,在左侧的导航中切换至 **API** 页面。在该页面中你可以查看 Dify 提供的知识库 API 文档,并可以在 **API 密钥** 中管理可访问知识库 API 的凭据。 - - - +![](https://assets-docs.dify.ai/2025/03/82ef51dc6886fb8301a2b85a920b12d0.png) ### 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: 导入文本数据简介 创建知识库时支持通过在线数据导入。知识库支持导入以下两种在线数据: - + 了解如何从 Notion 导入数据 - + 了解如何从网站导入数据 diff --git a/zh-cn/user-guide/knowledge-base/create-knowledge-and-upload-documents/setting-indexing-methods.mdx b/zh-cn/user-guide/knowledge-base/create-knowledge-and-upload-documents/setting-indexing-methods.mdx index 268ebba8..079ecbb0 100644 --- a/zh-cn/user-guide/knowledge-base/create-knowledge-and-upload-documents/setting-indexing-methods.mdx +++ b/zh-cn/user-guide/knowledge-base/create-knowledge-and-upload-documents/setting-indexing-methods.mdx @@ -10,9 +10,9 @@ title: 3. 设定索引方法与检索设置 提供 **高质量** 与 **经济** 两种索引方法,其中分别提供不同的检索设置选项: - -**注意:** 原 **Q\&A 模式(仅适用于社区版)**已成为高质量索引方法下的一个可选项。 - + + 原 Q&A 模式(仅适用于社区版)已成为高质量索引方法下的一个可选项。 + @@ -20,7 +20,7 @@ title: 3. 设定索引方法与检索设置 在高质量模式下,使用 Embedding 嵌入模型将已分段的文本块转换为数字向量,帮助更加有效地压缩与存储大量文本信息;**使得用户问题与文本之间的匹配能够更加精准**。 - 将内容块向量化并录入至数据库后,需要通过有效的检索方式调取与用户问题相匹配的内容块。高质量模式提供向量检索、全文检索和混合检索三种检索设置。关于各个设置的详细说明,请继续阅读[检索设置](setting-indexing-methods.md#retrieval_settings)。 + 将内容块向量化并录入至数据库后,需要通过有效的检索方式调取与用户问题相匹配的内容块。高质量模式提供向量检索、全文检索和混合检索三种检索设置。关于各个设置的详细说明,请继续阅读[检索设置](#指定检索方式)。 选择高质量模式后,当前知识库的索引方式无法在后续降级为 **“经济”索引模式**。如需切换,建议重新创建知识库并重选索引方式。 @@ -45,7 +45,7 @@ title: 3. 设定索引方法与检索设置 **经济** - 在经济模式下,每个区块内使用 10 个关键词进行检索,降低了准确度但无需产生费用。对于检索到的区块,仅提供倒排索引方式选择最相关的区块,详细说明请阅读[下文](setting-indexing-methods.md#dao-pai-suo-yin)。 + 在经济模式下,每个区块内使用 10 个关键词进行检索,降低了准确度但无需产生费用。对于检索到的区块,仅提供倒排索引方式选择最相关的区块,详细说明请阅读[下文](#指定检索方式)。 选择经济型索引方式后,若感觉实际的效果不佳,可以在知识库设置页中升级为 **“高质量”索引方式**。 @@ -162,6 +162,6 @@ title: 3. 设定索引方法与检索设置 指定检索设置后,你可以参考以下文档查看在实际场景下,关键词与内容块的匹配情况。 - + 查看实际场景下的关键词与内容块匹配情况 diff --git a/zh-cn/user-guide/knowledge-base/integrate-knowledge-within-application.mdx b/zh-cn/user-guide/knowledge-base/integrate-knowledge-within-application.mdx index 4780e251..33d3bfd0 100644 --- a/zh-cn/user-guide/knowledge-base/integrate-knowledge-within-application.mdx +++ b/zh-cn/user-guide/knowledge-base/integrate-knowledge-within-application.mdx @@ -3,7 +3,7 @@ title: 在应用内集成知识库 version: '简体中文' --- -知识库可以作为外部知识提供给大语言模型用于精确回复用户问题,你可以在 Dify 的[所有应用类型](user-guide/application-orchestrate/#application\_type)内关联已创建的知识库。 +知识库可以作为外部知识提供给大语言模型用于精确回复用户问题,你可以在 Dify 的[所有应用类型](https://docs.dify.ai/zh-hans/guides/application-orchestrate#application_type)内关联已创建的知识库。 以聊天助手为例,使用流程如下: @@ -32,7 +32,7 @@ version: '简体中文' 举例:A 应用的上下文关联了 K1、K2、K3 三个知识库,当用户输入问题后,将在三个知识库内检索并汇总多条内容。为确保能找到最匹配的内容,需要通过 Rerank 策略确定与用户问题最相关的内容,确保结果更加精准与可信。 -在实际问答场景中,每个知识库的内容来源和检索方式可能都有所差异。针对检索返回的多条混合内容,[Rerank 策略](/zh-cn/user-guide/knowledge-base/indexing-and-retrieval/rerank)是一个更加科学的内容排序机制。它可以帮助确认候选内容列表与用户问题的匹配度,改进多个知识间排序的结果以找到最匹配的内容,提高回答质量和用户体验。 +在实际问答场景中,每个知识库的内容来源和检索方式可能都有所差异。针对检索返回的多条混合内容,Rerank 策略是一个更加科学的内容排序机制。它可以帮助确认候选内容列表与用户问题的匹配度,改进多个知识间排序的结果以找到最匹配的内容,提高回答质量和用户体验。 考虑到 Rerank 的使用成本和业务需求,多路召回模式提供了以下两种 Rerank 设置: @@ -58,12 +58,10 @@ Rerank 模型是一种外部评分系统,它会计算用户问题与给定的 虽然此方法会产生一定的额外花费,但是更加擅长处理知识库内容来源复杂的情况,例如混合了语义查询和关键词匹配的内容,或返回内容存在多语言的情况。 -> 点击了解更多[重排序](/zh-cn/user-guide/knowledge-base/indexing-and-retrieval/rerank)机制。 - Dify 目前支持多个 Rerank 模型,进入 “模型供应商” 页填入 Rerank 模型(例如 Cohere、Jina AI 等模型)的 API Key。 - + **可调参数** @@ -75,7 +73,106 @@ Dify 目前支持多个 Rerank 模型,进入 “模型供应商” 页填入 R 用于设置文本片段筛选的相似度阈值。向量检索的相似度分数需要超过设置的分数后才会被召回,数值越高,预期被召回的文本数量越少。 -多路召回模式在多知识库检索时能够获得质量更高的召回效果,因此更**推荐将召回模式设置为多路召回**。 +### 使用元数据筛选知识 + +#### 聊天流/工作流 + +在 **聊天流/工作流** 的 **知识检索** 节点中,你可以使用 **元数据筛选** 功能精确检索文档。该功能有助于你根据文档的元数据字段(如标签、类别或访问权限)优化检索结果。 + +##### 配置步骤 + +1. 选择筛选模式 + + - **禁用模式**(默认):禁用 **元数据筛选** 功能,不配置任何筛选条件。 + + - **自动模式**:系统会根据传输给该 **知识检索** 节点的 **查询变量** 自动配置筛选条件,适用于简单的筛选需求。 + + > 启用自动模式后,你依然需要在 **模型** 栏中选择合适的大模型以执行文档检索任务。 + + ![model_selection](https://assets-docs.dify.ai/2025/03/3d4ca70e3340d98d0f9824958c667def.png) + + - **手动模式**:用户可以手动配置筛选条件,自由设置筛选规则,适用于复杂的筛选需求。 + +![](https://assets-docs.dify.ai/2025/03/ec6329e265e035e3a0d6941c9313a19d.png) + +2. *(可选)* 如果你选择了 **手动模式**,请参照以下步骤配置筛选条件: + + 1. 点击 **条件** 按钮,弹出配置框。 + + ![conditions](https://assets-docs.dify.ai/2025/03/cd80d150f6f5646350b7ac8dfee46429.png) + + 2. 点击配置框中的 **+添加条件** 按钮: + + - 可以从下拉列表中选择一个已选中知识库内的元数据字段,添加到筛选条件列表中。 + + > 如果你同时选择了多个知识库,下拉列表只会显示这些知识库共有的元数据字段。 + + - 可以在 **搜索元数据** 搜索框中搜索你需要的字段,添加到筛选条件列表中。 + + ![add_condition](https://assets-docs.dify.ai/2025/03/72678c4174f753f306378b748fbe6635.png) + + 3. *(可选)* 如果需要添加多条字段,可以重复点击 **+添加条件** 按钮。 + + ![add_more_fields](https://assets-docs.dify.ai/2025/03/aeb518c40aabdf467c9d2c23016d0a16.png) + + 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)**,并选择该**聊天流/工作流**中需要用于筛选文档的变量。 + + ![variable](https://assets-docs.dify.ai/2025/03/4c2c55ffcf0f72553fabdf23f86597d0.png) + + - **常量**:选择 **常量(Constant)**,并手动输入你需要的常量值。 + + > **时间** 字段类型仅支持使用常量筛选文档。如果你选用时间字段筛选文档,系统会弹出时间选择器,供你选择具体的时间节点。 + + ![date_picker](https://assets-docs.dify.ai/2025/03/593da1575ddc995d938bd0cc3847cf3c.png) + + + 当你输入常量筛选值时,该筛选值必须与该元数据字段值的文本完全一致,系统才能返回该文档。例如,当你设置筛选条件为 `starts with "App"` 或 `contains "App"` 时,系统会返回标记为 “Apple” 的文档,但不会返回标记为 “apple” 或 “APPLE” 的文档。 + + + 6. 配置筛选条件之间的逻辑关系 `AND` 或 `OR`,以控制筛选的精确度。 + - `AND`:当一个文档满足所有筛选条件时,才能检索到该文档。 + - `OR`:只要一个文档满足其中任意一个筛选条件,就可以检索到该文档。 + + ![logic](https://assets-docs.dify.ai/2025/03/822dac015308dc5c01768afc0697c1ad.png) + + 7. 关闭弹窗,系统将自动保存你的选择。 + +#### 聊天助手 + +在**聊天助手**中,**元数据筛选** 功能位于界面左下方的 **上下文** 板块下方,配置方法与**聊天流/工作流**中的操作一致。你可以按照相同的步骤配置元数据筛选条件。 + +![chatbot](https://assets-docs.dify.ai/2025/03/9d9a64bde687a686f24fd99d6f193c57.png) + +### 在知识库内查看已关联的应用 + +知识库将会在左侧信息栏中显示已关联的应用数量。将鼠标悬停至圆形信息图标时将显示所有已关联的 Apps 列表,点击右侧的跳转按钮即可快速查看对应的应用。 + +![查看已关联的应用](https://assets-docs.dify.ai/2024/12/28899b9b0eba8996f364fb74e5b94c7f.png) ### 常见问题 diff --git a/zh-cn/user-guide/knowledge-base/knowledge-and-documents-maintenance/introduction.mdx b/zh-cn/user-guide/knowledge-base/knowledge-and-documents-maintenance/introduction.mdx index c039fa84..06de5e21 100644 --- a/zh-cn/user-guide/knowledge-base/knowledge-and-documents-maintenance/introduction.mdx +++ b/zh-cn/user-guide/knowledge-base/knowledge-and-documents-maintenance/introduction.mdx @@ -1,5 +1,5 @@ --- -title: 管理方式简介 +title: 管理知识库 --- > 知识库管理页仅面向团队所有者、团队管理员、拥有编辑权限的角色开放。 @@ -13,13 +13,13 @@ title: 管理方式简介 * **知识库名称**,用于区分不同的知识库。 * **知识库描述**,用于描述知识库内文档代表的信息。 * **可见权限**,提供 **“只有我”** 、**“所有团队成员”** 和 **“部分团队成员”** 三种权限范围。不具有权限的人将无法访问该知识库。若选择将知识库公开至其它成员,则意味着其它成员同样具备该知识库的查看、编辑和删除权限。 -* **索引方法**,详细说明请参考[索引方法文档](../create-knowledge-and-upload-documents/setting-indexing-methods.md)。 +* **索引方法**,详细说明请参考[索引方法文档](../create-knowledge-and-upload-documents/setting-indexing-methods)。 * **Embedding 模型**, 修改知识库的嵌入模型,修改 Embedding 模型将对知识库内的所有文档重新嵌入,原先的嵌入将会被删除。 -* **检索设置**,详细说明请参考[检索设置文档](../create-knowledge-and-upload-documents/setting-indexing-methods.md)。 +* **检索设置**,详细说明请参考[检索设置文档](../create-knowledge-and-upload-documents/setting-indexing-methods)。 *** -#### 查看知识库内已关联的应用 +### 查看知识库内已关联的应用 知识库将会在左侧信息栏中显示已关联的应用数量。将鼠标悬停至圆形信息图标时将显示所有已关联的 Apps 列表,点击右侧的跳转按钮即可快速查看对应的应用。 @@ -33,7 +33,7 @@ title: 管理方式简介 支持管理知识库内的文档和对应的文档分段。详细说明请参考以下文档: - + 详细说明请参考此文档 @@ -41,7 +41,7 @@ title: 管理方式简介 Dify 知识库提供整套标准 API ,开发者通过 API 调用对知识库内的文档、分段进行增删改查等日常管理维护操作,请参考以下文档: - + 详细说明请参考此文档 diff --git a/zh-cn/user-guide/knowledge-base/knowledge-and-documents-maintenance/maintain-knowledge-documents.mdx b/zh-cn/user-guide/knowledge-base/knowledge-and-documents-maintenance/maintain-knowledge-documents.mdx index 1e4143bf..b46ab4df 100644 --- a/zh-cn/user-guide/knowledge-base/knowledge-and-documents-maintenance/maintain-knowledge-documents.mdx +++ b/zh-cn/user-guide/knowledge-base/knowledge-and-documents-maintenance/maintain-knowledge-documents.mdx @@ -1,9 +1,7 @@ --- -title: 管理知识库 +title: 维护知识库内文档 --- -## 管理知识库中的文档 - ### 添加文档 知识库是文档的集合。文档支持本地上传,或导入其它在线数据源。知识库内的文档对应数据源中的一个文件单位,例如 Notion 库内的一篇文档或新的在线文档网页。 @@ -71,7 +69,7 @@ title: 管理知识库 知识库中的文档支持单独添加文本分段,不同的分段模式对应不同的分段添加方法。 - + 添加文本分段为付费功能,请前往[此处](https://dify.ai/pricing)升级账号以使用功能。 @@ -132,4 +130,4 @@ title: 管理知识库 ### 元数据管理 -如需了解元数据的相关信息,请参阅 [元数据](https://docs.dify.ai/zh-hans/guides/knowledge-base/metadata)。 \ No newline at end of file +如需了解元数据的相关信息,请参阅 [元数据](../metadata)。 diff --git a/zh-cn/user-guide/knowledge-base/knowledge-base-creation/connect-external-knowledge-base.mdx b/zh-cn/user-guide/knowledge-base/knowledge-base-creation/connect-external-knowledge-base.mdx index c139bd5d..89ecfcfc 100644 --- a/zh-cn/user-guide/knowledge-base/knowledge-base-creation/connect-external-knowledge-base.mdx +++ b/zh-cn/user-guide/knowledge-base/knowledge-base-creation/connect-external-knowledge-base.mdx @@ -19,14 +19,14 @@ version: '简体中文' * Dify 平台能够直接获取自建知识库内经算法处理后的文本内容,开发者仅需关注自建知识库的信息检索机制,并不断优化与提升信息召回的准确度。 - + 以下是连接外部知识的详细步骤: - 为了确保你的外部知识库与 Dify 连接成功,请在建立 API 服务前仔细阅读由 Dify 编写的[外部知识库 API 规范。](external-knowledge-api-documentation.md) + 为了确保你的外部知识库与 Dify 连接成功,请在建立 API 服务前仔细阅读由 Dify 编写的[外部知识库 API 规范](../knowledge-and-documents-maintenance/maintain-dataset-via-api)。 > 目前, Dify 连接外部知识库时仅具备检索权限,暂不支持对外部知识库进行优化与修改,开发者需自行维护外部知识库。 @@ -36,25 +36,25 @@ version: '简体中文' 按照页面提示,依次填写以下内容: * 知识库的名称,允许自定义名称,用于区分所连接的不同外部知识 API; - * API 接口地址,外部知识库的连接地址,示例 `api-endpoint/retrieval`;详细说明请参考[外部知识库 API](/zh-cn/user-guide/knowledge-base/api-connection/external-knowledge-api-documentation); - * API Key,外部知识库连接密钥,详细说明请参考[外部知识库 API](/zh-cn/user-guide/knowledge-base/api-connection/external-knowledge-api-documentation); + * API 接口地址,外部知识库的连接地址,示例 `api-endpoint/retrieval`;详细说明请参考[外部知识库 API](../knowledge-and-documents-maintenance/maintain-dataset-via-api); + * API Key,外部知识库连接密钥,详细说明请参考[外部知识库 API](../knowledge-and-documents-maintenance/maintain-dataset-via-api); - + 前往 **“知识库”** 页,点击添加知识库卡片下方的 **“连接外部知识库”** 跳转至参数配置页面。 - + 填写以下参数: * **知识库名称与描述** * **外部知识库 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。数值越高说明对于文本与问题要求的相似度越高,预期被召回的文本数量也越少,结果也会相对而言更加精准。 - + @@ -70,7 +70,7 @@ version: '简体中文' 建立与外部知识库的连接后,开发者可以在 **“召回测试”** 中模拟可能的问题关键词,预览从外部知识库召回的文本分段。若对于召回结果不满意,可以尝试修改召回参数或自行调整外部知识库的检索设置。 - + @@ -79,7 +79,7 @@ version: '简体中文' 在 Chatbot / Agent 类型应用内的编排页中的 **“上下文”** 内,选中带有 `EXTERNAL` 标签的外部知识库。 - + - **Chatflow / Workflow 类型应用** @@ -87,7 +87,7 @@ version: '简体中文' 在 Chatflow / Workflow 类型应用内添加 **“知识检索”** 节点,选中带有 `EXTERNAL` 标签的外部知识库。 -
+
@@ -108,7 +108,7 @@ version: '简体中文' ## 连接示例 -[如何连接 AWS Bedrock 知识库?](user-guide/learn-more/use-cases/how-to-connect-aws-bedrock.md "mention") +[如何连接 AWS Bedrock 知识库?](https://docs.dify.ai/zh-hans/learn-more/use-cases/how-to-connect-aws-bedrock) ## 常见问题 diff --git a/zh-cn/user-guide/knowledge-base/knowledge-base-creation/introduction.mdx b/zh-cn/user-guide/knowledge-base/knowledge-base-creation/introduction.mdx index a45f19c6..1da90b2c 100644 --- a/zh-cn/user-guide/knowledge-base/knowledge-base-creation/introduction.mdx +++ b/zh-cn/user-guide/knowledge-base/knowledge-base-creation/introduction.mdx @@ -6,24 +6,24 @@ title: 创建步骤 1. 创建知识库。通过上传本地文件、导入在线数据或创建一个空的知识库。 - + 通过上传本地文件、导入在线数据或创建一个空的知识库。 2. 指定分段模式。该阶段是内容的预处理与数据结构化过程,长文本将会被划分为多个内容分段。你可以在此环节预览文本的分段效果。 - + 了解文本分段和数据清洗流程 3. 设定索引方法和检索设置。知识库在接收到用户查询问题后,按照预设的检索方式在已有的文档内查找相关内容,提取出高度相关的信息片段供语言模型生成高质量答案。 - + 了解如何设置索引方法和检索参数 5. 等待分段嵌入 -6. 完成上传,在应用内关联知识库并使用。你可以参考[在应用内集成知识库](/guides/knowledge-base/integrate-knowledge-within-application),搭建出能够基于知识库进行问答的 LLM 应用。如需修改或管理知识库,请参考[知识库管理与文档维护](/guides/knowledge-base/knowledge-and-documents-maintenance/)。 +6. 完成上传,在应用内关联知识库并使用。你可以参考[在应用内集成知识库](../integrate-knowledge-within-application),搭建出能够基于知识库进行问答的 LLM 应用。如需修改或管理知识库,请参考[知识库管理与文档维护](../knowledge-and-documents-maintenance/)。 ![完成知识库的创建](https://assets-docs.dify.ai/2024/12/a3362a1cd384cb2b539c9858de555518.png) @@ -60,4 +60,4 @@ title: 创建步骤 #### **元数据** -如需使用元数据功能管理知识库,请参阅 [元数据](https://docs.dify.ai/zh-hans/guides/knowledge-base/metadata)。 +如需使用元数据功能管理知识库,请参阅 [元数据](../metadata)。 diff --git a/zh-cn/user-guide/knowledge-base/metadata.mdx b/zh-cn/user-guide/knowledge-base/metadata.mdx index 55587bef..73a4841c 100644 --- a/zh-cn/user-guide/knowledge-base/metadata.mdx +++ b/zh-cn/user-guide/knowledge-base/metadata.mdx @@ -53,7 +53,7 @@ title: 元数据 - ​**查看元数据字段**:你可以查看知识库的内置元数据和自定义元数据。​**内置元数据(Built-in)​** 是系统自动生成的字段;**自定义元数据** 是用户根据需求手动添加的字段。 -- ​**新增元数据字段**:通过点击 ​**+添加元数据** 按钮,你可以添加新的元数据字段并选择字段值类型与填写字段名。 +- ​**新增元数据字段**:通过点击 ​**添加元数据** 按钮,你可以添加新的元数据字段并选择字段值类型与填写字段名。 - ​**编辑元数据字段**:通过点击每条元数据字段旁的编辑图标,你可以修改字段的名称。 @@ -67,29 +67,11 @@ title: 元数据 在知识库中,元数据字段分为两类:​**内置元数据(Built-in)​** 和 ​**自定义元数据**。 -| | 内置元数据(Built-in) | 自定义元数据 | -|---|---|---| -| 显示位置 | 知识库界面 元数据 栏的下半部分。 | 知识库界面 元数据 栏的上半部分。 | -| 示例图 | ![内置元数据示例](https://assets-docs.dify.ai/2025/03/5d03e958ed936badf4eb1ca955372c8b.png) | ![自定义元数据示例](https://assets-docs.dify.ai/2025/03/692a2824501f4e2f5fcc016e27159859.png) | -| 启用方式 | 默认禁用,需要手动开启才能生效。 | 由用户根据需求自由添加。 | -| 生成方式 | 启用后,由系统自动提取相关信息并生成字段值。 | 用户手动添加,完全由用户自定义。 | -| 修改权限 | 一旦生成,无法修改字段与字段值。 | 可以删除或编辑字段名称,也可以修改字段值。 | -| 应用范围 | 启用后,适用于已上传和新上传的所有文档。 | 添加元数据字段后,字段会储存在知识库的元数据列表中/需要手动设置,才能将该字段应用于具体文档。 | -| 字段 | 由系统预定义,包括: -• Original filename (string):原始文件名 -• Uploader (string):上传者 -• Upload date (time):上传日期 -• Last update date (time):最后更新时间 -• Source (string):文件来源 | 在初始状态下,知识库无自定义元数据字段,需要用户手动添加。 | -| 字段值类型 | 用户可以自由选择字段值类型,目前,Dify的元数据功能仅支持以下三种值类型: -• 字符串 (string):文本值 -• 数字 (number):数值 -• 时间 (time):日期和时间 || -| 使用场景 | 适用于存储和展示文档的基本信息,如文件名、上传者、上传日期等。 | 适用于需要根据特定业务需求自定义的元数据字段,如文档的保密级别、标签等。 | +![](https://assets-docs.dify.ai/2025/03/d6fa975d9f649a86476b0d5a54f101f2.png) #### 新建元数据字段 -1. 点击 ​**+添加元数据** 按钮,弹出 ​**新建元数据** 弹窗。 +1. 点击 ​**添加元数据** 按钮,弹出 ​**新建元数据** 弹窗。 ![new_metadata](https://assets-docs.dify.ai/2025/03/5086db42c40be64e54926b645c38c9a0.png) @@ -170,7 +152,7 @@ title: 元数据 如果某个字段有多个值,矩形框内会显示 ​**多个值** 卡片。如果删除该卡片,所有选中文档的该字段值将被清空,矩形框内会显示 ​**空** 标识。 -- ​**新增元数据字段:​** 如果你需要为选中的文档添加新的元数据字段,可以点击弹窗正下方的 ​**+添加元数据** 按钮,在弹出的弹窗中 ​**新建字段、添加已创建的字段** 或 ​**管理已创建的字段**。 +- ​**新增元数据字段:​** 如果你需要为选中的文档添加新的元数据字段,可以点击弹窗正下方的 ​**添加元数据** 按钮,在弹出的弹窗中 ​**新建字段、添加已创建的字段** 或 ​**管理已创建的字段**。 - ​**删除元数据字段:​** 通过点击每条元数据字段旁边的 ​**删除** 标识,你可以删除所有选中文档的该字段。 @@ -178,11 +160,11 @@ title: 元数据 ##### 批量新增元数据信息 -1. 在 ​**编辑元数据** 弹窗中点击底部的 ​**+添加元数据** 按钮,弹出操作弹窗。 +1. 在 ​**编辑元数据** 弹窗中点击底部的 ​**添加元数据** 按钮,弹出操作弹窗。 ![add_metadata](https://assets-docs.dify.ai/2025/03/868f51bbd6893e32bf23952c6d0aa079.png) - - 如需为选中文档新建字段,可以点击弹窗下方的 ​**+新建元数据** 按钮,并参考前文的 ​**新建元数据字段** 章节新建字段。 + - 如需为选中文档新建字段,可以点击弹窗下方的 ​**新建元数据** 按钮,并参考前文的 ​**新建元数据字段** 章节新建字段。 > 在 ​**编辑元数据** 弹窗中新建的元数据字段,将自动同步至知识库字段列表中。 @@ -259,10 +241,10 @@ title: 元数据 ##### 新增文档元数据信息 -1. 在文档的元数据编辑模式中,点击 **+添加元数据** 按钮,弹出操作弹窗。 +1. 在文档的元数据编辑模式中,点击 **添加元数据** 按钮,弹出操作弹窗。 ![add_metadata](https://assets-docs.dify.ai/2025/03/f9ba9b10bbcf6eaca787eed4fcde44da.png) - - 如需使用新建字段为该文档标记字段值,可以点击弹窗左下角的 **+ 新建元数据** 按钮,并参考前文的 **新建元数据字段** 章节新建字段。 + - 如需使用新建字段为该文档标记字段值,可以点击弹窗左下角的 **新建元数据** 按钮,并参考前文的 **新建元数据字段** 章节新建字段。 > 在文档页面新建的元数据字段,将自动同步至知识库字段列表中。 @@ -308,11 +290,11 @@ title: 元数据 ## 如何使用元数据功能在知识库中筛选文档? -请参阅 [在应用内集成知识库](https://docs.dify.ai/zh-hans/guides/knowledge-base/integrate-knowledge-within-application) 中的 **使用元数据筛选知识** 章节。 +请参阅 [在应用内集成知识库](./integrate-knowledge-within-application) 中的 **使用元数据筛选知识** 章节。 ## API 信息 -请参阅 [通过 API 维护知识库](https://docs.dify.ai/zh-hans/guides/knowledge-base/knowledge-and-documents-maintenance/maintain-dataset-via-api)。 +请参阅 [通过 API 维护知识库](./knowledge-and-documents-maintenance/maintain-dataset-via-api)。 ## FAQ @@ -335,11 +317,58 @@ title: 元数据 - **“在知识库管理界面删除某条元数据字段”“在编辑元数据弹窗中删除已选文档的某条元数据字段”和“在文档详情界面删除某条元数据字段”有什么区别?** -| 操作方式 | 操作方法 | 示例图 | 影响范围 | 结果 | -|---|---|---|---|---| -| 在知识库管理界面删除某条元数据字段 | 在知识库管理界面,点击某条元数据字段右侧的删除图标,删除该字段。 | ![knowledge_base_delete](https://assets-docs.dify.ai/2025/03/13367a865d589a29b7c4098526fad5dc.png) | 从知识库管理列表中完全删除该元数据字段及其所有字段值。 | 该字段从知识库中移除,所有文档中的该字段及包含的所有字段值也会消失。 | -| 在编辑元数据弹窗中删除已选文档的某条元数据字段 | 在编辑元数据弹窗中,点击某条元数据字段右侧的删除图标,删除该字段。 | ![bulk_delete](https://assets-docs.dify.ai/2025/03/ed8c9143ba9a8eae6efcb76e309dbec1.png) | 仅删除已选文档的该字段与字段值,字段本身依然保留在知识库管理列表中。 | 选中文档中的字段与字段值被移除,但字段仍保留在知识库内,字段值计数会发生数值上的变化。 | -| 在文档详情界面删除某条元数据字段 | 在文档详情界面中的元数据编辑模式里,点击某条元数据字段右侧的删除图标,删除该字段。 | ![single_delete](https://assets-docs.dify.ai/2025/03/19d7fe886dd30a3f3322fa2a87f87203.png) | 仅删除该文档的该字段与字段值,字段本身依然保留在知识库管理列表中。 | 该文档中的字段与字段值被移除,但字段仍保留在知识库内,字段值计数会发生数值上的变化。 | + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
操作方式操作方法示例图影响范围结果
在知识库管理界面删除某条元数据字段在知识库管理界面,点击某条元数据字段右侧的删除图标,删除该字段。 + knowledge_base_delete + 从知识库管理列表中完全删除该元数据字段及其所有字段值。该字段从知识库中移除,所有文档中的该字段及包含的所有字段值也会消失。
在编辑元数据弹窗中删除已选文档的某条元数据字段在编辑元数据弹窗中,点击某条元数据字段右侧的删除图标,删除该字段。 + bulk_delete + 仅删除已选文档的该字段与字段值,字段本身依然保留在知识库管理列表中。选中文档中的字段与字段值被移除,但字段仍保留在知识库内,字段值计数会发生数值上的变化。
在文档详情界面删除某条元数据字段在文档详情界面中的元数据编辑模式里,点击某条元数据字段右侧的删除图标,删除该字段。 + single_delete + 仅删除该文档的该字段与字段值,字段本身依然保留在知识库管理列表中。该文档中的字段与字段值被移除,但字段仍保留在知识库内,字段值计数会发生数值上的变化。
- **我可以在知识库管理界面查看我设置的元数据值吗?** diff --git a/zh-cn/user-guide/knowledge-base/readme.mdx b/zh-cn/user-guide/knowledge-base/readme.mdx index 89098239..2bb0b935 100644 --- a/zh-cn/user-guide/knowledge-base/readme.mdx +++ b/zh-cn/user-guide/knowledge-base/readme.mdx @@ -2,7 +2,7 @@ title: 功能简介 --- -知识库功能将 [RAG 管线](../../learn-more/extended-reading/retrieval-augment/)上的各环节可视化,提供了一套简单易用的用户界面来方便应用构建者管理个人或者团队的知识库,并能够快速集成至 AI 应用中。 +知识库功能将 [RAG 管线](https://docs.dify.ai/zh-hans/learn-more/extended-reading/retrieval-augment)上的各环节可视化,提供了一套简单易用的用户界面来方便应用构建者管理个人或者团队的知识库,并能够快速集成至 AI 应用中。 开发者可以将企业内部文档、FAQ、规范信息等内容上传至知识库进行结构化处理,供后续 LLM 查询。 @@ -30,11 +30,7 @@ LLM 接收到用户的问题后,将首先基于关键词在知识库内检索 将文件上传至“知识库”即可自动完成数据处理。 -> 如果你的团队内部已建有独立知识库,可以通过[连接外部知识库](connect-external-knowledge-base.md)与 Dify 建立连接。 -> -> 可以通过“连接外部知识库”功能,建立与 Dify 平台的连接。 - -![创建一个知识库](https://assets-docs.dify.ai/2024/12/effc826d2584d5f2983cdcd746099bb6.png) +> 如果你的团队内部已建有独立知识库,可以通过[连接外部知识库](./knowledge-base-creation/connect-external-knowledge-base)与 Dify 建立连接。 ### 使用情景 @@ -44,4 +40,4 @@ LLM 接收到用户的问题后,将首先基于关键词在知识库内检索 在 Dify 中,知识库(Knowledge)是一系列文档(Documents)的集合,一个文档内可能包含多组内容分段(Chunks),知识库可以被整体集成至一个应用中作为检索上下文使用。文档可以由开发者或运营人员上传,或由其它数据源同步。 -如果你已自建文档库,可以通过[连接外部知识库](connect-external-knowledge-base)功能将自有知识库与 Dify 平台相关联。无需重复将内容上传至 Dify 平台内的知识库即可让 AI 应用实时读取自建知识库中的内容。 +如果你已自建文档库,可以通过[连接外部知识库](./knowledge-base-creation/connect-external-knowledge-base)功能将自有知识库与 Dify 平台相关联。无需重复将内容上传至 Dify 平台内的知识库即可让 AI 应用实时读取自建知识库中的内容。 diff --git a/zh-cn/user-guide/knowledge-base/retrieval-test-and-citation.mdx b/zh-cn/user-guide/knowledge-base/retrieval-test-and-citation.mdx index 3e455246..1e48403a 100644 --- a/zh-cn/user-guide/knowledge-base/retrieval-test-and-citation.mdx +++ b/zh-cn/user-guide/knowledge-base/retrieval-test-and-citation.mdx @@ -3,21 +3,52 @@ title: 召回测试/引用归属 version: '简体中文' --- -## 1 召回测试 +### 1 召回测试 -Dify 知识库内提供了文本召回测试的功能,用于调试不同检索方式及参数配置下的召回效果。你可以在 **源文本** 输入框输入常见的用户问题,点击 **测试** 并在右侧的 **召回段落** 查看召回结果。在 **最近查询** 内可以查看到历史的查询记录;若知识库已关联至应用内,由应用内触发的知识库查询也可以在此查看记录。 +Dify 知识库内提供了文本召回测试的功能,用于模拟用户输入关键词后调用知识库内容区块。召回的区块将按照分数高低进行排序并发送至 LLM。一般而言,问题与内容块的匹配度越高,LLM 所输出的答案也就更加贴近源文档,文本“训练效果”越好。 -![](https://assets-docs.dify.ai/2024/12/806967bb36e74fc744b34887cd3ebe52.png) +你可以使用不同的检索方式及参数配置,查看召回的内容区块质量与效果。不同的知识库分段模式对应不同的召回测试方法。 -点击源文本输入框右上角的图标可以更换当前知识库的检索方式和具体参数,**保存之后仅在召回测试的调试过程中生效**。在召回测试完成调试并确认更改知识库的检索参数时,需要在 [知识库设置 > 检索设置](create-knowledge-and-upload-documents/#id-6-jian-suo-she-zhi) 中进行更改。 + + + 在 **源文本** 输入框输入常见的用户问题,点击 **测试** 按钮即可在右侧的 **召回段落** 内查看召回结果。 + + 在通用模式下,内容区块相互独立;内容块右上角的分数为内容与关键词的匹配分数。得分越高,说明问题关键词与内容块的的匹配度越高。 + + ![通用模式 - 召回内容块](https://assets-docs.dify.ai/2024/12/806967bb36e74fc744b34887cd3ebe52.png) + + 轻点内容块即可查看所引用的内容详情。每个内容块底部将展示所引用的文档信息源,你可以借此判断该内容分段是否合理。 + + ![查看召回内容详情](https://assets-docs.dify.ai/2024/12/419ac78ad21ea198b08f89c4f5fde485.png) + + + 在 **源文本** 输入框输入常见的用户问题,点击 **测试** 并在右侧的 **召回段落** 查看召回结果。在父子分段模式下,问题的关键词将命中子分段中的内容块,以取得更加精准的匹配效果。区块右上角的得分指的是子区块与关键词之间的匹配得分。 + + 你可以在预览区内查看具体的命中段落内容;匹配后将召回子分段所在父分段的完整上下文,向 AI 应用提供更加完整的信息。 -![](https://assets-docs.dify.ai/2024/12/419ac78ad21ea198b08f89c4f5fde485.png) + ![召回测试 - 父子分段模式](https://assets-docs.dify.ai/2024/12/6f0b99f97b138805bf4665d0c5c16f26.png) + + 每个内容块底部将展示所引用的文档源,通常是文档中的某个段落或句子。轻点引用源右侧的“打开”按钮即可查看被引用的内容。 + + 分段详情页的左侧为父分段信息,右侧为被命中的子分段。关键词可能命中多个子分段,同时在开头显示与关键词的匹配分数。你可以基于详情信息判断当前的内容分段是否合理。 + + ![查看召回内容详情](https://assets-docs.dify.ai/2024/12/22103227f8a25069d147160254f69512.png) + + + +在 **记录** 内可以查看到历史的查询记录;若知识库已关联至应用内,由应用内发起的知识库查询记录也可以在此查看。 + +### 修改文本检索方式 + +点击源文本输入框右上角的图标即可更换当前知识库的检索方式与具体参数,保存之后仅在当前召回测试的调试过程中生效,你可以借此比较不同检索设置的效果。如果你想要修改当前知识库的检索方式,前往“知识库设置” > “检索设置”中进行设置。 + +![](https://assets-docs.dify.ai/2024/12/86b78cb114a843c9dedcba1fe12e3b02.png) **召回测试建议步骤:** -1. 设计和整理覆盖常见用户问题的测试用例/测试问题集; -2. 选择合适的检索策略:向量检索/全文检索/混合检索,不同检索方式的优缺点,请参考扩展阅读[检索增强生成(RAG)](user-guide/zh-cn/user-guide/learn-more/extended-reading/retrieval-augment/); -3. 调试召回分段数量(TopK)和召回分数阈值(Score),需根据应用场景、包括文档本身的质量来选择合适的参数组合。 +1. 设计和整理能够覆盖用户常见问题的测试用例/测试问题集/指引内容; +2. 根据内容特点和使用场景(是否为问答内容、是否涉及多语言问答等),选择合适的检索策略。 +3. 调整召回分段数量(TopK)和召回分数阈值(Score),根据实际的应用场景、包括文档本身的质量来选择合适的参数组合。 **TopK 值和召回阈值(Score )如何配置** @@ -26,19 +57,18 @@ Dify 知识库内提供了文本召回测试的功能,用于调试不同检索 *** -## 2 引用与归属 +### 2 引用与归属 -在应用内测试知识库效果时,你可以进入 **工作室 -- 添加功能 -- 引用归属**,打开引用归属功能。 +在应用内的“上下文”添加知识库后,可以在 **“添加功能”** 内开启 **“引用与归属”**。在应用内输入问题后,若涉及已关联的知识库文档,将标注内容的引用来源。你可以通过此方式检查知识库所召回的内容分段是否符合预期。 -![](https://assets-docs.dify.ai/2025/03/072291d36632e4b27c69dbd05e95dbe7.png) +![](https://assets-docs.dify.ai/2025/03/a2e4db6635634e99a9aeb91341b53d1c.png) 开启功能后,当 LLM 引用知识库内容来回答问题时,可以在回复内容下面查看到具体的引用段落信息,包括**原始分段文本、分段序号、匹配度**等。点击引用分段上方的 **跳转至知识库**,可以快捷访问该分段所在的知识库分段列表,方便开发者进行调试编辑。 -![](https://assets-docs.dify.ai/2025/03/a2d29d061667b9c09bc6bc3a6ddb08be.png) +![](https://assets-docs.dify.ai/2025/03/1d82a0e1032f97e5832ed2ca7cb99fb2.png) -#### 查看知识库内已关联的应用 +### 查看知识库内已关联的应用 知识库将会在左侧信息栏中显示已关联的应用数量。将鼠标悬停至圆形信息图标时将显示所有已关联的 Apps 列表,点击右侧的跳转按钮即可快速查看对应的应用。 ![查看知识库内已关联的应用](https://assets-docs.dify.ai/2024/12/28899b9b0eba8996f364fb74e5b94c7f.png) -