跳到主要内容

用十行字把循环装进模型脑子里 — ReAct 那段提示词

这一章讲三件事: 那段让模型开始转圈的文字原样长什么样; 「观察」这一格为什么必须由外面来填;以及温度旋钮拧到 0 之后还剩下哪一层不确定。

它在全书链条里的位置: 第 01 章那一圈的第①③⑤步是「问模型」。 这一章讲的就是:那三步里,你到底往模型面前摆了一段什么文字。 第 05 章会讲这段文字是被谁、在什么时候拼出来的。

1. 让它开始转圈,只需要一段十行的文字

这一节的结论会让你意外:让模型学会转圈,不需要训练,不需要改模型,只需要一段文字。

书里那个会自己上网搜论文、再总结的程序,作者说用不到 50 行代码就写完了1。 而这 50 行里,真正让它「学会转圈」的只有一段十行的英文文字。

先把书里印出来的那段原文摆出来,后面几节逐行拆2:

Answer the following questions as best you can.
You have access to the following tools:

{tools}

Use the following format:

Question: the input question you must answer
Thought: you should always think about what to do
Action: the action to take, should be one of [{tool_names}]
Action Input: the input to the action
Observation: the result of the action
... (this Thought/Action/Action Input/Observation can repeat N times)
Thought: I now know the final answer
Final Answer: the final answer to the original input question

Begin!

Question: {input}
Thought:{agent_scratchpad}

图说:大括号里的四样是占位符,运行时会被真东西替换掉。
其余每一个字,都是原样发给模型的。

书还给了一份中文对照,方便理解3。这段文字有个专门的称呼:提示—— 指你输入给模型的信息,书里说得很宽:可以是语言、代码、图像、语音, 甚至是人读不懂的编码,只要模型能理解就行4

围绕「怎么写这段文字才好使」发展出来的一整套做法,叫提示工程—— 指设计并反复打磨输入,以引导模型产出你要的那种输出的一整套做法5

为什么说这十行是一份「约定」? 因为它同时规定了两件事: 模型该按什么格式往下写,以及外面那段程序该按什么格式去读。 双方都照这个格式办,一圈才转得起来。

2. 四行格式:思考 / 行动 / 行动输入 / 观察

这一节讲那四行到底各管什么。它们是全书出现频率最高的四个词。

书把这一圈概括成三步6:

这一步书里的说法谁来写这一行
思考(Thought)对下一个行动做出判断,评估当前情况模型
行动(Action)基于思考的结果决定采取什么行动模型
观察(Observation)执行行动后观察并收集反馈外面的程序

上面那段文字里其实是四行,因为「行动」被拆成了两行: 一行写要点哪个工具(Action),一行写要传给它什么(Action Input)。

最要紧的是第三行归谁写。 请对照第 01 章那趟走查: 第②步「跑搜索」和第④步「跑计算」是外面的程序干的,模型根本不在场。 所以 Observation: 后面那段内容,只能由外面填进去,模型无权自己写。 下一节整节讲这件事。

书里还有一句很朴素的对照,值得抄下来。作者问学生:每天早上你怎么给鲜花定价? 学生答:先看看这事该怎么办(思考),再上网查今天的成本价(行动), 根据查到的价格高低(观察)决定加多少(思考),最后得出售价(行动)。 作者随后点明:这里的观察和思考被统称为「推理」,而推理指导人的「行动」7

3. 主走查:模型每一轮读到的那段文字

这一节是本章的主走查。用的还是第 01 章那个鲜花定价问题—— 同一个问题、三种转法,这一次只看「模型面前摆着什么」。

输入(与第 01、05 章同一个): 「目前市场上玫瑰花的一般进货价格是多少?如果我在此基础上加价 5%,应该如何定价?」 手上两件工具: Search(网络搜索)、Calculator(算式计算)。

