工作流执行 API
工作流执行 API
相关源文件
以下文件为本 Wiki 页面的生成提供了上下文:
api/AGENTS.mdapi/controllers/API_SCHEMA_GUIDE.mdapi/controllers/common/schema.pyapi/controllers/console/app/advanced_prompt_template.pyapi/controllers/console/app/completion.pyapi/controllers/console/app/conversation.pyapi/controllers/console/app/conversation_variables.pyapi/controllers/console/app/mcp_server.pyapi/controllers/console/app/message.pyapi/controllers/console/app/model_config.pyapi/controllers/console/app/site.pyapi/controllers/console/app/statistic.pyapi/controllers/console/app/workflow.pyapi/controllers/console/app/workflow_app_log.pyapi/controllers/console/app/workflow_statistic.pyapi/controllers/console/datasets/rag_pipeline/rag_pipeline_workflow.pyapi/controllers/console/explore/completion.pyapi/controllers/console/explore/recommended_app.pyapi/controllers/console/explore/workflow.pyapi/controllers/service_api/app/completion.pyapi/controllers/service_api/app/workflow.pyapi/controllers/web/completion.pyapi/controllers/web/workflow.pyapi/dev/generate_fastopenapi_specs.pyapi/openapi/markdown/console-swagger.mdapi/openapi/markdown/service-swagger.mdapi/openapi/markdown/web-swagger.mdapi/services/advanced_prompt_template_service.pyapi/services/app_model_config_service.pyapi/services/auth/api_key_auth_service.pyapi/services/workflow/workflow_converter.pyapi/services/workflow_app_service.pyapi/tests/test_containers_integration_tests/controllers/console/datasets/rag_pipeline/test_rag_pipeline_workflow.pyapi/tests/unit_tests/controllers/common/test_schema.pyapi/tests/unit_tests/controllers/console/app/test_mcp_server_response.pyapi/tests/unit_tests/controllers/console/app/test_workflow.pyapi/tests/unit_tests/controllers/console/datasets/rag_pipeline/test_rag_pipeline_workflow.pyapi/tests/unit_tests/controllers/service_api/app/test_workflow.pyweb/app/components/rag-pipeline/hooks/use-pipeline-config.tsweb/app/components/workflow-app/hooks/use-workflow-init.tsweb/service/use-workflow.tsweb/service/workflow.ts
目的与范围
本文档记录了通过 POST /workflows/run 端点以编程方式执行工作流应用的服务 API。Dify 中的工作流应用是无状态的单次执行图,专为翻译、内容生成和数据处理等任务设计。与聊天应用不同,工作流应用在执行之间不会维护对话历史。
本节涵盖请求结构、输入变量处理(包括多模态文件)、流式事件序列以及后端中的执行追踪实现。
工作流执行端点
端点概述
POST /workflows/run
该端点执行工作流的已发布版本。它在服务 API 控制器的 WorkflowApi 类中定义。
关键特性:
- 无状态:每次执行都是独立的,不使用
conversation_idapi/controllers/service_api/app/workflow.py:216-220。 - 输入驱动:需要
inputs映射到起始节点的变量api/controllers/service_api/app/workflow.py:55-56。 - 可追踪:支持
trace_id用于端到端的分布式追踪api/controllers/service_api/app/workflow.py:230-231。
来源:api/controllers/service_api/app/workflow.py:216-250,api/openapi/markdown/service-swagger.md:1-50
请求结构
请求参数
下图展示了 API 请求参数到 AppGenerateService 和 WorkflowAppService 内部逻辑的映射关系。
输入变量 (inputs)
inputs 参数接受工作流 DSL 中定义的键值对。后端会在执行前根据工作流的配置对这些输入进行校验 api/controllers/service_api/app/workflow.py:228-235。
文件对象结构
当传递文件时(例如用于视觉分析或文档分析),files 数组包含具有以下结构的字典:
type:document、image、audio、video或custom。transfer_method:remote_url或local_file。url:如果使用remote_url则必填。upload_file_id:如果使用local_file则必填(通过/files/upload获取)。
来源:api/controllers/service_api/app/workflow.py:55-56,api/controllers/common/controller_schemas.py:100-115
响应模式
阻塞模式 (blocking)
API 会等待整个图执行完成,然后返回 WorkflowRunResponse api/controllers/service_api/app/workflow.py:93-110。
- 载荷:包含
workflow_run_id、status(succeeded/failed)以及从WorkflowRun模型中提取的最终outputs字典api/controllers/service_api/app/workflow.py:174-199。
来源:api/controllers/service_api/app/workflow.py:174-200,api/services/app_generate_service.py:124-133
流式模式 (流式)
API 返回 text/event-stream。对于长时间运行的工作流,建议使用此模式以提供实时反馈。
来源:api/controllers/service_api/app/workflow.py:245-250,api/services/app_generate_service.py:41-85
执行事件与追踪
事件定义
| 事件类型 | 描述 | 关键数据字段 |
|---|---|---|
workflow_started | 执行已初始化。 | workflow_run_id、created_at |
node_started | 特定节点开始执行。 | node_id、node_type、inputs |
node_finished | 节点执行完成。 | outputs、elapsed_time、execution_metadata |
workflow_finished | 整个图执行完成。 | outputs、total_tokens、total_steps |
error | 执行因异常而中断。 | code、message |
节点追踪元数据
node_finished 事件包含 execution_metadata,这对可观测性至关重要。该元数据在工作流运行期间捕获,并存储在 WorkflowRun 模型中 api/models/workflow.py:200-220。
来源:api/controllers/service_api/app/workflow.py:93-110,api/services/workflow_app_service.py:100-120
分布式追踪 (trace_id)
Dify 支持传递 trace_id,以便将工作流执行与外部可观测性工具(如 Langfuse 或 LangSmith)关联起来。WorkflowApi 使用 get_external_trace_id 辅助函数提取外部追踪 ID api/controllers/service_api/app/workflow.py:230-231。
解析优先级:
- 请求头:
X-Trace-Idapi/core/helper/trace_id_helper.py:10-15 - 查询字符串:
?trace_id=... - 请求体:
{ "trace_id": "..." }
来源:api/core/helper/trace_id_helper.py:5-25,api/controllers/service_api/app/workflow.py:230-235
错误处理
执行过程中遇到的错误会以标准 HTTP 状态码(阻塞模式)或 error 事件(流式模式)的形式返回。
| 异常类 | HTTP 状态码 | 含义 |
|---|---|---|
BadRequest | 400 | 参数无效或 JSON 格式错误 api/controllers/service_api/app/workflow.py:11。 |
ProviderQuotaExceededError | 400 | 模型提供商的额度或配额已耗尽 api/controllers/service_api/app/workflow.py:22。 |
WorkflowNotFoundError | 404 | 请求的工作流 ID 不存在 api/controllers/service_api/app/workflow.py:48。 |
InternalServerError | 500 | 引擎中发生了意外错误 api/controllers/service_api/app/workflow.py:11。 |
WorkflowApi 使用 validate_app_token 和错误映射逻辑,将核心引擎异常包装为用户友好的 HTTP 响应 api/controllers/service_api/app/workflow.py:216-250。
来源:api/controllers/service_api/app/workflow.py:17-25,api/controllers/service_api/app/error.py:1-30