跳到主要内容

动手做 AI Agent — 全书拆解

30 秒导读: 你手里那个聊天机器人,本事只有一样——把一段文字往下续写。 它不会搜、不会算、碰不到你的任何一个文件。 可如果它写出「我要去搜一下」,而外面正好有一段代码替它去跑、跑完把结果塞回它面前呢? 它就能接着往下想。这一来一回转成一个圈,转到它自己说「够了」为止—— 这本书讲的就是这个圈,以及围着它长出来的七个实战程序。

这本书真正的价值,不在它教的那七个现成的框架与项目 (原书最后两章那五个项目里,今天有三个换了内核——是哪五个、哪三个,第 5 节列了表), 而在它把翻车的现场原样印了出来: 一次死循环轮询了 101 次才被手动掐掉; 一趟 8 步的任务里有 6 步在查同一个库存、6 次都拿回同一个数; 一个连网都不上的程序凭空报出「北京 18°C、湿度 70%」; 一朵花的价格被写成「50 朵玫瑰的价格」。这些现场今天依然值钱,而框架不值了。

本组拆解的做法: 按这本书自己的主线切成十三章,把每个机制讲透并配一条走查; 书里过时的地方,统一结算到第 13 章;书里空着的地方,去我们自己的代码书架上找答案, 每一处都标明「这不是书里的」。

1. 先交代清楚:这是谁在什么时候写的

这本书的全名是《大模型应用开发:动手做 AI Agent》。书名里的大模型, 指的是读进一段文字、再一个字一个字往下续写的那台机器—— 今天所有聊天机器人背后都是它。

下文一律把它简称为模型——就是上面这台机器,不再重复全称。

作者黄佳
封笔时间2024 年初春(前言落款)
写法师生对话体:一个叫咖哥的老师,一个叫小雪的学生,全书用问答推进
规模十章加一个附录,约 25 万字符
实战七个动手案例,一条虚构的业务线贯穿始终(一家叫「花语秘境」的鲜花电商)

三件事必须先说,否则会误读这本书。

第一,它是一本实操书,不是一本原理书。 全书七个案例,前后用到七个现成的框架与项目 (第 5 节列了名字),每一个都配了可以照敲的代码和真实运行输出。 代价是:凡是「为什么」的地方它都很浅——比如它讲那台机器怎么记住东西, 一整节四段话就写完了(第 08 章)。

第二,它的时间点决定了它的一半内容会过时。 2024 年初春这个位置意味着: 它写在那个引爆一切的聊天产品出现之后一年零三个月, 而它教的东西正处在变化最剧烈的那一段。 第 13 章逐项结算了哪些还成立、哪些照敲会出事。

第三,也是最要紧的:它没有粉饰。 上面导读里那四个翻车现场, 全部是作者自己跑出来、原样印在书里的。 但他也几乎没有解读它们——12.0 那个错数、18°C 那个编造,他一个字的评论都没有。 把现场留下、把解读留给读者,这既是这本书的优点,也是它最大的遗憾。

2. 全书一条主线(读完这一节,你就懂了这本书)

下面这条链从头贯到尾,每一步都是被上一步逼出来的。 只读这一节、不看任何拆解章,你也能把这本书讲给别人听。 细节全部留给对应的章节,这里只讲「发生了什么、为什么只能这样」。

① 它只会把一段文字往下续写

书一开头讲了个真事:作者跟一个聊天机器人聊《浮生六记》,对方讲得头头是道, 而作者自己在旁边注了一句:它被我带歪了。

它没有查过任何东西,也没有说「我不确定」。 它答得越顺,你越查不出它是从哪儿知道的。 (为什么它连「我记不牢」都判断不出来,第 08 章讲。)

② 想让它动手,外面必须有人替它跑

它的输出只有文字。「帮我查一下今天玫瑰进价多少」这句话,它自己完不成。

它能做到的最强的一件事,是写下一句「我要用搜索,搜『玫瑰进货价格』」,然后停住。 真正去跑的是外面那段普通代码。模型写下要用哪个东西、外面照着去跑, 这整件事有个固定的名字叫工具调用

