You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用JSON表示含同步异步任务的工作流?解决节点依赖问题

工作流JSON格式设计方案(支持部分并行任务触发后续)

你的原始方案通过数组嵌套区分串行/并行,但这种方式只能表达「所有并行任务完成后才进入下一串行步骤」,无法处理「仅等待部分并行任务完成就执行后续任务」的场景。要解决这个问题,最实用的方式是给每个任务显式定义依赖关系,而非仅靠结构嵌套来控制执行顺序。

推荐的JSON结构设计

每个任务包含唯一ID、任务内容,以及明确的依赖列表,这样可以灵活实现任意串行、并行、部分依赖的逻辑:

{
  "tasks": [
    {
      "id": "task_A",
      "name": "A",
      "action": "",
      "depends_on": []
    },
    {
      "id": "task_B",
      "name": "B",
      "action": "",
      "depends_on": ["task_A"]
    },
    {
      "id": "task_C",
      "name": "C",
      "action": "",
      "depends_on": ["task_B"]
    },
    {
      "id": "task_D",
      "name": "D",
      "action": "",
      "depends_on": ["task_B"]
    },
    {
      "id": "task_E",
      "name": "E",
      "action": "",
      "depends_on": ["task_C", "task_D"]
    },
    {
      "id": "task_F",
      "name": "F",
      "action": "",
      "depends_on": ["task_E"]
    },
    {
      "id": "task_G",
      "name": "G",
      "action": "",
      "depends_on": ["task_E"]
    },
    {
      "id": "task_H",
      "name": "H",
      "action": "",
      "depends_on": ["task_G"]
    }
  ]
}

结构说明

  • id: 任务的唯一标识,用于指定依赖关系,避免名称重复导致的歧义
  • name: 任务的可读名称(对应你原来的A、B等)
  • action: 任务的具体执行内容(替换你原来的空字符串)
  • depends_on: 数组类型,列出当前任务需要等待完成的所有前置任务ID:
    • 空数组表示无前置依赖,可直接执行
    • 单元素数组表示串行依赖(如B依赖A)
    • 多元素数组表示需要等待所有列出的前置任务完成后才执行(如E依赖C和D)
    • 仅指定部分并行任务ID(如H仅依赖G),就能实现「不等F完成,G完成就执行H」的逻辑

优势

这种设计脱离了结构嵌套的限制,能支持更复杂的工作流逻辑:

  • 支持一个任务依赖多个前置任务
  • 支持多个任务依赖同一个前置任务(实现并行)
  • 支持部分并行任务触发后续流程(你的核心需求)
  • 结构清晰,易于解析和维护,很多成熟的工作流引擎都采用类似的依赖定义方式

内容的提问来源于stack exchange,提问作者SamuraiJack

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 12:55:20