Dify 1.15人工介入功能详解:构建人机协同AI工作流实战指南

在构建复杂的AI工作流时,我们常常面临一个困境:如何让自动化流程在关键时刻“停一停”,引入人类的判断和决策?无论是内容审核、数据验证,还是复杂的业务审批,纯自动化的AI有时无法完全替代人类的专业判断。Dify作为领先的Agentic Workflow构建平台,在1.15版本中,其“人工介入”功能为解决这一痛点提供了优雅的解决方案。本文将手把手带你深入Dify 1.15的“人工介入”功能,从核心概念到实战配置,再到最佳实践,为你构建真正“人机协同”的智能应用提供完整指南。

1. 人工介入:为何它是AI工作流的关键一环

在深入实操之前,我们首先要理解“人工介入”在AI工作流中的核心价值。它远不止是一个简单的“暂停”按钮。

1.1 从纯自动化到人机协同的范式转变

早期的AI应用追求全流程自动化,但现实业务场景复杂多变。例如,一个自动生成的营销文案可能需要品牌经理的最终审核;一个从数据库查询生成的报告可能需要数据专员确认其准确性;一个客户服务对话在涉及敏感退款时可能需要转接人工坐席。纯自动化流程在这些场景下显得僵化且存在风险。

Dify 1.15的“人工介入”节点,正是为了在这些关键决策点搭建一座桥梁。它将工作流的控制权暂时交还给人类操作者,待其做出判断、提供输入或进行修改后,流程再继续自动化执行。这种模式实现了“自动化效率”与“人类智慧”的最佳结合。

1.2 人工介入的核心应用场景

理解应用场景能帮助我们更好地设计工作流:

  • 内容审核与批准:AI生成的新闻稿、社交媒体帖子、产品描述在发布前需要人工审核。
  • 数据验证与修正:从非结构化数据(如扫描件、图片)中提取的信息,需要人工核对关键字段(如金额、日期、姓名)。
  • 复杂决策分支:基于AI分析的客户投诉分类,对于高风险投诉(如涉及法律问题)需要人工专员介入处理。
  • 创造性工作的迭代:AI生成的初步设计方案、代码框架,需要设计师或工程师评审并提供反馈,AI再基于反馈进行优化。
  • 异常处理:当工作流运行遇到AI无法处理的异常输入或边界情况时,自动触发人工处理流程。

1.3 Dify 1.15 中人工介入节点的能力边界

在Dify的工作流画布中,“人工介入”是一个独立的节点。它的核心能力包括:

  1. 暂停工作流:执行到该节点时,工作流会暂停,并生成一个待处理任务。
  2. 向指定操作员(可以是单个用户、用户组或通过变量指定)发送通知。
  3. 提供一个交互界面,操作员可以查看上下文信息、AI的中间结果,并进行操作(如审批、驳回、修改文本、选择选项等)。
  4. 接收操作员的输入,并将这些输入作为变量传递给工作流的后续节点。
  5. 支持超时与默认操作:设置等待时间,若超时无人处理,可按预设规则自动继续(如自动批准或驳回)。

2. 环境准备与基础概念

在开始构建带有人工介入的工作流之前,你需要一个可运行的Dify环境。这里我们以本地Docker部署为例,这是最快速且隔离的体验方式。

2.1 部署Dify

确保你的系统已安装Docker和Docker Compose。通过官方仓库快速启动:

# 克隆Dify的Docker部署仓库(请以官方最新文档为准) git clone https://github.com/langgenius/dify.git cd dify/docker # 复制环境变量示例文件并编辑(主要配置数据库、Redis等) cp .env.example .env # 使用docker-compose启动所有服务 docker-compose up -d

启动后,访问http://localhost:3000即可进入Dify控制台。首次进入需要创建管理员账户。

2.2 理解Dify工作流的核心构件

要使用人工介入,你需要对Dify工作流的基础组件有清晰认识:

  • 变量(Variables):用于在不同节点间传递数据。分为:
    • 输入变量:工作流开始时的参数。
    • 上下文变量:节点运行时产生的中间数据。
    • 输出变量:工作流最终返回的结果。
  • 节点(Nodes):构成工作流的模块,如LLM(大语言模型)、知识库检索、代码执行、HTTP请求等。“人工介入”也是一个特殊节点。
  • 边(Edges):连接节点的箭头,代表执行顺序和数据流向。
  • 触发器(Triggers):启动工作流的方式,如HTTP API、定时任务、Webhook等。