而「模型加外面一圈代码」的这种程序,通用的名字叫智能体; 书里通篇用英文写法 Agent,而在代码和文件名里它通常写成小写的 agent——都是同一个词这个名字你出门一定会撞见,所以要记住。

③ 跑完把结果塞回去,再问一次

外面跑完拿到一段真实结果,把它接在原来那段文字后面,重新交给模型。 它读到的东西变了,于是它可以接着想下一步。

这一来一回就是一轮。 一趟真实的鲜花定价任务是这么走的: 问模型 → 它说要搜 → 真的去搜 → 塞回去问 → 它说要算 25 × 1.05 → 真的去算 → 塞回去问 → 它说完了。三次问模型,两次跑工具。(整趟走查在第 01 章。)

④ 出口只有一个:哪一轮它不点工具,就停

没有人规定这个圈转几次。 代码里的判断只有一条: 这一步的产出是不是「结束」那个类型。 不看答案对不对,不看转了几圈,不看花了多少钱。

这一条是「自主」这个词在整本书里唯一的落点,也是后面所有麻烦的总根子: 你事先不知道一次任务要花多少钱、要跑多久。(为什么这条判据只能这么写,第 05 章讲。)

⑤ 让它学会转圈,只需要一段十行的文字

这里是全书最反直觉的一处: 让模型照上面那个圈走,不用回炉重造它,也不用改它内部任何东西。 只要在每次问它的时候,把一段十行的文字摆在前面,规定好 「思考写这一行、要用什么写这一行、结果写这一行」。

这种「你交给模型的那段文字」叫提示词书里那十行原文一字不落地印着, 第 03 章把它逐行拆开——包括一个书里没讲、但不讲就说不通的机制: 模型写到「观察:」这四个字就会被外面掐断,所以它没机会把结果也编出来。

⑥ 工具怎么交给它:一份说明书,不是代码

你不能把函数直接给它。你要写一份说明书:这个东西叫什么、干什么用、要填哪几个格子。 它读完说明书,回给你的是一张调用单(要用哪个、每格填什么),而不是结果

说明书里那句「干什么用」是它挑不挑你的唯一依据。 写歪了它就挑错; 两句写得太像,它就在两个之间犹豫。(第 04 章;那两句说明差一个字母的真实案例在第 10 章。)

⑦ 它什么都不记得,所谓记忆就是你每轮重发的那一段

模型那边不存任何东西。你第二次问它,它对第一次发生过什么一无所知—— 除非你把第一次的问答原样抄一遍再发过去。

书里管这件事叫记忆,而且数出了四种;但天天在用的只有这一种:重发。 这就带出一个只加不减的式子: 每一轮要发的 = 上一轮发的 + 上一轮它说的 + 新东西。 对话越长越贵越慢,转的圈越多越贵越慢。(四种记忆各是什么、这笔账怎么算,第 08 章。)

⑧ 转久了就撑不住,于是换个分工:先列清单,再一条条执行

上一步那个只加不减的式子,直接把「走一步看一步」逼到了墙角: 提示词越写越长,模型开始不堪重负——这句话是书自己说的。

于是有了第二种转法:先让它把步骤全列出来,再一条条执行。 书里那份 8 条的计划读起来相当漂亮,可跑起来 8 步里有 6 步都在查同一个库存、 6 次都拿回同一个数——而这一趟真正需要查库存的只有 1 次。

病根不在模型笨,在结构:计划是在信息最少的时刻做出来的,而且列完就改不动了。 (整趟轨迹与那个自相矛盾的第 5、6、7 条,第 09 章。)

⑨ 它没见过的资料,只能现搜现贴

有一类东西它注定答不上来:你公司的会议记录、上个月才发的财报。 这不是它笨,是它当初被喂资料的时候,这些东西根本不存在于它能看到的任何地方。

书选的办法是最便宜的那条:先去你自己的资料里搜一遍,把搜到的几段贴进问题里再问。 这条路有个专门的名字叫检索增强生成它的好处是数据永远新、而且能把原文摊给用户看; 它最大的坑是——搜错了不报错,那时它会像什么都没搜到一样,给你编一个。 (五行代码怎么建起来,第 10 章。)