说明: 下面每一轮里模型写下的那几行、以及搜索拿回来的那段话, 全部是原书第 6 章调试记录中的真实文本; 而「把它们按模板拼成一整段」这个动作书里没有原样印出来, 是我们照第 1 节那段模板重建的——第 05 章会讲清楚是谁在什么时候拼的。

第 1 轮 · 模型面前摆着什么。 模板填完之后,最后两行是这样:

Question: 目前市场上玫瑰花的一般进货价格是多少?
如果我在此基础上加价5%,应该如何定价?
Thought: ← 记事本这一格是空的,模型从这里开始往下写

第 1 轮 · 模型写下了什么。 它接着 Thought: 往下续写,写出三行8:

我需要先找到目前市场上玫瑰花的一般进货价格,然后在这个价格基础上加价5%来计算最终的定价。

Action: Search
Action Input: 目前市场上玫瑰花的进货价格

然后它停住了。 停在这里不是因为它写完了,是因为外面给了它一条停车线——下一节讲。

第 2 轮 · 模型面前摆着什么。 外面跑完搜索,把十条摘要接在后面,最后几行变成:

Question: 目前市场上玫瑰花的一般进货价格是多少?…
Thought: 我需要先找到目前市场上玫瑰花的一般进货价格…
Action: Search
Action Input: 目前市场上玫瑰花的进货价格
Observation: ['批发市场价格上涨…', … , '今年基本上进货价都在25~30元', …]
Thought: ← 又是一个空格子,模型从这里继续往下写

注意这一段的形状:第 1 轮模型写的三行,原样留在了这一轮的输入里。 它不是「模型记得自己刚才说过什么」,而是这几行被重新抄进了发给它的文字里。

第 2 轮 · 模型写下了什么。 它接着往下写9:

从观察结果中可以看到,玫瑰花的进货价格有很大的波动,其中提到的价格有:
单枝20元以上,卡布奇诺玫瑰去年单枝价格约在15~20元,今年基本上进货价都在25~30元。
为了计算加价5%后的价格,我们可以取一个中间值,例如25元作为计算基础。

Action: Calculator
Action Input: 25 * 1.05

第 3 轮。 外面跑完计算,把 Observation: Answer: 26.25 接上去再问一次。 这一次模型写的是 I now know the final answer. 后面跟最终答案10第 1 节那段模板的倒数第三、第二行,就是专门给这一刻准备的。

一段文字的三次形态:

第1轮 [模板] + 问题 + 空记事本
第2轮 [模板] + 问题 + (第1轮的三行 + 搜索结果) + 空记事本
第3轮 [模板] + 问题 + (第1轮三行 + 搜索结果 + 第2轮三行 + 26.25) + 空记事本

图说:模板和问题永远不变,中间那一段一轮比一轮长。
第 02 章说的「对话越长越贵越慢」,在这里变成了「转的圈越多越贵越慢」。

4. 停车线:「观察:」那四个字必须由外面来写

这一节讲一个书里没写、但不讲就说不通的机制。

回看第 3 轮:模型为什么在写完 Action Input: 25 * 1.05 之后就停了? 按它的本性,它完全可以顺手把 Observation: 26.25 也一起编出来—— 那正是第 01 章第 1 节说的那种编法。

答案是外面给它设了一条停车线:一旦它写出「Observation:」这个词,就立刻掐断。 书里没有讲这一层,但这条线确实存在,而且默认就是开的。

补充(不在书里,依据我们的前沿框架书架): 那个创建函数有一个默认为真的开关,书里从没提过; 它一打开就给模型加上一个停止词,而这个停止词正是 "Observation:", 官方注释直说这么做是为了避免模型自己编出观察结果。 依据: shelf=ai-frontier-reference/langchain@src:libs/langchain/langchain_classic/agents/react/agent.py:50 @2019bf5ebe50324c548f67c2666a804343f9b772 事实=参数 stop_sequence 默认 True,为真时加停止词 "Observation:"; 代码里实际写入的是 ["\nObservation"](同文件 :138)。11

