专栏 模型调研 子专栏 Agent 运行原理 1 篇

十七个切面,一条从工具调用到系统副作用的完整链路

上下文越长,Agent 越准吗

同一任务,4K、32K、1M 的 Agent 表现并不单调。NoLiMa、RULER、CompactionBench 的数据指向同一个结论:质量是倒 U,成本是线性甚至二次。

一个编码 Agent 跑到第 30 轮,输入已经 71K token。

按 3K 系统提示、10K 检索结果、每轮新增 2K 算,这不是极端案例,是默认配置。窗口是 1M,账单却按每轮重送来。

这篇只回答一个问题:同一个任务,把上下文从 4K 加到 1M,质量和 token 到底怎么变。

先把账算清

第 t 轮的输入是 系统提示 + 检索结果 + 前 t-1 轮历史。累计输入:

I = T(S + R) + Δ·T(T-1)/2

S 是系统提示,R 是每轮检索,Δ 是每轮新增历史,T 是轮数。后半项是二次的,轮数翻倍,历史部分约翻四倍。

按 S=3K、R=10K、Δ=2K、T=30:

策略 累计输入 相对全量
全量历史 1.26M 100%
上限 32K 860K 68%
上限 16K 501K 40%
只带检索,不带历史 390K 31%

输出另加 30K,占比不大。真正的账单在输入。

前缀缓存能打折,但只打钱,不打注意力预算。缓存命中后,模型仍然要在长上下文里找信息,context rot 不会因为 billing 便宜就消失。

质量不是跟着长度涨

NoLiMa 测了 13 个声称支持 128K 以上的模型。任务没有字面匹配,必须靠潜在关联找证据。到 32K,11 个模型跌到短上下文基线的一半以下;GPT-4o 从 99.3% 掉到 69.7%。NoLiMa

RULER 的结果类似:17 个模型都声称至少 32K,只有一半在 32K 还能维持满意表现。RULER

Context Rot 把变量控得更干净:任务简单、证据就在文内,只改变输入长度。18 个模型仍然随长度退化,而且退化不均匀。Context Rot

Anthropic 把这叫“注意力预算”:每多一个 token,都在消耗模型分给其他 token 的注意力。好的上下文工程不是找更多 token,是找最小的高信号 token 集。Anthropic

所以质量曲线不是单调上升,是倒 U:短了缺证据,过了有效上下文开始被噪声稀释。

长会话吃掉多数 token

生产数据比 benchmark 更直接。

CompactionBench 分析了 GitHub Copilot 的 13.5M 个 Agent 会话、3.2M 用户、760M 次调用。只有 7.8% 的会话触发压缩,但它们吃掉 44.2% 的 token。CompactionBench

这不是“平均上下文”的问题,是尾部问题。优化普通的 20 轮会话,省不下多少;优化那 7.8% 的长会话,账单才会动。

同一份研究里,APEC 把压缩放到后台异步做,保持前缀缓存稳定:总成本降 25.4%,执行时间降 9.6%,任务质量还升了。压缩不是“省钱的降级”,做得好是双赢。

局部上下文,可能更便宜也更准

Agentless 在 SWE-bench Lite 上没用复杂 Agent,而是“定位 → 修复 → 验证”三段式:32.00% 解决率,按 2024 年 API 价格约 $0.70/实例,高于当时多数开源 Agent,成本更低。Agentless

它说明的不是“Agent 没用”,而是:先把上下文缩小到相关文件,再让模型动手。

Anthropic 的子代理是同一个逻辑:子代理可以烧几万 token 探索,回传主代理的只有 1,000–2,000 token 摘要。贵的探索被隔离,贵的结论不进入主上下文。

flowchart LR
  T["任务"] --> L["定位:文件 / 段落 / 证据"]
  L --> R["检索:只取相关块"]
  R --> C{"够用吗"}
  C -- "够" --> A["执行 / 回答"]
  C -- "不够" --> S["压缩或子代理"]
  S --> A
  A --> V["验证:测试 / 引用 / 规则"]

图 1:先缩小上下文,再让模型执行。

怎么选

任务 4K 16K–32K 128K–1M 建议
多跳文档 QA 缺证据 检索命中时最佳 边际收益低,干扰变多 16K 检索 + 引用
仓库修 bug 只能改单文件 跨文件定位够用 贵,且被无关代码稀释 先定位,再给 16K 局部
多轮工具任务 忘规则、忘状态 压缩后可维持 不解决“该记什么” 规则固定 + 压缩 + 外部记忆

四条实操规则:

  1. 先测有效召回,再买大窗口。RULER/NoLiMa 的分数比“支持 1M”有用。
  2. 上下文按预算管理:设 token 上限,超了就压缩或丢工具结果,不要让它自然增长。
  3. 优化尾部会话:统计 p95 token,而不是只看均值。
  4. 单文档、一次性、证据分散的任务,才值得把 128K–1M 一次塞满。

窗口是厂商给的,预算是自己花的。把上下文当容量,账单会教你做人;把它当预算,才知道该花在哪。