⑩ 再往前一步:任务表也交给它,或者让几个程序互相说话

这本书最后两站走得最远。

一站是让它自己生成任务表:跑了六个来回之后,任务编号一路涨到 18, 中间它凭空报出一个气温,而它连网都不上; 更妙的是排序那一步的提示词明写着「不要删任何任务」,它照样删了七条。 (第 11 章;这一条同时打掉两个念头。)

另一站是让两个程序互相下指令、互相回答。它能跑起来,靠的是三样硬拦: 永远不要角色互换、一个收尾暗号、外加一个写在代码里的「最多 30 个来回」。 只有最后那一样是保证。(第 12 章。)

⑪ 最后:结账

书里那些「实验中」「测试阶段」的字样,今天大多有了结果; 参考文献那一页的论文编号被系统性排坏了,整页不可用。 而去掉过时的部分之后还剩四条,每一条都不依赖任何一家的具体做法。(第 13 章。)

3. 章节地图

先说一条读法上的约定,不然你会被两套章号绕晕。 本组拆解十三章,章号一律写成两位数(第 01 章 … 第 13 章); 原书十章加一个附录,章号是一位数,而且每次都带上「原书」两个字。

两套章号对不上号是正常的——本拆解按自己的主线重新切过。 比如原书第 4 章那套「把每轮要重发的那段文字交给对方托管」的做法,在本拆解里是第 06 章。

推荐顺序就是编号顺序。 前五章是地基,一章压一章,跳读会断; 第 06 章之后可以按需要挑着读。

讲什么什么时候来读
01那一圈五步;上一代四类老办法各卡在哪必读第一章,后面十二章都是它的某一格
02问一次模型:发过去什么、收回什么、花多少钱必读。第 04、05、06 章的零件都在这儿第一次露面
03那十行文字原样长什么样,以及那条停车线必读。想自己写一个转圈的程序,从这章抄
04说明书怎么写、调用单长什么样、编号为什么要带回去必读。今天任何一家的做法都是它的变体
05打开框架源码,逐行走完那个循环体必读。全书唯一真的拆开代码的一章
06把「每轮要重发的那段文字」交给对方托管:好处、代价、和那个 101 次的坑想用托管方案时读;不用可跳,但第 13 章会回来引它
07五步接力做一份文件:产内容和查东西差在哪做「生成类」任务时读
08四种「记忆」各是什么,以及那笔只加不减的账觉得「怎么越跑越贵」时读
09先列清单再执行:漂亮的计划怎么跑砸打算做多步长任务之前读,能省很多事
10让它去查你自己的资料手上有一堆内部文档时读
11让它自己给自己派活:一张任务表的变形记当反面教材读,它是全书翻车最狠的一章
12让几个程序互相说话:靠什么撑住不跑飞想做多角色协作时读
13全书结账:哪几行不能照敲,哪几条仍然成立读完任意一章都可以先来翻一下这一章

4. 覆盖什么 / 不覆盖什么

这本书覆盖的(读完能带走的):

那一圈的完整形状:问模型 → 它派活 → 外面去跑 → 结果塞回去 → 再问,直到它不派活。 这一条今天在每一个框架里都成立。

一段十行的文字怎么让模型开始转圈,以及那段文字的原文。

工具怎么交给模型:一份说明书三样东西(名字、干什么用、要填哪几个格子); 一次可以点好几个;每个带一个编号,回填时必须原样带回去。

框架内部那个循环体到底长什么样——这是全书最值钱的一章, 因为它是唯一一处真的把框架的源代码打开、逐行走一遍的。

碰到错不抛,把错变成下一份输入:点了不存在的东西、写出来的东西读不出来, 两种都被兜住,而且只有后一种留了开关。

四种不同的「记住」,以及为什么其中只有两种能说出「这句话是从哪儿来的」。

三种转法的真实轨迹:走一步看一步、先列清单再执行、自己给自己派活; 三趟都有完整的原始输出,包括翻车的部分。

