🚀 30+款热门AI模型一站整合,DeepSeek/GLM/Claude 随心用,限时 5 折。 👉 点击领海量免费额度
如果你正在用 Dify 构建复杂的 AI 工作流,是否遇到过这样的困扰:AI 生成的文本、代码或决策,总感觉差那么一点意思,需要你手动介入修改,但又不想打断整个自动化流程?Dify 1.15 版本带来的“人工介入”功能,就是为了解决这个痛点而生的。这个由 LangGenius 团队开源的 AI 应用开发平台,在最新的 1.15 版本中,将“人机协同”提升到了一个新高度,让你能在工作流的任意节点暂停,由人类进行审核、修改或补充,然后再无缝地交还给 AI 继续执行。
简单来说,Dify 1.15 的“人工介入”功能,让你从一个纯粹的流程“旁观者”或“事后校对者”,变成了流程的“实时参与者”。它不再是简单的“审批通过/拒绝”,而是允许你在流程中直接编辑、修正 AI 的中间产物,确保最终输出的质量完全符合你的预期。这对于内容审核、代码生成、数据分析、合同起草等对准确性要求极高的场景,价值巨大。
这篇文章,我们就来深入实操 Dify 1.15 的“人工介入”功能。我会带你从零开始,部署一个支持此功能的 Dify 环境,然后通过构建一个“智能内容创作与审核”工作流,完整演示如何配置人工介入节点、如何在实际运行中触发人工审核、以及如何与外部系统(如钉钉/飞书)集成实现通知。无论你是想提升现有 AI 应用的输出质量,还是探索更灵活的人机协作模式,这个功能都值得你立刻尝试。
1. 核心能力速览
在深入细节之前,我们先通过一个表格快速了解 Dify 1.15 “人工介入”功能的核心特性与部署要求,让你判断它是否适合你的技术栈和场景。
| 能力项 | 说明 |
|---|---|
| 核心功能 | 在工作流执行过程中,在指定节点暂停,等待人工审核、编辑或输入,完成后继续自动化流程。 |
| 开源性质 | 开源 (Apache 2.0 License),由 LangGenius 团队维护。 |
| 主要价值 | 提升 AI 工作流输出的准确性、合规性和可控性,实现高质量的人机协同。 |
| 部署方式 | 支持 Docker Compose 一键部署、云服务直接使用、以及 Kubernetes 部署。本地测试推荐 Docker。 |
| 硬件门槛 | 极低。核心服务本身对 GPU 无要求。资源消耗取决于你集成的 AI 模型(如本地 Ollama 或云端 API)。仅运行 Dify 服务,2核4G内存的服务器或本地电脑即可。 |
| 启动方式 | 通过docker-compose up -d命令一键启动 WebUI 和后台服务。 |
| 是否支持 API | 是。提供完整的 RESTful API,可用于触发工作流、查询人工介入任务、提交人工处理结果。 |
| 是否支持批量任务 | 是。可以通过 API 批量发起工作流执行,每个实例均可独立触发人工介入。 |
| 关键新特性 | 1.可配置的介入节点:在画布中任意 LLM、代码执行等节点后插入“人工介入”节点。 2.丰富的介入类型:支持文本编辑、选项选择、文件上传等多种交互方式。 3.外部通知集成:可配置 Webhook 或与钉钉、飞书、企业微信等通讯工具联动,通知审核人。 4.任务队列与管理:提供统一的人工任务看板,方便集中处理待办事项。 |
| 适合场景 | 1. 内容生成后的编辑与审核(文章、营销文案)。 2. 代码生成后的代码审查与优化。 3. 数据提取与分析结果的确认。 4. 关键决策点的审批(如合同条款、费用报销)。 5. 需要人类提供额外信息或创意的多步骤流程。 |
2. 适用场景与使用边界
“人工介入”功能听起来很强大,但它并不是所有工作流的必需品。理解其适用场景和边界,能帮助你更有效地利用它。
最适合的使用场景:
- 质量门控(Quality Gate):在内容发布、代码合并、报告生成前,设置一个必须由人类通过的检查点。例如,AI 生成一篇产品介绍后,必须由市场专员审核并微调语气后才能发布到官网。
- 复杂决策辅助:当工作流需要基于模糊或非结构化信息做出选择时。例如,AI 分析客户邮件情绪并生成几种可能的回复草稿,由客服代表选择最合适的一条并微调后发送。
- 数据验证与修正:AI 从文档中提取的字段(如金额、日期、公司名)可能存在识别误差,人工介入节点可以让人快速核对并修正。
- 创造性补充:AI 可以生成大纲、初稿或基础设计,但需要人类注入独特的创意、风格或深度见解。例如,AI 生成广告标语选项,由创意总监选择并优化。
需要谨慎使用或不适用的场景:
- 完全自动化的高频任务:对于每天运行成千上万次、且容错率较高的任务(如简单的数据清洗、标签生成),加入人工介入会严重拖慢效率,得不偿失。
- 实时性要求极高的流程:如实时聊天机器人、高频交易系统,人工介入的延迟是不可接受的。
- 缺乏明确审核标准:如果审核者自己也没有清晰的判断标准,那么人工介入就变成了随意的主观修改,无法保证输出质量的提升,反而可能引入不一致性。
合规与安全边界:
- 权限控制:Dify 的企业版提供了更细粒度的权限管理(如设定特定节点只能由特定角色或用户组处理)。社区版需自行通过业务逻辑或外部系统实现权限隔离。
- 数据隐私:人工介入时,审核者会看到工作流的中间数据。务必确保这些数据不包含敏感信息(如个人身份证号、银行账户),或已进行脱敏处理。如果涉及用户隐私数据,需确保审核流程符合相关法律法规。
- 操作审计:所有人工介入的操作(谁、在什么时间、修改了什么)都应被记录和审计。Dify 的工作流运行日志和人工任务记录是重要的审计依据。
3. 环境准备与前置条件
为了完整体验 Dify 1.15 的“人工介入”功能,我们需要搭建一个本地测试环境。以下是详细的准备工作。
1. 操作系统:
- 推荐:Linux (Ubuntu 20.04/22.04 LTS, CentOS 7/8) 或 macOS。
- 支持:Windows 10/11 (需安装 WSL 2 或 Docker Desktop)。本文演示基于Ubuntu 22.04 LTS。
2. 基础软件依赖:
- Docker 与 Docker Compose:这是最推荐、最简便的部署方式。
- Docker Engine 版本 >= 20.10
- Docker Compose 版本 >= 1.28.0
- 安装命令参考(Ubuntu):
# 卸载旧版本 sudo apt-get remove docker docker-engine docker.io containerd runc # 设置仓库 sudo apt-get update sudo apt-get install ca-certificates curl gnupg sudo install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg sudo chmod a+r /etc/apt/keyrings/docker.gpg echo \ "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null # 安装 Docker sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin # 验证安装 sudo docker run hello-world
- Git:用于克隆代码仓库(可选,可直接下载压缩包)。
sudo apt-get install git
3. 硬件与网络:
- CPU & 内存:建议至少 2 核 CPU,4 GB 内存。如果计划在本地同时运行大语言模型(如通过 Ollama),则需要更多资源。
- 磁盘空间:至少 10 GB 可用空间,用于存放 Docker 镜像和数据库。
- 网络:需要能正常访问互联网,以下载 Docker 镜像和可能的模型文件。如果需要连接 OpenAI、Azure OpenAI 等云端 AI 服务,需确保网络通畅。
4. 端口占用检查:Dify 默认会占用几个端口,请确保它们未被占用:
3000:前端 Web 界面端口。5001:后端 API 服务端口。6379:Redis 服务端口(内部通信使用)。5432:PostgreSQL 数据库端口(内部使用)。 你可以使用sudo lsof -i :<端口号>或netstat -tulpn | grep <端口号>来检查。
4. 安装部署与启动方式
我们将使用 Docker Compose 进行部署,这是官方推荐且最不容易出错的方式。
步骤 1:获取部署文件打开终端,选择一个你喜欢的目录,克隆 Dify 的 GitHub 仓库(或下载最新发布版)。
# 克隆仓库(包含最新代码,包括1.15版本特性) git clone https://github.com/langgenius/dify.git cd dify # 切换到稳定版本分支,例如 1.15.x,请查看仓库的 Releases 页面确认最新稳定版分支名 # git checkout stable/1.15步骤 2:配置环境变量Dify 的 Docker 部署主要依靠docker-compose.yaml和.env文件。.env文件通常已存在,我们可能需要根据情况调整。
# 查看并编辑环境变量文件 cp .env.example .env nano .env # 或使用 vim、cat 等编辑器关键配置项(对于基础体验,大部分可保持默认):
CONSOLE_API_URL=http://localhost:5001:后端 API 地址,本地部署通常不用改。CONSOLE_WEB_URL=http://localhost:3000:前端访问地址,本地部署通常不用改。SECRET_KEY:一个用于加密的随机字符串,建议生成一个复杂的。可以使用openssl rand -base64 32命令生成。DB_PASSWORD和REDIS_PASSWORD:数据库和 Redis 的密码,建议修改为强密码。
步骤 3:启动 Dify 服务在dify项目根目录下,执行一条命令即可启动所有服务。
# 使用 docker-compose 启动所有服务(-d 表示后台运行) sudo docker-compose up -d首次运行会从 Docker Hub 拉取多个镜像(dify-api, dify-web, postgres, redis 等),耗时取决于你的网络速度,请耐心等待。
步骤 4:验证服务状态使用以下命令检查容器是否全部正常运行:
sudo docker-compose ps你应该看到所有服务(api, web, db, redis)的状态都是Up。也可以查看日志确认无报错:
# 查看所有服务的日志 sudo docker-compose logs -f # 或仅查看某个服务,如 api sudo docker-compose logs -f api步骤 5:访问 Web 界面并初始化
- 打开浏览器,访问
http://localhost:3000。 - 首次访问会进入初始化页面,你需要设置管理员账号(邮箱和密码)。
- 设置完成后,登录进入 Dify 控制台。
至此,一个功能完整的 Dify 1.15 环境就已经准备就绪。接下来,我们将进入核心环节——配置一个带有人工介入功能的工作流。
5. 功能测试与效果验证:构建“智能内容创作与审核”工作流
我们将构建一个模拟真实场景的工作流:AI 根据主题生成一篇技术博客草稿 -> 人工审核并修改 -> AI 根据修改意见优化标题和摘要。
5.1 创建新应用与工作流
- 登录 Dify 控制台,点击左侧导航栏的“应用”,然后点击“创建新应用”。
- 选择“工作流”类型,命名为“技术博客人工审核流水线”,点击创建。
- 进入可视化工作流画布。
5.2 拖拽并配置节点
我们的工作流将包含以下节点,按执行顺序连接:开始->LLM(生成草稿)->人工介入(审核草稿)->LLM(优化标题和摘要)->结束。
第一步:配置 LLM 节点生成草稿
- 从左侧节点库拖拽一个“LLM”节点到画布。
- 点击该节点进行配置:
- 模型供应商:选择你已配置的模型。例如,如果你连接了 OpenAI,就选 OpenAI;如果本地部署了 Ollama,就选 Ollama 并选择具体模型(如
qwen2.5:7b)。(如何配置模型?在 Dify 控制台“模型供应商”设置中添加你的 API Key 或本地模型地址) - 提示词:输入系统指令和用户指令。例如:
- 系统指令:
你是一位专业的 CSDN 技术博客作者,擅长撰写详细、结构清晰的教程类文章。 - 用户指令:
请围绕主题“{{topic}}”,撰写一篇约800字的技术博客正文。要求结构包含:引言、问题分析、解决方案、操作步骤、总结。语言风格直接、实用,避免空话套话。
- 系统指令:
- 变量:在用户指令中,我们使用了
{{topic}}作为变量。需要在节点的“变量”部分,点击“添加变量”,设置变量名为topic,类型为“输入”,这样工作流启动时会要求输入这个值。
- 模型供应商:选择你已配置的模型。例如,如果你连接了 OpenAI,就选 OpenAI;如果本地部署了 Ollama,就选 Ollama 并选择具体模型(如
- 将“开始”节点连接到这个 LLM 节点的“输入”端口。
第二步:配置“人工介入”节点(核心)
- 从左侧节点库拖拽“人工介入”节点到画布,放在第一个 LLM 节点之后。
- 点击配置:
- 节点名称:
人工审核博客草稿。 - 指令:
请仔细审核下方由 AI 生成的博客草稿。你可以直接编辑文本内容,修正技术错误、调整语句不通顺之处、优化表达。完成后点击“提交”。 - 变量:这里我们需要将上一个 LLM 节点的输出作为人工介入的输入。点击“添加变量”。
- 变量名:
draft。 - 变量类型:选择“节点”。
- 节点:选择你刚才配置的第一个 LLM 节点。
- 输出:选择该 LLM 节点的输出变量(通常是一个包含
text字段的对象,如{{#llm.text#}})。这里注意:Dify 中引用其他节点输出的语法通常是{{#前一个节点ID.输出变量名#}},在界面中可以通过选择器轻松完成,无需手动输入复杂语法。
- 变量名:
- 人工介入类型:选择“文本编辑”。这意味着审核者将在一个富文本编辑器中直接修改内容。
- 指派方式(社区版可能简化):通常为“工作空间成员”或“通过接口指定”。我们选择“工作空间成员”,并在测试时指派给自己(当前登录的管理员)。
- 节点名称:
- 将第一个 LLM 节点的“输出”端口连接到“人工介入”节点的“输入”端口。
第三步:配置第二个 LLM 节点进行优化
- 再拖拽一个“LLM”节点到画布,放在人工介入节点之后。
- 点击配置:
- 模型供应商:可以与第一个相同或不同。
- 提示词:
- 系统指令:
你是一位专业的文案优化助手。 - 用户指令:
这是经过人工修改后的博客正文:{{reviewed_draft}}。请你基于修改后的正文,为其生成一个更吸引人的标题(不超过20字)和一段简洁有力的摘要(约150字)。请直接以 JSON 格式输出:{"title": "生成的标题", "summary": "生成的摘要"}
- 系统指令:
- 变量:添加变量
reviewed_draft,类型选择“节点”,节点选择“人工审核博客草稿”节点,输出选择人工修改后的文本(如{{#human_intervention.output#}})。
- 将“人工介入”节点的“输出”端口连接到第二个 LLM 节点的“输入”端口。
- 最后,将第二个 LLM 节点的“输出”端口连接到“结束”节点。
最终画布连接应为:开始 -> LLM(生成草稿) -> 人工介入(审核草稿) -> LLM(优化标题摘要) -> 结束。
5.3 保存并运行测试
- 点击画布右上角的“保存”按钮。
- 点击右上角的“发布”按钮,将工作流发布为一个可运行的版本。
- 回到应用概览页,点击“聊天”或“工作流运行”标签页(取决于版本)。
- 在运行界面,你会看到需要输入变量
topic的输入框。输入一个测试主题,例如:“在 Kubernetes 中优雅地部署有状态应用”。 - 点击“运行”。
此时,工作流将开始执行:
- 第一个 LLM 节点会根据你的主题生成博客草稿。
- 执行到“人工介入”节点时,工作流会暂停。在 Dify 的“人工任务”看板(通常位于顶部导航栏的铃铛图标或独立菜单中),会出现一条待处理的任务。
- 你作为指派的审核者,需要点击进入该任务。你会看到 AI 生成的草稿和一个富文本编辑器。你可以任意修改文本内容。
- 修改完成后,点击“提交并继续”。
- 工作流将从暂停处恢复,将你修改后的文本传递给第二个 LLM 节点。
- 第二个 LLM 节点会生成优化后的标题和摘要。
- 工作流完成,你可以在运行历史中查看完整的输入、人工修改记录以及最终输出。
效果验证点:
- 人工介入触发:确认工作流在第一个 LLM 后成功暂停,并在“人工任务”看板生成了任务。
- 编辑功能:确认你可以在富文本编辑器中流畅地修改 AI 生成的草稿。
- 流程恢复:确认提交人工任务后,工作流能正确恢复,并将修改后的内容传递给下游节点。
- 最终输出:确认第二个 LLM 节点基于修改后的草稿生成了新的标题和摘要,而不是原始的草稿。
通过这个测试,你已经验证了“人工介入”功能的核心流程:暂停 -> 人工编辑 -> 恢复并传递新值。
6. 接口 API 与批量任务集成
Dify 的强大之处在于其 API 驱动。人工介入工作流不仅可以手动在 Web 界面触发,更可以通过 API 集成到你的业务系统中,实现自动化流水线中的人机交互。
6.1 通过 API 触发工作流
首先,你需要获取 API Key。
- 在 Dify 控制台,进入“设置” -> “API 密钥”。
- 创建一个新的密钥,并复制保存好(只显示一次)。
假设你的工作流应用 ID 是app-xxxxxx,你可以使用以下 Python 脚本触发它:
import requests import json import time # 配置信息 API_KEY = "your-dify-api-key-here" # 替换为你的 API Key APP_ID = "app-xxxxxx" # 替换为你的应用 ID BASE_URL = "http://localhost:5001/v1" # 如果你的 Dify 部署在其他地址,请修改 # 触发工作流执行的端点 url = f"{BASE_URL}/workflows/run" headers = { "Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json" } # 请求体,包含输入变量 payload = { "inputs": { "topic": "使用 Docker 快速搭建 PostgreSQL 测试环境" # 对应工作流中的 topic 变量 }, "response_mode": "blocking", # 阻塞模式,等待工作流最终完成(如果含人工介入,会超时) # "response_mode": "streaming", # 流式模式,适合前端实时显示 "user": "test_user_001" # 标识发起请求的用户,可用于追踪 } try: response = requests.post(url, headers=headers, json=payload, timeout=30) # 设置短超时,因为会卡在人工介入 print(f"状态码: {response.status_code}") if response.status_code == 200: result = response.json() print("工作流触发成功!") print(f"执行ID: {result.get('task_id')}") print(f"事件ID: {result.get('event_id')}") # 如果工作流中有“人工介入”,此时响应可能只包含直到介入点的输出,或者直接返回“等待人工介入”的状态。 # 具体返回结构需查看 Dify API 文档。 print("响应内容:", json.dumps(result, indent=2, ensure_ascii=False)) else: print(f"请求失败: {response.text}") except requests.exceptions.Timeout: print("请求超时。这很可能是因为工作流在‘人工介入’节点暂停了。这是预期行为。") # 超时后,你需要去查询人工任务或通过异步方式获取结果。 except Exception as e: print(f"发生错误: {e}")重要提示:当工作流包含“人工介入”节点时,使用blocking模式的 API 调用很可能会因为等待人工操作而超时。因此,生产环境更推荐使用异步回调(webhook)或轮询任务状态的方式。
6.2 查询与处理人工任务
当工作流因人工介入暂停后,你需要通过 API 来获取待处理的任务列表,并允许用户(或你的系统)处理它们。
1. 查询待处理的人工任务:
def list_pending_human_tasks(api_key, app_id=None): """获取待处理的人工任务列表""" url = f"{BASE_URL}/workspace/current/tasks" headers = {"Authorization": f"Bearer {api_key}"} params = {"status": "pending"} # 筛选状态为“待处理”的任务 if app_id: params["app_id"] = app_id response = requests.get(url, headers=headers, params=params) if response.status_code == 200: tasks = response.json().get('data', []) return tasks else: print(f"获取任务列表失败: {response.text}") return [] # 使用示例 pending_tasks = list_pending_human_tasks(API_KEY, APP_ID) for task in pending_tasks: print(f"任务ID: {task['id']}") print(f"来自应用: {task['app_name']}") print(f"工作流执行ID: {task['workflow_run_id']}") print(f"节点ID: {task['node_id']}") print(f"创建时间: {task['created_at']}") print("-" * 30)2. 处理(完成)一个人工任务:获取到任务 ID (task_id) 后,你可以构建一个前端界面让用户处理,或者通过 API 模拟处理(需知道处理结果)。
def complete_human_task(api_key, task_id, outputs): """ 完成一个人工介入任务 :param outputs: 一个字典,包含人工处理后的输出。 对于“文本编辑”类型,可能是 {"text": "用户修改后的内容"}。 具体格式取决于人工介入节点的配置。 """ url = f"{BASE_URL}/workspace/current/tasks/{task_id}/complete" headers = { "Authorization": f"Bearer {api_key}", "Content-Type": "application/json" } payload = { "outputs": outputs } response = requests.post(url, headers=headers, json=payload) if response.status_code == 200: print(f"任务 {task_id} 处理成功!") return True else: print(f"处理任务失败: {response.text}") return False # 使用示例:假设我们获取到第一个待处理任务,并模拟用户修改了文本 if pending_tasks: sample_task_id = pending_tasks[0]['id'] # 假设人工介入节点配置的输出变量是 `text` modified_content = "这是经过人工审核和优化后的博客正文内容..." success = complete_human_task(API_KEY, sample_task_id, {"text": modified_content})6.3 配置 Webhook 实现外部通知
为了让审核者及时知道有任务需要处理,可以配置 Webhook。当工作流到达人工介入节点时,Dify 会向一个你指定的 URL 发送 POST 请求。
- 在 Dify 工作流中配置 Webhook 节点:你可以在“人工介入”节点之前或之后添加一个“HTTP 请求”节点,向你的通知服务(如钉钉机器人、企业微信、Slack)发送消息。
- 使用更集成的方式(企业版功能或自定义):Dify 企业版可能提供更直接的通知集成。社区版可以通过在“人工介入”节点的“指令”中说明,或者通过上述 API 轮询+外部通知服务的方式实现。
一个简单的思路是:写一个常驻的守护进程,定期调用list_pending_human_tasksAPI,当发现新任务时,调用钉钉/飞书等机器人的 API 发送通知。
批量任务处理:结合上述 API,你可以轻松实现批量处理。用一个脚本读取一个主题列表,循环调用触发工作流的 API。每个工作流实例都会独立运行,并在需要时创建独立的人工任务。你的人工任务列表 API 会看到来自不同执行实例的多个任务,可以批量处理。
7. 资源占用与性能观察
Dify 服务本身资源消耗不高,性能瓶颈主要出现在集成的 AI 模型推理上。
1. Dify 核心服务资源占用:在运行了 PostgreSQL、Redis、API 服务和 Web 服务的标准 Docker Compose 部署下,内存占用通常在 1GB 到 2GB 之间,CPU 使用率较低。你可以通过以下命令观察:
# 查看所有容器资源使用情况 sudo docker stats # 查看具体某个容器的资源使用详情 sudo docker stats dify-api-1 dify-web-12. 工作流执行性能观察:
- 无人工介入的纯 AI 工作流:性能取决于 LLM 节点的响应速度。如果使用云端 API(如 GPT-4),则受网络和 API 速率限制影响。如果使用本地模型(如通过 Ollama),则受本地 GPU/CPU 算力限制。
- 含人工介入的工作流:执行时间会无限期延长,直到人工任务被完成。这是设计如此,不是性能问题。你需要关注的是:
- 任务堆积:通过人工任务看板或 API 监控待处理任务数量,避免积压。
- 上下文保持:Dify 会保持工作流暂停时的状态(在内存或数据库中),对于长时间暂停的任务,需确保系统有足够资源维持这些状态。通常这不是问题。
3. 降低资源消耗与优化建议:
- 使用轻量级数据库:对于超大规模使用,可以考虑将 PostgreSQL 替换为更高效的配置,或使用外部托管数据库。
- 优化 LLM 调用:
- 对于非关键路径,使用更小、更快的模型。
- 设置合理的 API 超时和重试策略。
- 利用 Dify 的“变量”和“知识库”功能,减少不必要的提示词长度。
- 人工介入的异步化:如前所述,使用异步 API 调用 (
response_mode: “streaming”) 和 Webhook 回调,避免前端 HTTP 请求长时间挂起。 - 定期清理:定期清理旧的工作流执行记录和日志,以减轻数据库压力(Dify 可能提供相关设置或脚本)。
8. 常见问题与排查方法
在部署和使用 Dify 1.15 人工介入功能时,你可能会遇到以下问题。这里提供排查思路。
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
| Docker 启动失败,端口冲突 | 端口 3000, 5001, 5432, 6379 被其他程序占用。 | sudo lsof -i :<端口号>或netstat -tulpn | grep <端口号> | 修改docker-compose.yaml中服务的端口映射(如"3000:3000"改为"3001:3000"),并同步更新.env文件中的CONSOLE_WEB_URL和CONSOLE_API_URL。 |
访问localhost:3000无法连接 | 1. 容器未成功启动。 2. 防火墙阻止。 3. 在 macOS/Windows 的 Docker Desktop 中,localhost 可能不适用。 | 1.docker-compose ps查看状态。2. docker-compose logs查看错误日志。3. 尝试用 127.0.0.1或 Docker Desktop 提供的 IP。 | 1. 根据日志解决启动错误(常见于数据库初始化失败)。 2. 关闭防火墙或放行端口。 3. 使用 docker-machine ip或 Docker Desktop 设置中的地址。 |
| 工作流在“人工介入”节点不暂停,直接跳过 | 1. “人工介入”节点配置错误,未正确连接到需要审核的内容变量。 2. 节点“指派方式”配置为自动完成或测试模式。 | 1. 检查“人工介入”节点的变量配置,确保其输入来自上一个节点的有效输出。 2. 检查节点的“指派”设置,确保不是“自动完成”或指派给了不存在的用户。 | 1. 重新配置变量连接,在画布上确保连线正确。 2. 在测试时,指派给当前登录的有效用户。 |
| 在“人工任务”看板找不到待处理任务 | 1. 当前登录的用户不是被指派者。 2. 任务已被其他用户领取或完成。 3. 工作流执行失败,未到达人工介入节点。 | 1. 确认执行工作流时指定的用户(API调用中的user参数)或默认指派用户。2. 查看“全部任务”或“已完成任务”标签页。 3. 检查工作流运行日志,看是否有节点报错。 | 1. 使用正确的用户身份登录。 2. 以管理员身份查看所有任务。 3. 修复工作流中前置节点的错误。 |
| API 调用工作流立即超时 | 工作流中包含“人工介入”,而 API 调用模式为blocking,服务端在等待人工操作,导致客户端超时。 | 查看 API 响应状态码和消息。 | 这是预期行为。改用streaming模式,或先调用触发 API,再通过task_id异步轮询状态和获取结果。 |
| 人工提交后,下游节点未收到修改后的内容 | “人工介入”节点的输出变量配置错误,下游节点引用了错误的变量。 | 检查下游节点(如第二个 LLM)的输入变量,确认它引用的是人工介入节点的输出(如{{#human_intervention_node_id.output#}}),而不是最初 LLM 的输出。 | 在下游节点的变量配置中,重新选择来源节点和输出变量。 |
| Dify 服务运行一段时间后变慢或卡死 | 1. 服务器内存不足。 2. 数据库连接数耗尽或未优化。 3. Redis 内存占用过高。 | 1. 使用docker stats和top命令查看资源使用。2. 检查数据库日志 ( docker-compose logs db)。3. 检查 Redis 内存 ( docker exec -it dify-redis-1 redis-cli info memory)。 | 1. 增加服务器资源。 2. 优化 PostgreSQL 配置,或定期清理旧数据。 3. 配置 Redis 最大内存限制和淘汰策略。 |
9. 最佳实践与使用建议
为了让“人工介入”功能在你的生产环境中稳定、高效地运行,遵循以下最佳实践:
- 明确介入标准与操作指南:在“人工介入”节点的“指令”中,清晰、具体地告诉审核者需要做什么。例如:“请检查以下代码的安全性漏洞,并修正明显的语法错误。”而不是“请审核以下代码”。提供检查清单或样例,能大幅提升审核质量和效率。
- 设计原子化的介入任务:尽量让一个“人工介入”节点只处理一个明确、小范围的任务。例如,一个节点审核事实准确性,另一个节点优化文风。避免让一个节点承担过多、过杂的审核工作,这会导致效率低下和标准不一。
- 设置任务超时与自动处理:对于某些场景,如果人工长时间未处理,可能需要自动跳过或按默认方案处理。虽然 Dify 原生节点可能不支持,但你可以通过在外围系统(调用 Dify API 的服务)设置超时监控来实现:如果任务超时未完成,则通过 API 自动提交一个预设的“安全”结果或直接取消该工作流实例。
- 与现有系统深度集成:不要将 Dify 的人工任务看板作为唯一处理入口。利用 Dify 的 API,将待处理任务同步到你们团队已有的任务管理系统(如 Jira, Trello, 飞书任务)或聊天工具(钉钉、企业微信)中,让审核者在熟悉的环境里工作。
- 实现权限与审计闭环:通过 API 调用中的
user字段,严格记录工作流发起者。在人工介入节点,确保指派给正确的责任人(或角色组)。所有人工操作(提交的内容、操作人、时间)都应通过工作流运行日志和人工任务记录功能留存,满足合规审计要求。 - 进行充分的测试与演练:在上线前,用各种边缘案例测试工作流:输入空值、输入超长文本、人工拒绝提交、网络中断等。确保整个流程(触发->介入->恢复->完成)在异常情况下也能有合理的处理逻辑(如错误处理节点)。
- 监控与优化:关注“平均任务处理时间”、“任务积压数量”等指标。如果某个介入节点成为瓶颈,分析原因是任务太多、指令不清还是工具不好用,并针对性优化。
10. 总结
Dify 1.15 的“人工介入”功能,成功地在自动化 AI 工作流中打开了“一扇门”,让人类智慧可以在关键时刻介入,引导流程走向更精确、更优质的结果。它不再是简单的审批流,而是一个可编辑、可交互的协作节点,这大大扩展了 AI 工作流的应用边界。
通过本文的实操,你应该已经掌握了从部署 Dify、构建含人工介入的工作流,到通过 API 集成和外部通知实现自动化人机协同的全过程。这个功能最直接的价值在于,它将那些 AI 不擅长或容易出错的“最后一公里”问题,交给了人类专家,同时保持了整体流程的自动化框架。
接下来,你可以尝试更复杂的场景:比如在一个客户服务流程中,AI 自动生成回复,人工介入确保语气和策略正确;在一个代码生成流程中,AI 搭建框架,人工介入进行关键逻辑审查和安全检查。Dify 提供的画布和节点能力,让你可以像搭积木一样设计这些复杂的人机协作流程。
建议你将本文的示例作为起点,立即动手搭建一个与你当前工作相关的小型工作流进行测试。从简单的文本审核开始,逐步增加复杂度,你会更深刻地体会到“人工介入”如何成为你 AI 应用工具箱中一件强大而灵活的武器。
🚀 30+款热门AI模型一站整合,DeepSeek/GLM/Claude 随心用,限时 5 折。 👉 点击领海量免费额度