这是我的精读专题:逐章读李博杰的开源书《深入理解 AI Agent:设计原理与工程实践》,每一章写下我自己的理解和输出——不是摘抄,是用我的话重新讲一遍,加上我的追问和实践。
全书围绕一个公式展开:
graph LR
LLM["🧠 LLM
大脑"] --- CTX["👁️ 上下文
眼睛"] CTX --- TOOLS["🤲 工具
手脚"] TOOLS --- LLM AGENT["Agent = LLM + 上下文 + 工具"] style AGENT fill:#fff3cd,stroke:#b8860b
大脑"] --- CTX["👁️ 上下文
眼睛"] CTX --- TOOLS["🤲 工具
手脚"] TOOLS --- LLM AGENT["Agent = LLM + 上下文 + 工具"] style AGENT fill:#fff3cd,stroke:#b8860b
进生产环境后同一个系统改写为 Agent = Model + Harness,其中 Harness = 上下文管理 + 工具接口 + 约束 + 验证 + 纠正——能跑的 Demo 与可靠产品之间的差距在 Harness,不在模型。这句是全书题眼,也正好打在我后端工程的积累上。
读法约定
- 每章产出:一篇「我的理解」文章(按我的写作方法:痛点开场、递进讲清、结尾给行动),跑通该章至少一个 Starter 实验
- 难度分级来自官方:🟢 入门 → 🔵 进阶 → 🟣 高级 → 🟡 工程 → 🔴 专家 → 🟠 应用
- 完成的章在下面清单里变成链接
本页导航:🧠 章节思维导图 · 📋 章节清单 · 💡 为什么值得精读
章节思维导图
每章一张,随精读进度一点点补。✅ = 已读并有输出,⬜ = 还没读到。
第 1 章 · AI Agent 入门(✅ 完结)
骨架是四个驱动问题;金色节点是全书题眼;边上的关系就是论证的推进方向。
graph LR
CH1["第 1 章
AI Agent 入门"] --> Q1["① Agent 是什么?"] CH1 --> Q2["② 模型变强后
框架还剩什么?"] CH1 --> Q3["③ 可靠性从哪来?"] CH1 --> Q4["④ 工程重心怎么迁移?"] Q1 --> A1["Agent = LLM + 上下文 + 工具"] A1 --> A11["LLM = 大脑
行动前先内部推演"] A1 --> A12["上下文 = 眼睛
五个部分"] A1 --> A13["工具 = 手脚
通用组合 + 专用约束"] A12 --> A14["消融实验:组件不等价
缺工具结果 → 就地编造"] Q1 --> B1["ReAct:想 → 做 → 看"] B1 --> B11["上下文 = 静态前缀 + 轨迹"] Q2 --> C1["模型即 Agent"] C1 --> C11["RL 内化的是决策"] C1 --> C12["执行留在模型外(Formula)"] C11 --> C13["循环没消失
只是搬到服务端"] C12 --> C13 C13 --> K1["模型越强
Harness 越关键"] Q2 --> C2["苦涩的教训"] C2 --> C21["方向认同,节奏务实"] C21 --> K1 Q3 --> D1["Harness 五要素"] D1 --> D11["能做事:Context + Tools"] D1 --> D12["不做错事:约束/验证/纠正"] D12 --> K2["Demo 与可靠产品的差距
在 Harness,不在模型"] Q3 --> E1["护栏三层:上下文 → 执行 → 数据
按被绕过难度排序"] Q3 --> F1["五个设计模式"] F1 --> F11["提议-审核:因为自审不可靠"] F1 --> F12["只增不改:可缓存可审计"] Q4 --> G1["五波演进,层层包含"] G1 --> G11["提示 ⊂ 上下文 ⊂ Harness
⊂ Loop ⊂ Graph"] G11 --> G12["模型差异在缩小"] G12 --> K3["竞争优势转移
到模型之外"] Q4 --> H1["编排:单次调用 → 工作流 → 自主"] H1 --> H11["自主必须设退出条件"] style CH1 fill:#d1e7dd,stroke:#198754 style K1 fill:#fff3cd,stroke:#b8860b,stroke-width:2px style K2 fill:#fff3cd,stroke:#b8860b,stroke-width:2px style K3 fill:#fff3cd,stroke:#b8860b,stroke-width:2px
AI Agent 入门"] --> Q1["① Agent 是什么?"] CH1 --> Q2["② 模型变强后
框架还剩什么?"] CH1 --> Q3["③ 可靠性从哪来?"] CH1 --> Q4["④ 工程重心怎么迁移?"] Q1 --> A1["Agent = LLM + 上下文 + 工具"] A1 --> A11["LLM = 大脑
行动前先内部推演"] A1 --> A12["上下文 = 眼睛
五个部分"] A1 --> A13["工具 = 手脚
通用组合 + 专用约束"] A12 --> A14["消融实验:组件不等价
缺工具结果 → 就地编造"] Q1 --> B1["ReAct:想 → 做 → 看"] B1 --> B11["上下文 = 静态前缀 + 轨迹"] Q2 --> C1["模型即 Agent"] C1 --> C11["RL 内化的是决策"] C1 --> C12["执行留在模型外(Formula)"] C11 --> C13["循环没消失
只是搬到服务端"] C12 --> C13 C13 --> K1["模型越强
Harness 越关键"] Q2 --> C2["苦涩的教训"] C2 --> C21["方向认同,节奏务实"] C21 --> K1 Q3 --> D1["Harness 五要素"] D1 --> D11["能做事:Context + Tools"] D1 --> D12["不做错事:约束/验证/纠正"] D12 --> K2["Demo 与可靠产品的差距
在 Harness,不在模型"] Q3 --> E1["护栏三层:上下文 → 执行 → 数据
按被绕过难度排序"] Q3 --> F1["五个设计模式"] F1 --> F11["提议-审核:因为自审不可靠"] F1 --> F12["只增不改:可缓存可审计"] Q4 --> G1["五波演进,层层包含"] G1 --> G11["提示 ⊂ 上下文 ⊂ Harness
⊂ Loop ⊂ Graph"] G11 --> G12["模型差异在缩小"] G12 --> K3["竞争优势转移
到模型之外"] Q4 --> H1["编排:单次调用 → 工作流 → 自主"] H1 --> H11["自主必须设退出条件"] style CH1 fill:#d1e7dd,stroke:#198754 style K1 fill:#fff3cd,stroke:#b8860b,stroke-width:2px style K2 fill:#fff3cd,stroke:#b8860b,stroke-width:2px style K3 fill:#fff3cd,stroke:#b8860b,stroke-width:2px
第 2 章 · 上下文工程(✅ 完结)
已读的分支长出洞见层;⬜ 分支留给后面的精读补全。
graph LR
CH2["第 2 章
上下文工程 ✅"] --> Q1["① 上下文长什么样?✅"] CH2 --> Q2["② 循环何时停?✅"] CH2 --> Q3["③ 缓存省在哪?✅"] CH2 --> Q4["④ 思考草稿怎么传?✅"] CH2 --> Q5["⑤ 缓存的边界在哪?✅"] CH2 --> Q6["⑥ 之后的三个发展方向 ⬜"] Q1 --> A1["四种角色:system / user
/ assistant / tool"] Q1 --> A2["无状态:每次送全量历史"] A2 --> A3["框架的核心工作
= 管理 messages 列表"] Q2 --> B1["回复不带 tool_calls
→ 退出循环"] Q3 --> C1["不缓存:累计 n²"] Q3 --> C2["KV Cache:单次推理内
线性增长"] C2 --> C21["Prompt Cache:跨请求
约 1/10 价格"] C2 --> C22["三铁律:前缀不动 / 只增不改 / 守格式"] C22 --> C23["改一个空格
变动点后缓存全废"] C22 --> C24["自行拼接 → 偏离训练格式
思考草稿被清空"] Q4 --> D1["Chat Template:JSON → token 流"] Q4 --> D2["R1 剥离历史思考
每轮从零重推"] Q4 --> D3["V4 反转:带 tools
必须原样回传"] D2 --> D4["思考 = 草稿纸
收走就丢长程计划"] D3 --> D4 Q5 --> E1["可编辑:改字段 ≈1% 算力
前提是有思维链"] Q5 --> E2["可组合:RoPE 重定位拼接
n² → 线性(研究阶段)"] Q5 --> E3["vLLM:PagedAttention 分页
+ 连续批处理(延伸阅读)"] Q6 --> F1["线索一:提示词怎么写、怎么防劫持 ✅
(Skills 渐进披露 ✅)"] F1 --> F11["结构化:XML 精确语义
+ Markdown 层次"] F1 --> F12["流程驱动优于规则堆砌
打乱结构 → 成功率掉 30%"] F1 --> F13["工具定义也开始渐进披露
schema 按需追加末尾"] F1 --> F14["防注入三招:来源标记
/ 结构化角色 / 输入清洗"] F14 --> F15["只是第一道防线
Skill 本身是新的注入面"] Q6 --> F1b["线索一尾:Skills 三层 ✅"] F1b --> F1b1["元数据:description
是路由条件不是功能介绍"] F1b --> F1b2["核心流程 SKILL.md
+ 子文件按需深入"] F1b --> F1b3["与模型厂商训练方式保持一致"] Q6 --> F2["线索二:Agent 状态栏 ✅"] F2 --> F21["上下文 = 只有一半的检索引擎
检索强,提炼缺"] F21 --> F25["归纳弱 ≠ 概率,是架构:
单次前向没有循环,统计外移"] F2 --> F22["借 user 槽位挂末尾
agent_status 标签包裹"] F2 --> F23["替换:缓存局部失效
vs 持久追加:只增不改"] F2 --> F24["纪律:代码维护状态
状态栏是有损投影"] Q6 --> F3["线索三:上下文压缩 ✅"] F3 --> F31["三个动机:成本 / 思考质量
/ 上下文焦虑=提前收尾"] F3 --> F32["腐化:装得下但找不到
vs 溢出:装不下"] F3 --> F33["两次调用之间压 tool results
接近阈值批量压"] F3 --> F34["四原则:价值不均匀 / 语义完整
/ 任务相关 / 压缩即理解"] F3 --> F35["隔离优于压缩:噪声根本
不进主上下文,前缀不动"] style CH2 fill:#fff3cd,stroke:#b8860b style A3 fill:#fff3cd,stroke:#b8860b,stroke-width:2px style C22 fill:#fff3cd,stroke:#b8860b,stroke-width:2px style D4 fill:#fff3cd,stroke:#b8860b,stroke-width:2px
上下文工程 ✅"] --> Q1["① 上下文长什么样?✅"] CH2 --> Q2["② 循环何时停?✅"] CH2 --> Q3["③ 缓存省在哪?✅"] CH2 --> Q4["④ 思考草稿怎么传?✅"] CH2 --> Q5["⑤ 缓存的边界在哪?✅"] CH2 --> Q6["⑥ 之后的三个发展方向 ⬜"] Q1 --> A1["四种角色:system / user
/ assistant / tool"] Q1 --> A2["无状态:每次送全量历史"] A2 --> A3["框架的核心工作
= 管理 messages 列表"] Q2 --> B1["回复不带 tool_calls
→ 退出循环"] Q3 --> C1["不缓存:累计 n²"] Q3 --> C2["KV Cache:单次推理内
线性增长"] C2 --> C21["Prompt Cache:跨请求
约 1/10 价格"] C2 --> C22["三铁律:前缀不动 / 只增不改 / 守格式"] C22 --> C23["改一个空格
变动点后缓存全废"] C22 --> C24["自行拼接 → 偏离训练格式
思考草稿被清空"] Q4 --> D1["Chat Template:JSON → token 流"] Q4 --> D2["R1 剥离历史思考
每轮从零重推"] Q4 --> D3["V4 反转:带 tools
必须原样回传"] D2 --> D4["思考 = 草稿纸
收走就丢长程计划"] D3 --> D4 Q5 --> E1["可编辑:改字段 ≈1% 算力
前提是有思维链"] Q5 --> E2["可组合:RoPE 重定位拼接
n² → 线性(研究阶段)"] Q5 --> E3["vLLM:PagedAttention 分页
+ 连续批处理(延伸阅读)"] Q6 --> F1["线索一:提示词怎么写、怎么防劫持 ✅
(Skills 渐进披露 ✅)"] F1 --> F11["结构化:XML 精确语义
+ Markdown 层次"] F1 --> F12["流程驱动优于规则堆砌
打乱结构 → 成功率掉 30%"] F1 --> F13["工具定义也开始渐进披露
schema 按需追加末尾"] F1 --> F14["防注入三招:来源标记
/ 结构化角色 / 输入清洗"] F14 --> F15["只是第一道防线
Skill 本身是新的注入面"] Q6 --> F1b["线索一尾:Skills 三层 ✅"] F1b --> F1b1["元数据:description
是路由条件不是功能介绍"] F1b --> F1b2["核心流程 SKILL.md
+ 子文件按需深入"] F1b --> F1b3["与模型厂商训练方式保持一致"] Q6 --> F2["线索二:Agent 状态栏 ✅"] F2 --> F21["上下文 = 只有一半的检索引擎
检索强,提炼缺"] F21 --> F25["归纳弱 ≠ 概率,是架构:
单次前向没有循环,统计外移"] F2 --> F22["借 user 槽位挂末尾
agent_status 标签包裹"] F2 --> F23["替换:缓存局部失效
vs 持久追加:只增不改"] F2 --> F24["纪律:代码维护状态
状态栏是有损投影"] Q6 --> F3["线索三:上下文压缩 ✅"] F3 --> F31["三个动机:成本 / 思考质量
/ 上下文焦虑=提前收尾"] F3 --> F32["腐化:装得下但找不到
vs 溢出:装不下"] F3 --> F33["两次调用之间压 tool results
接近阈值批量压"] F3 --> F34["四原则:价值不均匀 / 语义完整
/ 任务相关 / 压缩即理解"] F3 --> F35["隔离优于压缩:噪声根本
不进主上下文,前缀不动"] style CH2 fill:#fff3cd,stroke:#b8860b style A3 fill:#fff3cd,stroke:#b8860b,stroke-width:2px style C22 fill:#fff3cd,stroke:#b8860b,stroke-width:2px style D4 fill:#fff3cd,stroke:#b8860b,stroke-width:2px
章节清单与我的输出
构建篇(第 1–6 章)
| 章 | 主题 | 官方难度 | 我的理解与输出 |
|---|---|---|---|
| 1 | AI Agent 入门:三要素、ReAct 循环、Harness 工程 | 🟢 | ✅ 能力边界由 Harness 决定 · 模型即 Agent?循环只是搬到了服务端 · Harness 工程解决从 Demo 到生产的设计 |
| 2 | 上下文工程:KV Cache、提示工程、Skills、压缩(官方称全书最关键一章) | 🟢 | ✅ 先导:模型的学习与上下文的构成 · 前面不能动,后面尽管加 · KV Cache 的账,从 n² 到线性 · 对人类友好,就是对模型友好 · 上下文是台只有一半的检索引擎 · 装得下,但找不到了 |
| 3 | 用户记忆和知识库:记忆策略、RAG、知识图谱 | 🔵 | 📋 未开始 |
| 4 | 工具:MCP 协议、五类工具、主动工具发现 | 🔵 | 📋 未开始 |
| 5 | Coding Agent 与通用 Agent:代码是创造工具的元能力 | 🟣 | 📋 未开始 |
| 6 | 交互:语音、Computer Use、机器人(模态 × 时序) | 🟣 | 📋 未开始 |
提升篇(第 7–10 章)
| 章 | 主题 | 官方难度 | 我的理解与输出 |
|---|---|---|---|
| 7 | Agent 的评估:环境、指标、LLM-as-a-Judge | 🟡 | 📋 未开始 |
| 8 | 模型后训练:SFT/RL、奖励设计、蒸馏 | 🔴 | 📋 未开始 |
| 9 | 持续进化:从轨迹学习,四种更新载体 | 🟠 | 📋 未开始 |
| 10 | 多 Agent 协作:A2A、失败模式、Agent 社会 | 🟠 | 📋 未开始 |
每读完一章,把「📋 未开始」替换成文章链接。实验代码在书仓库按章安装(Python 3.11–3.13,支持 uv 复现环境)。
为什么值得精读
- 对路:我要做的就是生产级 agent,这本书的核心论点(差距在 Harness 不在模型)就是工程视角,和我的后端底子同构
- 能动手:每章配可复现实验,正好用 学习路径 里「自己造」的阶段做练手场
- 有对照:读的时候带着问题——我此前理解的 agent 开发和书里讲的差在哪?每篇笔记都会写这个对照