The Complete LangGraph Blueprint — 本课题摘录
读了哪几节: 第 8 章的 ReAct 四小节、第 9 章的 9.1 与 9.2。 全书八十多节,其余本轮没读。
这本书例子多、原理少,读的这几节几乎没有代码。它对本课题只有两条真正的贡献,下面只写这两条。
它对本课题回答了什么
决定四的来龙去脉:ReAct 补的是哪两个洞
历史上的系统要么专注推理(链式思考那一路),要么专注行动(强化学习那一路)。
两者单独都有效,但任务需要"又想又做"时都失灵:
| 路线 | 缺什么 |
|---|---|
| 纯推理 | 容易编(生成幻觉) |
| 纯行动 | 缺上下文与规划 |
ReAct 的贡献是在两者之间建了一条反馈回路。 (依据:书 · The Complete LangGraph Blueprint: Build 50+ AI Agents for Business Success §ReAct —— 历史上 AI 系统要么专注推理(如思维链)要么专注行动(如强化学习),纯推理路线常产生幻觉、纯行动路线缺上下文与规划;ReAct 的贡献是在推理(想法)与行动(执行并收集信息)之间建立反馈回路)
这段历史值得进讲义的开头,因为它回答了一个基本问题:为什么循环必须是"想—做—看"三步,而不是"想完再做"或"直接做"。
前面所有实现都默认了这个三步循环,没有一家解释它为什么长这样。这一份解释了。
而且它顺带解释了一件我们已经撞上多次的事: hands-on 那本书里"汇率是模型自己编的"、cline 的打转、kun 的复读—— 这些全是"纯推理那一路的老毛病"在有工具的系统里的残留。工具没有覆盖到的地方,模型就会编。
自己写一个 ReAct agent 只需要三样东西
| 要件 | 干什么 |
|---|---|
| 系统提示 | 定目标与行为 |
| 工具 | 一组可调的函数、接口或资源 |
| 图结构 | 每个节点或推理、或行动、或调工具,一直转到不再需要调工具为止 |
(依据:书 · The Complete LangGraph Blueprint: Build 50+ AI Agents for Business Success §LangGraph —— 自定义 ReAct agent 只需要三样东西——system prompt(定高层目标与行为)、tools、以及一个图结构(每个节点或推理或行动或调工具,一直循环到不再需要调工具为止))
注意第三行的退出条件跟前面所有实现一致:不再需要调工具就停。 而"图结构"这个说法把循环换了一种画法——不是 while,是一张有回边的图。
两种画法等价,但图这种画法有一个副产品:每一步都是一个有名字的节点,于是"停在某一步"变成一件自然的事。 这直接引出下面那一条。
决定四:人机协同被拆成三个正交概念 —— 这是它最值钱的一条
| 概念 | 是什么 |
|---|---|
| 断点 | 有意设置的暂停点,agent 停在这儿等人看过、批准或调整,再往下走 |
| 检查点 | 存档点,捕获当前状态;失败或中断后可以从这里续,不必从头再来 |
| 状态编辑 | 暂停期间人可以直接改工作流里的数据与参数,改变 agent 接下来的走向 |
(依据:书 · The Complete LangGraph Blueprint: Build 50+ AI Agents for Business Success §9.2 —— 人机协同被拆成三个概念——breakpoints(有意的暂停点,等人反馈才继续)、checkpoints(存档点,失败或需人介入时可从这里恢复而不必从头开始)、state editing(暂停期间人可以动态修改工作流的输入数据、参数或走向))
这三条正交,而且前面各家分别只实现了其中一两条:
- agentscope:断点 + 状态编辑(用户批准时"允许修改工具名和入参");
- letta-code:断点 + 检查点(状态在服务端,关掉重开还在);
- cherry-studio / goose:只有断点(审批)。
三个都齐的很少见。而"检查点"这一条是本课题"循环状态存在哪"那一问的答案: 存的不是"跑到第几行",是"这一步之前的状态"。
它给的"需要人来把关"的三类场景也很具体:金额异常的资金操作、要对外发布的内容、法律文书。
共同点是:做错了不能撤。 这比"危险操作"更准确——判据是可逆性,不是危险性。
五条最佳实践里,有两条值得留意
| 实践 | 说的是 |
|---|---|
| 推理步与行动步要分开 | 好让人能看清它在想什么、在做什么 |
| 要有错误处理与反思 | 能识别并从错误中恢复,或者在不确定时主动问 |
第二条后半句"在不确定时主动问"在前面六十份材料里几乎没出现过。 各家都在做"错了怎么救",很少有人做"不确定就先别做"。 这是本课题第三圈("人怎么看见与插手")的一个空白点,值得记下来。
它没回答什么
- 循环的内部机制——怎么解析工具调用、结果怎么回填、并发怎么处理,都没讲。
- 上下文长度与压缩——只说了"要外挂记忆",没讲历史长了怎么办。
- 其余七十多节——本轮没读。
坑与代价
- 它是围绕一个特定框架写的,概念名词跟那个框架绑得很紧。剥掉框架名之后,剩下的原则不多。
- 读的这几节几乎没有代码。 真正的实现散在各章的例子里,而例子是按业务场景组织的,不是按机制组织的。
- "图"这种画法把循环画成了静态结构,这 会带来一个盲区:图画得出"能走哪些路",画不出"走了几圈"。
判断(无锚): 轮数上限、连错熔断这类护栏在图这种表示里没有自然的位置——它们不属于任何一个节点。 如果错,会错在: 如果框架把这些护栏做进了执行器(而不是图里),那图不表达它们是正确的分工,不是盲区。