dsh-memory
August 15, 2026 · View on GitHub
为 DeepSeek Harness 打造的自学习长期记忆——historian 压缩上下文、dreamer 打理记忆、sidekick 在你需要时精准召回。
DeepSeek Harness 的长期记忆插件,复刻 magic-context(capture → consolidate → recall)的设计。单个 host 平面插件;存储为本地 SQLite 数据库,带 FTS5 全文检索与本地 ONNX 嵌入。
功能
- 捕获(capture) — 每 N 轮用便宜模型把对话提炼成持久记忆(节流,不阻塞主线)。
- 历史学家(historian) — 上下文窗口将满时把旧消息折叠为分层摘要;原始会话日志 append-only 保留,可随时恢复。
- 回忆(recall) — 每轮开始前自动检索项目相关记忆,注入为
<system-reminder>块。 - 梦境(dreamer) — 定时后台维护:分类、合并、归档、晋升重要记忆。
- 伙伴(sidekick) — 按需检索增强(
memory_aug):检索记忆来丰富当前回答。 - 13 个记忆工具 — 模型可写、搜、列、改、归档、合并、读、删、梦境、巩固、展开、增强记忆,并管理会话笔记。
安装前提
- deepseek-harness 需源码安装 — 本插件面向 DeepSeek Harness 插件 API:https://github.com/deepseek-ai/deepseek-harness。
- Node.js ≥ 22 — 存储层使用 Node 内置的
node:sqlite。
安装
-
把本仓库克隆(或软链)到 profile 的插件目录:
<dsh-home>/profiles/<profile>/plugins/dsh-memory -
在插件目录内执行
npm install。 -
在 profile 组合中引用:
- id: dsh-memory name: dsh-memory config: {}
首次加载自动建库并完成迁移,无需任何手工初始化。
内置压缩
dsh-memory 的 historian 接管上下文折叠,因此应关闭所用 agent preset 的宿主自带压缩——这与 magic-context 的 setup wizard 在配置层关闭内置压缩是同一思路。scripts/setup.mjs 用定点编辑(保留注释与格式)切换 <dsh-home>/.agent-presets/ 下任意 preset 的 compaction-basic / command-compact 条目:
node scripts/setup.mjs enable --preset <name> # 关闭宿主压缩 → historian 负责折叠
node scripts/setup.mjs disable --preset <name> # 只撤销本脚本新增的改动
node scripts/setup.mjs status # 查看各 preset 压缩状态
--home 默认 ~/.dsh;--preset all 对所有含压缩条目的 preset 生效。每次 enable 会备份 preset yml(agent.cordis.yml.dsh-memory.bak)并把改动记录到 .dsh-memory-setup.json,因此 disable 绝不会误动用户手工禁用的条目。
工具
全部为模型工具:模型经 harness 调用。
| 工具 | 一句话说明 |
|---|---|
memory_write | 写记忆;幂等去重 |
memory_search | 跨记忆 / 分区 / 会话笔记的混合检索 |
memory_list | 按 category / scope / status 过滤,带分页 |
memory_update | 按 id 编辑记忆;重新嵌入并重新分类 |
memory_archive | 软删(可审计)——优先于 delete |
memory_merge | 合并重复记忆;保留最重要的一条 |
memory_get | 按 id 读取记忆 |
memory_delete | 硬删(兜底手段) |
memory_dream | 手动跑一次巩固:合并 + 分类 + 整理 |
memory_consolidate | 合并余弦重复;清理过期行 |
memory_expand | 从会话日志恢复被压缩分区的原文 |
memory_aug | 伙伴增强合成 |
ctx_note | 会话笔记(写 / 读 / 忽略 / 更新) |
配置
所有字段均可省略;数值越界自动钳制,非法值加载时抛错。最常用的几项:
config:
embed:
mode: local # local | openai-compatible | none
capture:
everyTurns: 5 # 每 N 轮提炼一次对话
inject:
topK: 4 # 每轮召回的记忆条数
historian:
triggerRatio: 0.70 # 上下文用到约 70% 时开始压缩
dream:
enabled: false # 定时后台维护(默认关)
完整字段、默认值与钳制规则见 lib/config.js。
致谢
这是为 deepseek-harness 做的独立复刻实现,灵感来自并部分移植自 magic-context(作者 ualtinok, MIT License)。与 cortexkit 和 DeepSeek 均无隶属关系。
移植/派生文件(以代码注释为准):lib/redaction.js、lib/cron.js、
lib/decay.js、lib/dreamer.js、lib/budgets.js;其余模块参考
magic-context 的设计。上游许可文本见 NOTICE。