Dify 1.15 人工介入功能详解:构建人机协同AI工作流实战
在实际企业级 AI 应用开发中,构建一个完全自动化的流程是理想状态,但现实情况是,复杂业务逻辑、合规要求或模型能力的边界,常常需要引入“人”的判断和干预。Dify 作为一个领先的 LLM 应用开发平台,其“人工介入”功能正是为了解决这一核心痛点。它允许你在 AI 工作流的特定节点暂停,将决策权或审核权交还给人类操作员,待人工处理完成后再继续后续的自动化流程。这不仅是简单的“审批”,而是将人类智慧无缝嵌入到 AI 驱动的自动化链条中,实现人机协同。
本文将深入解析 Dify 1.15 版本中人工介入功能的设计理念、核心机制与实战配置。无论你是希望为 AI 客服添加敏感问题人工审核,还是为内容生成流程加入编辑校对环节,亦或是为数据标注任务设计人机回圈,都能通过本文掌握从零搭建一个具备人工介入能力的 Dify 工作流。我们将从概念理解开始,逐步完成环境准备、工作流构建、节点配置、运行测试,并最终探讨生产环境下的最佳实践与排错指南。
1. 理解 Dify 人工介入的核心价值与工作机制
在深入配置之前,必须厘清人工介入在 Dify 工作流中的定位。它不是一个独立的功能,而是工作流节点(Node)的一种特殊类型。理解其工作机制,有助于我们在设计工作流时做出更合理的架构决策。
1.1 人工介入解决了什么问题?
纯粹的 AI 自动化流程面临几个固有挑战:
- 不确定性处理:当 LLM 的输出置信度低、存在多种可能解或需要主观判断时,纯 AI 难以做出可靠决策。
- 合规与安全审核:在金融、医疗、法律等领域,或涉及用户隐私、公司机密的内容生成,必须经过人工审核才能发布。
- 复杂业务逻辑:某些决策需要查询外部数据库、调用内部 API 或基于非文本信息(如图片、表格),这些逻辑难以全部用自然语言描述给 LLM。
- 质量控制与迭代:通过人工对 AI 输出进行纠正或评分,可以生成高质量的数据,用于后续的模型微调(RLHF),形成正向反馈循环。
Dify 的人工介入节点,就像一个智能开关。当工作流执行到该节点时,它会暂停,并创建一个待处理任务。这个任务会被分配给指定的人工操作员(或操作员组),操作员在 Dify 提供的界面上查看上下文信息,做出判断、修改内容或提供输入,然后点击“通过”,工作流才会从该节点继续向下执行。
1.2 人工介入节点的关键属性
一个配置完善的人工介入节点包含以下几个关键部分:
- 触发条件:决定工作流何时进入人工介入。可以是无条件(每次必走),也可以是基于前面节点输出的条件判断(例如,当情感分析为“负面”时,才转人工)。
- 指派对象:任务分配给谁?可以是特定的用户、用户组,或由具有特定角色(如“管理员”、“审核员”)的用户领取。
- 操作界面:人工操作员看到什么?你需要定义展示给操作员的表单,包括只读的上下文变量(如用户原始问题、AI 的初始回复)和可编辑的字段(如最终答复、审核意见、评分)。
- 超时与重试策略:如果人工操作员长时间未处理,系统该如何应对?是自动超时跳过,还是转给其他人,或是执行备用分支?
- 输出变量:人工处理的结果(如修改后的文本、选择的选项、填写的意见)如何转化为工作流变量,供后续节点使用。
理解这些属性,是后续进行有效配置的基础。
2. 环境准备与 Dify 工作流基础
在开始配置人工介入之前,你需要一个可用的 Dify 环境。我们将从环境准备开始,并快速回顾创建基础工作流的关键步骤。
2.1 Dify 部署与访问
Dify 支持多种部署方式。对于开发和测试,我们推荐使用 Docker Compose,这是最快捷、隔离性最好的方式。
- 获取部署文件:访问 Dify 官方 GitHub 仓库的 Release 页面,下载对应版本的
docker-compose.yml文件。确保你选择的是 1.15 或更高版本。 - 启动服务:在存放
docker-compose.yml的目录下执行以下命令。# 启动所有服务 docker-compose up -d # 查看日志,确认服务启动成功 docker-compose logs -f dify-api - 访问控制台:服务启动后,在浏览器中访问
http://localhost:3000(默认端口)。首次访问需要创建管理员账户。 - 配置模型供应商:进入控制台后,在“设置”->“模型供应商”中,添加你的 OpenAI、Azure OpenAI 或 Anthropic 等 API 密钥,确保基础 LLM 调用可用。
注意:生产环境部署需要考虑数据库持久化、网络配置、HTTPS、监控和备份等,Docker Compose 示例仅适用于评估和开发。
2.2 创建你的第一个基础工作流
人工介入节点必须嵌入在一个工作流中。我们先创建一个最简单的文本生成工作流作为“靶子”。
- 进入工作流设计器:在 Dify 控制台左侧导航栏,点击“工作流”,然后点击“创建新工作流”。
- 添加开始节点和 LLM 节点:
- 从左侧节点库拖拽“开始”节点到画布。
- 拖拽一个“LLM”节点(如“对话”或“文本生成”)到画布。
- 连接“开始”节点的输出到“LLM”节点的输入。
- 配置 LLM 节点:
- 点击 LLM 节点,在右侧面板选择模型(如 gpt-4o-mini)。
- 在“上下文”区域,配置系统提示词,例如:“你是一个友好的客服助手。”
- 在“对话内容”区域,将变量
{{#context.query#}}填入用户问题位置。这个变量来自开始节点。
- 配置开始节点:点击开始节点,在右侧“变量”部分,添加一个名为
query的字符串类型变量。这代表了用户输入。 - 测试运行:点击右上角的“运行”按钮,在弹出窗的
query字段输入“你好”,点击运行。你应该能在 LLM 节点后看到生成的回复。
至此,一个基础的自动化文本生成流水线就完成了。接下来,我们将在这个流水线中插入人工审核环节。
3. 构建带有人工介入的客服审核工作流
我们将构建一个经典的场景:AI 客服自动回复,但当识别到用户问题涉及“投诉”或“退款”时,自动转交人工客服进行审核和最终回复。
3.1 工作流结构设计
整个工作流将包含以下节点和逻辑:
- 开始:接收用户问题 (
query)。 - 分类判断:使用一个 LLM 节点对用户问题进行意图分类,判断是否需要人工介入。
- 条件分支:根据分类结果,决定流程走向。
- 人工介入:如果需要人工,则暂停流程,等待客服处理。
- AI 回复:如果不需要人工,或人工审核后,由 AI 或人工生成最终回复。
- 结束:输出最终结果。
3.2 逐步配置与实现
步骤一:添加并配置分类节点
- 从节点库拖拽一个新的“LLM”节点到画布,放在开始节点和第一个 LLM 节点之间。将其重命名为“意图分类”。
- 连接“开始”节点到“意图分类”节点。
- 配置该节点:
- 模型:选择一个快速且便宜的分类模型,如 gpt-3.5-turbo。
- 系统提示词:
你是一个意图分类器。请分析用户的输入,判断其是否涉及“投诉”、“退款”、“纠纷”、“法律咨询”或“高管联系”等敏感或复杂话题。 你只需要输出一个单词:`NEED_HUMAN` 或 `AUTO_REPLY`。 如果涉及上述敏感话题,输出 `NEED_HUMAN`,否则输出 `AUTO_REPLY`。 不要输出任何其他解释。 - 用户问题:填入
{{query}}。
- 为了后续使用分类结果,我们需要将 LLM 的输出赋值给一个变量。在该节点的“高级”设置中,找到“回答变量”,将其设置为
classification_result。这样,LLM 的输出(NEED_HUMAN或AUTO_REPLY)就会被保存到工作流变量classification_result中。
步骤二:添加条件分支节点
- 从节点库拖拽“条件判断”节点到画布。
- 连接“意图分类”节点到“条件判断”节点。
- 配置条件分支:
- 点击“条件判断”节点,在右侧面板点击“添加条件”。
- 在第一个条件(IF)的规则中,设置:
- 变量:选择
classification_result - 判断:等于
- 值:输入
NEED_HUMAN
- 变量:选择
- 这个条件的出口,我们将其重命名为“转人工”。
- 系统会自动生成一个“其他”出口,我们将其重命名为“自动回复”。
步骤三:配置人工介入节点
这是最核心的一步。
- 从节点库拖拽“人工介入”节点到画布。将其连接到“条件判断”节点的“转人工”出口。
- 配置人工介入节点:
- 节点名称:命名为“人工审核”。
- 指派给:
- 方式:选择“指定成员”。(你也可以选择“角色”,例如“审核员”,这需要先在团队管理中设置角色)。
- 成员:从下拉列表中选择一个或多个已有的 Dify 用户作为审核员。为了测试,你可以选择自己的账户。
- 表单配置:这是定义审核员操作界面的地方。
- 点击“添加字段”。
- 字段1(只读,显示用户问题):
- 标题:用户原始问题
- 变量名:
original_query(自动生成) - 类型:选择“文本”
- 默认值:填入
{{query}} - 编辑权限:取消勾选“可编辑”,使其成为只读字段。
- 字段2(只读,显示AI初始回复):
- 我们需要先让 AI 生成一个初始回复。因此,从“条件判断”的“转人工”出口,先连接到一个新的“LLM”节点(生成初始回复),再将这个 LLM 节点连接到“人工介入”节点。配置这个 LLM 节点生成基于
{{query}}的客服回复,并将其输出赋值给变量ai_draft_reply。 - 然后,在人工介入节点的表单中:
- 标题:AI 建议回复
- 变量名:
ai_draft - 类型:选择“文本”
- 默认值:填入
{{ai_draft_reply}} - 编辑权限:取消勾选“可编辑”。
- 我们需要先让 AI 生成一个初始回复。因此,从“条件判断”的“转人工”出口,先连接到一个新的“LLM”节点(生成初始回复),再将这个 LLM 节点连接到“人工介入”节点。配置这个 LLM 节点生成基于
- 字段3(可编辑,最终回复):
- 标题:最终回复内容
- 变量名:
final_reply - 类型:选择“文本”
- 默认值:填入
{{ai_draft_reply}}(这样审核员可以在 AI 建议的基础上修改)。 - 编辑权限:保持勾选“可编辑”。
- 字段4(可编辑,审核意见):
- 标题:审核意见
- 变量名:
review_comment - 类型:选择“文本”
- 默认值:留空。
- 编辑权限:保持勾选“可编辑”。
- 高级设置:
- 超时:设置一个超时时间(如30分钟)和超时后操作(如“自动通过并继续”)。这可以防止工作流因无人处理而永久挂起。
步骤四:整合流程与输出
- 自动回复分支:从“条件判断”节点的“自动回复”出口,连接到你最初创建的那个 LLM 节点(或新建一个),用于处理无需人工的常规问题。将此节点的输出赋值给变量
auto_final_reply。 - 人工分支输出:从“人工介入”节点的输出端连接出去。人工处理完成后,
final_reply变量就包含了审核员确定的最终内容。 - 汇聚与结束:你需要使用一个“答案”节点或“结束”节点来输出最终结果。这里需要一个逻辑来处理两个分支的变量。
- 方法A:使用“变量赋值”节点。在“自动回复”分支后,设置一个变量赋值节点,将
auto_final_reply赋值给一个通用变量output。在“人工介入”分支后,也设置一个变量赋值节点,将final_reply赋值给同一个变量output。然后将两个变量赋值节点连接到同一个“结束”节点。 - 方法B(更清晰):使用“条件判断”后的“其他”分支,并配合变量。但上述方法A在简单场景下更直观。
- 方法A:使用“变量赋值”节点。在“自动回复”分支后,设置一个变量赋值节点,将
- 配置“结束”节点,在其变量中输出
{{output}}或{{final_reply}}等最终结果变量。
完成后的简化工作流图应类似:开始 -> 意图分类 -> 条件判断 -> (是) -> AI生成草稿 -> 人工介入 -> 变量赋值 -> 结束;条件判断 -> (否) -> AI直接回复 -> 变量赋值 -> 结束。
4. 运行、测试与验证人工介入流程
配置完成后,必须进行端到端的测试,验证整个流程是否符合预期。
4.1 发布工作流
- 在工作流编辑界面,点击右上角的“发布”按钮。
- 为这个版本添加一个备注,例如“初版:添加投诉类问题人工审核”。
- 发布后,工作流会生成一个独立的 API 端点。你可以通过“应用”功能将其封装为一个可访问的 Web 应用或 API。
4.2 模拟测试人工介入
- 触发人工介入:通过运行测试或调用 API,发送一个包含“投诉”关键词的查询,例如:“我要投诉你们的产品质量有问题!”
- 查看待处理任务:
- 以审核员身份(或你指派给自己的账户)登录 Dify 控制台。
- 在左侧导航栏,点击“待办”。你应该能看到一条待处理的“人工审核”任务。
- 处理人工任务:
- 点击该任务,进入处理界面。你会看到之前配置的表单:“用户原始问题”和“AI 建议回复”是只读的,“最终回复内容”和“审核意见”是可编辑的。
- 审核员可以修改“最终回复内容”,并填写“审核意见”,例如:“用户情绪激动,建议提供补偿方案并致电跟进。”
- 点击“通过并继续”。
- 验证流程继续:
- 任务完成后,返回工作流运行历史或通过 API 轮询结果。
- 你应该能看到工作流已执行完毕,并且最终输出的是审核员修改后的“最终回复内容”,而不是最初的 AI 草稿。
- 测试自动分支:发送一个普通查询,如“你们的营业时间是什么?”,验证流程是否绕过人工节点,直接由 AI 回复。
4.3 关键验证点
- 条件触发:是否只有特定意图的问题触发了人工介入?
- 表单展示:审核员界面显示的信息是否准确、完整?
- 变量传递:审核员修改的内容,是否正确传递到了工作流下游,并作为最终输出?
- 超时机制:可以测试等待超过设定的超时时间,看工作流是否按配置(自动通过/拒绝)继续执行。
5. 常见问题排查与调试指南
在实际操作中,你可能会遇到一些问题。以下是常见问题的排查路径。
| 问题现象 | 可能原因 | 检查与解决步骤 |
|---|---|---|
| 人工介入节点未触发,流程直接跳过 | 1. 条件判断逻辑错误。 2. 分类节点输出变量名不匹配。 3. 人工介入节点未正确连接到条件分支的“是”出口。 | 1. 检查“条件判断”节点的规则,确认classification_result等于NEED_HUMAN。2. 运行工作流时,查看“意图分类”节点的详细输出,确认 classification_result变量的值是否正确。3. 检查画布上的连线,确保从条件分支到人工介入节点的连线无误。 |
| 审核员在“待办”中看不到任务 | 1. 指派配置错误。 2. 当前登录用户不是被指派的成员或角色。 3. 工作流未成功发布或运行。 | 1. 检查人工介入节点“指派给”的设置,确认成员或角色选择正确。 2. 使用被指派的账户登录 Dify 控制台。 3. 确认你测试运行的是已发布的最新版本工作流。 |
| 审核员处理任务后,工作流没有继续执行 | 1. 人工介入节点下游的节点连接断开或配置错误。 2. 处理任务时出现了系统错误。 3. 用于接收人工输出的变量在后继节点中未被正确引用。 | 1. 检查人工介入节点之后的连线,确保连接到下一个节点(如变量赋值或结束节点)。 2. 查看 Dify 服务端日志 ( docker-compose logs dify-api),寻找错误信息。3. 确认后继节点中引用的变量名(如 {{final_reply}})与人工介入节点表单中定义的变量名完全一致。 |
| 表单中显示的变量值为空 | 1. 上游节点未成功将值赋给变量。 2. 表单字段的“默认值”中变量引用语法错误或变量不存在。 | 1. 检查为人工介入节点提供输入的上游节点(如生成草稿的 LLM 节点),确认其“回答变量”已设置,且运行时有值。 2. 检查表单字段的默认值,如 {{ai_draft_reply}},确保变量名拼写正确,且该变量在到达人工节点时已存在。 |
| 超时设置未生效 | 1. 超时时间设置过长,还未触发。 2. 系统定时任务未正常执行。 | 1. 将超时时间设置为一个很短的值(如1分钟)进行测试。 2. 对于 Docker 部署,检查所有容器(特别是 dify-api和dify-worker)是否都正常运行。超时处理依赖后台工作进程。 |
调试建议:充分利用 Dify 工作流的“运行历史”功能。每次运行都会记录每个节点的输入、输出和状态。当流程不符合预期时,逐节点检查运行历史中的变量值和状态,是定位问题最有效的方法。
6. 生产环境最佳实践与扩展思路
将带有人工介入的工作流用于生产环境,需要考虑更多关于可靠性、效率和管理的因素。
6.1 安全与权限管理
- 最小权限原则:不要将人工介入任务指派给无关人员。利用 Dify 的“角色”功能,创建“内容审核员”、“客服主管”等角色,并基于角色进行指派。
- 操作审计:所有人工介入任务的处理操作(谁、何时、修改了什么、意见是什么)都应被记录。Dify 通常会记录这些日志,确保你有权限访问和归档这些日志以满足合规要求。
- 数据脱敏:如果处理的信息包含敏感数据(如手机号、身份证号),考虑在展示给审核员之前,在流程中先添加一个“数据脱敏”节点进行部分隐藏。
6.2 性能与可用性
- 设置合理的超时与升级策略:不要只设置一个超时。可以配置:首次指派给 A,5 分钟未处理,自动转派给 B;再 10 分钟未处理,则根据规则自动通过或拒绝,并发送告警通知。
- 异步与队列:对于高并发场景,人工介入任务会形成队列。确保你的审核团队有足够的处理能力,或考虑将任务集成到外部工单系统(如 Jira, 飞书审批)。
- 通知集成:审核员不可能一直刷新“待办”列表。将 Dify 与企业的即时通讯工具(如 Slack, 钉钉,企业微信)集成,当有新任务时,自动发送通知给审核员。
6.3 扩展功能设计
- 多级审核:对于极高风险场景,可以串联多个人工介入节点,实现“初审->复审”的多级审核流程。
- 动态指派:基于工单内容(如语言、产品线),使用代码节点调用内部 API,动态计算并指派给最合适的专家团队。
- 人工反馈闭环:将人工修改的最终回复
final_reply与 AI 初始草稿ai_draft_reply进行对比、差异分析,并将这些数据作为高质量样本,用于后续的模型微调,持续提升 AI 的首次回复准确率。 - 与外部系统集成:人工介入节点可以作为一个“闸口”,审核通过后,触发一个“HTTP 请求”节点,将数据推送到外部的 CRM、工单系统或数据库,实现业务流程的完全贯通。
人工介入功能将 Dify 从一个纯粹的 AI 自动化工具,升级为一个强大的人机协同平台。它的价值不在于替代人工,而在于将人力精准、高效地部署在 AI 最不擅长或风险最高的环节,从而在提升效率的同时,牢牢把控质量与安全的底线。通过本文的配置实践,你已经掌握了构建这种人机协同工作流的核心技能。接下来,你可以尝试将其应用到内容安全过滤、金融报告生成、智能工单分类等更复杂的业务场景中,探索 AI 与人类智能结合的最佳模式。