3. 人工介入节点配置详解

让我们进入核心环节,在Dify工作流编辑器中配置“人工介入”节点。

3.1 添加与基础配置

  1. 在Dify控制台创建一个新的“工作流”应用。
  2. 从左侧节点库中,找到“人工介入”节点,将其拖拽到画布中。
  3. 选中该节点,右侧会出现其配置面板。关键配置项如下:

基础设置:

  • 节点标题:为你的人工介入步骤起个名字,如“文案审核”、“数据校验”。
  • 操作员:指定处理此任务的人。这是核心配置,有三种模式:
    • 指定成员:从Dify用户列表中选择一个或多个具体用户。
    • 变量:通过上游节点输出的变量(如{{assigned_reviewer}})来动态指定操作员。这非常适合基于规则的路由,例如将不同地区的订单分配给对应的区域经理。
    • 所有成员:工作空间内的所有成员都会收到通知(需谨慎使用)。

界面与表单配置:

  • 描述:向操作员说明此步骤需要做什么。例如:“请审核以下AI生成的产品描述,检查是否有事实错误或品牌调性不符之处。”
  • 表单:定义操作员需要填写或选择的内容。这是接收人工输入的关键。
    • 添加字段:支持文本输入下拉选择单选多选等类型。
    • 变量名:为每个字段设置一个变量名(如review_comment,approval_status),后续节点可以通过{{review_comment}}引用这些值。

高级选项:

  • 超时:设置等待时间(如30分钟)。超时后,工作流将根据“超时后”的选项继续。
  • 超时后:可选继续(并可使用默认值填充表单)或终止工作流。
  • 允许操作员重新分配:开启后,收到任务的操作员可以将任务转给其他成员。

3.2 一个简单的配置示例

假设我们构建一个“社交媒体帖子生成与审核”工作流。

  1. 第一个节点是LLM,提示词为“生成一条关于新品咖啡机的推特文案”。
  2. 第二个节点就是我们刚添加的人工介入节点。
    • 操作员:指定为你的市场部同事“张三”。
    • 描述:“请审核AI生成的推特文案,并给出修改意见或直接批准。”
    • 表单:添加两个字段。
      • 字段1:类型单选,标签“审核结果”,选项“批准”、“驳回”,变量名approval_result
      • 字段2:类型文本输入,标签“修改意见”,变量名revision_notes
  3. 第三个节点是条件判断节点,根据{{approval_result}}的值决定流程走向。
    • 如果等于“批准”,则流向HTTP请求节点,调用推特发布API。
    • 如果等于“驳回”,则流向另一个LLM节点,提示词为“根据以下意见修改文案:{{revision_notes}}”,然后可能再次进入审核循环或结束。

4. 完整实战案例:构建一个带人工校验的智能周报生成器

我们将构建一个完整的工作流,它每周自动生成项目周报,但需要项目经理确认关键数据后,才通过邮件发送给团队。

4.1 案例需求与设计

  • 输入:项目名称、本周起止日期。
  • 流程
    1. 数据获取:模拟从内部系统(如Jira)获取本周任务完成列表。
    2. 报告生成:LLM总结任务列表,生成格式化的周报草稿。
    3. 人工介入:将周报草稿和关键指标(如完成率)发送给项目经理审核。项目经理可以修改报告内容,并确认是否发送。
    4. 条件分支:如果确认发送,则调用邮件服务发送周报;如果驳回,则结束流程并通知生成者。
  • 输出:发送成功的确认信息或驳回通知。

4.2 分步构建工作流

步骤1:创建工作流并设置输入变量在Dify中创建新工作流,添加两个输入变量:project_name(字符串),week_end(字符串,格式YYYY-MM-DD)。

步骤2:模拟数据获取节点由于直接连接Jira需要复杂配置,我们先用一个“代码执行”节点模拟数据。选择Python,编写以下代码:

