flowctx-dsh · DeepSeek Harness 上下文引擎

记忆应当渐远,而非骤断。

一个观点:上下文不是「装满就截断」的缓冲区,而是一段有纵深的记忆 —— 越近越清晰,越远越凝练,却从不真正遗忘。

主流做法在窗口溢出时一刀切截断较早的回合,把其中的工作知识连同退路一起丢弃。flowctx-dsh 是一个 DeepSeek Harness (DSH) 上下文引擎插件,换一种取舍:按与当前任务的距离分档保真 —— 离得越远,压得越狠;离得越近,保得越全;当前正在做的事,分毫不动。原文则始终可按需还原。于是前缀缓存稳、推理不掉速、任务不断线 —— 三者兼得,而非彼此让步。三档:

  • 更早历史摘要压缩 —— LLM 折叠成分层交接笔记,逐字保留失败做法与关键标识符。
  • 临近过往轮结构化压缩(零 LLM)—— 按内容类型确定性压缩,可字节级还原。
  • 当前轮任务零语义丢失 —— 原文原样入模,不压缩、不摘要。
  • C3可逆 · 可审计 原文以 SHA-256 内容哈希留存,模型经 flowctx_retrieve(hash) 字节级取回 —— 压缩视图有损,原文无损。
  • C5KV-Cache 友好 前缀靠压缩幂等(同内容→同哈希→跨回合同字节)保持稳定;摘要仅罕见触发、不扰动前缀。
  • C4后台化 · 不阻塞 摘要越过阈值才触发,跑在主模型上、fire-and-forget,当前回合从不等它。
  • C2仅追加 · 持久化 从不改写宿主会话;压缩只发生在 assemble() 读时投影,磁盘永远是未压缩的原文真相源。
阶段 1 · 初始化

一开始 —— 全是原文,一点不压。

会话刚起步,还没有历史。每个回合 DSH 调用引擎的 assemble(),消息按引用原样透传流入窗口 —— 字节不变、服务商 KV 缓存始终命中、不调 LLM。此刻只有当前这一轮、窗口占用还很低,没有任何压缩发生,右侧全是原文。

assemble · 按引用透传
前缀消息按引用原样透传,字节不变 → 前缀缓存持续命中。轻量、零 LLM。
阶段 2 · 结构化压缩(<100k)

有了历史,但还没满 —— 过往轮先做结构化压缩。

轮次积累,装配量升到约 52k(仍未越过 100k 门控),所以还不需要摘要。flowctx 先做结构化压缩:已离开当前任务的过往轮里,那些超大工具结果(读过的整份源码、跑过的长日志)按内容类型确定性压缩(零 LLM、可字节级还原);中间结构相似的若干轮直接省略。当前轮始终原文不动。

detectContentType · 过往轮 tool_result 按类型路由
代码折叠保签名 / JSON 保结构骨架 / diff 保 hunk / CLI 规则引擎。原文按 sha256[:24] 存储,替换为标记:
[flowctx: code compressed 8400→190 chars · flowctx_retrieve(hash="a91f…")]
tool_use 中间调用块始终原样透传,只压结果。
阶段 3 · 首个 leaf chunk(达到 100k)

窗口快满了 —— 分段有序的压缩,而不是全部。

光靠结构化压缩,窗口占用还是逼近了 100k 门控。这时 flowctx 才动用摘要,而且很克制:不会一口气把历史全压掉,只把最旧的那一段切出来、折成一个 leaf 节点(d0-1-3)。更旧的其余历史排在后面,轮到了再逐段折;离得近的过往轮此刻仍是结构化压缩,并不摘要。折出来的这一段,留下一份交接笔记 —— 失败的做法、关键的标识符,一字不落,原文也随时能按哈希取回。

leaf chunk d0-1-3(深度 0) · 后台摘要 · 真实审计
caller=context-engine.turn.maintenance · 输入 12,875 → 输出 3,400 tok · $0.059
每段最多 leafChunkTokens,越过门控才触发 —— 摘要是最后一档手段。
阶段 4 · 多个 leaf chunk → condense

轮次越来越多 —— chunk 逐个折叠,攒够再 condense。

对话继续,更旧的历史一个 chunk 接一个 chunk地被折叠成独立 leaf(d0-1-3 · d0-4-6 · d0-7-16 …)—— 每个 chunk 按话题独立成块、互不稀释,早期话题不淡出。当同层 leaf 累积到 condenseFanout 个,flowctx 把它们 condense 成一个深度 +1 的上层节点 d1-1-31,子 leaf 被遮蔽、只注入这一块 —— 极长会话摘要块数量始终有界。这才是「渐进折叠」:从单个 chunk,到多 chunk,再到 condense。

leaf chunk 累积 → condensed 节点 d1-1-31(深度 1)
d1-1-31 · childIds=[d0-1-3 · d0-4-6 · d0-7-16 …]
真实 run 全程仅 4/40 点越过 100k,每次折一个 chunk 就拉回;装配量稳压在阈值附近。
阶段 5 · 终态

终态:三档分层稳定,没有东西真正丢失。

系统进入稳态,右侧呈现清晰的三档:更早历史收敛为有界的 condense 节点 · 临近过往轮结构化压缩 · 当前轮始终原文、分毫未压。原文、scratchpad、各层摘要全部持久化到 SQLite,经 flowctx_retrieve(hash / node) 字节级还原,重启零 LLM 重建。这套分层同时守住前缀缓存、推理性能与任务完成率。

上下文窗口 Context Window flowctx
窗口占用0%
等待消息流入…
摘要 DAG0 个节点
向下滚动 ↓