tiered-compaction:DSH 分层上下文压缩

前言

在 DSH 里跑长会话、多轮工具调用时,上下文会不断膨胀。宿主默认做法是在接近阈值时调用一次 LLM 做整段摘要,用摘要替换历史。实现简单,但每轮压缩都是完整 LLM 调用;摘要还受输出 token 上限约束,长对话里中段内容往往最先被挤掉。

下面介绍社区插件 tiered-compaction(GitHub:2849236173/tiered-compaction,维护者 2849236173,分类:记忆)。它把压缩拆成四层递进管线,前三层不调用 LLM,只有真正触达阈值时才做一次带预算预留的摘要。插件以 MIT 许可发布,当前 package 版本为 0.3.0,契约层对齐 DSH 0.2.x 的 CompactionEngine 接口。

这是什么

DSH 分层上下文压缩插件:用「无损折叠 → 落盘 → 软压力 → 有损摘要」四层替代「阈值一到就整段 LLM 摘要」的单次策略。装好后通过 patch 接管官方 compaction 服务位,停用 dsh-compaction-basic;无需改配置即可生效。存档默认目录为 ~/.dsh/tiered-archive(不存在时自动创建)。

另有旁路:显式切换目标时,把旧目标的 todo/goal/plan 打成结构化胶囊并归档过程内容,同样零 LLM。

四层管线

层 做什么 成本
1 · 无损折叠 连续重复行(≥3 次)折叠为「首行 + …[folded Nx]」,附逆变换记录 零 LLM
2 · 落盘 超过 8KB(UTF-8 字节)的工具输出整体存档,上下文只留头尾预览 + 路径 + SHA-256 零 LLM
3 · 软压力 70% 窗口插入提醒;80% 按优先级驱逐可重放内容 零 LLM
4 · 有损摘要 到阈值才调 LLM 摘要,预算提前预留,摘要前全量存档 1 次 LLM

设计上有三条约束贯穿各层:每层留恢复机制(折叠逆变换、落盘 SHA-256、驱逐项记位置以便 read/grep/glob 重跑、摘要前全量存档);被取代内容登记谱系(原位置 → 新位置 → 取代者);单层连续失败可降级跳过并告警,仲裁器保证一份内容只归一层处理。

安装与启用

插件为纯 ESM + JSDoc,src/ 直出,安装前无需编译。DSH 按运行形态分 profile,装到哪个 profile 只在对应形态生效;不确定时可查看 ~/.dsh/profiles/ 下文件夹名(Windows 为 C:\Users\<你>\.dsh\profiles\)。

桌面客户端(最常用):

dsh plugin --profile desktop add "github:2849236173/tiered-compaction"

Web 版:

dsh plugin --profile web add "github:2849236173/tiered-compaction"

命令行 / 脚本(headless):

dsh plugin --profile headless add "github:2849236173/tiered-compaction"

终端交互(TUI):

dsh plugin --profile tui add "github:2849236173/tiered-compaction"

需要同时覆盖多种形态时,把 --profile 换成对应名字各执行一次。本地改源码并希望重启即生效时,可用本地路径软链安装(示例为桌面端,其它形态替换 profile 与路径):

dsh plugin --profile desktop add "D:\你的路径\tiered-compaction"

装完后重启 DSH,无需改配置。启动日志中应出现类似两行:

dsh-tiered-compaction 已接管 compaction 服务位(enabled=true,archiveDir=...)
dsh-tiered-compaction 观察者已注册(工具结果 → 第 1-2 层)

卸载示例(桌面端):

dsh plugin --profile desktop remove dsh-tiered-compaction

卸载后官方 dsh-compaction-basic 会随 patch 移除而自动恢复,重启即可回到默认压缩。

配置(可选)

默认装完即用。仅在需要自定义时在宿主配置中填写:

- id: tiered-compaction
  config:
    enabled: true                        # 默认 true
    archiveDir: ~/.dsh/tiered-archive    # 默认值,可改
    auto: true                           # 是否自动触发
    summaryTarget:                       # 摘要用哪个模型,不填则跟随当前会话
      provider: deepseek-official
      model: deepseek-chat
    modelPolicies: {}                    # 按模型覆盖阈值与重试次数
字段 默认 说明
enabled true 是否接管压缩服务位
archiveDir ~/.dsh/tiered-archive 落盘与摘要存档目录
auto true 是否自动触发(压力/溢出)
summaryTarget 会话路由 摘要用的 provider/model
modelPolicies {} 按模型覆盖阈值、重试次数等

典型用法与运行状态

日常无需额外操作:工具结果会经观察者进入第 1–2 层;压力升高时第 3 层提醒与驱逐;约 82% 压力附近触发第 4 层摘要时,日志会有 compaction/summary 记录。

在宿主日志中搜索 tiered-compaction 可查看健康状态,例如:

tiered-compaction 健康 window=1000000 pressure=12.7% l12=107/31repl/0fail l3=0evict spill=29 status=ok

status=ok 表示正常;status=warn 表示自检发现异常(如窗口读数为 0、前两层有失败但零成功、压力 ≥80% 却零动作、summaryTarget 只配一半等)。

仓库 README 还给出开发侧验证方式:全量单测 node --test test/*.test.js;端到端可用 node scripts/verify-e2e.mjs <会话文件>,会话文件位于 ~/.dsh/sessions/<工作区>/<会话ID>/session.v4.jsonl.zstd,用于验证摘要请求是否为正常对话请求的严格前缀(与 provider KV 缓存命中相关)。

适用场景与注意

适合谁:长会话、工具输出体积大、希望减少「一压缩就整段 LLM 摘要」次数的 DSH 用户;需要可审计、可回读存档而非静默删历史的场景。

权限与安全:插件在当前 DSH 进程权限下运行,会读写 archiveDir、接管压缩服务并处理工具结果文本。安装前应阅读仓库源码与 MIT LICENSE,确认可接受其行为与数据落盘位置。

已知限制(来自 README):

  • 宿主大版本升级后需重新核对 CompactionEngine 方法面。
  • 仅处理纯文本工具结果;含图片或附件的富块跳过。
  • 部分 provider 不发送 request/context 事件时,压力判定走保守路径。
  • 落盘预览固定预算(5120 字符,头尾 4:1);超大输出中间段不在上下文里,完整内容在存档中,凭路径与 SHA-256 回读。

DeepSeek Harness 生态强调「一切皆插件」;社区目录 SkillHub 插件页 为独立站点,与 DeepSeek / 幻方无官方从属关系。

结尾

tiered-compaction 用四层递进把大部分体积在前三层零 LLM 成本消化,摘要层再预留预算,并贯穿恢复机制与谱系登记。若你已在用 DSH 且常被默认单次摘要打断或丢中段信息,可按 profile 安装、重启后在日志里确认接管与观察者注册即可。

  • 目录页:https://www.skillhub.cn/plugins/2849236173/tiered-compaction
  • 源码与文档:https://github.com/2849236173/tiered-compaction
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