前言¶
在 DSH(DeepSeek Harness)里跑长会话时,上下文窗口会被大段日志、抓取页面、工具输出占满。社区插件 billion-context-dsh(ACP)可以把一段上下文压成 Agent 自己写的摘要,这是常用的「减负」方式。但有些内容并不适合压成摘要:可能以后还要原文对照的长日志,可以直接移出窗口;已经没价值的死胡同检索或过期快照,则希望干脆删掉,既不写摘要也不落盘。
billion-context-relief 由维护者 markelayan 发布,分类属于「记忆」类 DSH 插件,是 ACP 的配套插件。它提供「导出到文件并留指针」和「无文件删除」两种显式操作,并附带发现大块上下文与管理导出文件的工具。README 明确说明:没有任何自动压缩、导出或删除;唯一会自动出现的是仅作提示的 advisor 通知。
这是什么¶
- npm 包名:
billion-context-relief(当前资料中版本为0.1.2,MIT 许可证) - 定位: Agent 按需请求的 context relief,Companion to billion-context-dsh (ACP)
- 运行环境: Node.js
>= 20;声明兼容 DSH0.2.0-rc.2,不支持 DSH0.1.x - 依赖关系: 不自带压缩引擎;peer 依赖
billion-context-dsh,且 ACP 必须是 profile 里当前激活的 compaction engine(在dsh.profile.bundles中替换compaction-basic)
没有安装 ACP、或使用了其他压缩引擎时,本插件各工具会说明需要 ACP,且不会改动上下文;advisor 也会保持静默。
与 ACP 的分工¶
ACP 通过 compress 路径做替换;本插件的每一次替换也走同一路径,因此与已有 ACP 块的行为一致。README 概括两类场景:
| 场景 | 工具 | 效果 |
|---|---|---|
| 体积大但可能还要原文 | context_export |
把区间写到临时文件(模型不读文件内容),窗口内换成一行指针 |
| 已无继续保留价值 | context_delete |
丢弃区间,无摘要、无文件;资料描述为带 DELETED REFERENCES 标记 |
此外:context_large_blocks 只读列出保护区外 oversized 项;context_exports 按名称管理已导出文件。
区间边界使用 surface seq(整数)或 ACP 的 mNNNNN ref,与 context_large_blocks、acp_status 输出一致;区间为闭区间。
核心工具(已核实能力)¶
context_large_blocks¶
只读扫描,帮助决定「动哪一段」。可选参数包括 largeMessageTokens、largeTurnTokens、largeBlockTokens(单次覆盖阈值)、limit(1–50,默认 20)。输出给出阈值、seq 范围、估算 token、距今轮数等;不展示正文内容。说明中提到:turn 条目与其中的 message 会重叠,应对其中一种操作,不要重复处理。
context_export¶
将已完成上下文的一个区间写入临时文件,并用一行指针替换该区间。
| 参数 | 说明 |
|---|---|
startSeq / endSeq |
必填;seq 或 mNNNNN |
name |
可选,文件名提示,例如 pytest-run-3 |
note |
可选,保留在指针中的一行说明(资料截断处标明最大 120 字符) |
context_delete / context_exports¶
- context_delete: 删除指定区间,不生成摘要文件(package 描述:带 DELETED REFERENCES 标记)。
- context_exports: 管理按名称保存的导出文件;卸载插件后,已产生的 export 文件仍留在磁盘,需自行清理(见 README Exports 一节)。
拒绝与安全边界¶
README 设有 「What it refuses」:例如已在 ACP 块内的区间会拒绝(涉及 AlreadyCompressedRangeError)。具体规则以仓库文档为准。插件以当前 DSH 进程权限运行;安装前建议阅读源码与 LICENSE,并理解导出文件落在临时目录(日志示例:exports in <tmpdir>/billion-context-relief)。
安装与启用¶
DSH 生态是「一切皆插件」;插件目录站 SkillHub 上的条目 与 GitHub 仓库由社区维护,并非 DeepSeek / 幻方官方应用商店。
1、先装 ACP(profile 尚未有时)
资料给出的测试组合为 GitHub 固定 ref:
dsh plugin --profile web add "billion-context-dsh@github:Tyan66666/billion-context-dsh#2026-09-30_dsh-0.2-seam-port"
npm 上 billion-context-dsh@0.2.26 文档标注为预期可用但未在 relief 侧实测。
2、安装 billion-context-relief(推荐 npm)
dsh plugin --profile web add billion-context-relief
固定版本示例:
dsh plugin --profile web add billion-context-relief@0.1.2
或从 GitHub release 标签安装:
dsh plugin --profile web add "billion-context-relief@github:markelayan/billion-context-relief#v0.1.2"
升级:
dsh plugin --profile web update billion-context-relief
dsh plugin add 会写入 profile 的 package.json 和 dsh.profile.bundles,运行中的 DSH 无需重启即可加载;新工具只出现在安装之后新开的 session 里,旧 session 需重新打开。
3、确认加载
dsh web 时可查看 ~/.dsh/dsh-web.log,应出现类似:
[billion-context-relief] ready — tools: context_large_blocks, context_export, context_delete, context_exports · advisor=true · exports in <tmpdir>/billion-context-relief
卸载:
dsh plugin --profile web remove billion-context-relief
已写入 session 的 ACP 块会保留;导出文件需按文档自行删除。
典型用法思路¶
下面是一条可复现的操作顺序(具体 seq 以你当前 session 为准):
- 用 ACP 相关能力或
context_large_blocks查看窗口占用与大块列表(示例输出中会看到Thresholds: message ≥4.0K · turn ≥12.0K · ACP block ≥3.0K tokens及若干 seq / tool 行)。 - 若某段是「可能要原文」的长日志或抓取结果,调用
context_export,传入startSeq、endSeq,必要时加name、note。 - 若某段确定无保留价值,调用
context_delete处理同一区间(不要对 turn 与其 message 重复操作)。 - 需要清理磁盘上的导出时,使用
context_exports。
每次变更都是 Agent 显式调用工具;advisor 仅提示,不代为执行。
适用场景与注意¶
适合谁: 已在 DSH 0.2.0-rc.2 上使用 billion-context-dsh (ACP)、且希望 Agent 在「摘要」之外还能「外置原文」或「直接丢弃」上下文的开发者。
务必注意:
- 必须先装并让 ACP 成为 active compaction engine;否则本插件不会生效。
- 包体约 19 kB(packed),无 runtime 依赖,但依赖 profile 内正确解析的
billion-context-dsh。 - 配置项细节、advisor 触发条件、导出目录完整行为见 GitHub README;本文仅依据公开 README 与
package.json中已出现的事实。 - 插件与 DSH 以本机用户权限读写文件与 session;生产或敏感环境安装前请审阅源码。
结尾¶
billion-context-relief 把 context 管理从「只能压摘要」扩展为「导出留指针」和「无文件删除」,且全部通过 Agent 显式调用完成,与 ACP 的 compress 路径一致,便于在长会话里精细减负。