为什么这一条值得单独一节? 因为它把「格式约定」变成了「硬约束」。 光靠那十行文字劝模型「你写到观察就停」,它有时候会不听; 而停止词是接口层面的机制,它不听也没用——话到那儿就被截了。

模型正在续写 ……
"Action Input: 25 * 1.05\nObservation: 2 ……"

写到这四个字,立刻掐断

图说:掐断之后,外面的程序去真的算一遍,再把真的结果接在这四个字后面。
所以观察这一行的内容永远来自真实世界,不来自模型。

5. 记事本:上一轮的全部,原样贴回去

这一节讲那段模板最后一个占位符,它是这一圈能转起来的关键。

模板最后一行是 Thought:{agent_scratchpad}。这个占位符的名字直译是「Agent 的草稿纸」, 书给的中文对照写作Agent 记事本12

它装的东西,就是第 3 节那张图中间那一段:这一趟已经写过的思考、点过的工具、拿回的观察, 从头到尾按原样排好。第一轮它是空的,之后每轮往上加一截。

为什么这个设计值得注意? 因为它把「记忆」这件事做成了纯粹的字符串拼接。 没有数据库,没有状态对象,上一轮发生过什么,就是这段文字里多出来的那几行。 第 08 章会把这条和第 02 章那个消息数组并排放。

这也直接解释了一个后果:这一段只增不减。 转得越多,发给模型的文字越长。 书没有讨论这个问题,但它是第 09 章那一整章的起因13

6. 这段文字是从社区拉下来的,你也可以自己写

这一节告诉你:那十行不是框架内置的,是一份可替换的资产。

书里第一次用它的时候,是从一个社区仓库里按名字拉下来的:hwchase17/react14。 这个名字前半截是作者的用户名,后半截是模板名——换句话说,这是别人写的一份模板

到原书第 6 章,作者干脆自己写了一份。两份的骨架一模一样,但他加了两处私货15:

第一处,开头那句从「尽你所能回答以下问题」改成**「尽你所能用中文回答以下问题」**。 作者说不这么改的话,即使你用中文问,它有时也会坚持给你「秀」英文16

第二处,他明说你还可以在这里加别的要求,比如指定最终答案的格式、 或者要求答案长度在 100 字以内。

结论:这十行是可以改的,而且很多时候就该改。 它不是框架的一部分,它是你程序里的一份配置。

7. 它出自哪篇论文

这一节把来历补上,因为你在别处会不断撞见这个名字。

这套转法叫 ReAct,是「推理(Reasoning)」和「行动(Acting)」两个词拼起来的。 书特意提醒它不是那个同名的前端开发框架,并说它出自 2023 年一场学术会议上的论文17

这里有两个年份,别以为哪个写错了: 这篇论文2022 年 10 月先挂到了预印本站 (论文可以先公开挂出来,再慢慢走会议评审),2023 年才在那场会议上正式发表。 所以下面那个编号是 22 开头,而书里说的是 2023 年——两个都对,说的是同一篇的两个时刻18

论文编号我们不照书抄。 原因见第 13 章第 6 节: 这本书参考文献里的编号被系统性地排错了,连这一篇也没能幸免。

补充(不在书里,依据我们的前沿框架书架): 这篇论文的真实编号是 arXiv:2210.03629。 依据: shelf=ai-frontier-reference/langchain@src:libs/langchain/langchain_classic/agents/react/agent.py:28 @2019bf5ebe50324c548f67c2666a804343f9b772 事实=框架源码里那个创建函数的说明文字直接给出了论文标题与链接, 标题与书里印的一致,编号是 2210.03629。19

书还给了一个很有价值的对照:在这套转法之前,已经有「只推理不行动」和 「只行动不推理」两种做法。作者的评价是—— 与只推理但不改变环境、或者只和环境互动却不重新确定思路相比, 这种把两者交织起来的模式要有效得多20

8. 拧到 0 也治不了的那一层

这一节接第 02 章第 4 节那个旋钮,讲它管不到的地方。

