Dify 1.15 人工介入功能实操:AI工作流人机协同配置指南
这次我们来看一个关于 Dify 1.15 版本中“人工介入”功能的技术实操。对于正在使用或考虑使用 Dify 构建 AI 应用的开发者来说,如何让人类在 AI 工作流的关键节点进行审核、修正或决策,是一个直接影响应用可靠性和用户体验的核心问题。Dify 1.15 版本对此进行了重点增强。
本文将直接切入主题,拆解 Dify 1.15 中人工介入功能的核心机制、配置方法、适用场景以及在实际工作流中的集成方式。无论你是想为客服机器人添加人工坐席接管,还是为内容生成流程设置审核关卡,这篇文章将提供一套从配置到验证的完整操作指南。
1. 核心能力速览
在深入细节之前,我们先通过一个表格快速了解 Dify 1.15 人工介入功能的核心规格与能力边界,这有助于你快速判断其是否匹配你的需求。
| 能力项 | 说明 |
|---|---|
| 功能定位 | 在 Dify AI 工作流(Workflow)中插入人工审批或处理节点,实现人机协同。 |
| 核心节点 | 人工干预 (Human Intervention)节点。 |
| 触发方式 | 基于工作流上下文变量(如分类结果、置信度、敏感词命中)自动触发,或作为固定流程环节。 |
| 人工操作界面 | 通过 Dify 提供的任务队列 (Task Queue)界面进行处理,支持桌面和移动端。 |
| 处理动作 | 人工可执行:通过、拒绝、修改输入/输出内容后重新提交。 |
| 集成方式 | 作为工作流中的一个标准节点进行配置,支持条件分支。 |
| 适用场景 | 内容安全审核、关键决策确认、复杂问题转人工、数据标注复核、AI 输出质量把关等。 |
| 技术门槛 | 主要依赖于 Dify 工作流编排能力,无需额外编码即可配置基础功能。 |
| 进阶能力 | 可通过 API 获取待处理任务,集成到自定义后台系统;支持为任务设置优先级、超时和指派。 |
2. 适用场景与使用边界
人工介入不是在所有环节都必要,滥用会导致效率下降。理解其适用场景和边界,是设计高效人机协同流程的第一步。
最适合使用人工介入的场景:
- 高风险决策与审核:例如,AI 生成的合同条款、金融建议、医疗健康相关回答,必须经过专业人士审核后才能最终交付给用户。
- 敏感内容过滤:尽管有 AI 内容安全过滤器,但对于公关、法律或品牌形象要求极高的场景,最终发布前的人工审核是必要的安全网。
- 复杂问题升级:当客服机器人识别到用户问题非常复杂、情绪激动或涉及多次未解决的投诉时,自动触发人工坐席接管流程。
- 数据标注与质量校验:在利用 AI 进行初步数据清洗、分类或打标后,通过抽样或低置信度触发人工复核,确保训练数据或输出数据的质量。
- 创造性工作的把关:如营销文案、设计建议的生成,AI 提供草案,由人类进行创意优化和最终定稿。
使用边界与注意事项:
- 性能与延迟:人工介入必然引入异步延迟。不适合对实时性要求极高的对话场景(如实时翻译),但可通过设置超时机制和默认降级方案来缓解。
- 成本考量:需要评估人工审核的人力成本与业务风险之间的平衡。可通过优化触发条件(如仅对低置信度结果触发)来控制人工介入的量级。
- 合规与授权:如果人工介入环节需要处理用户个人信息、对话记录等,需确保该操作符合隐私政策并获得相应授权,同时要对人工处理员进行权限管理和操作审计。
- 体验连续性:设计流程时,需考虑用户等待期间的通知(如“您的问题已提交专家审核,请稍候”)以及人工处理完成后如何无缝地将结果返回给用户。
3. 环境准备与前置条件
在开始配置人工介入工作流之前,你需要一个可运行的 Dify 环境。以下是典型的准备工作清单。
Dify 部署环境:
- 版本:确保你的 Dify 版本为1.15.0 或更高。早期版本可能不支持完整的人工干预节点功能。
- 部署方式:无论是通过 Docker Compose、Kubernetes Helm Chart,还是从源码部署,都需要保证服务正常运行。
- 访问权限:你需要一个具有工作流编辑和应用发布权限的账号。
模型与知识库准备:
- AI 模型:确保你的 Dify 已正确配置并可用至少一个 LLM 模型(如 GPT-4、Claude、或本地部署的 GLM、Qwen 等),因为人工介入通常发生在 AI 处理之后。
- 知识库(可选):如果你的工作流涉及知识库检索增强生成(RAG),确保相关知识库已构建并可用。
人工处理端准备:
- 处理人员账号:需要为执行审核/处理任务的人员创建 Dify 账号,并授予其访问“任务队列”的权限。通常,可以创建一个“审核员”角色。
- 通知机制(可选但推荐):考虑如何通知处理人员有新任务。Dify 可能支持内部通知,但集成外部 IM(如钉钉、飞书、企业微信)的 webhook 通常是更可靠的做法,这可能需要额外的配置或开发。
4. 人工干预节点配置详解
这是功能实现的核心。我们以一个“AI 客服回答安全审核”场景为例,一步步配置一个包含人工干预节点的工作流。
场景:用户向 AI 客服提问,AI 生成回答后,先经过一个“敏感词检查”节点。如果发现潜在敏感内容,则触发人工审核;否则,直接返回答案给用户。
步骤 1:创建工作流并添加初始节点
- 进入 Dify 控制台,创建新应用,选择“工作流”类型。
- 从节点库中拖入以下节点并连接:
- 开始节点:接收用户问题。
- LLM 节点(如 ChatGPT):配置系统提示词为客服助手,处理用户问题,生成初始回答。输出变量设为
ai_answer。 - 代码节点或工具节点:作为“敏感词检查器”。这里使用代码节点,编写一个简单的 Python 函数,检查
ai_answer中是否包含预设的敏感词列表(如“退款”、“投诉”、“法律”等业务敏感词)。
该节点输出两个变量:# 示例:敏感词检查逻辑 sensitive_words = ["退款", "投诉", "起诉", "赔偿", "高层"] def check_sensitive(text): for word in sensitive_words: if word in text: return True, word # 触发,并返回触发的词 return False, None # 未触发 # 调用函数,假设输入变量是 ai_answer is_triggered, triggered_word = check_sensitive(ai_answer)need_review(布尔值) 和triggered_word(字符串)。
步骤 2:配置人工干预节点
- 从节点库拖入“人工干预 (Human Intervention)”节点。
- 连接:将“敏感词检查”节点的输出,连接到“人工干预”节点的输入。
- 节点配置:
- 触发类型:选择“当变量满足条件时”。这是最常用的方式。
- 条件设置:设置条件为
need_review等于true。这意味着只有当敏感词检查通过时,工作流才会进入人工审核队列。 - 任务信息配置:
- 标题:可以设置为动态变量,如
“客服回答审核:涉及【{{triggered_word}}】”,让审核员一眼看清重点。 - 内容:这里可以组织需要人工审核的信息。通常包括:
- 用户原始问题:
{{query}} - AI 生成的原始回答:
{{ai_answer}} - 触发原因:
“系统检测到可能涉及【{{triggered_word}}】的敏感内容,请审核。”
- 用户原始问题:
- 指令:给审核员明确的操作指南。例如:“请检查 AI 回答是否合规、准确。您可以直接‘通过’,或‘拒绝’并输入修改后的回答。”
- 标题:可以设置为动态变量,如
- 变量映射:
- 输入变量:将
ai_answer映射到人工干预节点,作为可编辑的初始内容。 - 输出变量:定义一个变量(如
final_answer)来接收人工处理后的结果。人工可以选择“通过”(使用原内容)、“拒绝并修改”(提交新内容)或“拒绝”(终止流程)。
- 输入变量:将
步骤 3:配置条件分支与结束
- 从“敏感词检查”节点拉出两条分支:
- 条件分支 (IF):连接
need_review == true到“人工干预”节点。 - 否则分支 (ELSE):连接
need_review == false直接到一个结束节点。此路径的final_answer直接使用ai_answer。
- 条件分支 (IF):连接
- 从“人工干预”节点拉出两条分支:
- 通过/修改后分支:连接到一个结束节点,输出人工处理后的
final_answer。 - 拒绝分支(可选):可以连接到一个新的 LLM 节点,让 AI 根据拒绝原因重新生成,或连接到一个固定回复的结束节点(如“您的问题需要进一步核实,稍后由专员联系您。”)。
- 通过/修改后分支:连接到一个结束节点,输出人工处理后的
至此,一个基础的人工介入审核流程就配置完成了。工作流的可视化编排使得整个逻辑非常清晰。
5. 人工处理端:任务队列操作实战
配置好工作流并发布应用后,当满足触发条件时,任务就会出现在“任务队列”中。处理人员如何操作呢?
- 访问任务队列:具有权限的处理人员登录 Dify,在侧边栏或顶部导航中找到“任务队列”或“待办任务”入口。
- 查看任务列表:列表会显示所有待处理的任务,包含标题、创建时间、所属应用等信息。审核员可以筛选、排序。
- 处理单个任务:
- 点击一个任务,右侧或新页面会展开任务详情,显示配置节点时填写的“内容”和“指令”。
- 界面会提供 AI 的原始输出(如
ai_answer)作为一个可编辑的文本框。 - 审核员可以:
- 直接通过:如果认为内容无误,点击“通过”按钮。工作流将继续,
final_answer将为原始内容。 - 修改后通过:在文本框内直接修改 AI 的回答,然后点击“通过”。工作流将继续,
final_answer将为修改后的内容。 - 拒绝:如果问题无法在线解决,点击“拒绝”。工作流会走向拒绝分支(如果配置了)。
- 直接通过:如果认为内容无误,点击“通过”按钮。工作流将继续,
- 审核员还可以添加内部备注,方便后续追溯。
- 批量处理与指派:高级版本可能支持批量通过/拒绝,以及将任务指派给特定处理人员。
关键体验点:
- 响应速度:从任务产生到出现在队列中的延迟通常很短(秒级)。
- 操作便捷性:界面是否清晰,编辑是否流畅,直接影响人工处理效率。
- 移动端适配:Dify 的管理界面通常响应式设计,审核员在手机上也能应急处理,这对某些需要快速响应的场景很重要。
6. 通过 API 集成与自动化扩展
对于需要将人工审核任务集成到现有工单系统、CRM 或内部 IM 的场景,Dify 提供了 API 支持,让你能打破平台边界。
核心 API 能力:
- 获取待处理任务列表:调用 API 拉取当前所有
pending状态的人工干预任务。 - 更新任务状态:通过 API 模拟“通过”、“拒绝”操作,并提交处理结果。这意味着你可以开发一个自定义的后台,从 Dify 拉取任务,展示给审核员,审核员在你的系统里操作,然后通过 API 回写结果到 Dify,驱动工作流继续。
示例:Python 调用获取任务列表(概念伪代码)
import requests # 假设 Dify API 地址和密钥 DIFY_API_BASE = "http://your-dify-domain.com/v1" API_KEY = "your-app-api-key" def fetch_pending_tasks(): url = f"{DIFY_API_BASE}/tasks" # 实际端点需查阅 Dify API 文档 headers = { "Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json" } params = { "status": "pending", "page": 1, "limit": 20 } response = requests.get(url, headers=headers, params=params) if response.status_code == 200: tasks = response.json().get('data', []) for task in tasks: print(f"任务ID: {task['id']}, 标题: {task['title']}, 应用: {task['app_name']}") return tasks else: print(f"获取任务失败: {response.status_code}, {response.text}") return [] # 调用函数 pending_tasks = fetch_pending_tasks()自动化扩展思路:
- 与 IM 机器人集成:当新任务产生时,通过 Dify 的 webhook 或定时调用 API,将任务关键信息发送到钉钉/飞书群,审核员点击链接即可跳转到处理页面。
- 优先级与 SLA 管理:在自定义系统中为任务设置优先级、服务水平协议(SLA)计时,并实现超时自动升级或转派。
- 处理数据分析:集中记录所有人工处理的操作日志、处理时长、修改内容,用于分析 AI 模型的薄弱环节,优化触发条件或提示词工程。
7. 高级配置与最佳实践
要让人工介入功能稳定高效,以下是一些进阶配置和实战经验。
1. 优化触发条件,减少不必要的人工劳动:
- 结合置信度:在 LLM 节点后,可以添加一个“分类器”或“情感分析”节点,输出一个置信度分数。仅当置信度低于某个阈值且触发了关键词时,才转人工。避免高置信度的标准回答也进入队列。
- 多条件组合:使用“条件判断”节点,支持
AND/OR逻辑。例如:(包含敏感词A OR 包含敏感词B) AND 情感为负面。 - 抽样审核:对于非关键流程,可以配置一个随机函数,仅让一定比例(如 5%)的请求进入人工审核,用于质量监控。
2. 设计清晰的人工操作指令与上下文:
- 指令具体化:不要只说“请审核”。应提供具体审核维度,如:“1. 检查事实准确性;2. 检查语气是否友好;3. 检查是否包含未公开的内部信息。”
- 提供参考:在任务内容中,除了 AI 输出,还可以附上知识库检索到的相关片段、用户的历史对话记录(脱敏后),帮助审核员综合判断。
- 预设选项:对于常见修改,可以提供“修改为以下预设回答”的按钮,提升处理速度。
3. 设置超时与降级方案,保障用户体验:
- 配置任务超时:在人工干预节点或通过工作流变量设置超时时间(如 300 秒)。
- 设计超时分支:当任务超时未被处理时,工作流应能自动走向一个降级分支。例如,可以转向一个更保守的 LLM 节点重新生成回答,或直接返回一条提示信息:“您的问题正在加急处理中,请稍后查看结果。”
- 通知重试:超时前,可以通过集成的外部通知系统提醒处理人员。
4. 权限管理与审计:
- 角色分离:区分“工作流编辑者”、“应用运营者”和“任务处理员”。处理员只能看到任务队列,不能修改工作流配置。
- 操作日志:确保 Dify 的审计日志功能开启,记录下谁在什么时间处理了哪个任务,做了何种操作(通过/拒绝/修改)。这对于合规和问题追溯至关重要。
8. 常见问题与排查方法
在实际部署和运行中,你可能会遇到以下典型问题。
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
| 工作流发布后,人工干预节点从未触发。 | 1. 触发条件配置错误。 2. 上游节点输出变量名与人工干预节点输入变量名不匹配。 3. 条件逻辑始终为 false。 | 1. 在“运行跟踪”中查看工作流执行详情,检查人工干预节点前的变量值。 2. 检查节点连接线是否正确。 3. 使用“调试”模式,输入测试数据逐步运行。 | 1. 修正条件表达式。 2. 使用变量选择器重新映射变量。 3. 简化条件进行测试,例如先设为 true看是否能触发。 |
| 任务已生成,但处理员在“任务队列”中看不到。 | 1. 处理员账号权限不足。 2. 任务被其他有权限的用户领取或已完成。 3. 界面筛选条件设置不当。 | 1. 使用管理员账号查看任务队列,确认任务是否存在。 2. 检查处理员账号的角色权限设置。 3. 清除所有筛选器。 | 1. 为处理员角色添加“任务队列”访问权限。 2. 检查工作流,确认任务状态。 3. 指导处理员正确使用筛选功能。 |
| 处理员点击“通过”后,工作流没有继续执行。 | 1. 人工干预节点后的分支连接错误或未连接。 2. 输出变量未正确传递给下游节点。 3. 工作流版本问题。 | 1. 检查工作流画布,确保从人工干预节点引出的“通过”分支线连接到了下一个节点。 2. 在下游节点检查输入的变量来源。 3. 查看应用日志或工作流运行历史记录。 | 1. 重新连接分支线。 2. 在下游节点重新选择输入变量。 3. 尝试重新发布应用。 |
| API 调用获取任务失败。 | 1. API Key 不正确或权限不足。 2. API 端点地址或版本错误。 3. 网络或防火墙问题。 | 1. 确认使用的 API Key 具有管理或对应应用的权限。 2. 查阅对应版本 Dify 的官方 API 文档,确认端点路径。 3. 使用 curl或 Postman 工具测试基础连通性。 | 1. 在 Dify 控制台重新生成具有足够权限的 API Key。 2. 更正 API 请求的 URL 和参数。 3. 解决网络策略问题。 |
| 人工处理界面加载慢或卡顿。 | 1. 单次加载任务过多(如内容很长)。 2. 浏览器缓存或扩展程序冲突。 3. 服务器资源不足。 | 1. 查看浏览器开发者工具的网络面板。 2. 尝试无痕模式或不同浏览器访问。 3. 检查服务器 CPU/内存监控。 | 1. 优化任务内容,避免在界面中加载过大的上下文。 2. 清理缓存或禁用冲突扩展。 3. 对 Dify 服务进行性能优化或扩容。 |
9. 总结与下一步
Dify 1.15 的人工介入功能,将一个复杂的“人机协同”系统设计,简化为一个可视化的工作流节点配置问题。它降低了实现 AI 应用关键环节人工审核与接管的技术门槛。
最值得你立即尝试的,是在一个非核心的业务流程中快速搭建一个测试工作流。例如,为一个内部知识问答机器人添加一个“当答案来自特定敏感知识库时需人工确认”的环节。通过这个简单的测试,你能直观地感受到从触发、任务生成、人工处理到流程继续的完整闭环。
最容易踩的坑主要集中在变量映射和条件逻辑上。务必善用工作流的“调试”和“运行跟踪”功能,像调试代码一样,逐步观察每个节点的输入输出,这是排查问题最快的方法。
下一步,你可以探索更复杂的模式:
- 多级审核:设计“初审-复审”链条,不同级别的处理员拥有不同权限。
- 动态指派:根据任务内容(如技术问题、财务问题)自动分配给不同部门的处理员。
- 与外部系统深度集成:将 Dify 的人工干预任务同步到 Jira、ServiceNow 等专业工单系统,利用后者更强大的流程管理能力。
将 AI 的自动化能力与人类的关键判断力相结合,是构建可靠、可信、可落地的企业级 AI 应用的必经之路。Dify 的这项功能,为你提供了实现这一目标的坚实工具箱。建议收藏本文,在配置具体流程时作为参考清单使用。