# 模拟从数据库或API获取的任务数据 tasks = [ {"id": "TASK-101", "title": "设计登录页面UI", "status": "已完成", "owner": "张三"}, {"id": "TASK-102", "title": "开发用户认证API", "status": "进行中", "owner": "李四"}, {"id": "TASK-103", "title": "编写项目文档", "status": "未开始", "owner": "王五"}, ] output = { "task_list": tasks, "total_tasks": len(tasks), "completed_tasks": len([t for t in tasks if t['status'] == '已完成']) } print(output)

此节点的输出将自动成为上下文变量,如{{task_list}}

步骤3:LLM生成周报草稿添加一个LLM节点。配置模型(如GPT-4),并编写提示词:

你是一位专业的项目经理助理。请根据以下任务数据,为项目【{{project_name}}】撰写一份简洁的周报(截至{{week_end}})。 任务列表:{{task_list}} 周报结构应包括: 1. 本周概要(完成率:{{completed_tasks}}/{{total_tasks}}) 2. 已完成工作 3. 进行中工作 4. 下周计划 5. 风险与问题 请使用专业、积极的语气。

将此节点的输出变量命名为draft_report

步骤4:配置人工介入节点这是核心。拖入“人工介入”节点。

  • 操作员:设置为变量{{project_manager}}。这意味着我们需要在流程开始时或上游节点中定义这个变量。我们可以在工作流开始时增加一个“变量赋值”节点来模拟,设置project_manager”pm@company.com”
  • 描述:“【{{project_name}}】项目周报({{week_end}})已生成草稿,请审核内容并确认是否发送给团队。”
  • 表单
    • 字段1:文本输入,标签“周报最终版”,变量名final_report关键技巧:在“默认值”中,填入{{draft_report}}。这样审核者打开时,文本框中已经预填了AI生成的草稿,可以直接编辑。
    • 字段2:单选,标签“发送决策”,选项“确认发送”、“需要修改”,变量名send_decision
    • 字段3:文本输入,标签“修改意见(如选择‘需要修改’)”,变量名modification_feedback,非必填。

步骤5:添加条件分支添加“条件判断”节点。设置条件:如果{{send_decision}}等于”确认发送”,则进入“是”分支;否则进入“否”分支。

步骤6:配置分支动作

  • “是”分支(发送邮件):添加“HTTP请求”节点,配置你的邮件服务Webhook(如SendGrid、阿里云邮件推送)。在请求体中,引用{{final_report}}作为邮件内容。
  • “否”分支(通知生成者):可以添加另一个“HTTP请求”节点,调用企业微信/Slack等机器人,通知周报生成者:“周报被PM驳回,意见:{{modification_feedback}}”。或者,更简单地添加一个“文本输出”节点,显示驳回信息。

步骤7:设置输出在流程末尾,添加一个“答案”节点,根据不同的分支,组合输出信息,如“周报已发送”或“周报待修改”。

4.3 运行与测试

保存工作流后,点击右上角“发布”。然后在“概览”页使用“测试”功能。

  1. 输入project_name: “电商平台重构”week_end: “2024-10-27”
  2. 点击“运行”。
  3. 工作流会在“人工介入”节点暂停。此时,你需要以操作员(我们模拟的pm@company.com)的身份登录Dify。
  4. 在Dify顶部的“待处理”任务通知中,找到并处理这个任务。你可以修改文本,选择“确认发送”。
  5. 处理完成后,返回测试界面,可以看到工作流继续执行,并最终输出结果。

5. 高级技巧与最佳实践

掌握了基础操作后,以下技巧能让你的“人工介入”工作流更强大、更可靠。

5.1 动态操作员分配

不要硬编码操作员。通过上游节点动态决定谁来处理。

  • 示例:在“工单分类”LLM节点后,根据工单类型输出assignee变量(如”tech_support””billing_department”)。然后在人工介入节点的“操作员”设置中选择变量,并填入{{assignee}}。你需要在Dify中提前创建好这些用户组或用户。

5.2 为操作员提供充足的上下文

人工决策需要信息。除了在“描述”中写清楚,更要利用好“表单”的默认值。

  • 将上游的关键输出,如AI生成的内容、检索到的知识库片段、计算出的数据指标,以只读或默认值的形式预填在表单字段中。这样操作员无需来回切换页面就能掌握全部情况。

5.3 设置合理的超时与重试机制