这本书不覆盖的(别指望在这里找到):

护栏。 步数上限、连错熔断、打转检测、必填项校验、计划中途可改——五样一样都没有。 (书里其实一直有一个默认 15 步的上限,但它从头到尾没提过;见第 05 章。)

长了怎么办。 那笔只加不减的账,书碰到三次、承认一次、零次给解法。

工具自己跑挂了怎么办。 书在介绍那个循环体时列了这种情况,后面十页再没回来处理。

能不能同时跑好几个工具。 书里是一个接一个跑的,它把「能同时跑」列成了对厂商的指望。

怎么判断它干得好不好。 书讲了那个配套平台怎么装、怎么点开看轨迹, 但「按什么名目记」「搜回来的几段对不对」「换一家平台还认不认」三样都没有。

从零手写外层循环。 全书都在用现成的框架,没有一处从头把那个圈写出来。

那台机器内部怎么工作。 它是怎么被喂出来的、内部那一大堆数怎么调,书一律点到为止——这不是它的题目。

书里有、而本组拆解主动略掉的(说清楚,免得你以为漏了):

时代背景与商业影响这三节。 原书第 1 章开头拿一本讲人类未来的书(《Life 3.0》) 起了个头,后面又用两节讲这类程序能给各行各业提多少效、会带出什么新生意 (原书 1.1、1.6、1.7)。

本组拆解这三节一个字都不覆盖——它们不在「这个圈怎么转」这条主线上, 而且是全书最快过时的部分。要读这三节,请翻原书。

5. 我们的判断

先把一个反复出现的数字交代清楚,否则下面第一条判断你没法核。 全书前后教到七个现成的东西:LangChain、LlamaIndex 这两个开发库, 加上原书第 9、10 两章那五个项目。后面这五个的源码全都公开摆在网上, 谁都能下载来读、改完拿去用——这就叫开源

这五个的名字里嵌着两串大写字母,先各给一句,免得你以为是错字。 GPT 指的是今天这一族会往下续写文字的模型,你用的聊天机器人多半就是它的后代。

AGI 的意思是「什么都会的通用人工智能」——当年还没做出来、 被人拿去给项目起名的一个愿望

「换了内核」这个说法只针对那五个,一个一个摆在这儿:

原书第 9、10 两章那五个两年之后它变成了什么算不算换了内核
BabyAGI书里那个自己派活的循环已经归档;同名项目改成了另一件事(第 11 章第 9 节)
AutoGPT从一个自己想事情的循环,变成拖积木连线的托管平台(第 11 章第 9 节)
MetaGPT默认关掉了那套写死的流程,换上一个临场派活的角色(第 12 章第 9 节)
AutoGen进了维护模式——东西没变,是不再往前走了不算(第 12 章第 9 节)
CAMEL在原来那套上加了一层,原来那套还在不算(第 12 章第 9 节)

所以「五个里有三个换了内核」数的是最后一列,而且只数第 9、10 两章那五个; LangChain 和 LlamaIndex 不在这个数里。 三处依据都写在第 11、12 章对应那一节的补充块里, 每条带 commit,可以直接回核。

判断(我们的,不是书里的):这本书真正的价值在它印出来的原始轨迹,不在它教的那些东西。 框架会换、各家的做法会改——上面那五个开源项目里,今天已经有三个换了内核; 但「一个没有护栏的自主程序会怎么跑飞」这件事不会变, 而这是我们见过的中文材料里把这类现场记录得最完整的一本。 如果错,会错在: 如果读者要的只是「照着做出一个能跑的东西」, 那么框架过时对他来说就是致命的,这条判断对他不成立。

判断(我们的,不是书里的):它最大的遗憾是把现场印出来了却几乎没有解读。 一朵花的价格被写成 50 朵的价格、一个不上网的程序报出气温、 排序那一步违反了自己提示词里的硬要求——这三处作者一个字的评论都没有。 本组拆解补上了这些解读,并且每一处都标明了「这是我们的判断」。 如果错,会错在: 如果作者在配套代码仓库或后续文章里解读过, 那么「没有解读」这个说法就只适用于书本身。

