Agent 精读(十):第 1 章思考题——选能力、算平方账、看循环搬家

这是《深入理解 AI Agent》精读专题的第十篇。前三篇读完了李博杰这本书的第一章,这次不往下赶进度,回头做章末思考题——发现书里读顺了的地方,一动手答题就露馅。这篇文章记录三道重点题的思考过程,其余七道简答放在文末。
本章思维导图见 专题页 · 章节思维导图

第一题:只能加一项,我选工具——然后被自己的答案打了脸

题目问:只能给 Agent 系统增加一项能力——更强的模型、更丰富的上下文还是更多的工具——你选哪个?什么条件下改变?

我的第一反应是工具,理由很直接:工具是最终落实到外部的交互,没有工具就一定完不成某件事。没有上下文呢?事情还是能完成的,只是模型不会用已有信息。按这个逻辑排,工具守”能不能做”,上下文守”好不好用”,模型排最后。

这个答案看起来很稳,直到我把消融实验的数据套上去,发现自己漏了一组:工具能调用、也真的执行了,但结果没有送回给模型——Agent 拿着过时状态反复调用同一个工具,直到耗尽迭代预算。这组在书里归为上下文缺失(工具执行结果是上下文五组件之一),但它同样”完不成”。

也就是说,”完不成”这个证据,被上下文分走了一半。缺工具定义,想动动不了;缺工具结果,在动但看不见自己动过什么。两种断裂、两个归责对象、同一个结局。

我最后修正成的立场是:三要素从来不是割裂的,缺一不可——模型 + 上下文 + 工具组成最简单的 Agent,极端情况下的单选只是纸面思想实验,真实生产环境要发挥最大效果,缺哪个都不行。但”工具最重要”我还是想保住,那就得给”最”一个更细的定义:

  • 闭环(工具 + 观测回流)守可行性下限——断了就完不成,甚至是”格式工整、语气笃定”的假答案
  • 静态信息守质量——缺了降准确率,但不归零
  • 模型定上限——在这两者之上决定聪明的程度

题干后半问”什么条件下选择会改变”,我找到两条轴:

  1. 场景轴:如果做的是聊天工具,模型最重要——聊天没有”完成任务”这个中介层,模型既是决策核心又是执行主体,三要素塌缩成了一个。这反过来说明这道题只在任务型 Agent 场景里才成立。
  2. 能力轴:书里说”扩展眼睛和手脚是最主要的能力杠杆”时挂了个限定词——在模型固定时。反过来读:模型本身是瓶颈、任务超出模型能力时,换模型优先,上下文工具都是给聪明人递纸条。

第二题:1 折的平方,还是平方

题目问:ReAct 循环中,累计缓存读取量随轮数近似二次方增长,如何降低?

我最初的答案很顺:KV Cache 把 K、V 缓存下来,每次只处理新增部分,复杂度 O(n) 线性。这是我上一篇笔记里算过的账,张口就来。

但题干问的不是这笔账。注意两个词:累计、随轮数

Agent 调用的 API 是无状态的:第 k 轮请求,前 k-1 轮的全部历史必须重新发给服务器。Prompt Cache 命中这些前缀,但命中不等于免费——书里给的价格是约十分之一。也就是说:

  • 新增 token:要计算 K/V,全价
  • 已缓存前缀:要读取,1 折,但是全量

拿数字算:跑 20 轮、每轮新增 2000 token。第 20 轮要读取 40,000 token 的前缀,把 1 到 20 轮加起来,累计读取 42 万 token——1 折的平方,还是平方。无状态既制造了平方问题,也给了压缩一个安全的执行窗口,这个特性是病根,也是手术台。

想清楚账在哪平方,解法就按”动哪个因子”分层:

第一层:改系数——三铁律。 前缀不动(系统提示词、工具定义定下来就不改)、动态信息只追加到末尾、用标准 API 格式。铁律不降平方,但决定平方乘的系数是 0.1 还是 1.0——前缀改一个字节,1 折变全价。

第二层:砍长度。

  • 压缩:对象主要是 tool results(几万字符的搜索/读取结果是膨胀大头)。我确认过它的安全时机——发生在两次调用之间,由框架在两次 API 调用之间预处理,不会打断正在进行的推理。频率上不能每轮压(每压一次,变动点后缓存全废一次),书里的策略是接近阈值才压(80% 触发)、一次性批量压掉全部未压缩内容、加 [COMPRESSED] 标记防重复——把 N 次小重建合并成 1 次大重建。位置上,静态前缀永不碰,只压历史区,压的时候保留决策、约束、失败、来源。
  • 隔离:书里单开一节的方案,比压缩更釜底抽薪——让大体积中间产物根本不进主上下文。子 Agent 承接搜索、探索这类脏活,在自己的上下文里翻几万 token,只把几百 token 的结论回传。三种减法摆在一起看,隔离的特殊性就出来了:滑动窗口破坏前缀(双输),压缩要付一次缓存重建,隔离是唯一前缀完全不动的减法。它的本质是把脏活放进”用完即弃”的工作区——主上下文每条消息都是终身负债,之后每一轮都要被全量重读;子 Agent 的上下文是函数里的局部变量,函数返回后栈帧直接销毁。

代价也要记下:子 Agent 是闭卷考试,看不到主 Agent 的完整上下文,任务描述必须自包含、目标明确——上下文的质量决定能力上限,对子 Agent 同样成立。隔离不是免费的,它把上下文工程的责任从运行时挪到了任务描述的编写时。

