「AI Agent」复杂任务怎么拆:静态拆分、动态拆分与并行优化

0 前言

本文内容整理自公众号「小林面试笔记」的文章 7. 复杂任务怎么做的任务拆分?为什么要拆分?效果如何提升?,用于记录与总结 AI Agent 相关的核心面试知识点。

复杂任务怎么做的任务拆分?为什么要拆分?有什么实际收益?」,可以这样作答:

拆分的原因是 LLM 一次性处理太复杂的任务很容易出错——context window 有限,任务越大、中间状态越多,模型就越难持续追踪自己正在完成哪个子目标,容易「桌面太乱」。把大任务拆成小步骤后,每步只聚焦一件事,准确率明显提升,而且每步都是独立输出,可以单独检查、单独重试。

拆分主要有两种思路:静态拆分是提前把步骤写死,固定成确定的 Workflow,行为可预测、好排查,但灵活度低;动态拆分是把「拆解」本身交给 LLM,让它先规划再执行,即 Plan-and-Execute,灵活但规划质量不稳定。

拆完还有一个关键优化:分析步骤之间的依赖关系,把能并行的步骤并发执行。端到端延迟常常能降低 40% 到 60%。此外粒度把握很重要——以「原子操作」为标准,既不能拆太细也不能拆太粗。

这套思路在生产级产品里已经是标配:Cursor 的 Plan 模式先调研代码库、生成可人工审阅的实现计划,确认后才进入执行,一步一步完成 todo 列表中的任务,是「动态拆分 + 人工审批闸门」的工程化落地;Claude Code 用 todo 列表先拆解任务,执行中遇到失败会动态调整计划,子任务通过 subagents 递归委派,正是「自适应拆分」的实践。

复杂任务的分解


1 为什么任务要拆分?

1.1 一个失败案例:四件事混成一件

你让一个 LLM 一次性完成「帮我写一份竞品分析报告」,它需要:搜索多家竞品的信息、整理核心功能对比、分析各自优缺点、写出结论。听起来是一件事,但其实是四件完全不同的事混在一起

LLM 收到这个任务后经常犯这些毛病:在搜索阶段就开始掺杂分析意见;写对比表格时突然引入新的竞品信息;报告写到一半忘掉前面整理过的某个关键数据点。最后输出一篇「什么都有、什么都不深」的混乱文章。

这不是偶发问题,背后有系统性的原因。

1.2 根本原因:context window 有限,「桌面太乱」

LLM 的工作台——context window(上下文窗口)——容量是有限的,能同时处理的信息量有上限。任务越大,中间状态越多,桌面就越乱:搜索结果、分析意见、写了一半的段落全部堆在一起,模型很难持续追踪「我现在在做哪个子目标」。

这就像让一个人同时记住十件事并全部做对,出错率必然远高于每次只专注做一件事。任务拆分要解决的,就是这个「桌面太乱」的问题:把大目标切成多个小步骤,每步只做一件事,LLM 的全部注意力集中在这件事上,桌面保持干净,质量自然就上来了。

任务拆分解决「桌面太乱」

1.3 额外的好处:可独立验证、可定点重试

拆分还有一个容易被忽略的好处:每一个步骤都是独立的输出,可以被单独检查和验证。某一步出了问题,重试那一步就行,不需要从头跑整个任务。这在工程上意味着更低的失败成本、更清晰的问题定位。


2 两种拆分思路:静态拆分与动态拆分

任务拆分有两种思路,一种是你自己来拆,一种是让 LLM 来拆。

2.1 静态拆分:把流程写死

静态拆分是你提前把任务流程设计好,固定成一个确定的 Workflow——每一步是什么、按什么顺序执行,全部事先写死。

比如「写一篇技术博客」,固定拆成:搜索资料 → 整理大纲 → 逐段撰写 → 润色校对,四步顺序执行。

优点: 行为完全可预测,出了问题知道是哪一步的问题,好排查。
缺点: 灵活度低,遇到你没设计进流程的情况就容易卡住。

静态拆分:写死的 Workflow