判断(我们的,不是书里的):写在提示词里的硬要求,是建议,不是规则。 书里有两处独立证据:排序那一步明写「不要删任何任务」而它删了七条(第 11 章); 而那段让模型转圈的文字里写着「写到观察就停」,框架并不敢信它, 而是在更底下那一层加了一条停止词硬掐(第 03 章)。 能用机制拦住的地方就别指望提示词。 如果错,会错在: 如果某天模型对格式约束的遵守率高到可以当规则用,这条就该退休。

判断(我们的,不是书里的):参考文献那一页整页不可用,一个数字都别抄。 三类错法(前导零被吃、前后两截颠倒、两者叠加)出现在同一页的十几条上, 这说明它们是被同一道自动处理弄坏的。 本组拆解凡要落论文编号的地方 一律不抄书里的数字:能在我们的代码书架上核到的照书架写,核不到的照实写「没核到」。 如果错,会错在: 如果这是我们拿到的这一版转码文本出的问题、而纸书上是对的, 这条就冤枉了原书;不过颠倒那一类不是转码能造成的。

6. 许诺兑现表

正文里每一处往后指的话都记在这里,全书写完逐行核过—— 核两件事:那一节真的讲了吗?讲的是不是许诺的那件事,而不是同名的另一件事。

脚注里的往后指也一并记进来了。 头一轮只核了正文,结果放跑了两处 (见本表末尾那份改动清单),所以这一轮把范围扩到脚注,表尾单开一段列出来。

左栏是许诺的意思,不是逐字原文: 本页一律用大白话, 而章节里用的是那些行话名字,照抄过来会让这一页凭空多出一堆没解释的词。

主走查的输入分配也逐条核过了。 第 01、03、05 三章走同一个输入(鲜花定价, 同一个问题、三种转法);第 02、08 两章走那次把用量数字给全了的四条消息对话; 第 04 章走三城库存;第 06、13 两章走「进价 80 元加价 20% → 96」那段代码。

其余各章:第 07 章走五步接力;第 09 章走「查查玫瑰的库存然后给出出货方案」; 第 10 章走花语秘境文档那两问;第 11 章走六个来回的天气任务;第 12 章走夏季玫瑰之夜。

换了输入的第 02、04 两章,开头各交代了一句为什么换。