第三层:换复杂度。 书里”深水区选读”那节给了真正把 O(L²) 降成 O(L) 的路:模型 prefill 时做的不是原文缓存,是笔记——字段自身的 KV 对最终决策贡献不到 1%,结论早就写进了后面每一层的 KV 状态。于是可以编辑(改动顺着已缓存的思维链传播,约 1% 算力,前提是有 CoT)和组合(预计算的缓存块经 RoPE 重定位直接拼接,重算变拼接)。vLLM 上实测首 token 延迟降数十到数百倍。还在研究阶段,但它松动的是”前缀不可变”这条铁律本身。

第三题:两个趋势怎么同时为真

题目问:模型在工具调用决策上越来越自主(模型即 Agent),但 Harness 工程的重要性反而在增加——这两个趋势如何共存?框架未来的核心价值在哪?

我的理解:模型即 Agent 是模型在内化属于 Harness 部分的能力——强化学习把工具调用的决策策略写进参数,模型越来越熟悉何时调用、调用哪个、传什么参数。但要精确:内化的是决策,不是执行——工具的真实实现、沙盒、结果回传都在模型外。

我写过一个我认为成立的观察:当模型升级之后,Harness 就减少一部分,去专注新的问题。书里有张被内化的清单:few-shot 示例被指令微调吃掉、JSON 修复被结构化输出吃掉、文生图的提示词改写被原生多模态吃掉。每一轮内化,消灭的都是翻译和脚手架类的适配层代码。

还有一个容易看错的点:现在大部分所谓的”模型即 Agent”,其实只是把客户端的 Harness 搬到了服务端——Kimi 的 Formula 引擎、OpenAI 的内置工具,循环还是那个循环,换了跑的位置。决策权交给了模型,编排结构没变。

写文章前我本来想用”模型本质只是预测 token,所以 Harness 不可能被完全取代”来论证共存。讨论时被戳穿了:这个论证站不住。few-shot、JSON 修复不也是文本吗?照样被吃掉了。书里的立场是”方向认同、节奏务实”——方向上不怀疑模型会持续吃掉 Harness,站得住的是节奏:训练以月计,真实业务的约束变化以天计,模型无法一次内化所有东西。模型此刻的能力边界,就是 Harness 此刻的价值所在。

想通节奏论之后,”两个趋势如何共存”的答案自己浮出来了:它们不是拉锯,是同一个趋势的推论和被推论——模型越自主,出错影响面越大,越需要上下文之外的约束、验证、纠正;而这些机制恰恰因为”自审不可靠”(同一个上下文里的模型难以发现自己的盲区)必须长在框架里。模型每内化一层,Harness 卸下一层、兜底新的能力前沿。

框架未来的核心价值,我落到三格:

  1. 跨会话的私有上下文:公司自己的业务数据没有办法被模型训练,训练集拿不到、变化又快——用户记忆、RAG、知识库都是模型外的活
  2. 约束、验证、纠正:自主决策空间越大越重要,且必须在上下文之外(独立的审查进程、最小权限凭证、沙盒、人在回路——否则复核者会和被注入的 Agent 一起沦陷)
  3. 抹平模型协议差异:各家对历史思维链的处理策略不同(R1 剥离、V4 强制回传、Claude 签名校验),跑到一半的轨迹跨模型交接是实打实的接口错误——框架吃掉这些差异

其余七题,简答带过

  • 1-4 循环检测:除了工具结果缺失,参数错误导致的静默失败、工具持续返回相同错误、任务目标自相矛盾都会造成循环。检测靠工具调用计数器(显式计数触发模式识别)+ 轨迹相似度;终止靠三件套——最大轮数、失败阈值、人工移交。
  • 1-5 三维度分析:拿我自己的产品(游戏 + 短剧 + 短视频)套:感知维度能看到用户行为流,动作维度只有推送和投放两个出口,策略维度完全依赖模型对内容的理解。最明显的短板是动作空间——用户的反馈回路断裂,Agent 看得到却摸不着。
  • 1-6 航班订票:工作流打底(身份核实、支付这类合规硬节点),自主补变通(改签、临时需求)。书里的第三种混合方式最贴:先由自主 Agent 把流程写出来,再由工作流执行——灵活性和确定性各取一半。
  • 1-7 动态风险评级:风险不是工具的属性,是”工具 × 参数 × 环境”的组合属性。静态评级之外,加参数规则(路径前缀匹配系统目录 → 升级为高风险)、执行前校验、且复核必须由上下文之外的机制完成。
  • 1-8 受限动作空间:强合规场景(支付、审批)、模型能力不足的场景、错误代价不可逆的场景——预设选项消灭了幻觉空间。书里的防呆设计是同一个思想:SIM 卡缺角,想插反都插不进去。
  • 1-9 人工干预降级:用户不在线时不能干等——超时默认走安全动作(跳过或暂停并留下可恢复的现场),高风险操作宁可挂起不可默认执行;模糊指令先按最保守解释执行无风险部分,风险部分攒着批一次问。
  • 1-10 原则穿越、手段过时:最典型的是提示词技巧——“让我们一步一步思考”、few-shot 示例,都是曾经效果显著的手段,如今被指令微调和推理模型内化了。但”让模型在行动前先思考”这条原则没变——变的只是实现位置:从提示词里的一句话,变成了模型原生的思考模式。

下一步

  • 第 2 章思考题还挂着两道压缩题(滑动窗口的替代设计、148K→2K 的极端压缩),下篇一起做
  • 第 3 章用户记忆和知识库,开读

参考来源