规划与推理概述
规划与推理是 Agent 的核心能力,决定了 Agent 如何理解目标、制定计划、执行任务。本章将从宏观视角介绍规划与推理的基本概念、协作机制和设计原则。
一、核心概念
1.1 什么是规划?
规划(Planning) 是将目标分解为可执行步骤的过程,解决"做什么"的问题。
┌─────────────────────────────────────────────────────────────┐
│ 规划的核心要素 │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ 目标 (Goal) │ │
│ │ ───────── │ │
│ │ 用户期望达成的最终状态 │ │
│ │ 例如:"完成一份市场调研报告" │ │
│ │ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │ │
│ ↓ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ 计划 (Plan) │ │
│ │ ───────── │ │
│ │ 为实现目标而制定的步骤序列 │ │
│ │ 例如: │ │
│ │ 1. 确定调研主题和范围 │ │
│ │ 2. 收集市场数据 │ │
│ │ 3. 分析竞品情况 │ │
│ │ 4. 撰写调研报告 │ │
│ │ 5. 审核修改报告 │ │
│ │ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │ │
│ ↓ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ 执行 (Execution) │ │
│ │ ──────────────── │ │
│ │ 按计划调用工具完成每个步骤 │ │
│ │ 例如:调用搜索工具收集数据 │ │
│ │ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘1.2 什么是推理?
推理(Reasoning) 是对每个步骤进行逻辑推导的过程,解决"怎么做"的问题。
┌─────────────────────────────────────────────────────────────┐
│ 推理的核心过程 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 输入:当前步骤 "收集市场数据" │
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ 推理过程: │ │
│ │ │ │
│ │ 1. 分析需求: │ │
│ │ - 需要什么类型的市场数据? │ │
│ │ - 数据来源有哪些? │ │
│ │ - 数据时效性要求如何? │ │
│ │ │ │
│ │ 2. 选择方法: │ │
│ │ - 搜索引擎 → 获取公开数据 │ │
│ │ - 数据库查询 → 获取内部数据 │ │
│ │ - API 调用 → 获取实时数据 │ │
│ │ │ │
│ │ 3. 生成行动: │ │
│ │ - 调用 search("市场规模 2024") │ │
│ │ - 调用 search("行业趋势报告") │ │
│ │ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ 输出:具体的行动方案 │
│ │
└─────────────────────────────────────────────────────────────┘1.3 规划与推理的关系
| 维度 | 规划 | 推理 |
|---|---|---|
| 核心问题 | 做什么? | 怎么做? |
| 时间维度 | 提前制定 | 实时进行 |
| 抽象层次 | 任务级别 | 操作级别 |
| 输出结果 | 步骤序列 | 具体行动 |
| 依赖关系 | 依赖目标 | 依赖当前步骤 |
┌─────────────────────────────────────────────────────────────┐
│ 规划与推理协作模型 │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ 用户目标 │ │
│ │ "帮我写一篇关于 AI Agent 的文章" │ │
│ └──────────────────────────────────────────────────────┘ │
│ │ │
│ ↓ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ 规划器 │ │
│ │ │ │
│ │ 输出计划: │ │
│ │ 1. 确定文章主题和结构 │ │
│ │ 2. 收集 AI Agent 相关资料 │ │
│ │ 3. 撰写文章内容 │ │
│ │ 4. 审核和润色 │ │
│ │ │ │
│ └──────────────────────────────────────────────────────┘ │
│ │ │
│ ┌───────────┴───────────┐ │
│ ↓ ↓ │
│ ┌──────────────────┐ ┌──────────────────┐ │
│ │ 推理器 1 │ │ 推理器 2 │ │
│ │ │ │ │ │
│ │ 步骤:确定主题 │ │ 步骤:收集资料 │ │
│ │ │ │ │ │
│ │ 推理: │ │ 推理: │ │
│ │ • 分析用户意图 │ │ • 确定资料来源 │ │
│ │ • 确定文章类型 │ │ • 选择搜索关键词 │ │
│ │ • 选择切入点 │ │ • 调用搜索工具 │ │
│ │ │ │ │ │
│ └──────────────────┘ └──────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘二、规划策略分类
2.1 规划策略类型
| 策略类型 | 描述 | 代表方法 | 适用场景 |
|---|---|---|---|
| 单步规划 | 每次只规划下一步 | ReAct | 简单任务、快速响应 |
| 完整规划 | 一次性规划所有步骤 | Plan-and-Execute | 可预测的流程 |
| 动态规划 | 根据执行结果调整计划 | Hierarchical Planning | 不确定性高的任务 |
| 反思规划 | 执行后反思并改进 | Reflexion | 需要高质量输出 |
2.2 规划策略对比
┌─────────────────────────────────────────────────────────────┐
│ 规划策略对比图 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 单步规划(ReAct) │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Goal ─→ Step1 ─→ Step2 ─→ Step3 ─→ Done │ │
│ │ ↑ ↑ ↑ │ │
│ │ 规划 规划 规划 │ │
│ │ │ │
│ │ 优点:灵活,适应性强 │ │
│ │ 缺点:缺乏全局视角,可能走弯路 │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ 完整规划(Plan-and-Execute) │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Goal ─→ [Step1, Step2, Step3] ─→ 执行 ─→ Done │ │
│ │ ↑ │ │ │
│ │ 完整规划 │ │ │
│ │ ↓ │ │
│ │ 全部执行 │ │
│ │ │ │
│ │ 优点:全局最优,执行高效 │ │
│ │ 缺点:无法应对意外情况 │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ 动态规划(Hierarchical) │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Goal │ │
│ │ ├── Phase1 ─→ [Sub1, Sub2] ─→ 执行 ─→ 反馈 │ │
│ │ ├── Phase2 ─→ [Sub3, Sub4] ─→ 执行 ─→ 反馈 │ │
│ │ └── Phase3 ─→ [Sub5, Sub6] ─→ 执行 ─→ 反馈 │ │
│ │ │ │
│ │ 优点:平衡灵活性和全局性 │ │
│ │ 缺点:实现复杂 │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘三、推理范式分类
3.1 推理范式演进
| 范式 | 年份 | 核心思想 | 结构 |
|---|---|---|---|
| CoT | 2022 | Step by Step 推理 | 线性链 |
| ToT | 2023 | 树状探索,支持回溯 | 树结构 |
| GoT | 2023 | 图状推理,支持聚合分解 | 图结构 |
3.2 推理范式详解
┌─────────────────────────────────────────────────────────────┐
│ 推理范式结构对比 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 1. Chain-of-Thought(思维链) │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ 问题 ─→ Step1 ─→ Step2 ─→ Step3 ─→ 答案 │ │
│ │ │ │
│ │ 特点:线性推理,简单直接 │ │
│ │ 适用:数学计算、逻辑推理 │ │
│ │ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ 2. Tree-of-Thought(思维树) │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ ┌── Step1a ─→ Step2a ─┐ │ │
│ │ │ │ │ │
│ │ 问题 ──────┼── Step1b ─→ Step2b ─┼─→ 最优答案 │ │
│ │ │ │ │ │
│ │ └── Step1c ─→ Step2c ─┘ │ │
│ │ │ │
│ │ 特点:多路径探索,支持回溯 │ │
│ │ 适用:复杂决策、创意写作 │ │
│ │ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ 3. Graph-of-Thought(思维图谱) │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ ┌── Step1a ─┐ │ │
│ │ │ ↓ │ │
│ │ 问题 ─┼── Step1b ─┼─→ 聚合 ─→ Step3 ─→ 答案 │ │
│ │ │ ↑ │ │
│ │ └── Step1c ─┘ │ │
│ │ ↑ │ │ │
│ │ └──────┘ │ │
│ │ 循环迭代 │ │
│ │ │ │
│ │ 特点:支持聚合、分解、循环 │ │
│ │ 适用:复杂问题求解、多维推理 │ │
│ │ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘四、规划与推理的挑战
4.1 主要挑战
| 挑战 | 描述 | 影响 |
|---|---|---|
| 规划粒度 | 步骤过粗难以执行,过细效率低下 | 执行效率 |
| 推理错误 | 推理过程中的逻辑错误 | 结果正确性 |
| 动态适应 | 环境变化导致计划失效 | 任务成功率 |
| 资源消耗 | 多步推理消耗大量 Token | 成本控制 |
4.2 挑战应对策略
┌─────────────────────────────────────────────────────────────┐
│ 挑战应对策略 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 1. 规划粒度控制 │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ 策略: │ │
│ │ • 根据任务复杂度自适应调整粒度 │ │
│ │ • 顶层规划粗粒度,底层执行细粒度 │ │
│ │ • 每个步骤对应一个明确的工具调用 │ │
│ │ │ │
│ │ 示例: │ │
│ │ 粗粒度:收集数据 ─→ 分析数据 ─→ 生成报告 │ │
│ │ 细粒度:搜索市场数据 ─→ 爬取竞品信息 ─→ │ │
│ │ 清洗数据 ─→ 统计分析 ─→ 可视化 ─→ 报告 │ │
│ │ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ 2. 推理错误处理 │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ 策略: │ │
│ │ • 自我反思:执行后检查结果 │ │
│ │ • 验证机制:设置验证步骤 │ │
│ │ • 回溯重试:发现错误时回退 │ │
│ │ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ 3. 动态适应 │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ 策略: │ │
│ │ • 监控执行状态,检测异常 │ │
│ │ • 预留备用方案 │ │
│ │ • 支持计划重规划 │ │
│ │ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ 4. 资源优化 │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ 策略: │ │
│ │ • 上下文压缩:精简历史信息 │ │
│ │ • 缓存机制:避免重复推理 │ │
│ │ • 提前终止:满足条件即停止 │ │
│ │ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘五、设计原则
5.1 核心设计原则
| 原则 | 描述 | 实践方法 |
|---|---|---|
| 明确目标 | 清晰定义成功的标准 | 输出具体的验收条件 |
| 合理分解 | 每个步骤可独立执行 | 步骤对应工具能力 |
| 验证反馈 | 每步都有验证机制 | 设置检查点 |
| 容错恢复 | 支持错误恢复 | 备用方案、回溯机制 |
5.2 设计最佳实践
# 规划与推理设计最佳实践
class PlanningBestPractices:
"""规划与推理设计最佳实践"""
# 1. 明确目标定义
def define_goal(self, user_request: str) -> dict:
"""
明确目标定义
示例:
用户请求:"帮我分析销售数据"
定义目标:
{
"objective": "完成销售数据分析报告",
"success_criteria": [
"数据已清洗和整理",
"关键指标已计算",
"可视化图表已生成",
"结论和建议已输出"
],
"constraints": {
"time_limit": "1小时内",
"data_source": "sales.csv"
}
}
"""
pass
# 2. 合理任务分解
def decompose_task(self, goal: dict) -> list:
"""
合理任务分解
原则:
- 每个步骤对应一个明确的工具调用
- 步骤之间有清晰的依赖关系
- 步骤粒度适中,不过粗也不过细
示例:
[
{"step": 1, "action": "read_file", "input": "sales.csv", "output": "raw_data"},
{"step": 2, "action": "clean_data", "input": "raw_data", "output": "clean_data"},
{"step": 3, "action": "analyze", "input": "clean_data", "output": "analysis"},
{"step": 4, "action": "visualize", "input": "analysis", "output": "charts"},
{"step": 5, "action": "generate_report", "input": ["analysis", "charts"], "output": "report"}
]
"""
pass
# 3. 验证机制
def add_validation(self, step: dict) -> dict:
"""
添加验证机制
示例:
{
"step": 2,
"action": "clean_data",
"validation": {
"check": "data_completeness",
"condition": "missing_rate < 0.1",
"on_failure": "retry_with_different_strategy"
}
}
"""
pass
# 4. 错误恢复
def add_recovery(self, step: dict) -> dict:
"""
添加错误恢复机制
示例:
{
"step": 3,
"action": "analyze",
"recovery": {
"fallback_action": "use_simple_statistics",
"max_retries": 3,
"on_max_retries": "report_partial_results"
}
}
"""
pass六、与 Agent 架构的关系
6.1 规划推理在 Agent 架构中的位置
┌─────────────────────────────────────────────────────────────┐
│ Agent 核心组件 │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ ┌─────────────────────────────────────────────┐ │ │
│ │ │ 感知模块 │ │ │
│ │ │ 接收用户输入、环境反馈 │ │ │
│ │ └─────────────────────────────────────────────┘ │ │
│ │ │ │ │
│ │ ↓ │ │
│ │ ┌─────────────────────────────────────────────┐ │ │
│ │ │ 规划与推理模块(本章) │ │ │
│ │ │ │ │ │
│ │ │ ┌─────────────┐ ┌─────────────┐ │ │ │
│ │ │ │ 规划器 │ │ 推理器 │ │ │ │
│ │ │ │ Planner │ │ Reasoner │ │ │ │
│ │ │ └─────────────┘ └─────────────┘ │ │ │
│ │ │ │ │ │
│ │ └─────────────────────────────────────────────┘ │ │
│ │ │ │ │
│ │ ↓ │ │
│ │ ┌─────────────────────────────────────────────┐ │ │
│ │ │ 记忆模块 │ │ │
│ │ │ 存储历史、上下文、知识 │ │ │
│ │ └─────────────────────────────────────────────┘ │ │
│ │ │ │ │
│ │ ↓ │ │
│ │ ┌─────────────────────────────────────────────┐ │ │
│ │ │ 执行模块 │ │ │
│ │ │ 调用工具、执行任务 │ │ │
│ │ └─────────────────────────────────────────────┘ │ │
│ │ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘6.2 与其他模块的协作
| 协作模块 | 交互方式 | 示例 |
|---|---|---|
| 感知模块 | 接收用户目标和环境反馈 | 用户请求 → 规划目标 |
| 记忆模块 | 存取历史信息和知识 | 检索相关经验指导规划 |
| 执行模块 | 下发执行指令 | 规划步骤 → 工具调用 |
七、面试高频问题
Q1: 规划和推理有什么区别?
答案要点:
- 规划解决"做什么",推理解决"怎么做"
- 规划是提前制定,推理是实时进行
- 规划输出步骤序列,推理输出具体行动
- 两者协作才能完成复杂任务
Q2: 如何选择合适的推理范式?
答案要点:
- CoT:简单问题、线性推理、快速响应
- ToT:需要回溯、多路径探索、复杂决策
- GoT:复杂依赖关系、需要聚合分解
Q3: 如何控制规划粒度?
答案要点:
- 每个步骤对应一个明确的工具调用
- 步骤之间有清晰的输入输出关系
- 根据任务复杂度自适应调整
- 顶层粗粒度规划,底层细粒度执行
Q4: 如何处理规划执行中的错误?
答案要点:
- 设置验证检查点,及时发现问题
- 支持回溯重试,从错误点继续
- 提供备用方案,保证任务完成
- 反思机制,从失败中学习
Q5: 如何评估规划质量?
答案要点:
- 任务完成率:最终目标是否达成
- 执行效率:步骤数量、时间消耗
- 资源消耗:Token 使用量
- 错误恢复能力:遇到问题能否正确处理
八、小结
| 概念 | 核心要点 | 面试关键词 |
|---|---|---|
| 规划 | 将目标分解为可执行步骤 | 任务分解、粒度控制、依赖分析 |
| 推理 | 对每个步骤进行逻辑推导 | CoT、ToT、GoT |
| 挑战 | 粒度控制、错误处理、动态适应 | 资源优化、容错机制 |
| 原则 | 明确目标、合理分解、验证反馈 | 设计最佳实践 |
一句话总结:规划与推理是 Agent 的"大脑",规划决定做什么,推理决定怎么做,二者协作实现自主决策。
最后更新:2026年3月19日