许诺在哪应兑现在哪核过了
index.md §2 ③ 「整趟走查在第 01 章」01 §3「主走查:一个真实的问题,一圈一圈走完」
index.md §2 ①「为什么它连『我记不牢』都判断不出来,第 08 章讲」08 §2「第一种:压进一大堆数里,查不出出处」
index.md §2 ④「为什么这条判据只能这么写,第 05 章讲」05 §6「退出判据只有一条」
index.md §2 ⑤「第 03 章把它逐行拆开」03 §1–§5(那十行原文、四行格式、停车线、记事本)
index.md §2 ⑥「第 04 章;那两句说明差一个字母的真实案例在第 10 章」04 §2、§3;10 §6(两句只差一个字母的工具说明)
index.md §2 ⑦「四种记忆各是什么、这笔账怎么算,第 08 章」08 §1(四种)、08 §4(那笔账)
index.md §2 ⑧「整趟轨迹与那个自相矛盾的第 5、6、7 条,第 09 章」09 §4(整趟)、09 §5(那三行自相矛盾)
index.md §2 ⑨「五行代码怎么建起来,第 10 章」10 §4「主走查:五行代码,把一份本地文档变成能问的东西」
index.md §2 ⑩「第 11 章;这一条同时打掉两个念头」11 §6(提示词写着「不要删」,它照样删了)
index.md §2 ⑩「只有最后那一样是保证。第 12 章」12 §4「主走查:那三样硬拦」(三层从软到硬那张图)
index.md §2 ⑪「而去掉过时的部分之后还剩四条…第 13 章」13 §10「去掉过时的部分,这本书还剩什么」
index.md §4「书里其实一直有一个默认 15 步的上限…见第 05 章」05 §9 第二件事(那条 ② 类脚注)
01 §3「第 03 章加的是第①步交给模型的那段文字长什么样」03 §3「主走查:模型每一轮读到的那段文字」
01 §3「第 04 章加的是第①步『派活』那张单子的格式」04 §3「交给模型的不是代码,是一份说明书」
01 §3「第 05 章加的是把这五步串起来的那个循环体到底写在哪」05 §2「它就是一条链,循环体在 _call 里」
01 §3「这个数不是模型算的——第 05 章会讲清楚它是怎么被算出来的」05 §7「计算器工具内部,还是在调模型」
01 §4「它是后面第 09 章那些麻烦的总根子」09 §7「书里的空白:一条护栏都没有」
01 §6「第 08 章整章讲这件事」(记忆)08 全章
01 §9「它在第 07 章会以『让画图模型出一张首页图』的形式出现一次」07 §6「第四步:一句公司简介,换一张首页配图」
02 §3「第 06 章会算这笔账」(那段文字的长度上限)06 §1(把「每轮要重发的那段」交给对方托管)
02 §4「那是第 03 章第 8 节讲的」(步数)03 §8「拧到 0 也治不了的那一层」
02 §4「那是第 07 章第 9 节讲的」(逐级放大)07 §9「五步接力,偏差是逐级放大的」
02 §5「第 04 章讲工具接入时,这条会再出现一次」04 §8 那一节的第四条注意
02 §6 表「第 04 章第 8 节」(被截断)04 §8 的第三条注意
02 §8「第 13 章讲『怎么看它到底干了什么』时会用到」13 §7「写完之后怎么评、怎么看」
02 §9「第 05 章第 9 节和第 13 章第 3 节会具体到行」05 §9;13 §3
03 篇首「第 05 章会讲这段文字是被谁、在什么时候拼出来的」05 §3「一步 = 问一次模型 + 跑一次工具」第 1 条
03 §2 末「下一节整节讲这件事」(观察归谁写)03 §4「停车线」(章内)
03 §5「第 08 章会把这条和第 02 章那个消息数组并排放」08 §3 那张两副面孔的表
03 §5「它是第 09 章那一整章的起因」09 §1「一圈圈转下去,提示词会越写越长」
03 §7「原因见第 13 章第 6 节」(论文编号)13 §6「附录那张论文表:编号被系统性排错了」
03 §8「第 07 章第 9 节还有第三层」07 §9 那张三层不确定的表
03 §9「这一种第 04 章整章讲」「这一种第 09 章整章讲」04 全章;09 全章
04 §2「这一条在第 10 章会真的出事」10 §6 第 2 步(两句只差一个字母的说明)
04 §3「往后指一句(第 13 章第 4 节兑现)」13 §4「那份工具说明书,后来被做成了跨厂商的共同规矩」
04 §4 第 4 步「下一节整节讲这一步」04 §5「回填:必须带上编号和『工具』这个角色」(章内)
04 §8 判断块「第 13 章第 4 节会讲这条路后来走到了哪一步」13 §4 末段(必须返回、应当校验)
05 §6「第 8、9 两节和第 09 章讲的都是这件事的后果」05 §8、§9(章内);09 §7
05 §8 末「下一节那个默认 15」05 §9 第二件事(章内)
06 篇首「第 13 章第 9 节会拿这一章的代码去对照今天」13 §9「主走查:拿原书第 4 章那段代码…」
06 §5 末「因为下一节那个坑」06 §6「另起一处:漏掉一步,轮询了 101 次还没停」(章内)
06 §6 末「第二,跳出之后要真的把结果交回去。下一节讲」06 §7「交回结果之后,它回到排队,再跑一段」(章内)
07 §3「『它到底干了什么』这件事有多难看清,第 13 章第 7 节专门讲」13 §7(书给了入口、没给的三样)
07 §5 末「第 9 节讲为什么」07 §9(章内)
08 §3 末「下一节把这笔账算清楚」08 §4「主走查:四条消息…」(章内)
08 §6「第 10 章第 2 节会解释为什么」(书为什么不走重训那条路)10 §2 那张四条路的表
08 §7「第 10 章第 2 节会把这条列成…三大好处之一」10 §2「第三,结果更可信」
08 §9 末「第 10 章讲的那套做法,和这里说的是同一套机制」10 §5(把每段文字变成一串数、按意思找)
09 §3 末「『实验』这两个字在第 13 章第 3 节会变成一个很具体的后果」13 §3 第一处(实验模块已不在主仓)
10 §4 第 2 步「下一节整节讲它到底干了什么」10 §5(章内)
11 §3 第二个来回「这两个数是从哪来的?下一节整节讲它」11 §4(那个气温是编的,章内)
11 §3 第五个来回「第 6 节整节讲这件事为什么重要」11 §6(章内)
12 §6 末「它也解释了第 8 节那家『软件公司』为什么能…」12 §8「另一支:一行需求,一家软件公司」(章内)
03 §10 末「和第 05 章第 5 节『把报错当成下一份输入』是同一个套路」05 §5「执行器碰到错不抛,把错变成下一份输入」
index.md §5 那张表与 13 §2「三个换了内核,依据在第 11、12 章」11 §9「这两个项目今天是什么」;12 §9「这三个框架今天的状态」