书里干了一件很坦白的事:同一个问题,他连着问了两遍,得到不同的结果21

第二遍的轨迹里出了一件很有意思的事:模型凭空点了一个根本不存在的工具, 名字叫「阅读和收集信息」。 发现无效之后,它换了搜索词重来22书没有把这当成 bug,而是当成这类程序的正常工作方式展示出来。

现在把这件事和旋钮放在一起看。把温度拧到 0,能让模型在同样的输入下写出同样的字但它管不住轨迹的长度——原因在第 3 节那张图里已经写着了:

  1. 第 2 轮的输入 = 模板 + 问题 + 第 1 轮真实发生了什么;
  2. 第 1 轮它点了搜索,拿回的十条摘要是从网上现取的,今天和明天不一样;
  3. 输入不同,第 2 轮写出的东西就可能不同——可能直接算,也可能再搜一次;
  4. 于是这一趟可能是 3 轮,也可能是 5 轮。

结论:旋钮管的是「同一份输入 → 同一份输出」,而这一圈的输入本身每轮都在变。 多绕两圈少绕两圈不是旋钮能关掉的。

第 07 章第 9 节还有第三层:当五个步骤接力、每一步的产出都是下一步的输入时, 偏差会被逐级放大。三章讲的是三件不同的事,别混。

9. 书里另列的六种转法

这一节交代边界:这本书详讲的只有一种,另外六种各给了一段。

作者自己解释了为什么厚此薄彼:讲解重在给人以启发,该详则详,该略则略; 之所以详讲这一种,是因为它「非常有代表性,直指推理认知过程的本质」23

六种依次是24:

函数调用——把你写好的函数做成一份说明书交给模型,让它自己决定什么时候点哪一个;书里的说法是模型被当成调用预定义函数的引擎。这一种第 04 章整章讲。

计划与执行。 先规划一串行动,再照单执行——这一种第 09 章整章讲

自问自答。 让模型对自己提问再回答,以此深化理解。

批判修正。 两步循环:先评估当前产出、找出差距,再据此调整策略。

思维链——指让模型把中间的推理步骤一步步写出来,而不是直接给答案; 书说它通过模拟人的思考过程来提高理解和推理能力。

思维树——指在每一步上分出多个岔路、形成一棵树,再用搜索的办法挑一条走; 书把它称作上一种的升级版。

本书对这六种的处理:前两种后面有整章,后四种到此为止。 本组拆解同样不展开——它们不在这条主线上。

10. 更早还列过三条路,后两条各只有一句

这一节交代另一处边界,而且这一处必须留名字。 上一节那六种出自原书第 2 章第 6 节;更早的原书第 2 章第 2 节,书还把 「下一步是怎么想出来的」这件事分成三条路,每条路底下挂几个名字,一句话就过去了25本组拆解同样不展开,但名字要留下——你出门读别人的文档时会撞见。

三条路是:把大任务拆成小任务把「想计划」这件事整个包给外面一个程序让它回头看自己刚做过的事再改。第一条上一节已经讲过(思维链、思维树都在这一条上); 而本章那十行文字,书把它归在第三条里。

第二条路只有一句话,但它和这本书其余部分是反着的:模型不想计划,只做翻译。 你先把「现在是什么状态、要达到什么状态、手上有哪些动作」写成一份题目; 模型的活儿是把人话翻成那份题目的格式,真正把步骤排出来的是外面一个专门算规划的老程序, 排完再翻回人话交还给你。外面那个程序的名字叫外部规划器。

写那份题目用的是一种专门描述规划问题的语言,名字叫 PDDL; 书里管这整条路叫大模型 +P,并说它在机器人那一类场景里常见。 请把它和第 09 章那条「先列清单再执行」分开:那条路上清单还是模型自己列的, 而这条路上模型连排步骤都不管。

第三条路下面除了本章这一种,还挂着两个名字,书各给了一句:

