HARNESS / 代理工程下载 EPUB ↓
13 / 32

第十二章:上下文是一份预算内的证据视图

12.1 保存的历史不等于发送的上下文

应用可以保存完整会话树、日志和工具附件,但模型本次只接收构造后的请求。把两者分开,是理解压缩、分支与大结果处理的前提。一个界面能翻到旧消息,不表示模型当前也能看到它。

DeepSeek 的 Session 从有效 surface 派生消息,Pi 先变换应用上下文再转成模型消息,提供了两种具体入口。它们都说明模型视图是一项显式计算,而不是把存储文件原封不动发送出去。DeepSeek Harness · index.ts L982–996 Pi · agent-loop.ts L388–402

12.2 预算应给必要部分留位置

一次请求需要系统指令、用户目标、工具规格、历史、当前证据以及预留输出空间。若只按“历史能塞多少塞多少”分配,可能把关键目标或新读取结果挤掉。较好的策略是先分配不可缺项,再考虑历史保留和压缩。

字符数只是教学近似,真实 token 数还受模型分词、图片、工具协议与服务端计数影响。本书实验只限制预览字符数、文件字节数和请求次数,不把它们伪装成精确 token 预算。接入真实提供方时,需要记录实际用量与估计之间的偏差。

12.3 三种减量手段不要混用

截断是保留一部分原文;外置是保存完整结果并返回引用;摘要是用更短文本表达含义。截断和外置可以保留原始证据的可恢复性,摘要则可能失去细节。它们常常组合使用,但必须标明模型当前看到什么。

Claude Code 的工具结果预算可以记录内容替换,自动压缩另有触发判断。Pi 的压缩准备函数选择需要处理的范围;Codex 也有独立的内联压缩任务入口。这些证据支持把结果预算与对话压缩当成不同职责。Claude Code 2.1.88 提取快照 · toolResultStorage.ts L922–936 Claude Code 2.1.88 提取快照 · autoCompact.ts L158–172 Pi · compaction.ts L857–871 Codex · compact.rs L115–129

12.4 摘要需要保留可继续工作的结构

针对长任务,一份有用摘要至少应保留目标、当前已确认事实、已经修改的文件、验收证据、未决问题和下一步。不能把尝试过的方案写成最终事实,也不能省略重要拒绝或限制,造成下一轮误以为获得更大授权。

更稳妥的做法是区分“事实”和“待核查假设”,保留重要文件路径与结果定位符。摘要可以告诉模型在哪里找证据,但不应代替重新读取已发生变化的文件。

12.5 用丢失信息实验研究压缩

准备一个长会话,在较早位置埋入一个确切约束,例如“不得改变 public API”。压缩后检查模型视图,核对约束是否保留,再观察后续任务。这样能够测量具体的信息保留情况,而不只问摘要读起来是否流畅。

本书实验不实现模型摘要,理由是先把消息投影与外置证据做清楚。读者可以扩展一个 ContextBuilder,记录每次请求选择了哪些事件与附件,再加入摘要。第一项验收应当是可解释地重建请求,而不是宣称上下文已经“无限”。

非官方学习读物 · 固定源码快照 · 原始代码保留各自许可。GitHub · 源码依据 · 实验代码