深入解析Dify工作流:知识检索与问题分类两大核心功能,让AI问答系统更精准、更智能,不再仅仅停留在“看起来很智能”的阶段。

功能概述
从知识库中提取与用户问题最匹配的文本片段,作为下游大语言模型(LLM)节点的上下文。通俗来讲,这相当于为AI配备了一位专属图书馆管理员,每次回答问题前,先帮你查阅资料,而非凭空编造。
- 该功能最大的应用场景:构建基于外部数据或知识的AI问答系统,即业界常说的RAG(检索增强生成)架构。
基础应用流程
整体流程非常直观:用户提交问题 → 系统检索知识库 → 召回相关文本段落 → LLM基于这些素材生成最终回答。
典型应用:知识库问答系统(例如企业内部文档问答、产品说明书智能答疑)。
配置指引
1. 查询变量配置
第一步,选择代表用户问题的查询变量。在Dify中,该变量通常为 sys.query。知识库最大查询内容限制为200个字符,足以应对多数场景。
2. 知识库选择
务必提前在Dify知识模块中创建目标知识库。没有“粮仓”,系统自然“无米可炊”。
3. 召回模式
注意一项重要调整:自9月1日起,系统强制切换为「多路召回」模式。这意味着过去的“N选1”召回方案已被淘汰,不再推荐使用。原因很明确——多路召回能够获取更全面的上下文,有效减少信息遗漏。
4. 下游节点连接
知识检索的输出通常需要连接到LLM节点。但并非简单连接即可——还必须在LLM节点的上下文变量中,专门关联知识检索节点的输出。相当于为LLM递上一份“参考资料单”。
输出变量说明
知识检索节点到底输出什么?结构如下:
{
"result": {
"content": "检索到的文本分段",
"title": "分段标题",
"link": "原文链接",
"icon": "标识图标",
"metadata": "附加元数据"
}
}
这个 result 对象封装了检索到的文本内容、来源标题、原始链接以及辅助信息(如图标和元数据)。
下游节点配置规范
- 上下文变量关联
将 result 变量绑定到LLM节点的上下文变量。光绑定还不够——需要在LLM的提示词中插入一个上下文变量的占位符,让LLM明确“从何处获取资料”。
- 运行逻辑
该逻辑十分巧妙:若知识检索找到相关内容,上下文变量自动填充,LLM便依据知识库内容作答;若无任何结果,上下文变量为空,LLM也不会卡顿,而是凭借自身能力直接回答。这正是“有资料用资料,没资料靠常识”的灵活机制。
- 扩展功能支持
这套配置还支持应用端的引用溯源功能。即最终回答可附带来源信息,如文本分段的标题和原文链接。这对用户而言极具价值,可随时追溯信息源头。
补充说明:该配置方案同时支持知识增强与原始知识归属展示,建议在提示词中设计合理的知识引用格式。
接下来聚焦问题分类器
问题分类器的核心逻辑是:通过定义分类描述,让LLM依据用户输入自动匹配最合适的分类标签,并输出结果。这使得下游节点能够获取更精准的信息,而非笼统地“查询知识库”。
它能做什么?
常见的应用场景包括:
- 客服对话的意图分类(投诉、咨询、退换货)
- 产品评价分类(好评、差评、中评)
- 邮件批量分类(报价、合作、垃圾邮件)
举例来说,在一个产品客服问答场景中,问题分类器可作为知识库检索的前置步骤。它先判断用户问题的意图,分类后导向不同的知识库查询相关内容,最终给出精准回复。
一个现成的工作流模板
下面是一个产品客服场景的示例工作流:
- 分类 1:与售后相关的问题
- 分类 2:与产品操作使用相关的问题
- 分类 3:其他问题
当用户提出不同问题时,分类器自动完成归类:
- “iPhone 14 如何设置通讯录联系人?” → “与产品操作使用相关的问题”
- “保修期限是多久?” → “与售后相关的问题”
- “今天天气怎么样?” → “其他问题”
可见,这才是真正意义上的“精准分流”。
如何配置
- 选择输入变量:选定用于分类的输入内容,支持输入文件变量。客服场景下,通常是用户问题
sys.query。 - 选择推理模型:依赖大语言模型的自然语言分类与推理能力,选用合适的模型能显著提升分类效果。
- 编写分类标签/描述:手动添加所需分类,并编写关键词或描述语句,帮助大语言模型理解分类依据。描述越清晰,分类越准确。
- 选择下游节点:根据分类结果,选择后续流程路径。不同分类可走不同分支,处理不同业务。
高级设置
- 指令:可在高级设置中补充附加指令,例如更丰富的分类依据或注意事项,进一步增强分类能力。
- 记忆:开启后,输入将包含聊天历史——在对话交互式场景中,这一点至关重要,能提升对用户问题的理解能力。
- 图片分析:该能力仅适用于具备图片识别功能的LLM,允许输入图片变量,实现图文结合的分类。
- 记忆窗口:关闭时,系统会根据模型上下文窗口动态过滤聊天历史;开启后,你可精确控制传递数量(以“对数”为单位)。
输出变量
class_name:该变量存储了分类模型的预测结果。分类完成后,它包含具体的类别标签,你可在后续处理节点中直接引用,以执行相应的业务逻辑。