名字书里那一句
Reflexion让程序把自己做过的事存下来、隔一阵回头反省一遍,靠这个把推理做得更准
CoH(Chain of Hindsight)把它过去的一串输出连同别人给的反馈一起摆到它面前,让它照着改

这两样有一个共同点,顺着本章的主线就能看出来:改的都不是模型本身, 而是下一轮摆在它面前的那段文字——和第 05 章第 5 节「把报错当成下一份输入」是同一个套路。

11. 可带走的

  1. 让模型学会转圈不需要训练,一段十行的文字就够了;这十行同时规定了模型怎么写、外面怎么读;
  2. 四行格式:思考 / 行动 / 行动输入 / 观察。 前三行模型写,第四行必须由外面写;
  3. 模型写到「Observation:」就被掐断——这不是它守规矩,是接口层面加了停止词;书里没讲这一层;
  4. 记事本那个占位符装的是「这一趟已经发生的全部」,每轮原样重贴一遍,只增不减;
  5. 那十行是别人写的一份模板,可以换、可以改;书自己就改了两处(要求用中文、允许加格式要求);
  6. 同一个问题跑两遍,轨迹可以完全不同——书里第二遍还点了一个不存在的工具,作者把这当正常现象;
  7. 温度拧到 0 只保证「同输入同输出」,保证不了轮数,因为这一圈的输入每轮都在变;
  8. 这套转法出自 2022 年 10 月那篇预印本、2023 年才正式发表——书里只写了后一个年份,两个都对; 书里印的论文编号有错,不要照抄;
  9. 书另列了六种转法,其中两种后面有整章,另外四种到此为止;
  10. 更早还分过三条路(拆小任务 / 把排步骤包给外面的外部规划器 / 回头看自己再改), 后一条底下的两个名字是 ReflexionCoH——它们改的都不是模型,是下一轮的输入。

12. 原文地图

主题原书章原文位置
不到 50 行代码2.5 Agent的推理引擎:ReAct框架text/21-ch02-05-2-5-agent-react.txt:87(搜「用不到50行代码」)
那段提示词原文2.5 Agent的推理引擎:ReAct框架text/21-ch02-05-2-5-agent-react.txt:188(搜「Answer the following questions as best you can」) · text/21-ch02-05-2-5-agent-react.txt:196(搜「can repeat N times」) · text/21-ch02-05-2-5-agent-react.txt:200(搜「Thought:{agent_scratchpad}」)
中文对照与记事本2.5 Agent的推理引擎:ReAct框架text/21-ch02-05-2-5-agent-react.txt:224(搜「这个思考—行动—行动输入—观察过程可以重复N次」) · text/21-ch02-05-2-5-agent-react.txt:229(搜「Agent记事本」)
提示是什么、提示工程2.5 Agent的推理引擎:ReAct框架text/21-ch02-05-2-5-agent-react.txt:167(搜「提示就是你输入大模型的信息」) · text/21-ch02-05-2-5-agent-react.txt:173(搜「提示工程」)
三步的定义2.5 Agent的推理引擎:ReAct框架text/21-ch02-05-2-5-agent-react.txt:27(搜「思考(Thought)」)
人类定价的那个对照6.1 复习ReAct框架text/42-ch06-01-6-1-react.txt:33(搜「统称为」)
第一轮与第二轮模型写的字6.5 深挖AgentExecutor的运行机制text/46-ch06-05-6-5-agentexecutor.txt:118(搜「我需要先找到目前市场上玫瑰花的一般进货价格」) · text/46-ch06-05-6-5-agentexecutor.txt:217(搜「25 * 1.05」) · text/46-ch06-05-6-5-agentexecutor.txt:272(搜「I now know the final answer.」)
从社区拉模板2.5 Agent的推理引擎:ReAct框架text/21-ch02-05-2-5-agent-react.txt:184(搜「hwchase17/react」)
自己写模板、要求用中文6.4 通过create_react_agent创建鲜花定价Agenttext/45-ch06-04-6-4-create-react-agent-agent.txt:37(搜「尽你所能回答以下问题」) · text/45-ch06-04-6-4-create-react-agent-agent.txt:58(搜「加入自己需要的内容」) · text/45-ch06-04-6-4-create-react-agent-agent.txt:111(搜「双语理解能力」)
这套转法的来历、与只推理只行动的对比2.5 Agent的推理引擎:ReAct框架 与 6.1 复习ReAct框架text/21-ch02-05-2-5-agent-react.txt:15(搜「ICLR 2023」) · text/42-ch06-01-6-1-react.txt:61(搜「这种模式要有效得多」)
同一个问题跑两遍、点了不存在的工具2.5 Agent的推理引擎:ReAct框架text/21-ch02-05-2-5-agent-react.txt:329(搜「得到不同的结果」) · text/21-ch02-05-2-5-agent-react.txt:335(搜「阅读和收集信息」)
另外六种转法2.6 其他Agent认知框架text/22-ch02-06-2-6-agent.txt:9(搜「函数调用(Function Calling)是由OpenAI公司提出的」) · text/22-ch02-06-2-6-agent.txt:17(搜「自问自答」) · text/22-ch02-06-2-6-agent.txt:31(搜「思维链(CoT),是指在解决问题过程中」) · text/22-ch02-06-2-6-agent.txt:41(搜「该详则详」)
规划的三条路、外部规划器、Reflexion 与 CoH2.2 Agent的规划和决策能力text/18-ch02-02-2-2-agent.txt:5(搜「结合外部规划器和自我反思」) · text/18-ch02-02-2-2-agent.txt:19(搜「大模型+P」) · text/18-ch02-02-2-2-agent.txt:25(搜「Reflexion」) · text/18-ch02-02-2-2-agent.txt:27(搜「Chain of Hindsight」)