脚注里的往后指(这一轮补核的,共八处):

许诺在哪应兑现在哪核过了
02 的脚注 8「这句原话在第 06 章会再引一次」06 §1(「无法有效控制运行的成本」那一句)
02 的脚注 13「第 04 章第 8 节会把它和另外三条注意一起完整给出」04 §8「那个『只准它按固定格式输出』的开关,四条注意」
03 的脚注 1「那段鲜花定价脚本更短,见第 05 章第 1 节」05 §1「那段脚本里,哪几行是循环」
03 的脚注 21「第 05 章第 5 节讲这种错是怎么被兜住的」05 §5(无效工具那一分支)
05 的脚注 29「第 09 章第 N 节会说明这个空白的后果」09 §7「书里的空白:一条护栏都没有」原先写的是第 8 节,已改
06 的脚注 28「和第 04 章第 5 节那条要求一字之差」04 §5「回填:必须带上编号和『工具』这个角色」
09 的脚注 2 · 10 的脚注 5 · 12 的脚注 2「论文编号的理由见第 13 章第 6 节」13 §6「附录那张论文表:编号被系统性排错了」
09 的脚注 6「第 12 章整章讲它」(多个 agent)12 全章

逐行核过之后改掉的五处(前三处是第一轮,后两处是这一轮把脚注也纳进来之后):

  1. 第 02 章原先写「那是第 03 章第 7 节讲的」,而第 03 章那件事在第 8 节;已改;
  2. 第 01 章的走查原先承诺「同一个输入贯穿到第 05 章」,实际只有第 01、03、05 三章复用它; 已改成「第 01、03、05 三章走同一个输入」,并在第 02、04 两章开头各交代了一句为什么换输入;
  3. 第 13 章原先准备把「书完全没讲怎么评怎么看」写成结论,而书的第 3.2.4 节讲了整整一节; 已改成「书给了一个入口,但只教了怎么点开」,并把它没给的三样单独列出;
  4. 第 05 章那条脚注原先写「第 09 章第 8 节会说明这个空白的后果」, 而第 09 章讲护栏空白的是第 7 节(第 8 节讲的是今天的待办清单现状);已改成第 7 节;
  5. 第 05 章另一条脚注原先写「这一行提示语在后面第 09 章的输出里还会反复出现」, 而本拆解第 09 章并没有把那一行印出来;已改成照实指原书 7.3 那一趟的输出 (那一行在原书里印了 13 次),并补了可回核的地址。

拆解写于 2026-08-26,依据主人自购的电子版(前言落款 2024 年初春)。 原始书籍文件不入库,本组文档是我们自己的重写。

每条书内引用都可用 node scripts/book-verify.mjs dong-shou-zuo-ai-agent 回核。 凡标「补充(不在书里)」的说法,来源写在该处脚注里: 带 shelf= 的来自我们自己的三个代码书架(每条都带 commit,可直接回核),其余标明是通用知识。