> For the complete documentation index, see [llms.txt](https://yeasy.gitbook.io/agentic_ai_guide/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://yeasy.gitbook.io/agentic_ai_guide/di-yi-bu-fen-dan-ti-zhi-neng-jia-gou/02_reasoning/2.2_decomposition.md).

# 2.2 任务分解与规划算法

在 [2.1 节](/agentic_ai_guide/di-yi-bu-fen-dan-ti-zhi-neng-jia-gou/02_reasoning/2.1_cot.md) 中，介绍了思维链如何通过线性推理解决问题。然而，面对极其复杂的任务，单向的线性思维往往不够用。需要更强的结构化思考能力，这就是复杂任务分解算法的用武之地。

如果说思维链是“沿一条路径把问题想完”，那么本节介绍的方法就是“先拆问题，再决定该顺着哪条路继续”。其中，Least-to-Most 与 Plan-and-Solve 仍属于 **单路径分解**；ToT 与 GoT 则进一步进入 **多路径搜索与组合**。

## 2.2.1 为什么线性推理不够

当人类面对难题（如“如何将一家初创公司从 0 做到 1”）时，思维过程从来不是线性的：

* **发散**：提出多个方案 A、B、C。
* **评估**：觉得 B 方案风险太大，排除掉。
* **回溯**：试了 A 方案发现行不通，退回来尝试 C 方案。
* **合并**：发现 A 的优点和 C 的优点可以结合。

标准的思维链只能进行“流式生成”，缺乏这种回溯、评估和整合的能力。因此，研究人员提出了更高级的拓扑结构来组织模型的思维。

在这条演进线上，ToT 和 GoT 并不是突然出现的“下一代方法”。在它们之前，研究者已经提出了两类更轻量的分解策略：**先把难题拆成更容易的子问题，再顺序求解**。这类方法保留了 CoT 的线性执行优势，但把“先规划再求解”的意识显式化了。

### Least-to-Most Prompting：先解简单子问题

Least-to-Most Prompting 由 Zhou 等人在 2022 年论文 [Least-to-Most Prompting Enables Complex Reasoning in Large Language Models](https://arxiv.org/abs/2205.10625) 中提出。它把复杂问题拆成一串 **由易到难** 的子问题，先解决前面的简单步骤，再把中间结果作为后续步骤的上下文。

* **历史位置**：可以把它看成从“直接一步步推理”走向“显式任务分解”的早期代表。
* **核心机制**：先分解，再顺序求解。
* **适用任务**：组合泛化、符号推理、多步数学题等，尤其适合“后一步依赖前一步结果”的问题。
* **边界**：它依然沿单条链路向前推进，不会像 ToT 那样同时保留多个候选分支。

### Plan-and-Solve Prompting：先列计划再执行

Plan-and-Solve Prompting 由 Wang 等人在 2023 年论文 [Plan-and-Solve Prompting: Improving Zero-Shot Chain-of-Thought Reasoning by Large Language Models](https://arxiv.org/abs/2305.04091) 中提出。它延续 Zero-shot CoT 的零样本设定，但把“一步步思考”拆成两个显式阶段：**先生成计划，再依据计划求解**。

* **历史位置**：它承接了 Zero-shot CoT，目标是缓解后者常见的漏步、算错和语义跳步问题。
* **核心机制**：先规划，再求解。
* **工程意义**：相比 Few-shot CoT，它不依赖示例；相比 ToT，它成本更低、流程更稳定，适合作为“先规划一下再做”的默认基线。
* **边界**：它改善的是单条推理链的组织方式，而不是引入搜索、回溯或分支裁剪。

## 2.2.2 思维树: 引入搜索算法

**思维树 (ToT)** 由 Princeton 和 Google DeepMind 在论文 [Tree of Thoughts: Deliberate Problem Solving with Large Language Models](https://arxiv.org/abs/2305.10601) 中提出（参考 [官方实现库](https://github.com/princeton-nlp/tree-of-thought-llm)），它将推理过程建模为一棵树。**核心机制**：ToT 的运行类似下棋，每一步都有多种走法。它包含四个核心要素：

1. **思维分解**：将大问题拆解为中间步骤（思维节点）。
2. **思维生成**：在当前步骤，让 LLM 生成 $k$ 个可能的后续想法。
3. **状态评估**：让 LLM 充当“裁判”，给每个新想法打分（Value）或分类（Sure/Likely/Impossible）。
   * *示例提示词*：“分析以上 3 个方案的可行性，给出 0-1 的评分。”
4. **搜索算法**：
   * **BFS（广度优先）**：每一步都看所有可能性，保留最好的 $b$ 个（集束搜索）。适合步骤较少但每一步都很关键的任务（如创意写作）。
   * **DFS（深度优先）**：顺着一条路推到底，不行就回溯。适合有明确终点的逻辑解谜（如 24 点游戏、代码生成）。

**最小实现伪代码与关键超参**：

```python
def tree_of_thoughts(state, depth, max_depth, branch_factor, beam_width):
    # 提前终止条件：如果当前状态已评为"最终答案"，直接返回
    # 注意返回值形状要和最后的 max(...) 一致，否则 x['score'] 会 TypeError
    if is_final_state(state):
        return {"state": state, "score": evaluate_state(state)}

    # 深度硬限制：到达最大深度时评估状态
    if depth == max_depth:
        return {"state": state, "score": evaluate_state(state)}

    # 1. 思维生成 (生成 branch_factor 个可能的下一步)
    next_states = generate_thoughts(state, k=branch_factor)

    # 2. 状态评估 (让模型打分，0-1)
    scored_states = [(s, evaluate_prompt(s)) for s in next_states]

    # 3. 搜索与剪枝 (保留高分节点继续搜索)
    best_states = select_top_b(scored_states, b=beam_width)

    results = []
    for s, score in best_states:
        results.append(tree_of_thoughts(s, depth+1, max_depth, branch_factor, beam_width))
    # best_states 可能为空（生成器一个候选都没给出），需要兜底
    if not results:
        return {"state": state, "score": evaluate_state(state)}
    return max(results, key=lambda x: x['score'])
```

> **注**：上述伪代码为简化版本。在实际实现中，ToT 通常会在 `depth < max_depth` 时就对达到高评分（如“已找到最终答案”）的状态提前返回，而不仅依赖深度硬限制。

**工程化考量与成本极限**：

* **关键超参**：树的深度 (`depth`)、分支因子 (`branch_factor`)、评估提示词 (`evaluate_prompt`)、集束宽度 (`beam_width`)。
* **成本上界估算**：如果深度为 $D$，分支因子为 $B$，最坏情况下需要生成 $O(B^D)$ 个节点。每个节点都需进行 LLM 推理和评估，API 成本极高。
* **适用场景**：适合具有明确可客观评价中间状态的复杂任务（如 24 点游戏、创意填字、特定逻辑解谜），不适合简单问答。

```mermaid
graph TD
    %% Agentic Design System
    classDef agent fill:#e6f7ff,stroke:#1890ff,stroke-width:2px;
    classDef good fill:#f6ffed,stroke:#52c41a,stroke-width:2px;
    classDef pruned fill:#f0f0f0,stroke:#d9d9d9,stroke-width:2px,stroke-dasharray: 5 5;

    Root["初始状态"] --> N1["思路 A：评分 0.6"]
    Root --> N2["思路 B：评分 0.9"]
    Root --> N3["思路 C：评分 0.2"]

    N2 --> N2a["B.1：评分 0.5"]
    N2 --> N2b["B.2：评分 0.95"]

    N1 -.-> DeadEnd1["剪枝"]
    N3 -.-> DeadEnd2["剪枝"]

    class Root agent;
    class N2,N2b good;
    class N1,N3,DeadEnd1,DeadEnd2 pruned;
    class N2a agent;
```

图 2-2：思维树搜索过程可视化

## 2.2.3 思维图: 任意拓扑结构

**思维图 (GoT)** 在论文 [Graph of Thoughts: Solving Elaborate Problems with Large Language Models](https://arxiv.org/abs/2308.09687) 中提出，认为树结构仍然是一个限制。在某些场景下，思维需要 **聚合** 和 **循环**。

**核心操作**：GoT 将 LLM 的推理单元作为图的节点，并通过边连接。相比 ToT，它增加了以下能力：

1. **聚合**：将多个思维节点的输出合并。
   * *场景*：写一篇文章，先生成 3 个段落（3 个独立节点），然后总结这 3 段生成结论（聚合节点）。
2. **细化**：对同一个节点进行循环迭代优化。
   * *场景*：写一段代码，运行报错，将错误信息反馈回当前节点重新生成（自我循环）。

GoT 的灵活性使得它可以模拟各种人类思维模式，如头脑风暴（发散）、归纳总结（聚合）和迭代修改（循环）。

**工程要点**：

* **调度复杂度**：由于图允许循环和任意聚合，执行时的节点调度比 ToT 更加复杂，需要专门的状态机或数据流框架支持。
* **状态一致性**：在聚合多个分支时容易出现信息冲突（例如两个分支对同一个变量做出了不同的假设），需要专门的冲突解决机制或总结提示词。
* **可重放性**：由于图的执行路径非线性，必须记录每个节点完整的 `trace_id` 与父子依赖关系，否则发生错误时无法追踪和重试。

## 2.2.4 骨架思维: 并行推理加速

前两种算法旨在提升 **质量**，而 **骨架思维 (SoT)** 旨在提升 **速度**。

传统的 CoT 是串行的：想完第一步，才能想第二步。这导致长文本生成的延迟极高。SoT 模仿人类写大纲的习惯：

1. **骨架阶段**：先让 LLM 生成任务的简要大纲（骨架）。
2. **逐点扩展阶段**：**并行** 地让 LLM 同时扩写大纲中的每一个点。**优势**：通过并行生成，SoT 可以将长文生成的端到端延迟显著降低，且逻辑结构往往更加清晰。

## 2.2.5 算法选择指南

在设计智能体时，如何选择任务分解算法？

| 算法                                                                                               | 核心特征      | 优点          | 缺点           | 适用场景           |
| ------------------------------------------------------------------------------------------------ | --------- | ----------- | ------------ | -------------- |
| **CoT**（[2.1 节](/agentic_ai_guide/di-yi-bu-fen-dan-ti-zhi-neng-jia-gou/02_reasoning/2.1_cot.md)） | 线性链       | 简单、低成本      | 无法纠错，易跑偏     | 通用简单指令         |
| **Least-to-Most**                                                                                | 由易到难的顺序分解 | 分解明确，利于组合问题 | 仍是单路径，不能回溯   | 符号推理、多步数学、组合泛化 |
| **Plan-and-Solve**                                                                               | 先计划后求解    | 零样本友好，步骤更稳  | 计划质量决定上限     | 需要先列步骤的通用复杂任务  |
| **ToT**                                                                                          | 树状搜索      | 准确率高，能回溯    | Token 消耗极大，慢 | 复杂逻辑、数学证明、代码生成 |
| **GoT**                                                                                          | 图状网络      | 极其灵活，支持聚合   | 实现复杂，调度难     | 创意写作、多文档摘要     |
| **SoT**                                                                                          | 并行扩展      | **速度极快**    | 细节一致性稍弱      | 文章撰写、报告生成      |

***

**下一节**: [2.3 ReAct：推理与行动的统一](/agentic_ai_guide/di-yi-bu-fen-dan-ti-zhi-neng-jia-gou/02_reasoning/2.3_react.md)