Footnotes

  1. 出处:「2.5 Agent的推理引擎:ReAct框架」第 87 段(text/21-ch02-05-2-5-agent-react.txt:87,搜「用不到50行代码」)。原文说的是「用不到50行代码来实现一个会自主搜索并总结目前 Agent 科研领域最新进展的 Agent」——注意这句话说的是那个例子,不是本章走查里的鲜花定价脚本;后者更短,只有二十来行,见第 05 章第 1 节。

  2. 出处:「2.5 Agent的推理引擎:ReAct框架」第 188 段起(text/21-ch02-05-2-5-agent-react.txt:188,搜「Answer the following questions as best you can」),重复那一行在第 196 段(text/21-ch02-05-2-5-agent-react.txt:196,搜「can repeat N times」),最后一行在第 200 段(text/21-ch02-05-2-5-agent-react.txt:200,搜「Thought:{agent_scratchpad}」)。书里是把打印出来的模板对象原样贴出来的,本节那张图只是去掉了对象外壳、按换行排开,一个词都没改。

  3. 出处:「2.5 Agent的推理引擎:ReAct框架」第 224 段(text/21-ch02-05-2-5-agent-react.txt:224,搜「这个思考—行动—行动输入—观察过程可以重复N次」)。中文对照里最后一行写作「思考:{Agent记事本}」(text/21-ch02-05-2-5-agent-react.txt:229,搜「Agent记事本」)。

  4. 出处:「2.5 Agent的推理引擎:ReAct框架」第 167 段(text/21-ch02-05-2-5-agent-react.txt:167,搜「提示就是你输入大模型的信息」)。这是书里的师生对话体,学生直接问「什么是提示」,老师给了这个很宽的定义。

  5. 出处:「2.5 Agent的推理引擎:ReAct框架」第 173 段(text/21-ch02-05-2-5-agent-react.txt:173,搜「提示工程」)。原文说它不只是选文字内容,还涉及格式、风格、上下文交代等等。

  6. 出处:「2.5 Agent的推理引擎:ReAct框架」第 27 段起(text/21-ch02-05-2-5-agent-react.txt:27,搜「思考(Thought)」)。「谁来写这一行」那一列是我们加的,书里没有这一栏;依据是原书第 6 章那次调试记录里,观察结果确实由外面的程序写入(见第 05 章)。

  7. 出处:「6.1 复习ReAct框架」第 33 段(text/42-ch06-01-6-1-react.txt:33,搜「统称为」)。学生那段回答在同节第 7 段起(text/42-ch06-01-6-1-react.txt:9,搜「思考」)——书里用括号在每一句后面标了这一步属于思考还是行动,读起来像一份人的操作记录。

  8. 出处:「6.5 深挖AgentExecutor的运行机制」第 118 段(text/46-ch06-05-6-5-agentexecutor.txt:118,搜「我需要先找到目前市场上玫瑰花的一般进货价格」)。书里这三行是作为一个对象的字段打印出来的:一行放工具名、一行放工具输入、一行放模型写下的原始文字;本节那张图把它们还原成模型实际写出来的样子。

  9. 出处:「6.5 深挖AgentExecutor的运行机制」第 217 段(text/46-ch06-05-6-5-agentexecutor.txt:217,搜「25 * 1.05」)。25 这个数是模型自己从十条摘要里挑的中间值,不是搜索返回的,也不是书里预设的。

  10. 出处:「6.5 深挖AgentExecutor的运行机制」第 272 段(text/46-ch06-05-6-5-agentexecutor.txt:272,搜「I now know the final answer.」)。最终答案那句话书里没有印出来——命令行截图只给到这一句,所以本节也只写到这一句。

  11. 补充(不在书里,依据我们的前沿框架书架):那个创建函数的参数 stop_sequence 默认为 True,说明文字写着「为真时加上一个 "Observation:" 停止词,以避免模型自己编造」;函数体里实际写入的值是 ["\nObservation"]。依据: shelf=ai-frontier-reference/langchain@src:libs/langchain/langchain_classic/agents/react/agent.py:50 @2019bf5ebe50324c548f67c2666a804343f9b772 事实=stop_sequence: bool | list[str] = True,文档串明说停止词是 "Observation:",代码在同文件 :138 处赋值 stop = ["\nObservation"]书里从头到尾没有提过这个参数。

  12. 出处:「2.5 Agent的推理引擎:ReAct框架」第 229 段(text/21-ch02-05-2-5-agent-react.txt:229,搜「Agent记事本」)。这个中文译名是书里给的;英文原名 agent_scratchpad 在模板的占位符列表里(text/21-ch02-05-2-5-agent-react.txt:187,搜「agent_scratchpad」)。

  13. 出处:「7.1 Plan-and-Solve策略的提出」第 62 段(text/49-ch07-01-7-1-plan-and-solve.txt:62,搜「增加提示词的规模」)。原文说:为了让程序既盯着最终目标、又记得住之前的步骤,人们不得不把提示词越写越大,结果是模型「往往不堪重负,在几个轮次之后会出现各种各样的问题」

  14. 出处:「2.5 Agent的推理引擎:ReAct框架」第 184 段(text/21-ch02-05-2-5-agent-react.txt:184,搜「hwchase17/react」)。作者解释这个社区的概念时打了个比方:它和从模型社区下载开源模型有点像;并说同一个用户还创建了一系列其他场景下的模板。

  15. 出处:「6.4 通过create_react_agent创建鲜花定价Agent」第 37 段起(text/45-ch06-04-6-4-create-react-agent-agent.txt:37,搜「尽你所能回答以下问题」)与第 58 段(text/45-ch06-04-6-4-create-react-agent-agent.txt:58,搜「加入自己需要的内容」)。学生在书里当场认出来:这和社区那份「非常像」。

  16. 出处:「6.4 通过create_react_agent创建鲜花定价Agent」第 111 段(text/45-ch06-04-6-4-create-react-agent-agent.txt:111,搜「双语理解能力」)。原文的说法是:改完之后「见识了 GPT 模型中英文的双语理解能力」,并确保它用中文作答。

  17. 出处:「2.5 Agent的推理引擎:ReAct框架」第 15 段(text/21-ch02-05-2-5-agent-react.txt:15,搜「ICLR 2023」)。作者特意先澄清「它不是你听说过的那个流行的前端开发框架」——这个提醒是必要的,两者拼写只差一个字母的大小写。

  18. 补充(不在书里,来自通用知识):预印本站的论文编号前四位就是「年份 + 月份」——2210.03629 里的 2210 表示 2022 年 10 月首次挂出;而书里说的那场会议在 2023 年举行。先挂预印本、再被会议接收,是这一行的常规流程,所以这两个年份不打架。 编号本身的依据见本章脚注 18(来自我们的前沿框架书架)。

  19. 补充(不在书里,依据我们的前沿框架书架):框架源码里那个创建函数的说明文字第一段就写着 Based on paper "ReAct: Synergizing Reasoning and Acting in Language Models",后面直接跟着论文链接。依据: shelf=ai-frontier-reference/langchain@src:libs/langchain/langchain_classic/agents/react/agent.py:28 @2019bf5ebe50324c548f67c2666a804343f9b772 事实=该行给出的编号是 2210.03629,与书里参考文献印的数字不一致(书里印成 2210-3629,前导零被吃掉了)。

  20. 出处:「6.1 复习ReAct框架」第 61 段(text/42-ch06-01-6-1-react.txt:61,搜「这种模式要有效得多」)。同节第 41 段还点了「只行动」那一支的两个代表工作的名字(text/42-ch06-01-6-1-react.txt:41,搜「SayCan」);那两个名字对应的论文编号书里同样印错了,所以本组拆解不引它们的编号。

  21. 出处:「2.5 Agent的推理引擎:ReAct框架」第 329 段(text/21-ch02-05-2-5-agent-react.txt:329,搜「得到不同的结果」)。作者的原话是「相同的问题,我问了 Agent 两次,得到不同的结果」,并说第一次的结果比较直观、还是中文的。

  22. 出处:「2.5 Agent的推理引擎:ReAct框架」第 335 段(text/21-ch02-05-2-5-agent-react.txt:335,搜「阅读和收集信息」)与第 339 段(text/21-ch02-05-2-5-agent-react.txt:339,搜「不是一个有效的工具」)。这一趟里它一共犯了两次同样的错:第二次又试了一遍这个不存在的工具,发现无效后才改成去找综述。第 05 章第 5 节讲这种错是怎么被兜住的。

  23. 出处:「2.6 其他Agent认知框架」第 41 段(text/22-ch02-06-2-6-agent.txt:41,搜「该详则详」)。这段是回应学生的抱怨——学生说「你平常说话啰里啰唆的,怎么介绍这些框架时讲得这么简单」。

  24. 出处:「2.6 其他Agent认知框架」第 9 段起(text/22-ch02-06-2-6-agent.txt:9,搜「函数调用(Function Calling)是由OpenAI公司提出的」);自问自答见第 17 段(text/22-ch02-06-2-6-agent.txt:17,搜「自问自答」);思维链见第 31 段(text/22-ch02-06-2-6-agent.txt:31,搜「思维链(CoT),是指在解决问题过程中」)。六种里书只给了每种一到两段,没有任何一种配了代码。

  25. 出处:「2.2 Agent的规划和决策能力」第 5 段(text/18-ch02-02-2-2-agent.txt:5,搜「结合外部规划器和自我反思」)给出三条路的划分;外部规划器那一条在第 19 段(text/18-ch02-02-2-2-agent.txt:19,搜「大模型+P」),原文把那种描述语言的全称写作 Planning Domain Definition Language,并说「规划步骤被外包给外部工具来完成」;Reflexion 在第 25 段(text/18-ch02-02-2-2-agent.txt:25,搜「Reflexion」),CoH 在第 27 段(text/18-ch02-02-2-2-agent.txt:27,搜「Chain of Hindsight」)。这一节全长不到 30 行,四个名字各一句,没有一个配了代码或示例。