8.1 复杂任务分解与依赖建模

任务分解是处理复杂问题的关键能力,通过DAG模型实现任务间的依赖管理和并行执行。本节介绍Claude Code的七种Task类型、任务生命周期、依赖建模方法和粒度选择策略。

8.1.1 核心概念:DAG与任务图

任务分解的根本目标是将不可原子的大问题拆分为可独立执行的小任务,这些任务形成一个 有向无环图(Directed Acyclic Graph, DAG)。图中的节点代表任务,边代表任务间的依赖关系。

图 8-1:任务分解的DAG模型

依赖关系:A 必须在 B、C 前完成;B 必须在 D 前完成;C 必须在 E 前完成;G 必须在 D、E 都完成后执行。

DAG模型有三个关键性质:

  1. 无环性:不允许循环依赖,保证任务最终会终止

  2. 拓扑排序:存在一个执行顺序,使所有依赖都被满足

  3. 并行潜力:无直接依赖的任务可以并行执行

8.1.2 Claude Code的Task类型系统

Claude Code为任务分解提供了 7种Task类型,每种类型用于不同的执行环境和场景。其中MiniHarness框架实现了核心的四种类型,其余三种作为扩展留给读者自行实现。

Task类型总览

Task类型
执行环境
适用场景
智能体隔离

local_bash

本地shell

系统命令、文件操作

local_agent

本地Agent

代码分析、生成

remote_agent

远程Harness

分布式计算

in_process_teammate

内存中子Agent

轻量级分工

workflow

Lobster引擎

复杂工作流

部分

monitor_mcp

MCP监听

长期监控任务

dream

后台异步任务

并发非关键路径

实现状态说明

  • MiniHarness已实现local_bashlocal_agentin_process_teammateworkflow 四种类型提供了完整的本地和工作流支持

  • 概念性设计/扩展remote_agent(分布式计算)、monitor_mcp(长期监控)、dream(异步后台任务)作为架构设计展示,具体实现留给读者根据需求自行实现

Task ID格式规范

每个Task都有一个全局唯一的ID,格式为:

例如:

  • root#local_agent#0:根Agent下的第一个local_agent任务

  • root#local_agent#0#in_process_teammate#0:嵌套的第一个teammate任务

  • root#workflow#2:根Agent下的第三个workflow任务

8.1.3 任务生命周期

任务从创建到完成经历五个状态:

图 8-2:任务生命周期状态机

各状态含义:

  1. pending(待执行):任务已定义,但其依赖任务未全部完成

  2. running(执行中):依赖满足,任务开始执行

  3. completed(成功完成):任务执行成功,输出可用

  4. failed(执行失败):任务执行出错,决策者需决定是否重试

  5. killed(被杀死):人工中止或超时导致的任务终止

理解这些状态后,我们需要将复杂问题转化为可执行的任务依赖图。以下介绍如何进行系统的依赖建模,从而为并行执行和任务调度奠定基础。

8.1.4 依赖建模:从问题到DAG

问题分析框架

给定一个复杂问题,分解为DAG的流程:

  1. 识别关键决策点:问题的哪些部分可以并行处理?

  2. 提取基础任务:能否进一步分解某个任务?

  3. 定义依赖关系:哪些任务必须在其他任务之前执行?

  4. 分配Task类型:每个任务应该用何种方式执行?

实例:论文质量评估系统

假设要构建一个系统来评估学术论文的质量,需要执行以下分析:

图 8-3:论文质量评估系统的任务分解示例

依赖图的编程表示

以下是任务DAG的完整Python实现:

DAG的构建和可视化为我们提供了清晰的任务执行流程。然而,在实际应用中还有多个关键的设计决策需要做出,这些决策直接影响系统的效率和可维护性。

8.1.5 关键设计决策

1. 粒度选择

任务粒度太粗导致无法充分并行化,太细导致调度开销大。一般规则:

  • 建议粒度:单个Task的预期执行时间在10秒到10分钟间

  • 太粗:当某个任务的部分可以与其他任务并行时

  • 太细:当多个Task的总执行时间小于调度开销时

2. 依赖vs控制流

明确区分:

  • 数据依赖:后续任务需要前序任务的输出

  • 控制流依赖:后续任务需要前序任务完成但不需要其输出

这影响任务间的通信设计。

3. 容错策略

为每个Task定义:

  • max_retries:最多重试次数(默认1)

  • timeout_seconds:超时时间(默认300秒)

  • on_failure:失败策略(fail-fast vs continue)

8.1.6 本小节小结

任务分解的核心是建立DAG模型,利用Claude Code的7种Task类型适配不同执行环境。通过拓扑排序和并行组分析,我们能够同时实现任务的顺序性保证和并行效率。下一节将讨论如何用状态机实现更复杂的工作流逻辑。

最后更新于