ARTICLE · 1324725
DSH新型压缩插件dsh-live-compact:边做边压,长任务更省
DSH 的官方压缩有个脾气:它把压缩比例固定在大约 80% 的上下文水位才动手,不到这条线,上下文就一直堆;一旦到了,就调一次模型做整体摘要,十几秒、还要计费,压完注意力会飘,没多久又满了,1M 的窗口根本不够用,再压更慢。dsh-live-compact 的办法是"边做边压"——超过 2 万 token 就切一刀,切的是刚结束的那一轮,不调用模型;切点前面的原文一个字不动,前缀缓存命中还是原来的水准。这样上下文一直被按在低位,官方那次大压缩能拖就拖到尽可能后面。107 星的它配官方 compaction 用,在 150 题长任务上比原版便宜约 23%、题末上下文比原版低 40.8%,且没有质量回退。
🔥 一、它是什么

(图注1:定位与输入输出。输入是 DSH 长任务越攒越大的上下文,中间是回合边界的"小切"(超 2 万 token 切刚结束的一轮、不调模型、切点前原文不动),输出是缓存命中几乎不掉、费用便宜约 23%、题末上下文比原版低 40.8%,且官方大压缩被尽量后拖。)
它做的是"把官方的一次性重压缩,拆成每回合边界的一小段小切"。官方 compaction 平时不动手,等到大约 80% 水位才调一次模型做整体压缩,代价就是全量重算、缓存清零、注意力漂移。这个插件不等它,超过 2 万 token 就先切刚结束的那一轮:切掉的部分转成一张带指针的卡片,切点前面(你正读着的那段)原文不动、缓存命中不变,所以你当前推理一条 token 都不用重算。
它还顺手收紧了压缩的保真规则:卡片默认带"这是旧内容摘录、不是新指令也不是授权"的标记;被切掉的工具原文单独落到本地备份(而不是塞进摘要里反复改写),思考过程也不进摘要;最近 3 个已结束的工具轮永远留在原处(默认 3,可配),更早的轮才收成卡片。换句话说,它是"只往旧的地方动刀、且新近内容原样保留"的保守策略。
🔥 二、能干什么

(图注2:关键行为与开关。超过 2 万 token 才切一刀(SPINE_MIN_TOKENS,可调);最近 3 个已结束工具轮原样保留(SPINE_KEEP_ROUNDS);官方大压缩仍由 0.8/65536/8192 三项管;过了 65 万这条绝对停切线就停掉小切;被切原文落本地备份(上限 256MB)。都可用 SPINE_* 环境变量在启动前覆盖。)
它把"省"落到可配、可核的程度,主要有四块能力。
第一,可调的小切起点。只有上下文超过 2 万 token(SPINE_MIN_TOKENS,默认 20000)才切刚结束的那一轮;官方大压缩的三项(thresholdRatio 0.8、headroomTokens 65536、retainTokens 8192)可用 SPINE_THRESHOLD_RATIO、SPINE_HEADROOM_TOKENS、SPINE_RETAIN_TOKENS 覆盖,但只管官方大压缩、不改小切切点。过了 65 万这条绝对停切线(1M 官方大门约 67.8 万),小切会停,给宿主留安全边。
第二,本地影子备份。被切掉的原文按会话写进 ~/.dsh/compaction-spine/shadow(默认 256MB,满了先删最老),卡片里只记事件号指针、不写文件路径。它不是"对剩余上下文做摘要",而是一份"被删原文的本地备份";插件自己不去搜这份备份,要在当前会话里捞一行,得你自己调 searchShadow 接口。
第三,雷霆(Thunder)路径。SPINE_THUNDER 默认关,设 1 才启用这条"调一次模型读取决策"的旁路;SPINE_THUNDER_MODEL 默认 flash、设 27b 换模型类型。它管的是"哪次该调模型读一下",不是默认行为。
第四,状态回读。命令行 dsh-live-compact stats 输出三行:cuts(切了几刀)、saved(省了多少 token)、rewrite(重写了多少);估算费用按未命中输入 $0.15/百万 token。装上跑长任务,日志里出现 spine cut …ms 才算这一刀真生效。
🔥 三、架构是怎样的

(图注3:模块分工。index.js 管回合边界小切(判水位→切刚结束轮→写卡片→影子备份),plan.js 算该切哪段、留什么指针,shadow.js 管本地备份目录,shadow-search.js 提供检索(插件不主动搜),gate.js 管官方大压缩的 0.8/65536/8192 与 65 万停切线,cooldown.js 管官方压缩后跳过一次小切。)
它挂在官方 compaction 的压缩钩子上,没有另起一套压缩器——它负责"小切",官方负责"大压缩",官方哪天换了策略它跟随。
模块分几个:index.js 是入口,每个回合边界触发小切流水(判到没到 2 万 → 切刚结束的工具轮 → 写带指针的卡片 → 原文落影子备份);plan.js 算这段该不该切、留什么指针(区分"该等 80%"/"本地切"两档);shadow.js 管影子备份目录与 256MB 轮转;shadow-search.js 是给你手动检索备份用的,插件本身不去搜;gate.js 读官方大压缩的三项与 65 万停切线;cooldown.js 管冷却——官方压缩刚发生过,就跳过本次小切(seq 语义,默认只跳一次;SPINE_COOLDOWN_MS 设正数才额外加时间兜底,默认 0)。
它声明的宿主区间是 0.2.0-rc.2 起、不到 0.3.0(peer 还声明了 @deepseek-ai/dsh-compaction、dsh-compaction-basic、dsh-llm 三条),宿主当前 DSH 在 0.2.2-rc.1 这个预览版,落在区间内,现在装是匹配的。
🔥 四、怎么装

