Skip to content

Compaction zh

pawaca edited this page Aug 30, 2026 · 1 revision

压缩

上游上下文窗口管理系统在 Edge 中的适配。

上游参考:Compaction

上游提供了什么

压缩通过摘要旧的对话片段来保持长会话在模型上下文窗口范围内。遵循能力接缝模式,分三层:

  • CompactionEnginectx.compactiondsh-compaction)— 服务定义:触发策略、范围选择、锁语义、持久事件生命周期(compaction/startcompaction/summarycompaction/end)。
  • BasicCompactionEnginedsh-compaction-basic)— 提供者:用 LLM 生成摘要。触发条件:pressure(正常阈值)或 context-overflow(提供者确认,更激进)。在 agent/pre-step 阶段、请求派生之前运行。
  • ToolResultPrunerdsh-compaction-tool-result-pruner)— 可选的预压缩步骤:确定性地裁剪过长的工具结果文本(中间切片,保留块顺序),可能回收足够空间以跳过完整摘要。

压缩事件仅存在于日志——摘要以 user/message + surfaceOp: replace 指令出现,遮蔽原始范围。操作由 start/end 锁事件包裹,用于检测跨崩溃的不完整压缩。

Edge 改了什么

全部压缩插件

BasicCompactionEngineToolResultPruner 全部原封安装,零 Edge 代码。无配置覆盖、无适配器、无补丁。压缩使用与普通 turn 相同的 LLM 提供者(DeepSeek),LlmRuntime 可用后即自动工作。

Edge 没有改什么

  • 触发策略(压力阈值、上下文溢出检测)
  • 范围选择算法(平衡的工具调用/结果对)
  • LLM 摘要生成和摘要事件格式
  • 工具结果裁剪策略(Unicode 码点度量、中间切片)
  • 锁语义和崩溃恢复
  • 压缩事件(compaction/startcompaction/summarycompaction/endcompaction/prune

性能特征

压缩触发时机

压缩在 agent/pre-step 阶段运行——每次模型请求之前——当上下文窗口承压时。引擎先尝试工具结果裁剪(低成本,无 LLM 调用)。如果裁剪不够,选择一段旧事件并通过 LLM 调用生成摘要。这为该步骤增加一次额外的 LLM 往返,通常 2–5 秒。

压缩 vs chunk packing

两者是独立的优化,解决不同的问题:

| 关注点 | 压缩 | Chunk Packing|

问题 上下文窗口溢出 DO SQL 行数限制
层次 模型上下文(surface 事件) 存储(持久化行)
--- --- ---
机制 LLM 摘要 + surface 替换 合并连续 chunk 事件为单行
--- --- ---
所有者 上游 BasicCompactionEngine Edge DurableObjectSessionPersistence
--- --- ---
触发 pre-step 时上下文压力 每次事件批写入

压缩减少模型看到的内容。Chunk packing 减少数据库存储的行数。两者可以在同一个 session 上独立运作。

架构总结

| 组件 | 分类 | Edge 代码|

BasicCompactionEngine 一行 ctx.plugin() 调用
ToolResultPruner 一行 ctx.plugin() 调用

关键观察:压缩是纯上游能力,零 Edge 适配。引擎、裁剪器、触发策略和事件生命周期全是上游代码。Edge 只提供两行 ctx.plugin() 安装——最小可能的集成。

English

中文

Clone this wiki locally