跳到主要内容

规划与推理

问题

Agent 如何进行任务规划和分解?有哪些规划策略?

答案

规划(Planning)是 Agent 将复杂目标分解为可执行子任务的能力,是区分简单工具调用和真正 Agent 的关键。

一、规划策略

1. 任务分解(Task Decomposition)

PLANNING_PROMPT = """你是一个任务规划助手。将用户的复杂任务分解为可执行的子步骤。

任务:{task}

请按以下格式输出执行计划:
1. [步骤描述] - 使用工具:[工具名]
2. [步骤描述] - 使用工具:[工具名]
...

注意:
- 步骤之间要有逻辑顺序
- 每步应该是一个可独立执行的原子操作
- 标注哪些步骤可以并行执行
"""

2. Plan-and-Execute 模式

与纯 ReAct 的区别:

  • ReAct:每步都重新思考下一步做什么(逐步推进)
  • Plan-and-Execute:先生成完整计划,再逐步执行(全局视角)

3. 自适应规划

def adaptive_planning(task: str, llm):
# 1. 生成初始计划
plan = generate_plan(task, llm)

results = []
for i, step in enumerate(plan.steps):
# 2. 执行当前步骤
result = execute_step(step)
results.append(result)

# 3. 检查是否需要调整计划
if should_replan(plan, results, llm):
# 基于已有结果重新规划剩余步骤
remaining_task = summarize_remaining(task, results)
plan = generate_plan(remaining_task, llm)

return synthesize_results(results, llm)

二、ReAct vs Plan-and-Execute

维度ReActPlan-and-Execute
规划方式逐步决策先规划后执行
全局视角
灵活性高(随时调整)需重新规划
适用任务简单、步骤少复杂、步骤多
Token 消耗每步都带完整上下文规划阶段集中消耗

三、反思与自我纠正

Agent 需要能够评估自己的输出并进行修正:

REFLECTION_PROMPT = """评估以下回答的质量:

问题:{question}
回答:{answer}

请从以下维度评分(1-5):
1. 准确性:信息是否正确?
2. 完整性:是否回答了所有方面?
3. 相关性:是否切题?

如果分数 < 4,请指出问题并给出改进建议。
"""

常见面试问题

Q1: Agent 的规划能力受什么限制?

答案

  1. LLM 推理能力:规划本质依赖 LLM 的推理——模型越强,规划越好
  2. Context Window:长计划需要大量上下文记录历史步骤
  3. 工具理解:Agent 需要理解每个工具能做什么才能正确规划
  4. 不确定性传递:每步的错误会传递并放大

Q2: 如何提升 Agent 的规划质量?

答案

  • 使用更强的模型(GPT-4o、Claude Opus)做规划
  • 提供 Few-shot 示例(成功的规划案例)
  • 限制计划步骤数(通常 5-10 步)
  • 添加自我反思和重新规划机制

相关链接