前言¶
在 DeepSeek Harness(DSH)里跑长对话或长任务时,上下文窗口迟早会被填满。常见做法是按固定上限硬截断,早期消息被悄悄丢掉,路径、决策和错误信息随之丢失。DSH 自带 compaction-basic 会用自动生成的摘要替换一段范围,但摘要由另一次 LLM 调用写出,时机和范围不由当前模型掌控。
billion-context-dsh 走另一条路:把 Active Context Pruning(ACP)接到 DSH 的 CompactionEngine 上,给模型 compress、decompress、search_context、acp_status 四个工具,由模型决定何时压缩、压缩什么。压缩内核来自 acp-kernel,整体从 billion-context-pi 移植,适配层针对 DSH 的 durable-surface 模型重写。维护者为 Tyan66666,当前版本 v0.2.13,MIT 许可证;README 明确标注测试版,请勿用于生产环境。
这是什么¶
billion-context-dsh 是 DSH 的上下文压缩插件,分类上属于模型推理相关能力。它注册为 compaction-acp 后端,在 host 平面挂载四个模型工具、/acp 命令、nudge 提示和 ACP 系统提示段。自动策略只提醒(nudge),不强制摘要;compactIfNeeded 返回 null,不做自动统一压缩。
与硬截断相比,压缩后的摘要成为 checkpoint 节点,原文保留在 append-only 会话日志里,可用 decompress 恢复,或用 search_context 在块内检索。
核心功能¶
模型驱动的压缩¶
模型通过 compress 工具,用自写的高保真摘要替换指定 seq 范围。边界会自动对齐到 tool-call/result 配对点。对某块摘要节点再次压缩即分层蒸馏(tier 2/3),tier 与块 id 写入日志,重启后从日志再水合。
四个模型工具¶
| 工具 | 作用 |
|---|---|
compress |
用紧凑摘要替换 seq 范围;对块摘要再次压缩 = 分层蒸馏 |
decompress |
只读恢复已压缩块的原文;接受 acp_status 中的 bN 或 compaction id |
search_context |
从日志重建块摘要与被遮蔽原文,交 acp-kernel searchBlocks 做 hybrid 检索(词干化、CJK bigram、字符 n-gram 模糊),命中回链所属块 |
acp_status |
报告上下文分解(tool/text/summaries 占比)、压缩块账本、nudge 决策行、Checkpoint seqs;支持 scope/view/tool/sort/limit 钻取 |
nudge 与持久化¶
上下文压力高时,内核在 agent/pre-step 注入 nudge:效率提示、上下文分解、压缩规则与可压缩范围表。这是建议,不是命令。压缩对应 surfaceOp: { op: 'replace' },原文仍在日志中;块状态由内存内核加日志账本维护,无旁车文件。
与 DSH 内置压缩的差异¶
- 摘要由当前模型书写,无第二次 LLM 摘要调用
- 只 nudge、不强令;是否压缩由模型决定
- 压缩范围可恢复、可检索;长任务中关键结论可叠加保留
- 每次请求上下文保持精简,避免大段统一压缩导致细节衰减
bundle 安装会禁用 host 的 compaction-basic,避免同一 realm 内两个 ctx.compaction 后端冲突。shipped 预设(standard / code / cordis)内部的 realm 级 compaction-basic 仍保留,ACP 工具与 nudge 与之并存;minimal 等不带 compaction realm 的预设直接使用本引擎。
安装与启用¶
插件以当前 dsh 进程权限运行,安装前建议阅读源码与 LICENSE。要求 Node.js >= 20;peer 依赖 @deepseek-ai/dsh-compaction 为 ^0.1.0-rc.6 || ^0.1.1-rc.1。
方式一:DSH 插件商店或 bundle 安装(推荐)¶
在 DSH 插件商店安装,或执行:
dsh plugin --profile web add billion-context-dsh
命令会安装 npm 包并把 cordis.patch.yml 挂进该 profile 的层栈:禁用 host compaction-basic,把 ACP 引擎挂到 host 平面。窗口自动探测,工具、命令、nudge 默认全开,无需手工配置。
装完后重启 dsh(bundle 层在启动时组合),新开会话即可用。让模型调用 acp_status 或执行 /acp status 自证是否生效。
也可直接装 npm 包:
npm install billion-context-dsh
配合上述 dsh plugin 命令时,包会一并安装;单独 npm install 不会触碰 profile,需手写组合行。
方式二:纯 npm 安装后手写组合¶
npm install billion-context-dsh
在 profile 补丁(如 ~/.dsh/profiles/web/cordis.patch.yml)中追加:
# 必须禁用 host compaction-basic,避免 ctx.compaction 冲突
- id: compaction-basic
disabled: true
- insert:
- id: compaction-acp
name: 'billion-context-dsh'
config:
modelContextLimit: 128000 # 可选;省略时自动探测模型窗口,回退 128000
bundle 用户若只想改配置,用同 id 行覆盖即可:
- id: compaction-acp
name: 'billion-context-dsh'
config:
modelContextLimit: 128000
可选通过 config.prompts 自定义 nudge 文案与工具描述;占位符拼写错误会在引擎启动时 fail-fast。详见仓库 docs/configurable-prompts-design.md。
完整安装与验证步骤见 docs/INSTALL.md。若希望 DSH agent 代为安装,可将该文档交给会话中的 agent,在 ~/.dsh 下编辑配置并调用 acp_status 自证(需批准文件权限)。
典型用法¶
验证插件已挂载¶
新会话中让模型执行:
/acp status
或调用工具 acp_status,应返回 CONTEXT BREAKDOWN、压缩块账本与 nudge 相关信息。
压缩一段对话¶
当 nudge 提示上下文使用率偏高时,模型可调用 compress,指定 seq 范围并附上摘要。例如压缩 seq 10–50 区间的探索过程,摘要中保留文件路径、关键决策与错误信息。压缩后可见上下文缩短,原文仍在日志中。
恢复与检索¶
需要核对早期细节时,用 decompress 传入 acp_status 显示的 bN 块 id。跨多个压缩块查找关键词时,调用 search_context,由内核 hybrid 检索并回链命中块。
分层蒸馏¶
对已有压缩块的摘要节点再次 compress,即对该块做 tier 2 蒸馏;对 tier 2 块再压缩得 tier 3。适合超长任务中逐步浓缩旧段,同时保留可恢复的 checkpoint 结构。
适用场景与注意¶
适合谁
- 在 DSH 上跑代码 agent、长文档分析、多步调试等超长会话的开发者
- 希望上下文由模型按需压缩、而非硬截断或统一自动摘要的场景
- 已使用或计划使用 DSH web profile 的用户(bundle 一键挂载)
注意事项
- v0.2.13 与 DSH 本身均为测试版,README 声明请勿用于工程化或生产环境,预期有破坏性变更
- 同一 realm 内只能有一个
ctx.compaction后端;勿与compaction-basic并存 shadowedTokenCount使用宿主 token-meter 计价,不与插件内部 CJK 估算混用- SkillHub 目录页为社区站点,与 DeepSeek / 幻方无官方从属关系;安装命令以 README 与
dsh plugin为准
结尾¶
billion-context-dsh 把 ACP 的「模型决定何时、压缩什么」接到 DSH 的 durable-surface 上:四个工具、可恢复日志、nudge 提醒与分层蒸馏,面向长任务上下文管理。GitHub 上约 43 stars、5 forks。
- 目录页:https://www.skillhub.cn/plugins/Tyan66666/billion-context-dsh
- GitHub:https://github.com/Tyan66666/billion-context-dsh
- npm:
billion-context-dsh