对于时效性强的任务(如订单审核),必须设置超时。

  • 策略:超时时间设置为业务允许的最大等待时间(如2小时)。在“超时后”选择继续,并为表单设置合理的默认值(如将审批状态默认设为“驳回”,并填入超时原因)。这样可以避免工作流无限期挂起,阻塞后续流程。

5.4 与外部系统集成

Dify的人工介入任务通知目前主要在平台内。为了更及时,可以:

  1. 在人工介入节点之前,添加一个“HTTP请求”节点,调用企业IM(钉钉、飞书、Slack)的机器人Webhook,发送一个包含任务链接的通知给操作员。
  2. 将Dify的“操作员”与你的公司统一账号系统(如LDAP)对接,确保任务能准确分配给对的人。

5.5 工作流版本管理与权限

当你的工作流应用于生产环境时:

  • 版本控制:在修改工作流前,使用Dify的“发布新版本”功能。这样可以在出现问题时快速回滚。
  • 权限隔离:在Dify的企业版中,可以利用团队和权限管理功能,严格控制哪些成员可以处理特定工作流中的人工介入任务,确保数据安全和职责清晰。

6. 常见问题与排查思路

在实际使用中,你可能会遇到以下问题:

问题现象可能原因排查与解决思路
工作流在人工介入节点一直“运行中”,无人收到通知。1. 指定的“操作员”账号不存在或未登录。
2. 工作流未成功发布。
3. 使用了变量指定操作员,但该变量为空或值无效。
1. 检查Dify用户列表,确认操作员账号状态。
2. 确保点击了“发布”按钮,并在应用“概览”页测试,而非仅在编辑器调试。
3. 在人工介入节点前添加“调试”节点,打印出用于分配操作员的变量值,确保其正确。
操作员处理任务后,工作流不继续执行。1. 处理任务的操作员账号与触发工作流的账号不同,测试界面未自动刷新。
2. 工作流后续节点存在配置错误(如无效的变量引用)。
1. 让处理任务的操作员在“待处理”列表中操作。测试时,请用同一个浏览器账号触发并处理任务,或手动刷新测试结果页面。
2. 检查条件判断、HTTP请求等后续节点的配置,确认引用的变量名(如{{approval_result}})与人工介入节点表单中定义的完全一致。
表单中引用的上游变量(如{{draft_report}})显示为空白。1. 上游节点未成功运行或未输出该变量。
2. 变量名拼写错误。
3. 在“默认值”中引用变量时,使用了错误的语法。
1. 逐一检查上游每个节点的运行状态和输出。
2. 仔细核对变量名,Dify中变量名区分大小写且不允许有空格。
3. 确保在“默认值”框中直接写入{{variable_name}}格式,而不是{variable_name}或其他格式。
超时设置未生效。1. “超时”和“超时后”配置未保存。
2. 系统时间或时区问题(Docker部署时常见)。
1. 确认节点配置已保存,并重新发布工作流。
2. 检查Dify服务器容器的时区设置,确保与业务所在地时区一致。可以在docker-compose.yml中为服务设置环境变量TZ=Asia/Shanghai

7. 总结:让人工智能与人类智慧共舞

Dify 1.15的“人工介入”功能,将AI工作流从封闭的自动化管道,升级为开放的人机协同系统。通过本文的拆解,你应该已经掌握了:

  1. 核心概念:理解了人工介入在复杂业务场景中的必要性及其作为“决策开关”和“质量阀门”的角色。
  2. 配置细节:从操作员指定、表单设计到超时处理,完成了节点配置的完整学习。
  3. 实战构建:跟随“智能周报生成器”案例,体验了从设计、配置到测试的端到端流程。
  4. 进阶技巧:学习了动态分配、上下文优化、超时处理等提升生产可用性的方法。
  5. 排错指南:拥有了应对常见问题的排查清单。

真正的智能应用,不在于完全取代人类,而在于如何让机器更高效地处理规则性任务,同时将宝贵的、需要创造力和复杂判断的环节无缝地交还给人类。Dify的“人工介入”节点,正是实现这一愿景的精巧工具。现在,你可以尝试将这一功能应用到你的内容审核、数据清洗、客户服务或内部审批流程中,构建出既高效又可靠的下一代AI应用。