在构建AI应用时,我们常常面临一个核心挑战:如何让AI的响应不只是简单的“一问一答”,而是能根据不同的输入内容、业务规则或用户意图,执行差异化的处理流程?比如,用户输入一个产品咨询,系统需要先判断其属于“售后”、“售前”还是“投诉”,再分别调用不同的知识库或API;或者,在生成一段文案后,需要人工审核确认才能最终发送。这些复杂的逻辑编排,正是Dify工作流中“分类”、“条件”与“介入”三大核心节点所要解决的问题。
本文将深入拆解Dify工作流中的这三个关键控制节点。无论你是希望构建一个能自动分流用户问题的智能客服,还是一个需要人机协同的内容审核流水线,掌握这些节点的用法都将使你从简单的Prompt工程,迈向真正可落地的、健壮的AI应用开发。我们将从概念入手,通过一个完整的“智能工单处理”实战案例,手把手带你配置分类器、设置条件分支,并加入人工审核环节,最终输出一份结构清晰、可直接复用的工作流模板。
1. 核心概念:工作流中的逻辑控制三要素
在深入配置之前,我们首先要理解“分类”、“条件”和“介入”在Dify工作流中分别扮演什么角色,以及它们如何协同工作。
1.1 分类节点:智能路由的决策起点
分类节点(Classifier)的核心作用是对输入的文本内容进行意图识别或类别判断。你可以将其理解为一个内置的、可定制的文本分类器。它接收一段文本(通常是用户的提问或输入内容),并输出一个或多个预设的类别标签。
典型应用场景:
- 客服机器人:将用户问题自动分类为“技术故障”、“账单查询”、“产品咨询”等。
- 内容审核:判断用户生成内容(UGC)属于“正常”、“广告”、“违规”或“敏感”。
- 工单系统:根据问题描述,将工单初步分配至“研发部”、“运维部”或“市场部”。
技术本质:在底层,Dify的分类节点通常利用嵌入模型(Embedding Model)计算输入文本与各个类别描述之间的语义相似度,或直接调用微调的分类模型来完成判断。你无需关心具体模型,只需定义好类别及其描述即可。
1.2 条件节点:流程分支的指挥棒
条件节点(Condition)是工作流的“IF-ELSE”语句。它根据上游节点的输出结果(通常是变量),决定工作流的执行路径。如果满足某个条件,则流程走向一个分支;否则,走向另一个分支。
关键特性:
- 基于变量:条件判断的依据是工作流中已生成的变量,如分类节点的输出、LLM节点的回复文本、或工具节点的返回结果。
- 多分支支持:可以设置多个条件分支,实现复杂的逻辑判断。
- 必选与默认:通常包含一个“必选”分支(条件为真时执行)和一个“默认”分支(所有条件都不满足时执行)。
典型应用场景:
- 根据分类结果,调用不同的知识库进行检索。
- 根据用户查询中是否包含关键词,决定是否进行敏感信息过滤。
- 根据当前时间或用户等级,提供差异化的服务。
1.3 介入节点:人机协同的关键枢纽
介入节点(Human Intervention)是连接自动化流程与人工操作的桥梁。当工作流执行到该节点时,会自动暂停,等待指定的人工操作(如审核、修改、确认)完成后,再继续向下执行。
核心价值:
- 风险控制:在关键环节(如内容发布、交易确认)引入人工审核,确保安全合规。
- 质量提升:允许人工对AI生成的内容进行润色、修正或补充,提升最终输出质量。
- 复杂决策:将机器难以处理的非标判断(如创意评审、情感安抚)交由人类处理。
工作模式:配置介入节点时,你需要定义“操作人”(可以是特定用户或角色)和“操作类型”(如审批、编辑文本、填写表单)。操作人会在Dify的应用运行日志或待办任务中看到待处理项。
2. 环境准备与项目概述
在开始实战前,请确保你已拥有一个可用的Dify环境。你可以使用 Dify官方提供的云服务 ,也可以按照 Dify本地部署教程 在自有服务器上部署。
本文演示环境:
- Dify版本:社区版 0.6.x (版本迭代较快,核心功能界面基本一致)
- 主要模型:OpenAI GPT-4o-mini (也可替换为通义千问、DeepSeek等Dify支持的其他模型)
- 浏览器:Chrome / Edge 最新版
实战项目:智能工单处理工作流我们将构建一个模拟的“智能工单处理系统”。其业务逻辑如下:
- 用户输入:用户提交一段工单描述。
- 自动分类:工作流自动判断该工单属于
[技术故障]、[账户问题]还是[产品建议]。 - 条件分流:
- 若为
[技术故障],则调用“技术知识库”进行问题检索与解答。 - 若为
[账户问题],则调用“账户与账单知识库”进行解答。 - 若为
[产品建议],则流程进入“人工产品经理审核”环节。
- 若为
- 人工介入:对于产品建议,需要产品经理审核是否采纳,并补充处理意见。
- 统一回复:最终,系统将分类处理后的结果(或人工审核后的意见)整合成一份完整的回复,返回给用户。
接下来,我们进入Dify控制台,一步步实现这个工作流。
3. 工作流搭建:从零开始构建智能工单处理器
3.1 创建新应用与工作流
- 登录Dify,点击顶部导航栏的“创建应用”。
- 选择“工作流”类型,输入应用名称,例如“智能工单处理助手”,点击创建。
- 进入应用后,你会看到默认的“开始”和“结束”节点。中间空白区域就是我们的画布。
3.2 配置“分类”节点
- 添加节点:从左侧节点库中,找到“分类”节点,将其拖拽到画布上,放置在“开始”节点之后。
- 连接节点:从“开始”节点的输出点(右侧小圆点)拖出一条线,连接到“分类”节点的输入点(左侧小圆点)。
- 节点配置:点击画布上的分类节点,右侧会弹出配置面板。
- 分类变量:这里选择我们接收用户输入的变量。点击“选择变量”,选择
sys.user_input(这是Dify内置变量,代表用户最初输入的问题)。 - 分类类别:我们需要定义三个类别。点击“添加类别”,分别设置:
- 类别一:
- 名称:
技术故障 - 描述:
用户反映系统无法使用、报错、功能异常、性能缓慢、安装失败等技术性问题。
- 名称:
- 类别二:
- 名称:
账户问题 - 描述:
用户咨询登录、注册、密码重置、账号被封、会员权益、账单支付和发票等问题。
- 名称:
- 类别三:
- 名称:
产品建议 - 描述:
用户对产品提出新功能建议、界面优化意见、使用体验反馈等。
- 名称:
- 类别一:
- 分类模型:保持默认的“Embeddings”即可,它会根据描述进行语义相似度判断。
- 输出变量名:设置为
classification_result。这个变量将保存分类结果(如“技术故障”),供后续节点使用。
- 分类变量:这里选择我们接收用户输入的变量。点击“选择变量”,选择
配置完成后,你的分类节点应该如下图所示(概念示意):
[开始] --> [分类节点] 输入: sys.user_input 类别: 技术故障 | 账户问题 | 产品建议 输出变量: classification_result3.3 配置“条件”节点实现流程分支
分类完成后,我们需要根据结果走不同的分支。
- 添加条件节点:从节点库拖拽“条件”节点到画布,放在分类节点之后。
- 连接节点:将分类节点的输出连接到条件节点的输入。
- 配置条件分支:点击条件节点进行配置。我们需要建立三个分支。
- 分支一(技术故障):
- 点击“添加分支”。
- 在分支条件中,设置“变量”为
classification_result,“运算符”选择“等于”,“值”填写技术故障。 - 给这个分支起个名字,如“处理技术问题”。
- 分支二(账户问题):
- 再次“添加分支”。
- 条件设置为:
classification_result等于账户问题。 - 分支命名为“处理账户问题”。
- 分支三(产品建议):
- 这是我们的“必选”分支吗?不,我们应该把它设为另一个条件分支。
- 添加第三个分支,条件设置为:
classification_result等于产品建议。 - 分支命名为“转产品审核”。
- 默认分支:由于我们已经用三个条件覆盖了所有分类结果,默认分支可以保留为空,或设置一个提示如“分类未知,转人工”。这里我们将其命名为“其他情况”。
- 分支一(技术故障):
现在,条件节点就有了四个出口,分别对应三个分类结果和一个默认情况。
3.4 构建各分支的处理逻辑
接下来,我们需要为每个分支配置后续的处理节点。
分支A:处理技术问题(知识库检索+LLM回答)
- 从节点库拖拽“知识库检索”节点到“处理技术问题”分支线上。
- 配置该节点,选择一个你事先创建好的、包含技术文档的“技术知识库”。
- 检索查询变量可以设置为
sys.user_input。 - 再拖拽一个“LLM”节点(如ChatGPT)连接到知识库检索节点之后。
- 配置LLM节点,其Prompt可以写为:
你是一名专业的技术支持工程师。请根据以下知识库内容,解答用户的技术问题。 用户问题:{{sys.user_input}} 相关技术资料: {{#context#}} (这是一个变量占位符,需要你从上游“知识库检索”节点的输出变量中,选择“内容”之类的变量拖入此处) {{/context#}} 请给出专业、清晰、分步骤的解答。如果知识库内容无法完全覆盖问题,请基于你的知识进行补充,并说明哪些是推测。 - 将这个LLM节点的输出变量命名为
tech_answer。
分支B:处理账户问题(知识库检索+LLM回答)
- 类似地,在“处理账户问题”分支后,添加“知识库检索”节点,这次选择“账户与账单知识库”。
- 后面同样接一个LLM节点,Prompt调整为针对账户问题的回复风格,输出变量命名为
account_answer。
分支C:转产品审核(人工介入)这是本文的重点。我们在这个分支后接入“人工介入”节点。
- 从节点库拖拽“人工介入”节点到“转产品审核”分支线上。
- 配置介入节点:
- 类型:选择“审批”。(也可以是“修改文本”,这里我们以审批为例)。
- 操作人:你可以选择“指定成员”,并输入一个测试用的邮箱或用户名;或者选择“团队角色”,如“产品经理”。(演示时可以选择自己)。
- 指令:填写给审核人的说明,例如:
这是一条用户提交的产品建议,请审核。 原始建议:{{sys.user_input}} 请决定: 1. 【采纳】- 建议合理,将纳入产品规划。 2. 【待评估】- 需要进一步调研。 3. 【不采纳】- 并简述理由。 请在下方填写您的决策和补充意见。 - 输出变量名:设置为
human_decision。这个变量将是一个结构体,包含审核人的选择(如“采纳”)和填写的意见文本。
分支D:默认分支可以在默认分支后连接一个简单的“文本处理”节点,输出一段固定提示,如“您的问题已记录,我们将尽快安排人工客服处理。”,变量命名为default_response。
3.5 汇聚流程与最终回复
现在我们有多个分支并行执行,最终需要汇聚到一个“结束”节点,并给出统一回复。我们需要使用“合并”逻辑。Dify工作流中,多个分支不会自动合并,我们可以通过以下两种方式之一实现:
方式一:使用“变量赋值”和“条件判断”进行汇聚(推荐,更清晰)
- 在所有分支的最终端(LLM节点或人工介入节点后),都连接到一个新的“变量赋值”节点。
- 在每个“变量赋值”节点中,将本分支的最终结果(如
tech_answer,account_answer,human_decision)赋值给一个统一的变量,例如final_result。 - 然后,将这些“变量赋值”节点都连接到最终的“结束”节点。Dify工作流引擎会执行所有激活的分支,但
final_result变量会被最后执行的分支覆盖。为了避免歧义,更严谨的做法是再添加一个“条件”节点来判断哪个分支被激活了,但这会复杂化。对于演示,我们可以暂时接受这种方式。
方式二:使用“结束”节点直接引用分支变量更简单的方法是:直接配置“结束”节点的回复模板,让它根据分类结果来引用不同的变量。
- 双击“结束”节点进行配置。
- 在回复模板中,使用Dify的模板语法进行判断:
{% if classification_result == “技术故障” %} {{tech_answer}} {% elif classification_result == “账户问题” %} {{account_answer}} {% elif classification_result == “产品建议” %} {% if human_decision %} 产品经理审核意见:{{human_decision}} {% else %} 您的建议已收到,正在等待产品经理审核。 {% endif %} {% else %} {{default_response}} {% endif %}这种方式无需合并节点,直接在最终输出时进行逻辑判断,更为简洁直观。
3.6 保存并测试工作流
- 点击画布右上角的“保存”按钮。
- 保存后,点击右上角的“发布”按钮,将工作流发布为一个可访问的Web应用或API。
- 测试:
- 在应用预览窗格,尝试输入不同的问题。
- 输入“我的软件突然打不开了,提示错误代码0x8001”,观察是否走“技术故障”分支并返回知识库答案。
- 输入“我想申请开发票,在哪里操作?”,观察是否走“账户问题”分支。
- 关键测试:输入“我希望手机App能增加深色模式”,这应该触发“产品建议”分支。提交后,工作流会暂停。
- 处理人工介入:
- 你需要到Dify后台的“日志与审计”或“待办”页面(具体位置取决于版本),找到这条待审批的工单。
- 点击处理,选择“采纳”、“待评估”或“不采纳”,并填写意见。
- 提交审批后,返回测试界面,你会发现工作流继续执行,并输出了包含你审核意见的最终回复。
至此,一个集成了自动分类、条件分支和人工审核的智能工单处理工作流就搭建完成了。
4. 高级技巧与最佳实践
掌握了基础搭建后,我们来看一些提升工作流健壮性和效率的技巧。
4.1 分类节点的优化策略
- 描述要具体:类别的描述文本至关重要。应使用清晰、具体、包含典型关键词和反例的句子,以帮助嵌入模型更好地区分。例如,“技术故障”的描述可以加上“不包括关于价格、账号登录等非技术性疑问”。
- 类别数量适中:分类类别不宜过多(如超过10个),否则可能影响准确率。对于复杂分类,可以考虑设计两级分类工作流。
- 设置默认/未知类别:在分类节点配置中,可以勾选“允许返回未知分类”,并为未知分类设计一个处理流程(如直接转人工)。
4.2 条件节点的复杂逻辑组合
条件节点不仅支持“等于”,还支持“包含”、“大于”、“小于”、“正则匹配”等运算符。你可以实现更精细的判断:
- 组合判断:目前Dify的条件节点通常一次只能判断一个条件。如需“且”、“或”逻辑,可以通过串联多个条件节点,或在前置的“代码”节点中编写逻辑来实现。
- 基于变量类型判断:可以判断变量是否为“空”、是否为“数字”等。
4.3 人工介入节点的工程化应用
- 超时与自动处理:可以为介入节点设置“超时时间”(如24小时)。若超时无人处理,工作流可自动执行预设的默认路径(如发送提醒邮件后继续)。
- 操作人动态指定:可以通过上游的“代码”节点,根据工单内容计算出应该指派的产品经理,并将邮箱动态赋值给介入节点的“操作人”变量。
- 表单化介入:除了简单的审批和文本修改,可以设计更复杂的表单,让审核人填写多个字段,这些字段都会保存在输出变量中,供下游节点使用。
4.4 工作流的调试与监控
- 善用运行日志:Dify提供了详细的工作流运行日志。当结果不符合预期时,务必查看每个节点的输入/输出变量,这是排查问题的第一现场。
- 变量预览:在画布配置时,点击节点之间的连接线,可以预览实际传输的数据结构,确保变量引用正确。
- 版本管理:在正式部署前,通过Dify的版本历史功能保存稳定版本,便于回滚。
5. 常见问题与排查思路
在实际搭建和运行中,你可能会遇到以下问题:
| 问题现象 | 可能原因 | 排查与解决思路 |
|---|---|---|
| 分类结果不准确或混乱 | 1. 类别描述太模糊或相似。 2. 用户输入过于简短或歧义。 | 1. 优化类别描述,增加区分度。 2. 考虑在分类前让LLM节点对用户输入进行总结或扩写。 3. 测试不同嵌入模型(如果Dify支持切换)。 |
| 条件分支未按预期执行 | 1. 条件判断的变量名写错。 2. 变量值包含不可见字符(如空格、换行)。 3. 条件运算符选择错误。 | 1. 检查运行日志,确认上游节点输出的变量名和值是否与预期一致。 2. 可在条件节点前添加“调试”节点或“文本处理”节点,打印变量值。 3. 对于字符串判断,尝试使用“包含”而非“等于”以容错。 |
| 人工介入后工作流不继续 | 1. 操作人未在指定位置处理任务。 2. 介入节点配置的“后续节点”连接断开。 | 1. 确认操作人登录的账号是否有权限,并检查“待办任务”列表。 2. 在画布上检查介入节点与下游节点的连接线是否完好。 3. 查看该次运行的日志,确认介入节点是否处于“等待中”状态。 |
| 最终回复未显示某分支内容 | 1. 最终回复模板中引用错了变量名。 2. 该分支的节点执行失败,未生成输出变量。 | 1. 仔细核对回复模板中的变量引用,确保与上游节点输出的变量名完全一致。 2. 检查该分支所有节点的运行状态,确保无错误(红色感叹号)。 |
| 工作流执行速度慢 | 1. 知识库检索文档过多。 2. LLM节点等待响应超时。 3. 网络延迟。 | 1. 优化知识库检索的“Top K”参数,限制返回片段数量。 2. 检查模型供应商的API状态和速率限制。 3. 对于复杂工作流,考虑将部分并行分支改为异步处理(如果支持)。 |
6. 总结:从工具到思维的转变
通过本文的详细拆解,相信你已经掌握了Dify工作流中分类、条件与介入这三个核心控制节点的用法。它们不仅仅是三个图形化按钮,更代表了一种构建可靠AI应用的工程化思维:
- 分解与路由:将复杂问题通过“分类”分解为子问题,并通过“条件”路由到专用处理单元。这是处理复杂性的有效手段。
- 自动化与监督的平衡:用“介入”节点在关键决策点引入人类判断,实现了全自动流程与完全人工处理之间的最佳平衡,兼顾了效率与风险控制。
- 可观测与可调试:工作流的可视化特性使得整个AI应用的逻辑链条变得清晰可见,任何环节的结果都可以被检查和追踪,极大降低了运维和调试成本。
下一步,你可以尝试将这些节点组合起来,解决更实际的业务场景,例如:
- 智能内容创作流水线:分类判断内容主题 -> 条件分支调用不同风格的写作模型 -> 生成初稿 -> 介入节点让编辑审核修改 -> 发布。
- 客户服务分级系统:根据用户问题情绪(分类)和客户等级(条件),决定是调用标准知识库、升级到高级AI坐席,还是立即转接人工客服(介入)。
掌握工作流的设计,意味着你开始像架构师一样思考AI应用,而不仅仅是调参者。现在,就打开你的Dify,从复现这个“智能工单处理”案例开始,构建你的第一个复杂AI工作流吧。