LAYER 04 · 理解安全与耐久性

Compaction、Token Meter 与 Spill

不是粗暴截断,而是在仅追加日志上安全替换模型表面、保留大结果与可审计记账

21 min3 处源码锚点upstream@47f9438
measure → prune → summarize → replace surface
本章要解决的问题

如何缩短模型上下文,同时不破坏工具 call/result 配对、不删除原始事实?

先建立直觉

档案馆不销毁卷宗,而是建立一份摘要索引供日常查阅;超大附件移入保管库,目录里保留定位符、大小与取回说明。

MECHANISM

机制拆解

TokenMeter 对当前 surface 逐节点计价;Compaction 先记录 start 锁,可选 prune 工具结果,再生成 summary 和带 replace 的 user/message,最后 end。

Spill policy 在 tools/post-execute 把超大纯文本完整保存到 session 私有后端,只把首尾预览与不透明 locator 交给模型;保存失败则保留原结果。

第 1 步 / 共 6 步

测量压力

usage 锚点或保守启发式得到 totalTokens。

INVARIANTS

无论怎么扩展,都不能破坏

  • 压缩边界保持工具 call/result 平衡
  • start/end 锁包围整个操作
  • spill locator 是不透明句柄,不假定本地路径
FAILURE MODES

最容易踩中的坑

  • ×按 seq 数值范围选择表面节点
  • ×摘要失败后仍写成功 end
  • ×spill 保存失败把成功工具调用改成 error
VERIFY IN SOURCE

不要相信结论,去源码里复核

以下链接固定到官方 deepseek-harness@47f9438;查看当前上游时请留意后续 breaking changes。

KNOWLEDGE CHECK

先停十秒,再揭晓答案

为什么 compaction/start 和 end 是 log-only 事件?

为什么下一章紧接在这里

Compaction 仍建立在完整日志上;下一章看日志怎样跨进程持久化,并通过 projection/query 高效读取。

Learn DeepSeek Harness

独立教学项目。解释力来自源码,判断边界以官方仓库为准。