引言:规划与任务分解——Agent的"思考引擎"
在上一篇文章(第40篇)中,我们深入探讨了工具调用与函数编排——Agent的"双手"。但仅有双手还不够:一个真正自主的Agent还需要一个"导航系统",能够将宏大的目标转化为可执行的蓝图。这就是规划(Planning)与任务分解(Task Decomposition)——Agent架构中连接"认知"与"行动"的关键桥梁。
如果说记忆系统回答"记住了什么",工具调用回答"能做什么",那么规划回答的是"该做什么"和"怎么做"。在2026年的Agent工程实践中,规划与任务分解已从简单的Chain-of-Thought演进为包含动态重规划、多层级分解、跨Agent协同的复杂决策系统。本文将系统拆解这一核心能力的工程实现。
一、规划问题的形式化定义
1.1 从目标状态到任务图
规划问题的经典形式化定义包含四个要素:
规划问题 P = (S, A, T, G)
S: 状态空间(当前环境状态+Agent内部状态)
A: 可用动作集合(工具集合+原子操作)
T: 状态转移函数 S × A → S
G: 目标状态集合(用户意图的形式化表达)
输出: 规划 π = [a1, a2, ..., an],使得 S0 → S1 → ... → Sn ∈ G
在LLM驱动的Agent中,这些要素的映射关系发生了根本性变化:
| 经典规划 | LLM Agent规划 |
|---|---|
| 状态 = 精确的数据库记录 | 状态 = 上下文窗口中的语义片段 |
| 动作 = 预定义的API规范 | 动作 = 动态工具描述 + LLM生成的调用参数 |
| 转移函数 = 确定性规则 | 转移函数 = LLM推理 + 环境反馈(非确定性) |
| 目标 = 逻辑表达式 | 目标 = 自然语言意图 + 约束条件 |
这种"软形式化"赋予了Agent处理模糊性和不确定性的能力,同时也引入了规划质量不可控的风险——这是工程实践中必须直面的核心张力。
1.2 规划的三个层次
在实际工程中,Agent规划通常分为三个层次:
第一层:任务选择(Task Selection)—— 在多个待处理任务中决定优先级和顺序。例如:用户同时要求"查天气"和"订机票",Agent需要先查询天气信息再决定航班推荐策略。
第二层:步骤规划(Step Planning)—— 为单个目标生成有序执行步骤。例如:"写一篇技术调研文章" → [搜索资料 → 阅读摘要 → 阅读关键章节 → 组织大纲 → 撰写正文]。
第三层:动作生成(Action Generation)—— 将每个步骤转化为具体的工具调用参数。例如:将"搜索资料"具体化为 search(query="AI Agent规划算法 2026", limit=10)。
这三个层次构成一个递进细化的决策链,每一层都有不同的工程实现策略和优化方向。
二、从经典规划到LLM原生规划
2.1 经典规划的局限
经典AI规划方法——STRIPS、PDDL、HTN(分层任务网络)——在确定性环境中表现优异,但面对LLM Agent的开放域场景时面临三大挑战:
描述成本:PDDL需要精确的形式化领域描述,一个中等复杂度的网页操作任务可能需要数百行领域定义。相比之下,自然语言描述成本趋近于零。
动态适应:经典规划假设环境模型完全已知,但真实场景中工具可用性动态变化(API版本更新、服务降级、权限变更),硬编码的领域模型难以实时更新。
模糊意图:用户目标经常是模糊的——"帮我安排一周的会议"并未指定具体时间、时长、参与人优先级。经典规划需要完全实例化才能开始,而LLM的语义理解能力使其能从模糊意图中推导出合理假设。
2.2 LLM原生规划范式
2024-2026年间,LLM Agent领域演化出三种主流规划范式:
范式一:直接生成式(One-shot Generation)
LLM直接输出完整规划,然后执行。代表方法:Chain-of-Thought、Plan-and-Solve。
优势:延迟低,实现简单。劣势:长任务链中误差累积严重,缺乏中间反馈。
范式二:交替推理式(Interleaved Reasoning-Acting)
推理与执行交替进行,每一步执行后重新评估并调整计划。代表方法:ReAct、Reflexion。
优势:能根据环境反馈动态修正。劣势:增加API调用次数和延迟。
范式三:分层规划式(Hierarchical Planning)
先生成高层计划,再逐层细化。代表方法:Tree-of-Thought、Graph-of-Thought、Voyager。
优势:处理复杂任务时结构化程度更高。劣势:层间传递可能引入信息损失。
在2026年的工程实践中,分层+交替的混合范式正在成为主流——先生成Skeleton Plan,再在每步执行时根据反馈进行局部重规划。这种策略在延迟和鲁棒性之间取得了较好的平衡。
三、任务分解架构深度解析
3.1 Tree-of-Thought(思维树)
ToT将规划建模为树形搜索问题:
"写一篇AI Agent论文综述"
/ | \
"聚焦技术架构" "聚焦应用场景" "聚焦评估方法"
/ \ | / \
"规划系统" "记忆系统" "企业落地" "Benchmark" "真实指标"
关键技术要素包括:
分支生成器(Branch Generator):使用LLM在每一步生成3-5个候选下一步。prompt设计需要引导LLM产生多样化的分支而非趋同的改写。
状态评估器(State Evaluator):对每个分支状态进行打分。实现方式有三种:(a) LLM自评——让LLM直接为每个选项打分;(b) 价值模型——训练专门的评估模型;(c) 工具验证——通过实际执行来验证分支可行性。
搜索策略:BFS适合短任务(分支因子大但深度浅),DFS适合深度推理任务(分支因子小但路径长)。实际系统中常采用Beam Search限制候选数量,平衡探索广度和计算成本。
ToT的工程陷阱在于评估器的可靠性——如果LLM评估质量不可靠(研究表明LLM在N>5个选项时偏好前两个选项),搜索将退化为随机游走。
3.2 Graph-of-Thought(思维图)
认识到任务依赖关系不一定是树形的(可能形成DAG甚至含环的图),GoT引入了图结构:
节点类型:
┌─────────────────────────────────────────────┐
│ Task: 需要完成的具体工作 │
│ Decision: 需要做出的判断 │
│ Artifact: 中间产物(代码、文档等) │
│ Validation: 质量验证检查点 │
└─────────────────────────────────────────────┘
边类型:
→ 顺序依赖(A完成才能做B)
↔ 并行可同时执行
↩ 迭代循环(基于反馈的修改)
⚡ 条件分支(基于结果的路径选择)
GoT相比ToT的关键优势在于能表达更复杂的依赖拓扑——例如"模块A和模块B可以并行开发,但都依赖接口定义C"。这种表达力使GoT更适合软件开发等结构化任务。
3.3 Plan-and-Solve
由Google提出的Plan-and-Solve范式将规划分解为两个明确阶段:
阶段一(规划阶段):LLM仅生成计划,不执行任何操作。输出格式通常为编号步骤列表,每步描述做什么而非怎么做。
阶段二(执行阶段):逐步执行计划,每步聚焦当前子问题,避免上下文过载。
实验表明Plan-and-Solve在数学推理任务上比直接生成准确率提升约20%,但其假设是任务可以被"先离线规划再执行"。对于高度动态的工具调用任务,纯Plan-and-Solve可能因环境变化导致计划过时。
工程改进版——Plan-and-Solve with Replanning——在执行每个步骤后检查"当前状态是否仍与计划假设一致",若不一致则触发局部重规划。这种改进使得Plan-and-Solve可适配动态环境。
四、ReAct vs Plan-then-Execute:工程权衡
4.1 ReAct模式详解
ReAct(Reasoning + Acting)将推理和执行交织为循环:
while not done:
thought = llm("当前状态: {state}\n历史: {history}\n思考下一步:")
if thought.action_needed:
action, params = parse_action(thought)
observation = execute(action, params)
state.update(observation)
else:
done = return_final_answer(thought)
if max_iterations_reached:
trigger_replanning_or_report_failure()
ReAct的核心优势是信息压缩:每步只需将Observation添加到上下文,LLM自主选择保留哪些历史信息。但这也意味着如果Observation长且含噪声,上下文质量会急剧下降。
4.2 Plan-then-Execute模式详解
# 规划阶段
plan = llm("目标: {goal}\n可用工具: {tools}\n生成执行计划:")
# 执行阶段
results = {}
for step in plan.steps:
step.llm_context = {
"goal": goal,
"step_description": step.description,
"available_tools": step.allowed_tools,
"prior_results": results # 只传递相关前置结果
}
result = execute_step(step, step.llm_context)
results[step.id] = result
Plan-then-Execute的核心优势是上下文隔离:每步LLM只看到当前步骤信息,不会被历史执行的噪声污染。代价是需要前置规划时间,且规划质量完全取决于初始LLM推理的准确性。
4.3 决策框架
如何选择合适的模式?以下决策框架可作为工程参考:
| 维度 | ReAct | Plan-then-Execute |
|---|---|---|
| 任务步骤数 | < 15> | > 15步 |
| 环境动态性 | 高(频繁变化) | 低(相对静态) |
| 步骤间依赖 | 简单线性依赖 | 复杂图依赖 |
| 错误容忍度 | 低(单步错误会累积) | 高(每步独立处理) |
| 延迟预算 | 中等 | 较高(需前置规划) |
| 上下文窗口 | 受限(全部历史) | 充足(每步干净上下文) |
2026年的主流工程实践是分层ReAct+Plan混合:高层用Plan-then-Execute管理宏观步骤,步骤内部用ReAct处理微观决策,在两种模式的优势之间取得平衡。
五、动态重规划与不确定性处理
5.1 重规划的触发条件
在2026年的Agent工程中,动态重规划已不再是可选优化,而是必备的核心能力。以下是必须触发重规划的场景:
工具执行失败:API返回5xx、超时、权限不足等。重规划策略需要区分"可重试错误"和"结构性错误"——前者重试即可,后者需要寻找替代工具或替代路径。
信息揭示:执行中发现了规划时未知的关键信息。例如:计划基于"数据库有users表"的假设,执行时发现该表已重命名。
目标变更:用户在执行过程中修改需求。重规划需支持"热更新"——在新约束下尽可能复用已完成的工作。
进度偏差:实际执行时间远超预期(如某个步骤卡住),需要主动切换路径或分解为更小的子任务。
5.2 重规划的三种粒度
Step-level Replanning:仅重新规划当前失败的步骤,保持整体计划不变。最低成本,但可能无法解决结构性问题。
Segment-level Replanning:重新规划包含当前步骤的一个Segment(计划中的一个逻辑分组),调整步骤间依赖和中间产物。中等成本,适合局部调整。
Global Replanning:基于已完成的所有工作返回整体规划。最高成本,但能从根本上修正错误假设。适合作为最后手段。
工程实现中通常采用渐进式升级策略:先尝试Step-level重规划,计数器达到阈值后升级到Segment-level,最后才Global。避免过早触发高成本的重规划。
5.3 不确定性建模
2026年前沿的工程实践开始引入概率规划思想:
# 概率规划状态定义
class ProbabilisticState:
"""将确定状态替换为概率分布"""
belief_state: Dict[str, Distribution] # 对环境的信念分布
def update_belief(self, observation, action):
"""贝叶斯更新:根据观察结果更新信念"""
prior = self.belief_state
likelihood = observation.likelihood(action)
posterior = normalize(prior * likelihood)
self.belief_state = posterior
def choose_action(self, candidate_actions):
"""选择最大化期望效用的动作"""
best_action = max(candidate_actions,
key=lambda a: self._expected_utility(a))
return best_action
虽然LLM本身不输出概率分布,但可以通过多次采样(sampling)来近似行为分布——让LLM对同一场景生成多个规划,各规划出现频率即为其"置信度"。频率最高的规划优先执行,被否决的规划作为备用方案缓存。
六、多Agent协同规划
6.1 任务分配机制
在Multi-Agent系统中,规划不再是单Agent内部问题,更是跨Agent的任务分配与协调问题。2026年主流的三种分配机制:
集中式规划(Centralized Planning):一个Planner Agent负责全局规划,将子任务分配给执行Agent。优劣:规划质量高,但Planner是单点瓶颈。
分布式规划(Distributed Planning):各Agent自主规划,通过通信协议协调。优劣:可扩展性好,但可能出现死锁或冲突(两个Agent同时写同一文件)。
混合式规划(Hierarchical Planning):顶层集中规划定义Agent间协作框架,Agent内部自主规划执行细节。2026年主流方案,平衡了质量与可扩展性。
6.2 冲突检测与消解
多Agent规划中最棘手的工程问题是规划冲突。常见冲突类型:
资源冲突:多个Agent争用(写)同一资源。消解策略:(1) 基于时间戳的乐观并发控制(先提交者优先,后提交者重规划);(2) 基于锁的悲观控制(获取写锁后执行);(3) 基于CRDT的免锁合并(最终一致性)。
目标冲突:一个Agent的完成条件是另一个Agent未开始的先决条件。这是经典规划中的"互斥"问题,需在规划阶段通过Temporal Analysis检测并重新排序或引入中间状态。
信息冲突:两个Agent观察到环境的不同状态版本(分布式感知延迟)。消解策略:引入世界状态协调器(World State Authority),Agent执行前必须确认观察到的状态版本。
6.3 通信开销控制
多Agent协同规划的实际瓶颈往往不是LLM推理,而是Agent间的通信开销。以下是一组工程优化技巧:
规划摘要传递而非原始观察:Agent间传递"任务完成了X,产出了Y"的摘要而非完整的执行日志。压缩比可达10:1以上。
共享计划缓存(Shared Plan Cache):常用子任务模式被缓存为"规划模板",Agent可直接引用模板而非重新规划。特别适用于企业中的标准化流程(如代码部署、文档发布)。
局部信息隐藏(Need-to-know Principle):每个Agent只接收与其子任务相关的上下文,避免无关信息污染Agent的推理上下文。
七、规划与任务分解的工程陷阱
7.1 过度规划(Over-planning)
症状:Agent在简单任务上花费大量时间生成详尽规划,延迟远超直接执行。根本原因:规划阈值设置过低,系统在任何任务上都触发规划流程。
解决方案:复杂度评估预判。在规划之前,用轻量级模型评估任务复杂度——如果预估步骤数 < 3> 10,启用深度规划。SWE-bench实验表明,这种自适应策略可降低30%的平均延迟。
7.2 规划僵化(Plan Staleness)
症状:Agent面对"计划过时"的情况仍严格执行原计划,无视环境变化。原因:重规划触发机制未正确实现,或为了省token而跳过重规划检查。
解决方案:廉价的"世界状态一致性检查"——每步执行后用低成本LLM调用(如Haiku级模型)判断"当前状态是否仍满足继续执行的条件",若不一致则触发重规划。这种检查的成本远低于错误执行的代价。
7.3 分解粒度过细(Decomposition Over-splitting)
症状:Agent将简单任务分解为过多小步骤,每次步骤切换都引入上下文传递开销和状态序列化/反序列化开销,总延迟呈指数增长。
解决方案:可折叠步骤模式(Collapsible Step Pattern)。规划器生成树形结构,执行器动态判断相邻步骤是否可以在同一LLM上下文中合并执行。例如:"读取文件A"和"解析文件A的内容"可以合并为一步——模型在同一个上下文中完成读取和解析。
7.4 上下文泄漏(Context Bleeding)
症状:前一步的信息——包括无关细节、中间结果、甚至错误假设——泄漏到后续步骤的推理上下文中,导致后续判断偏差。
解决方案:严格的结果结构化。每步执行只返回预定义的Schema结果,过滤掉执行过程中的中间信息。例如搜索步骤只返回"相关文档ID和相关性分数列表",不返回原始搜索过程日志。
八、生产级规划系统架构设计
8.1 分层架构
| 层次 | 职责 | 延迟要求 |
|---|---|---|
| Intent Layer(意图层) | 理解用户目标,输出Goal Specification | < 500ms> |
| Planning Layer(规划层) | 将Goal分解为Step Graph | < 2s> |
| Scheduling Layer(调度层) | 确定执行顺序,分配资源/Agent | < 200ms> |
| Execution Layer(执行层) | 执行原子动作,收集Observation | 工具相关 |
| Monitoring Layer(监控层) | 跟踪进度,检测异常,触发重规划 | 持续运行 |
8.2 规划持久化
生产级系统必须持久化规划状态,以支持:中断恢复(Agent崩溃后从断点继续)、审计追溯(事后分析为什么做出某个决策)、会话接续(用户中断后回来继续执行)。
{
"plan_id": "plan_20260921_001",
"goal": "完成竞品分析报告",
"steps": [
{"id": "s1", "status": "completed", "result": "找到5个竞品"},
{"id": "s2", "status": "in_progress", "result": null, "sub_tasks": [
{"id": "s2.1", "status": "completed", "result": "竞品A分析完成"},
{"id": "s2.2", "status": "pending", "result": null}
]},
{"id": "s3", "status": "pending", "result": null, "depends_on": ["s2"]}
],
"version": 3,
"replanning_history": [
{"from_step": "s1", "reason": "竞品数量超出预期", "timestamp": "2026-09-21T16:10:00Z"},
{"from_step": "s2.1", "reason": "竞品A数据源变更", "timestamp": "2026-09-21T16:12:00Z"}
]
}
8.3 可观测性设计
Agent规划系统的可观测性需要从三个维度构建:
决策可观测(Decision Observability):每个规划变更记录完整的原因链:"因为观察到X,所以从计划A切换到计划B,修改了步骤3、步骤5"。这要求每次replan都强制输出justification字段。
进度可观测(Progress Observability):转换为人类可理解的进度维度——已完成步骤/总步骤、当前所处阶段、预计剩余时间。注意步骤数量不一定等于进度百分比(有的步骤耗时远大于其他步骤)。
质量可观测(Quality Observability):规划的中间质量指标——执行成功率(规划步骤中成功完成的比例)、重规划频率(正常任务通常
九、规划质量评估体系
9.1 评估维度
2026年Agent规划质量评估主要关注四个维度:
正确性(Correctness):执行结果是否真正满足用户意图。这是最终价值,但只有完整执行后才能评估。
效率(Efficiency):达到目标所需的步骤数、时间、LLM调用次数。同样正确的规划,步骤更少者为优。
鲁棒性(Robustness):面对工具故障、API变更时的重规划成功率。通过注入故障测试。
可解释性(Explainability):生成的计划是否能被人类理解。这对企业合规场景至关重要——"AI做了什么"必须可解释。
9.2 评估方法论
静态评估:给定标准任务集,比较Agent输出规划与参考规划(人工Gold Plan)的结构相似度(编辑距离、依赖图匹配度)。
动态评估:在沙盒环境中执行规划,测量任务完成率和平均步数。比静态评估更可靠但成本高。
对抗评估:故意在环境中注入故障(API限流、超时、返回异常格式),测试规划系统的重规划能力和错误恢复能力。2026年工程实践中越来越受重视。
十、2026年前沿趋势
10.1 神经符号融合规划(Neurosymbolic Planning)
纯LLM规划的"不可靠"和经典规划的"僵化"促使研究者将两者融合——用LLM理解模糊意图并生成初始规划,用符号验证器(如Z3、Alloy)检查规划的一致性和可达性,发现不可达路径时反馈给LLM重新规划。360AI等团队已在生产环境中验证了这一思路的可行性,实现了超过1000步复杂任务连续执行不中断。
10.2 在线学习规划(Online Learned Planning)
通过执行记录不断优化规划策略——构建"规划经验库",将"某种目标分解策略的执行效果"进行因果推断,指导后续规划。这种在线学习使得Agent越用越"聪明",规划效率随时间提升。Voyager等研究已证明在Minecraft等环境中持续学习可提升规划效率5倍以上。
10.3 零样本迁移规划(Zero-shot Transfer Planning)
基于海量规划模式预训练的规划模型,即使面对未见过的任务域,也能利用结构相似的规划模式进行推理。代表作:MetaGPT的"规划迁移"机制——将软件工程领域的规划策略迁移至金融分析等领域,实验表明迁移后冷启动阶段的规划质量提升40%。
10.4 人在回路规划(Human-in-the-Loop Planning)
高风险场景(金融交易、医疗决策、法律文件)中自动生成规划→人类审查→批准执行→监控→必要时干预。"审查点"(Review Checkpoint)的设计是关键——不是每步都审查,而是在关键决策分支点(如"即将执行不可逆操作")插入人工审核。2026年企业级Agent平台已默认支持此模式,将原本需要2小时的多角色协作任务缩短至20分钟。
十一、五个工程落地关键决策
在将规划与任务分解落地到生产环境时,以下五个关键决策需要优先确定:
决策一:规划模式选择—— 根据任务的动态性和复杂度选择ReAct、Plan-then-Execute还是混合模式。简单任务用ReAct,复杂任务用Plan-then-Execute,超复杂任务用分层混合。
决策二:重规划阈值配置—— 定义触发重规划的错误类型和次数阈值。工具5xx重试1次后触发step-level重规划;连续3次step-level失败后升级至segment-level。
决策三:规划上下文管理策略—— 决定哪些信息传递到下一步、哪些丢弃。核心原则:传递"对下一步决策有帮助的信息",丢弃"执行过程细节"。可建立标准化的Step Result Schema强制执行。
决策四:超时与中断策略—— 为规划设置总超时(如5分钟),中断时返回当前已完成的结果和未完成的原因。比"永远执行但无结果"好得多。
决策五:可解释性级别—— 根据合规要求决定输出"完整推理过程"还是"简洁执行摘要"。医疗/法律场景必须记录完整决策链;日常办公场景可用摘要。
结语
规划与任务分解是Agent从"执行单一指令"走向"自主达成目标"的关键跨越。2026年的工程实践表明,没有万能的规划范式——最佳方案取决于任务的复杂度、环境的动态性、错误容忍度和延迟预算。
从系列文章的脉络来看,我们已完成Agent三大核心能力中两个的深入探讨——记忆系统(第39篇)解决了"知识"问题,工具调用(第40篇)解决了"能力"问题,规划与任务分解(第41篇)解决了"决策"问题。在下篇文章中,我们将进入Agent的核心闭环——评估与调试:如何系统地验证Agent行为、发现故障模式并持续优化。

发表评论 取消回复