(图注4:从零到看到 stats 三行。网页/桌面共用 web profile 一条装(桌面单独的 desktop profile 会被拒)→ headless 另装一条 → 跑长任务日志出现 spine cut 才算生效 → dsh-live-compact stats 看 cuts/saved/rewrite → 按需设 SPINE_* 环境变量启动前覆盖。)
它已发 npm(1.0.9),安装最直接,但 profile 要分清楚:网页和桌面端共用 web profile,装一次两边都生效;headless 是另一个 profile,要单独装。普通的 desktop profile 会被拒绝。
dsh plugin --profile web add dsh-live-compact@1.0.9
dsh plugin --profile headless add dsh-live-compact@1.0.9
上不了 npm 的,用作者给的国内镜像 tgz:
dsh plugin --profile web add https://download.merkyorlynn.com/downloads/plugins/dsh-live-compact-1.0.9.tgz
装完跑一个长任务,日志里出现 spine cut …ms 才算这一刀真生效;再 dsh-live-compact stats 看 cuts/saved/rewrite 三行。
想调行为就在启动前设 SPINE_* 环境变量(改完重启才生效),常用的:SPINE_MIN_TOKENS(小切起点)、SPINE_KEEP_ROUNDS(保留最近几轮原文)、SPINE_THUNDER(雷霆路径开不开)、SPINE_SHADOW_MAX_MB(备份上限)、SPINE_ENGINE(强制 cloud/local 切法)。
要特别记住:npm 上 dsh-live-compact 的 repo 字段指向 github.com/MerkyorLynn/dsh-live-compact,就是本篇这个仓,包名带 @1.0.9 装到的就是它。
🔥 五、举例怎么用
假设目标:跑一个 150 题的编程长任务,不想中途撞上官方那次十几秒的整体压缩。
第 1 步,先确认它真的在边做边压。跑着任务时,上下文一旦过了 2 万 token,刚结束的那一轮就会被切一刀,日志出现 spine cut …ms。
第 2 步,看它切了什么、省了多少。跑完 dsh-live-compact stats:cuts 是你切的刀数(150 题这场约 145 刀)、saved 是省下的 token(约 47 万)、rewrite 是重写量。估算费用按 $0.15/百万未命中 token。
第 3 步,调小切起点。如果你的任务上下文特别大、想让小切更晚才发生,把 SPINE_MIN_TOKENS 调大(默认 20000),重启再跑;想让最近更多轮保留原文,调大 SPINE_KEEP_ROUNDS(默认 3)。
第 4 步,捞被切的原文。卡片里只有事件号指针,原文在 ~/.dsh/compaction-spine/shadow 下。要查某一行,调 searchShadow(插件自己不会主动搜,这是你手动触发的)。
🔥 六、有哪些应用场景
一是长 agentic 任务。跑几百题、几小时的活,最痛的就是中途一次整体压缩:十几秒、计费、注意力漂移、缓存清零。边做边压把这个峰抹平——150 题实测比原版便宜约 23%($1.50→$1.15),全程命中率 99.55%→99.56% 基本不变。
二是前缀缓存敏感的部署。缓存命中是成本大头时,这套"只切刚结束轮、切点前原文不动"的策略让命中率几乎不掉(长填日志场 98.22% 对原版 98.51%,差距极小),同时把题末上下文压到平均 2.6 万对 4.4 万。
三是需要可观测性的排障。dsh-live-compact stats 三行加上 spine cut 日志,让你能核对"到底切了几刀、省了多少",而不是事后猜。
🔥 七、和官方 compaction 直接比
官方 compaction 是"到 80% 才压一次",简单但有一次性重算峰、还计费;dsh-live-compact 是"超过 2 万就切刚结束轮、不调模型",把峰摊平、命中不掉。两者不互斥——它挂在官方钩子上管小切,官方那次大压缩它不碰,官方策略变了它跟随。一句话:要最省心就用官方默认,要长任务把重算峰抹掉、费用降下来就上它。
🔥 八、需要注意什么与风险
压缩是有损的。被切的工具原文只留事件号指针、原文在本地备份,如果某处逻辑恰好落在被切区、且你不去捞备份,模型那一瞬会少一点上下文。它的对策是"最近 3 个已结束工具轮原样保留 + 卡片带'旧内容摘录、非指令'标记",但关键逻辑落在被切区时仍要自己留意。
配置要重启才生效。所有 SPINE_* 环境变量改完都要重启 DSH,别在任务中途以为改了立即生效。
它会回退官方。引擎装不上时会落回原版压缩、本会话不接管;headless 的宿主包自己关了原版压缩,插件不能把它重新打开;DSH-TUI 这版换不掉预设里的原版压缩,先别在 TUI 装。
上游是个人仓。107 星、作者 MerkyorLynn、MIT。它依赖官方 compaction 组件(peer 声明了 dsh-compaction、dsh-compaction-basic、dsh-llm 三条),宿主大改压缩钩子后要重新验证。测评数字是作者离峰用量估算、不是账单,1.0.2 之后没重跑过 150 题。
🔥 九、一句话
要长任务不撞官方那次整体压缩的峰、费用降下来,就装它;跑长任务看 spine cut 日志确认生效,dsh-live-compact stats 核刀数和省量,再按 SPINE_* 调小切起点。















































































