前言¶
在 DeepSeek Harness(DSH)里跑长任务时,上下文迟早会触顶,宿主或插件会对历史做压缩,只留摘要。摘要能撑住后续对话,但被压掉的那一段原文往往就此不可见:谁说了什么、工具回了什么、当时的取舍依据,后面要查就只能靠记忆或重跑。常见做法只保证「最近还在、摘要还在」,不保证「被压掉的那段原文还在」。
下面介绍维护者 wx-holmes 在 SkillHub 记忆分类下的插件 dsh-blackhole(目录页称「黑洞:压缩即归档」):在上下文涨到可配置的「事件视界」时触发压缩,同时把被压掉的正文逐字写入本地归档目录,并维护人读与机器读索引,需要时按会话或日期找回原文。当前 GitHub 星标为 0,版本 0.3.0,README 标明主要在 Windows 自用,其他平台未验证。
这是什么¶
dsh-blackhole 是给 DSH 会话做的「压缩即归档」插件:压缩发生时归档,不是事后扫描整库历史。它要解决的点很明确——压缩不可避免会丢上下文里的细节,本插件在丢摘要侧的同时,把原文落到 archiveRoot,用 index.md / index.jsonl 做检索入口。
归属与入口:
- 社区目录:https://www.skillhub.cn/plugins/wx-holmes/dsh-blackhole
- 源码与说明:https://github.com/wx-holmes/dsh-blackhole
DSH 生态强调「一切皆插件」;SkillHub 为社区独立站点,与 DeepSeek / 幻方无官方从属关系。
核心机制:阈值、归档与索引¶
三段阈值与窄段门槛¶
插件用上下文占比控制压缩节奏(默认值均来自 README 配置示例):
- eventHorizon(默认 0.6):占比到此开始压缩并归档。
- solidifyLine(默认 0.75):固化线,过了不再指望还能压回去。
- hardCap(默认 0.9):硬上限。
另有 minCompactEvents / minCompactTokens(默认 2 条事件或 2000 token):前缀太窄时摘要压不下去,会白烧一次调用还留下无用归档,因此先跳过,等段变宽再压。
归档与索引¶
被压掉的原文按会话、日期分段写入 archiveRoot,文件名带段号与摘要,正文是逐字原文,不是二次压缩版。同目录下:
index.md:人读索引index.jsonl:机器读,一行一段,记录会话、日期、压了哪几段、原文文件路径
找回路径:查索引 → 读 originals/ 下对应文件。
archiveRoot 下典型结构:
archiveRoot/
├── 索引.md
├── index.jsonl
├── README.md
└── originals/
事件流与其它插件¶
压缩生命周期会追加 compact.archived、compact.skipped、archive.failed 等事件;其它插件可按 offset 增量读取,接入自己的账本逻辑。
0.3.0 扩展能力¶
README 在 0.3.0 中补充的能力如下(仅列资料已写明的项):
- 冷库读端
bh_restore_span:按「会话 + seq 区间」从原文库取回,返回digest(逐字校验)与latencyMs;每次取回写recall.hit事件。 - 块仓
bh_compress/bh_restore/bh_search:任意文本可逆存取,带source/tags,不依赖模型;适合作业中间产物、日志片段。 - 按天轮换视界
dailyHorizon:{start, ratios}按天数取档位,跨零点自动切换。 - 按会话覆盖
sessionRatios:为单会话单独设线,其余仍用全局档。 - 折叠冷却
foldCooldownMs/foldCooldownMax:同会话在窗口内限制折叠次数,计数落盘;连续被拦 8 次或 tokens 到硬顶 95% 时放行,避免会话憋爆。 - 采样
sampleFile:记录表面大小、折叠耗时、剪枝收益。 - 索引卡片:除起点/收尾/工具外,增加从原文抽出的
rationale与回取指针pointer,避免压缩后只剩骨架、决策依据丢失。
安装与启用¶
资料中的安装方式不是一条 dsh plugin add github:... 命令,而是把插件放到 profile 能加载的位置,再在层配置里 insert。按 README 顺序做即可。
- 将本仓库目录放到 DSH profile 可加载位置(例如
node_modules/dsh-blackhole,或在插件目录后于 cordis 层引用)。 - 在 profile 的层配置中加入
insert段(见下节配置示例)。 - 重启 DSH,日志中应出现插件激活。
package.json 标明通过 cordis.patch.yml 做 bundle patch;private: true,发布形态仍在探索中。
配置示例¶
下列字段摘自 README;路径请改为你本机目录。archiveRoot 建议放在不宜丢失的盘上;stateRoot 丢失可重建。
- insert:
- id: blackhole
name: dsh-blackhole
config:
eventHorizon: 0.6 # 事件视界
solidifyLine: 0.75 # 固化线
hardCap: 0.9 # 硬上限
thresholdRatio: 0.6
retainRatio: 0.16 # 保留近期内容不压
archiveRoot: "D:\\archive\\context" # 原文真源(改成你自己的目录)
stateRoot: "D:\\archive\\state" # 插件状态/缓存(可重建)
pendingTtlMs: 600000
minCompactEvents: 2
minCompactTokens: 2000
典型用法思路¶
资料未给出独立的 CLI 演示脚本,但工作流可从机制直接复现:
- 启用插件并保持
archiveRoot可写。 - 长会话运行直至触发压缩;在日志或事件流中确认
compact.archived(若因窄段跳过则为compact.skipped;写盘失败则为archive.failed)。 - 打开
archiveRoot/index.md或解析index.jsonl,按会话 ID、日期、段号定位originals/下的原文文件。 - 若使用 0.3.0 工具面:用
bh_restore_span按区间取回并校验digest;块级内容用bh_compress/bh_restore/bh_search。
写盘为同步策略:README 写明宁可慢一点,也不接受「摘要写了、原文没写」。
适用场景与注意¶
更适合谁:长时间、多轮工具调用的 DSH 会话;需要在压缩后仍能审计原文、对齐决策依据(rationale)或对接下游账本的开发者。
边界(README 自述):
- 只在「压缩」发生时归档,不主动扫描历史会话。
- 0.3.0 自用中;Windows 上使用最多,其它平台未验证。
- 检索目前以文件索引为主,维护者在 README「想找人帮忙」中提及跨平台路径、发布流程与更省事的检索方式仍待讨论。
安全与权限:插件随当前 DSH 进程权限读写 archiveRoot、stateRoot 及事件流;安装前请阅读源码与仓库许可证(资料未单独列出 license 文件名,以仓库为准),并自行评估归档目录是否含敏感内容。
测试方面,README 写明 npm test 覆盖 archive、blocks、cards、coldstore、events 等共 16 组用例。
结尾¶
dsh-blackhole 把「压缩」和「归档」绑在同一条路径上:上下文越过事件视界时摘要继续服务对话,原文逐字进本地仓,索引负责找回。若你正在 DSH 上养长会话、又担心压完再也对不上原话,可按上文安装与配置试跑,并对照 GitHub README 中的 0.3.0 工具与冷却、按天/按会话档位是否需要打开。
- 目录页:https://www.skillhub.cn/plugins/wx-holmes/dsh-blackhole
- GitHub:https://github.com/wx-holmes/dsh-blackhole