Skip to content

필사 모드: 上下文预算 — 设计在于去掉什么,而不是放进什么

中文
0%
정확도 0%
💡 왼쪽 원문을 읽으면서 오른쪽에 따라 써보세요. Tab 키로 힌트를 받을 수 있습니다.

窗口还有富余,准确率却在下降

智能体会话一变长,怪事就来了。上下文窗口还没碰到上限,它却忘了开头给的指示,重读已经确认过的文件,写出与先前定好的规则相矛盾的代码。这段描写是构造出来的情境,不是某次具体测量,但方向与公开的观察一致。Anthropic 关于上下文工程的文章把 token 越堆越多、检索准确率越掉越低的现象称为上下文腐蚀(context rot),并把原因指向注意力按 token 两两配对分摊的结构,以及以短序列为主的训练分布。

结论很简单。上下文窗口不是拿来填满的仓库,而是需要分配的注意力预算。既然是预算,就得有支出科目,也得有削减标准。

上下文工程是提示词工程的延伸

同一篇文章这样梳理两者的关系:如果说提示词工程是把指令写好,上下文工程就是在每次推理时为窗口筛选并维护最优的 token 集合。不只是系统提示词,工具定义、外部资料、消息历史统统在范围之内。区别在于,它不是一次写好就完事的文档工作,而是每一轮都要重复的编辑决定。

从框架的视角看,这个定义之所以重要,理由很清楚:上下文策略是框架六个旋钮之一,是以代码形式部署的决定。"每一轮放什么进去、拿什么出来"的答案,应该以函数的形式存在于仓库的某个地方。

工具的 schema 也在花预算

最容易被忘掉的支出科目是工具 schema。暴露给模型的每一个工具,都以名字、描述、参数 schema 的形式在每一轮占据窗口的一角。暴露 21 个工具,模型还什么都没调用,预算就已经少了一块。而且工具越多选择越晃,schema 的成本不只是 token 的问题。这个权衡在第 3 篇工具表面设计里单独展开。

反方向的省钱手段是按需加载(just-in-time retrieval)。不把整份资料预先装进窗口,只留下文件路径、查询、链接这类轻量引用,需要的那一刻再用工具去取。这和人不背下整份文档、只记住它在哪里是同一个结构,也是 Anthropic 那篇文章推荐的基本策略之一。

从提示词堆积到 playbook

最常见的上下文策略是没有策略。新学到的规则不断追加到系统提示词末尾,文档只增不减。一个月后,互相矛盾的指示并存,没人知道哪条还有效。在这种状态下删除是不可能的——因为没有删除的依据。

Lilian Weng 的框架文章介绍的智能体上下文工程方法,用结构解决了这个问题:把上下文当作不断进化的 playbook,把生成条目、反思条目、筛选条目的角色分开。一个条目大致长这样。

- id: pb-041
  rule: 'integration 测试用 -j1 跑。并行会撞端口。'
  scope: 'repo:payments-api / task:test'
  added: '2026-07-18'
  last_used: '2026-08-07' # 久未使用的条目进入筛选候选
  helped: 23 # 这个条目实际帮上忙的次数

重点不在格式,而在元数据。一旦记录了每个条目何时加入、适用于什么场景、最近是否帮上过忙,删除就变得可能。上下文管理难的那一半不是放进去,而是拿出来;要能拿出来,每个条目上就得挂着依据。

丢弃策略与压缩:丢什么,何时丢

预算一旦溢出,总得有东西出去。出去的是什么,由策略决定。先推走最旧内容的策略实现起来零成本,但最先丢掉的是开头的核心规则。先砍最大块的策略省 token,却完全不懂重要性。只有像 playbook 那样先撤下适用性最低条目的策略,才把"对当前任务不那么必要"当作标准。无论选哪种,丢弃策略都必须是框架的显式决定。交给默认值,等于选了先推走最旧内容的那种。

摘要——也就是压缩(compaction)——是丢弃的补充。在接近上限时把此前的进展压缩成摘要,再从摘要重新出发。Anthropic 的文章列出了此时应当保留的东西:架构决定、未解决的 bug、实现细节。反过来说,不明确保留内容的压缩,恰恰会以丢掉这三样的方式失败。配套的技法是结构化笔记:把进展写到窗口之外的文件里,需要时再读回来,即使摘要失败也留有恢复点。

委派子智能体:买来干净的窗口,用 token 付账

上下文预算的最后一招是把窗口拆开。把需要大范围探索的子任务交给子智能体,它就在自己干净的窗口里干活,只把压缩后的摘要交回主队。主队的预算只需要为结论付钱。

但这不是免费的。Anthropic 的多智能体系统文章以他们自己的系统为例报告:智能体大约用掉普通聊天 4 倍的 token,多智能体架构大约 15 倍。只有当任务价值盖过这笔成本,委派才划算;而且委派时要写明目标、输出格式、工具指引和任务边界,否则就会出现重复探索和失控搜索——这也是同一篇文章的教训。子智能体不是上下文问题的逃生门,而是把预算按更大颗粒度重新分配的一个旋钮。

亲手练习

框架工程 RPG 的第 4 层"上下文预算"就是本文的练习。把提示词堆积、裁剪、playbook、精选四种策略换着插进同一个场景,你能直接看到丢弃策略如何改变结果。工具 schema 吃预算这件事,也能在游戏内的数值里得到确认。

参考资料

현재 단락 (1/26)

智能体会话一变长,怪事就来了。上下文窗口还没碰到上限,它却忘了开头给的指示,重读已经确认过的文件,写出与先前定好的规则相矛盾的代码。这段描写是构造出来的情境,不是某次具体测量,但方向与公开的观察一致。...

작성 글자: 0원문 글자: 2,995작성 단락: 0/26