前言¶
在 DSH 里跑长会话时,工具返回的 JSON、diff、日志往往占去大量上下文。简单截断或抽样容易丢掉答题所需的事实;一味追求更小 token 账单也可能让模型无法再回答细节问题。下面介绍社区插件 dsh-density-panel(包名 @local/density-panel,当前资料中的版本为 0.31.0):它在能证明「不损答案」的输入类型上做结构化压缩,原文归档到磁盘,并维护按上下文窗口的账本;需要时用 density_recall 按需取回。维护者为 SpiritronPersonality,仓库 dsh-density-panel,在社区目录中归类为「记忆」相关能力;许可证为 MIT。插件在 你当前 DSH 进程的权限 下运行,安装与启用前建议自行审阅源码与许可证。
这是什么¶
Density 是 DSH 客户端插件:只压缩它认为可以压缩且不会丢失答案的工具输出,保留可恢复的原文档案,并为每个 context window 记一笔「省了什么」。设计偏保守——目标是信息密度(去噪),而不是专门压账单;token 节省是副产物。
侧边栏提供中文界面「密度」面板(示意见仓库 docs/panel.png),可观察容量压力、节省量、锚点、原生压缩触发线以及 per-window ledger。
压缩策略:做与不做¶
仓库 README 用表格明确了入口行为(默认 policy: quality 即下表;strict 仅 diff;aggressive 为旧版抽样策略,含表格与代码大纲等,默认不启用)。
| 输入类型 | 行为 | 说明 |
|---|---|---|
| JSON / JSONL 数组 | 转为 CSV(值全保留) | 实践中可视为无损 |
| Unified diff | 去掉未改动的上下文行 | 改动行与 hunk 头保留 |
| 日志 | 保留头、尾、每条 error 行,并加 [统计] 汇总行 |
抽样后仍可回答计数类问题 |
| 表格 | 不压缩 | 测试中行抽样严重损答案 |
| 散文 / 长文本 | 不压缩 | 叙事抽样即数据丢失 |
| 源代码(v30+) | 不压缩 | 召回成本常高于收益 |
cairn_*、density_recall 输出 |
不碰 | 上下文中仅保留这份记忆 |
压缩后的占位会带标记,例如:[density #density-1a2b3c4d · 原文 4210B · 用 density_recall(marker) 取回]。完整原文写入 ~/.density/archive/<session>/。首次发生压缩后才会懒注册 density_recall 工具,空闲会话不增加 schema 负担。
安装与启用¶
官方 README 给出两种方式,均需把 bundle 链入 DSH profile 并 重启 DSH(宿主在启动时快照插件 bundle)。
方式一:本地 link(README 示例)
git clone https://github.com/SpiritronPersonality/dsh-density-panel.git
随后在 <profile>/package.json 中增加本地 link,例如 "@local/density-panel": "link:<path>/dsh-density-panel",并在 dsh.profile.bundles 中加入 @local/density-panel。
方式二:cordis patch 写入 bundle
# profile cordis patch(或插件自带的 cordis.patch.yml)
- insert:
- id: density-panel
name: '@local/density-panel' # 或你发布的包名
config:
mode: balanced
write: true
policy: quality
surface: false
修改配置或代码后需重启 DSH。
配置项¶
| 键 | 默认 | 含义 |
|---|---|---|
mode |
shadow |
shadow 仅度量;safe / balanced 开启入口路径 |
write |
false |
是否改写工具结果(实际压缩开关) |
policy |
quality |
quality 为上表策略;strict 仅 diff;aggressive 为旧版抽样 |
surface |
false |
是否抽取每轮卡片并替换已结束轮次(默认关,会改变前缀) |
protectedTools |
['cairn_'] |
永不压缩的工具名前缀 |
archiveDir |
~/.density/archive |
原文归档目录 |
ledgerDir |
~/.density/windows |
per-window 账本目录 |
初次试用可保留 mode: shadow 观察度量;确认行为后再设 write: true 与合适的 mode。
可观测与典型用法¶
- 侧边栏面板:条目「密度」,展示容量、压力、节省、锚点、镜像、原生 compaction 与窗口账本(UI 目前仅中文)。
- HTTP:
GET /density/snapshot返回当前窗口及最近 8 个窗口的 JSON。 - 账本:
~/.density/windows/<sessionId>.jsonl,每个 context window(同一 provider、model、context 大小与 trigger line 的 epoch)一行 JSON;重启后仍保留。 - 度量日志:
~/.density/shadow/<sessionId>.jsonl记录每次压缩、召回与 turn card。 - 召回:模型在上下文中看到 density 标记后,调用
density_recall(marker)取回归档原文(召回体积约等于原文,宜少次使用)。
仓库 tools/ 下提供 corpus-acceptance.mjs、replay.mjs 等,用于语料验收与会话日志重放;开发测试可按 README 对每个测试文件单独执行 node。
适用场景与注意¶
适合:长会话中大量 JSON/diff/日志类工具输出、希望减噪又不愿牺牲可答题事实的 DSH 用户;需要对照 ledger 与面板观察压缩与原生 compaction 关系时。
务必注意:
- 压缩是抽取式,不能概括语义,故散文与代码默认跳过。
- 日志抽样会丢掉非 error 行;
[统计]仅恢复聚合计数。 - Recall 成本接近原文大小,频繁取回会抵消节省。
- 插件非 DeepSeek / 幻方官方分发;社区目录 SkillHub 插件页 与 GitHub 为公开来源,星标等元数据以站点为准。
结尾¶
dsh-density-panel 把「能压且不伤答案」的工具输出做成结构化摘要,原文归档 + density_recall + per-window ledger,并在中文「密度」面板与 GET /density/snapshot 上可见。进一步了解见 GitHub 仓库 与 社区目录。