本文档提供了 Dify 中工作流 API 端点的全面文档,这些端点允许开发人员以编程方式执行、监控和管理工作流。这些端点是服务 API 层的一部分,允许外部应用程序与 Dify 的工作流功能集成。
有关聊天 API 端点的信息,请参阅 聊天 API 端点。有关完成 API 端点的信息,请参阅 完成 API 端点。
工作流 API 提供了允许开发人员与 Dify 的工作流编排系统交互的端点。Dify 中的工作流代表一系列作为节点有向图组织的复杂操作,每个节点执行特定任务,如文本生成、数据处理或外部服务集成。
来源
所有工作流 API 端点均使用 API 密钥进行身份验证。对于所有请求,您必须在 Authorization HTTP 标头中包含您的 API 密钥。
Authorization: Bearer {API_KEY}
强烈建议您将 API 密钥存储在服务器端,并且不要在客户端共享或存储,以防止潜在的安全漏洞。
来源
POST /workflows/run
此端点允许您执行已发布的(published)工作流。
| 参数 | 类型 | 必填 | 描述 |
|---|---|---|---|
inputs | 对象 | 是 | 一个用于工作流的输入变量字典。键对应于工作流中定义的变量名,值对应于这些变量的相应值。 |
response_mode | 字符串 | 是 | 响应模式:可以是 streaming(推荐)或 blocking。 |
user | 字符串 | 是 | 用户标识符,用于定义最终用户。 |
对于文件输入,值应为具有以下结构的对象的列表
响应格式取决于 response_mode 参数。
阻塞模式:返回具有以下结构的 JSON 对象。
流式模式:返回 SSE(服务器发送事件)流,包含多个事件,包括:
workflow_started:指示工作流执行已开始。node_started:指示工作流节点已开始执行。text_chunk:来自工作流节点的文本片段输出。node_finished:指示工作流节点已完成执行。workflow_finished:指示工作流执行已完成。tts_message:TTS 音频流事件(如果适用)。tts_message_end:TTS 音频流结束事件(如果适用)。ping:周期性 ping 事件,用于保持连接活动。来源
下图说明了工作流执行过程以及在流式传输模式下发送的事件。
来源
POST /workflows/{task_id}/stop
此端点允许您停止正在运行的工作流执行。
| 参数 | 类型 | 必填 | 描述 |
|---|---|---|---|
user | 字符串 | 是 | 用户标识符,必须与执行请求中使用的标识符匹配。 |
来源
GET /workflows/{workflow_run_id}
此端点用于检索特定工作流运行的详细信息。
来源
Dify 中的高级聊天应用程序可以将工作流执行作为其对话流程的一部分进行集成。在使用高级聊天 API(POST /chat-messages)时,工作流相关事件会包含在流式响应中。
当高级聊天应用程序包含工作流执行时,流式响应将包含这些特定于工作流的事件:
| 事件 | 描述 | 数据结构 |
|---|---|---|
workflow_started | 工作流执行开始 | 包含 workflow_run_id、workflow_id、sequence_number。 |
node_started | 单个工作流节点开始 | 包含 node_id、node_type、title、inputs。 |
node_finished | 单个工作流节点完成 | 包含 outputs、status、elapsed_time、execution_metadata。 |
workflow_finished | 工作流执行完成 | 包含 outputs、status、total_tokens、total_steps。 |
data: {"event": "workflow_started", "task_id": "abc-123", "workflow_run_id": "run-456", "data": {"id": "run-456", "workflow_id": "wf-789", "sequence_number": 1, "created_at": 1679586595}}
data: {"event": "node_started", "task_id": "abc-123", "workflow_run_id": "run-456", "data": {"node_id": "llm-node-1", "node_type": "llm", "title": "Text Analysis", "index": 1, "inputs": {"text": "user input"}}}
data: {"event": "node_finished", "task_id": "abc-123", "workflow_run_id": "run-456", "data": {"node_id": "llm-node-1", "status": "succeeded", "outputs": {"result": "analysis complete"}, "elapsed_time": 1.2}}
data: {"event": "message", "message_id": "msg-123", "conversation_id": "conv-456", "answer": "Based on the analysis...", "created_at": 1679586597}
data: {"event": "workflow_finished", "task_id": "abc-123", "workflow_run_id": "run-456", "data": {"status": "succeeded", "total_tokens": 150, "total_steps": 3}}
来源
工作流支持文件输入,这些文件可以被工作流节点处理。文件可以通过两种方式提供:
| 类别 | 支持的扩展名 |
|---|---|
| 文档 | TXT, MD, MARKDOWN, PDF, HTML, XLSX, XLS, DOCX, CSV, EML, MSG, PPTX, PPT, XML, EPUB |
| 图片 | JPG, JPEG, PNG, GIF, WEBP, SVG |
| 音频 | MP3, M4A, WAV, WEBM, AMR |
| 视频 | MP4, MOV, MPEG, MPGA |
| 自定义 | 其他文件类型 |
POST /files/upload
此端点允许您上传文件供工作流执行使用。
这是一个 multipart/form-data 请求,包含以下字段:
| 字段 | 类型 | 必填 | 描述 |
|---|---|---|---|
file | file | 是 | 要上传的文件 |
user | 字符串 | 是 | 用户标识符 |
来源
工作流 API 可能返回以下错误:
| 状态码 | 错误代码 | 描述 |
|---|---|---|
| 400 | invalid_param | 请求中的参数无效 |
| 400 | app_unavailable | 应用程序配置不可用 |
| 400 | provider_not_initialize | 没有可用的模型凭据配置 |
| 400 | provider_quota_exceeded | 已超出模型调用配额 |
| 400 | model_currently_not_support | 当前模型不可用 |
| 400 | workflow_request_error | 工作流执行失败 |
| 500 | Internal server error |
来源
data: {"event": "workflow_started", "task_id": "5ad4cb98-f0c7-4085-b384-88c403be6290", "workflow_run_id": "5ad498-f0c7-4085-b384-88cbe6290", "data": {"id": "5ad498-f0c7-4085-b384-88cbe6290", "workflow_id": "dfjasklfjdslag", "sequence_number": 1, "created_at": 1679586595}}
data: {"event": "node_started", "task_id": "5ad4cb98-f0c7-4085-b384-88c403be6290", "workflow_run_id": "5ad498-f0c7-4085-b384-88cbe6290", "data": {"id": "5ad498-f0c7-4085-b384-88cbe6290", "node_id": "dfjasklfjdslag", "node_type": "start", "title": "Start", "index": 0, "predecessor_node_id": "fdljewklfklgejlglsd", "inputs": {}, "created_at": 1679586595}}
data: {"event": "node_finished", "task_id": "5ad4cb98-f0c7-4085-b384-88c403be6290", "workflow_run_id": "5ad498-f0c7-4085-b384-88cbe6290", "data": {"id": "5ad498-f0c7-4085-b384-88cbe6290", "node_id": "dfjasklfjdslag", "node_type": "start", "title": "Start", "index": 0, "predecessor_node_id": "fdljewklfklgejlglsd", "inputs": {}, "outputs": {}, "status": "succeeded", "elapsed_time": 0.324, "execution_metadata": {"total_tokens": 63127864, "total_price": 2.378, "currency": "USD"}, "created_at": 1679586595}}
data: {"event": "workflow_finished", "task_id": "5ad4cb98-f0c7-4085-b384-88c403be6290", "workflow_run_id": "5ad498-f0c7-4085-b384-88cbe6290", "data": {"id": "5ad498-f0c7-4085-b384-88cbe6290", "workflow_id": "dfjasklfjdslag", "outputs": {}, "status": "succeeded", "elapsed_time": 0.324, "total_tokens": 63127864, "total_steps": "1", "created_at": 1679586595, "finished_at": 1679976595}}
来源
工作流 API 端点提供了一种强大的方式,可以将 Dify 的工作流编排功能集成到您的应用程序中。通过使用这些端点,您可以以编程方式执行复杂的工作流、监控其进度并检索其结果。
有关在 Dify UI 中创建和管理工作流的更多信息,请参阅 工作流系统 文档中的工作流系统。