Agent Engineering 课程阅读
首页/课程二 · Agent 手写/规划与任务分解

在 GitHub 查看原文

本页目录

L06 — 规划与任务分解

本课目标:学会让 Agent 处理复杂的多步骤任务。L03 的 ReAct 是"边想边做",这课讲另一种范式——"先规划,再执行"(Plan-and-Execute),并对比两者的适用场景。

这是 Agent 从"完成小任务"到"完成复杂任务"的关键能力。


1. 为什么复杂任务需要规划?

看一个复杂任务:

"帮我调研一下北京和上海的天气,比较哪个更热,然后算出温差,最后用一句话总结。"

如果用 ReAct(边想边做),Agent 可能: - 查北京天气 → 查上海天气 → 算温差 → 总结 - 但也可能:查北京 → 算温差(忘了还没查上海)→ 发现错了 → 重新查... 走弯路

问题在于:边想边做缺乏全局视野,走到一半才发现路线错了。

规划的思路:先把整个任务的步骤想清楚,列成清单,再按清单执行。

规划阶段:
  1. 查北京天气
  2. 查上海天气
  3. 比较两地温度,算温差
  4. 用一句话总结

执行阶段:
  按清单逐个完成,每完成一个打勾

🎯 核心认知:规划的价值是全局视野——先把路线想清楚,避免边走边撞墙。


2. CoT:思维链(规划的基础)

CoT(Chain of Thought) 是让模型"分步推理"的技巧。核心就一句话:在 prompt 里要求模型"一步步想"

普通 prompt vs CoT prompt

普通:算一下 (17+25)×3
模型可能直接给:126(可能算对也可能算错)

CoT:算一下 (17+25)×3,请一步步展示你的计算过程
模型会:先算 17+25=42,再算 42×3=126

为什么 CoT 有效?因为让模型"写出中间步骤",等于强制它一步步推理,每步都可以验证,减少了"一步到位"的出错率。

CoT 和规划的关系

CoT 是"推理层面的分步"(把思考拆开),规划是"任务层面的分步"(把任务拆成子任务)。Plan-and-Execute 就是把 CoT 思想应用到任务执行上——先列出所有步骤(计划),再逐个执行。


3. Plan-and-Execute 模式

这是本课的核心范式。两个阶段:

阶段 1:Plan(规划)

让 LLM 看完任务,输出一个结构化的任务计划(通常是 JSON 列表):

{
  "steps": [
    "查询北京的天气",
    "查询上海的天气",
    "比较两地温度,计算温差",
    "用一句话总结调研结论"
  ]
}

阶段 2:Execute(执行)

逐个执行计划里的步骤。每个步骤可以: - 调用工具(查天气、算数) - 基于前面步骤的结果继续推理 - 完成后在计划里标记"已完成"

步骤 1: 查北京天气 → "北京:晴,25°C"  ✅
步骤 2: 查上海天气 → "上海:多云,28°C" ✅
步骤 3: 比较温差 → 28-25=3°C,上海更热  ✅
步骤 4: 总结 → "上海比北京热3度"        ✅

为什么用 JSON 输出计划?

因为好解析。让模型输出结构化的 JSON,你用 json.loads() 就能拿到步骤列表,程序化地逐个执行。这比让模型输出自然语言然后你正则解析可靠得多。

💡 小技巧:要求模型输出 JSON 时,可以在 prompt 里给一个格式示例,并强调"只输出 JSON,不要其他内容"。


4. ReAct vs Plan-and-Execute

ReAct(L03) Plan-and-Execute(本课)
思路 边想边做 先想后做
决策时机 每步实时决策 一开始就规划好全部步骤
灵活性 高(可根据观察调整) 低(计划定好后较死板)
适合 步骤不确定、需要随机应变的任务 步骤清晰、可预先规划的任务
风险 可能走弯路、遗漏步骤 计划错了全盘皆输

各自的最佳场景

用 ReAct 当: - 任务探索性强(不知道中间会发现什么) - 每步依赖上一步的观察来决定 - 例:debug(根据报错决定下一步查哪里)

用 Plan-and-Execute 当: - 任务步骤可以提前想清楚 - 有明确的子任务序列 - 例:调研报告(查数据→对比→分析→总结)

更强的:两者结合

工业界常把两者结合:先 Plan 出大致步骤,Execute 时用 ReAct 灵活执行每一步。这样既有全局视野,又能随机应变。本课先讲纯 Plan-Execute,结合版留给练习。


5. 本课代码会做什么

code.py 实现 Plan-and-Execute,并和 ReAct 对比:

① Plan-and-Execute 实现

  • plan():让 LLM 输出任务计划(JSON 步骤列表)
  • execute_plan():逐步执行计划,每步可调用工具
  • 打印完整的规划 + 执行过程

② 实验对比

用同一个复杂任务,分别跑 Plan-Execute 和 ReAct,对比: - Plan-Execute:先看到完整计划,再逐个执行 - ReAct:边想边做,没有全局计划

③ 观察"计划的价值"

看 Plan-Execute 怎么避免 ReAct 可能的"走弯路"。


6. 跑起来

python agent-lessons/06_planning/code.py

终端会打印规划阶段(任务清单)和执行阶段(逐步完成)。重点对比 Plan-Execute 和 ReAct 的不同工作方式。


下一课 L07 — Agentic RAG 会把 Agent 和你学过的 RAG 结合起来。