第三阶段 · 上下文与长期任务第 10 / 30 章
本章目录

第 10 章 · 上下文窗口解剖

本章目标:把上下文看成有限工作台,而不是无限记忆。你要知道每类内容为什么进入、占多少、何时退出。

1. 上下文里到底装了什么

编码 Agent 的一次模型请求可能同时包含系统规则、项目指令、用户目标、历史消息、工具定义、已读文件、命令输出、记忆和当前计划。它们共同占用模型窗口,但价值并不相同。

系统规则和当前目标通常优先级最高;最近的真实工具结果决定下一步;大段旧日志往往价值迅速下降;工具目录如果有几百项,也会在任务开始前消耗大量空间。

2. 容量不是唯一问题

即使没有达到硬上限,内容过多也会产生检索困难。关键要求埋在早期对话,几十个相似日志互相干扰,模型可能关注最近但不重要的信息。这被称为上下文污染或上下文腐化。

因此优化目标不是“塞得下”,而是让当前决策需要的证据更突出。一个 128k 窗口装满无关材料,可能不如 16k 的精心上下文可靠。

3. 上下文预算

可以为不同类别预留预算:

类别 典型策略
系统与安全规则 常驻,保持短而明确
当前目标与验收 常驻,压缩时必须保留
工具定义 按需发现和延迟加载
文件内容 只读相关范围,保留来源
工具输出 截断、摘要、完整内容落盘
早期历史 压缩为决定与未解决事项
记忆 检索相关条目,不全量注入

预算不是死比例。调试任务可能需要更多日志,架构任务需要更多代码地图。Runtime 可以根据任务类型动态调整。

4. 工具输出是最大噪声源

一条测试命令可能输出上万行。正确结果对象应保留退出码、关键错误、头尾片段、截断标记和完整日志路径。模型先使用摘要,只有诊断需要时再调用 read_log 读取局部。

同样,大文件应支持按行读取和搜索。把 5000 行文件一次送入模型,不仅贵,还让下一轮更难聚焦。

5. 延迟加载

Skills 和 MCP 工具常使用渐进披露:开始时只提供名称和简短描述,模型选择后才加载完整说明。项目记忆也应先检索索引,再读取相关主题。这个模式可以概括为“先给地图,需要时再展开地形”。

子 Agent 是另一种上下文治理:让探索或日志分析在独立窗口进行,主 Agent 只接收摘要。它既节省主上下文,也减少中间噪声改变主任务判断。

6. 本章实验

实验 04 把系统、历史、文件和日志画成可调预算条。尝试让总和超过 100%,再分别选择丢弃旧输出、摘要和子 Agent。观察它们释放空间的方式不同,也会丢失不同信息。

错误直觉

上下文压缩不是无损压缩。摘要会选择性遗忘细节,因此完成标准、用户纠正、文件位置和未解决风险必须作为明确保留项。