LAYER 04 · 理解安全与耐久性
Compaction、Token Meter 与 Spill
不是粗暴截断,而是在仅追加日志上安全替换模型表面、保留大结果与可审计记账
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 高效读取。