前言¶
在 DeepSeek Harness(DSH)里,归档只是把会话从列表里收起来,原始日志仍完整保存在 $DSH_HOME/sessions/ 下。时间一长,归档条目变多、体积变大,列表里多是重复的流式 chunk、工具结果和每轮重复注入的环境说明——对后续对话几乎没用,却持续占磁盘并在界面里形成噪音。
常见做法是手动翻旧日志、自己抄结论,或干脆不管。下面介绍的 dsh-archived-digest(维护者 LLL-lyh0,npm 包名 dsh-archived-digest,当前版本 0.5.0,MIT 许可证)走另一条路:逐个读归档会话,用模型留下值得保留的部分,写成 markdown 记忆和可复用技能,并可选地把日志删掉;提炼在前、删除在后,顺序在实现里是强制的。
这是什么¶
一句话:已归档(以及可选的实时)会话 → 记忆、事实台账、技能 → 统一目录管理,并可回收日志空间。
插件在 DSH 左侧栏增加「归档会话提炼」入口(order: 12),并提供 archived_digest Agent 工具。社区目录页:SkillHub - dsh-archived-digest;源码与说明:GitHub - LLL-lyh0/dsh-archived-digest。
核心功能¶
逐会话提炼与产出目录¶
每个成功提炼的归档会话对应 $DSH_HOME/archived-digest/memories/<slug>.md,可复用做法写入 skills/<name>/SKILL.md,并同步发布一份到 $DSH_HOME/skills/<name>/SKILL.md(供技能中心与 agent 扫描;同名已存在的手写技能不会被覆盖,面板会提示未覆盖)。
典型目录结构如下:
$DSH_HOME/archived-digest/
├── memories/ # 逐会话记忆 + index.json
├── skills/ # 技能 + index.json
├── facts.json # 事实台账与聚合主题
├── trash/ # cleanupMode=trash 时的回收站
├── state.json # 提炼 / 失败 / 清理状态
└── settings.json # 面板设置(唯一真相源)
记忆层:事实、时效、主题¶
除逐会话摘要外,插件把结论拆成事实行,并参考社区已有做法做合并与聚合:
- 事实级写入:对每条结论做
ADD / UPDATE / NOOP;同一话题换说法为 UPDATE(旧结论标validUntil退役),完全重复为 NOOP,新话题才 ADD。 - 时效而非覆盖:被取代的事实保留
validUntil、supersededBy,历史仍可追溯。 - 主题聚合:事实按主题聚块,条目带
^f00012类出处指回来源会话;整合幂等。聚类使用混合字面相似度(拉丁词 Dice + 中文单字 Dice),并配合会话标题作为 subject,避免跨会话同义表述无法合并的问题。 - 可选导出:检测到本机已挂载 OpenViking / Mnemon 等记忆插件时可推送聚合结果;本地台账始终是真相源,推送失败只记原因,不回写。
面板提供「主题记忆」「事实」等标签页,支持重新整合、检索、手动「忘记」单条事实(会二次确认)。
面板与九个标签页¶
总览、归档会话(可勾选手动提炼)、进行中(实时会话水位线)、主题记忆、事实、记忆、技能、自检、设置。自动提炼默认关闭(耗 token);cleanupMode 默认 off,提炼成功也不会自动删日志,直到你在设置里显式选择 off / logs / dir / trash 之一。
实时会话与增量提炼(可选)¶
默认只处理已归档会话。打开 captureLiveSessions 后,会对已静默(默认 90 秒无新日志)的未归档会话提炼;清理仍仅作用于归档会话,实时通道只写记忆、不删日志。
incrementalLiveCapture 可对进行中的会话做只读增量提炼:用事件 seq 作水位线,游标存在插件自己的 live-cursors.json,不改会话日志;部分提炼的记忆带 partial: true,且不能被 cleanup 删掉完整日志。
自检精简¶
记忆与技能会随时间变「脏」。自检先测量再可选执行:重复事实合并、弱 open 事实失效、重复技能合并(默认关,风险最高)。除用户手动「忘记」外,自检对事实只做 supersede,不硬删行。后台 selfCheckEnabled 默认关。
Agent 工具 archived_digest¶
在对话里可直接调用,例如:
action: status # 库存与进度
action: digest # 提炼(可带 sessionIds)
action: cleanup # 清理已提炼的归档会话
action: recall # 检索记忆(query=...)
action: consolidate # 重算主题
action: live-digest # 进行中会话只读增量提炼
action: selfcheck # 测量或执行记忆精简
完整 action 列表见 GitHub README。
安装与启用¶
从 GitHub 安装(README 推荐方式):
dsh plugin add github:LLL-lyh0/dsh-archived-digest
装完后重启 DSH 宿主(bundles 只在启动时读一次)。
依赖宿主自带的 @deepseek-ai/dsh-llm(peerDependencies,optional)。懒加载:没有 LLM 后端时插件仍可加载,但退化为不调模型的本地路径;要完整提炼需在设置里配置 provider / model,或依赖宿主 provider 注册顺序兜底。
典型用法¶
- 安装并重启宿主,在左侧打开「归档会话提炼」。
- 在「设置」中按需打开
autoEnabled、选择cleanupMode;首次使用建议保持自动提炼与清理均为默认关,先手动验证记忆质量。 - 在「归档会话」勾选待提炼条目,点「提炼所选」;或在对话中让 agent 调用
archived_digest,action: digest并传入sessionIds。 - 在「记忆」「技能」「主题记忆」中检索结果;若需省磁盘且确认记忆已落盘,再执行 cleanup(面板或
action: cleanup)。 - 需要边聊边记时,再考虑打开
captureLiveSessions或incrementalLiveCapture,并注意每轮上限(如liveMaxPerRun默认 2)。
常用设置默认值(节选,完整表见 README):
| 键 | 默认 | 含义 |
|---|---|---|
autoEnabled |
false |
后台自动提炼 |
cleanupMode |
'off' |
提炼后是否删日志 |
extractSkills / extractFacts |
true |
是否提炼技能 / 事实 |
captureLiveSessions |
false |
是否提炼未归档实时会话 |
maxSourceChars |
14000 |
送模型的转录上限(从尾部截) |
maxTokens |
2400 |
模型输出上限 |
适用场景与注意¶
适合谁: 长期用 DSH、归档较多、希望把历史对话收成可检索记忆与技能、并可控释放 $DSH_HOME/sessions/ 磁盘的人;也适合需要事实台账与主题聚合、并可选对接 Mnemon / OpenViking 的 workflow。
务必注意:
- 插件以当前 DSH 进程权限读写
$DSH_HOME;安装前请阅读源码与 MIT 许可证,确认清理策略(尤其cleanupMode为dir或trash)符合你的备份习惯。 - 提炼与自检会消耗 LLM token;自动跑批默认关,且每次自动最多处理少量会话(
autoMaxPerRun默认 3)。 - SkillHub 等社区目录是独立站点,与 DeepSeek / 幻方无官方从属关系;安装来源以你信任的 GitHub 仓库为准。
- README 中「本机实测」数据(例如归档条数与体积)来自维护者环境,仅说明问题规模,不是你的机器上的 guaranteed 结果。
结尾¶
dsh-archived-digest 把 DSH 归档从「藏起来但仍占空间」变成「可管理的记忆、事实与技能」,并在你明确选择后再回收日志。若你在用 DSH 做长期 agent 开发,值得在手动试跑提炼与 cleanup 策略后再开自动化。
- 目录页:https://www.skillhub.cn/plugins/LLL-lyh0/dsh-archived-digest
- GitHub:https://github.com/LLL-lyh0/dsh-archived-digest