billion-context-dsh:让模型自己决定何时压缩上下文

前言

在 DeepSeek Harness(DSH)里跑长对话或长任务时,上下文窗口迟早会被填满。常见做法是按固定上限硬截断,早期消息被悄悄丢掉,路径、决策和错误信息随之丢失。DSH 自带 compaction-basic 会用自动生成的摘要替换一段范围,但摘要由另一次 LLM 调用写出,时机和范围不由当前模型掌控。

billion-context-dsh 走另一条路:把 Active Context Pruning(ACP)接到 DSH 的 CompactionEngine 上,给模型 compressdecompresssearch_contextacp_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
羽毛球分组比赛记分
小程序二维码

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

小夜