2.2 动态拆分:让 LLM 自己规划(Plan-and-Execute)

动态拆分则是把「任务拆解」这件事本身也交给 LLM。你给它一个目标,它先输出一份执行计划,再按计划一步步执行——这就是 Plan-and-Execute 模式的核心思想。

用项目管理来类比:没有经验的程序员接到「开发用户登录系统」的任务,可能直接开始写代码,边写边想,结果容易漏掉环节——比如忘了错误处理,或者到最后才想起密码加密。但有经验的工程师会先写项目计划:需求分析 → 数据库设计 → 接口设计 → 编码实现 → 安全测试,把整体结构想清楚再动手。Plan-and-Execute 就是给 LLM 引入这个「先规划再执行」的习惯,把「想清楚要做什么」和「真正去做」分成两个独立阶段。

动态拆分:Plan-and-Execute

整个流程分三个阶段,角色和职责非常清晰:

  1. 规划阶段(相当于项目启动会):LLM 只做规划,不执行。比如「帮我做一份 AI 行业调研报告」,规划模块可能输出:先调研行业现状和市场规模,再分析头部公司的产品和策略,接着梳理技术趋势,然后汇总写结论和建议,最后排版润色。
  2. 执行阶段(相当于各部门干活):按计划逐步执行,每一步都要把前面所有步骤的结果作为 context 传进去,LLM 始终知道整件事做到哪里了,不会「失忆」。
  3. 汇总阶段(相当于项目验收会):把各步骤产出整合成最终输出,解决步骤之间的衔接问题,确保输出是连贯的整体。

Plan-and-Execute 三阶段

优点: 灵活性强,LLM 能针对具体任务制定最合适的计划。
缺点: 规划质量不稳定——规划一旦出错,后续所有执行步骤都建立在错误的基础上。

2.3 顺带厘清:CoT / ToT 与静态 / 动态拆分的区别

这里常有人混淆两组概念。CoT(思维链) 是让 LLM 在一次回答内部逐步写出推理过程,本质是「一次生成里的内部拆分」,不涉及多步工具调用;ToT(思维树) 进一步允许模型同时探索多条推理路径再选优。它们解决的是「LLM 内部怎么把一个复杂问题想清楚」。

而本文讲的静态/动态拆分,解决的是「Agent 怎么把一个大任务切成多个独立执行的步骤」。两者粒度和目标不同,不要混为一谈。


3 拆完还要做的事:依赖分析与并行优化

步骤拆好之后,还有一件关键的事:分析步骤之间的依赖关系。有些步骤必须等前一步完成才能开始,有些步骤之间没有依赖,可以同时进行。识别出可以并行的步骤,是降低总耗时的关键。

3.1 厨师直觉:并行降的是「关键路径」时间

用做饭来建立直觉。你要同时处理三件事:烧水、切菜、腌肉。如果傻傻地串行——等水烧开再切菜,切完菜再腌肉——总时间是三件事之和。

但有经验的厨师会先烧水,烧水的同时切菜、腌肉,水开了三件事都好了,直接下锅。总时间由「最长的那条路径」决定,也就是烧水的时间。并行执行降低的不是「每步的时间」,而是「关键路径的总时间」。

并行执行的直觉:烧水、切菜、腌肉

3.2 回到 Agent 场景:一个具体算例

假设有步骤 1、2、3、4,其中步骤 3 依赖步骤 1 的结果,步骤 4 依赖步骤 2 和步骤 3:

1
2
3
4
5
6
7
8
依赖关系:步骤 1 和步骤 2 相互独立,可以并行
步骤 3 需要步骤 1 的结果才能开始
步骤 4 需要步骤 2 和步骤 3 都完成才能开始

步骤1 ──────────────┐
├──> 步骤3 ──┐
步骤2 ──────────────┘ ├──> 步骤4(最终输出)
└────────────────────── ┘

步骤依赖关系示例

假设每步各需要 3 秒:全部串行是 12 秒;识别依赖后并行,关键路径变成「步骤 1/2(并行)→ 步骤 3 → 步骤 4」,只要 9 秒。步骤越多、可并行的越多,节省的时间越可观——实际项目里端到端延迟降低 40% 到 60% 是很常见的数字

代码实现上也很直观,用 asyncio.gather 让无依赖的步骤并发启动:

1
2
3
4
5
6
7
import asyncio

async def execute_parallel_steps(independent_steps: list):
# asyncio.gather 让多个步骤同时开始执行,不等某一个完成再启动下一个
tasks = [execute_step_async(step) for step in independent_steps]
results = await asyncio.gather(*tasks) # 等所有并发步骤都完成,一起拿结果
return results

3.3 前提:先把依赖关系画成 DAG

要让并行真正落地,前提是先把依赖关系画成一张有向无环图(DAG)——每个节点是一个步骤,边表示「依赖」。没有依赖的节点可以同时跑,依赖它们的节点要等父节点完成。这一步画得对不对,直接决定了并行优化的天花板。

依赖关系画成 DAG

另外要泼一盆冷水:并行优化有效的前提是任务本身依赖关系稀疏、工具 I/O 占主要耗时。如果所有步骤都强依赖上一步,并行空间基本为零,优化效果也就无从谈起。


4 拆分粒度:以「原子操作」为标准

任务不是拆得越细越好。

拆太细的代价:

  • 步骤越多,LLM 调用次数越多,总 token 消耗上升;
  • 步骤太碎,每步只做一件极小的事,LLM 看不到全局,产出的各部分容易衔接生硬。

拆太粗的代价:

  • 每步负责的事太多,出错概率上升;
  • 出了问题无法定位是哪一步的责任。

实践中通常把「原子操作」作为划分单步的标准:这个步骤只做一件独立的事,边界清晰,做完有明确的输出,和其他步骤不互相依赖。

具体感受一下区别:

  • 「搜索竞品 A 的产品信息」是原子的——只做一件事,有明确的输入和输出;
  • 「整理竞品分析」不是原子的——它包含了搜索信息、筛选关键点、格式化输出三件事,还没开始就已经有三个子任务了。

判断一个步骤是不是原子的,有个简单方法:你能给它写一个清晰的函数签名吗? 能的话,它大概是原子的;如果函数里还要分好几个阶段、处理好几类情况,那大概需要再拆。


5 进阶机制:自适应拆分与 Replan

前面讲的静态拆分和动态拆分,都有一个隐含假设:拆分在任务开始时一次性完成,执行过程中不再调整。但实际项目中经常不是这样。

5.1 自适应拆分:做不好就继续拆

实际项目里经常遇到:你提前拆好了三步,执行到第二步发现这一步比预想复杂得多,LLM 一次做不好;或者反过来,某一步其实很简单,拆太细反而浪费调用次数。

更好的做法是执行过程中根据实际难度动态调整:先让执行器尝试完成当前任务,做得好就继续往下走;明显做不好(比如超过最大步数还没完成、输出质量不达标),就把这个「做不好的任务」交回给规划器进一步拆成更小的子任务,然后重复同样的流程:先试,做不好就再拆。

整个过程就像一棵递归展开的任务树——只有真正做不好的节点才会被继续拆分,简单的节点一步到位。它的巧妙之处在于:计算开销和任务的实际难度成正比,而不是对所有任务一刀切地做同样深度的拆分。

自适应拆分:递归展开的任务树

5.2 执行中的 Replan 机制

拆分完成只是第一步,执行中还有一个经常被忽略的环节:计划需不需要调整?

现实中,步骤的执行结果经常会让原计划变得不合理。比如你规划了「先查竞品 A 的定价,再查竞品 B 的定价,最后做对比分析」,执行第一步时发现竞品 A 已经停止运营了,后面的对比分析就没意义了,整个计划需要重新调整。

Replan 机制的做法是:在步骤执行完后,把当前步骤的结果和剩余的计划一起交给规划模块,让它判断「基于当前的新信息,后面的计划还合理吗」。合理就继续执行,不合理就生成一份新的剩余步骤计划。这样计划始终与实际情况同步,不会「死守一份过时计划」。

代价是每步都多了一次「评估计划」的 LLM 调用,token 消耗会增加。实践中的折中做法是:不每步都触发 Replan,而是设置触发条件——比如某步输出与预期差异很大,或步骤执行失败时,才启动 Replan。这样既能应对意外,又不会无谓增加消耗。

5.3 生产级产品例证

这套机制在现实产品里早就不是教科书概念。Cursor 的 Plan 模式先调研代码库、形成一份可人工审阅的实现计划(虚拟文件形式),等你点击确认后才进入执行阶段——比教科书里的动态拆分多了一道「人工审批闸门」,不批准就不动手。

Claude Code 则把任务拆分成 todo 列表逐步执行,遇到失败会当场调整计划;需要深入某个子问题时,还会通过 subagents 把子任务递归委派出去,让子代理独立完成后再收回结果——这恰好就是「自适应拆分 + Replan」的工程化组合:任务复杂就多拆几层,做不好就换方式再来。

这也印证了一点:任务拆分不是论文里的概念,而是当下生产级 Agent 产品都在用的基础能力。


6 拆分结果的验证标准

拆完步骤之后,怎么判断拆得好不好?需要明确的验证标准,好的拆分结果应满足三个条件。

1. 完备性:没有遗漏

所有步骤加在一起,要能覆盖原始任务的全部要求。比如用户要求报告「包含市场份额、产品功能对比和定价策略三个维度」,拆出的步骤里必须每个维度都有对应步骤负责。检查方法很直接:把所有步骤的描述拼在一起,和原始任务描述逐项对照,看有没有某个要求在任何步骤里都没被提到。

2. 独立性:职责边界清晰

不能有两个步骤在做同一件事。反面例子:步骤 2 是「搜索竞品 A 的产品功能」,步骤 3 是「分析竞品 A 的核心能力」——「产品功能」和「核心能力」大概率搜到同样的内容,导致重复劳动。更好的拆法是:步骤 2 只负责「搜索竞品 A 的全部信息」,步骤 3 负责「从搜索结果中提炼功能对比表」,一个搜集、一个加工,各管各的。

职责重叠不仅浪费 token,还容易导致最终汇总时出现矛盾——两个步骤对同一个功能给出不一样的评价。

3. 可验证性:有明确的完成标准

每步执行完后,能不能用简单的标准判断它做对了没有。这一点最容易被忽视,但它直接决定你能不能做自动重试和质量把控。

比如拆出步骤「搜索竞品 A 的定价信息」,如果拆分时就定义了「输出中必须包含价格数字和计费模式(按量/包月/免费增值)」,执行完后自动检查这两个要素即可,缺了就自动触发重试。

好的做法是:拆分每个步骤时,同时写好它的「验收标准」,就像写单元测试的断言一样——步骤定义和验收标准成对出现。

拆分结果的验证标准


7 要点回顾

回答任务拆分这道题,要答出三个层次才完整:

层次 要点
为什么拆 context window 有上限,任务越大中间状态越多、越容易出错;拆开后每步可独立验证和重试
怎么拆 静态拆分适合流程固定场景(直接写死步骤);动态拆分用 Plan-and-Execute 让 LLM 自己规划,灵活但规划质量不稳定
拆完还要做 分析步骤依赖关系,把能并行的步骤并发跑,关键路径时间可降 40%-60%;粒度把握很重要,以原子操作为标准,既不能太细也不能太粗

再补充两点进阶加分项:自适应拆分(做不好就递归拆细)和 Replan 机制(执行中根据新信息调整计划),以及用「完备性、独立性、可验证性」来检验拆分质量。把这三个层次加上这两个进阶点答全,这道题就回答得很漂亮了。


参考

本文图片均来源于公众号「小林面试笔记」,版权归原作者所有。


「AI Agent」复杂任务怎么拆:静态拆分、动态拆分与并行优化
https://marisamagic.github.io/2026/08/07/20260807_任务拆分/
作者
MarisaMagic
发布于
2026年8月7日
许可协议