前言¶
在 DeepSeek Harness(DSH)里跑智能体,常见情况是:一轮任务结束,上下文被压缩或清空;换一个新 session 做同一项目,上次聊过的细节、你自己记下的要点,往往不会再出现在模型眼前。把笔记塞进 system prompt 或单独做向量检索,可以部分缓解,但 chunk 往往是匿名的,很难按「某条思路、某段结构」寻址,也缺少可审计的召回理由。
下面介绍社区插件 dsh-memory-tree(维护者 qinghuaju),它把对话与可结构化内容落成磁盘上的资产:SQLite 分层存储、AST 节点路径、embedding 与软相似边,并在每轮前注入有上限的 <memory-recall> 块。无需外部托管服务,目录可复制、备份或删除。
这是什么¶
dsh-memory-tree 是 DSH 的「记忆」类插件,一句话定位来自项目描述:AST soft-decision-tree long-term memory for DeepSeek Harness (DSH): SQLite + embeddings, project-scoped, cross-session recall.
与「只堆向量 chunk」的做法相比,项目 README 强调:节点有唯一 AST 路径、树上一跳激活、六项命名打分项与审计行、hot/warm/cold 轮转以限制活跃库体积,并在 SQLite 旁提供可人工查看的 Markdown 镜像。许可证 MIT,npm 包版本 0.4.2(以 package.json 为准);GitHub 仓库当前约 2 stars。目录页:skillhub.cn/plugins/qinghuaju/dsh-memory-tree;源码:github.com/qinghuaju/dsh-memory-tree。
核心功能¶
经 README 与配置说明,可核实的能力如下。
- 后台捕获:监听
session/event,在后台记录 user/assistant 交换(可配置capture.enabled)。 - AST 索引:解析为可寻址节点(path、kind、title、content),写入 embedding(默认 1024 维)及相似度边(cos ≥ 0.72)。
- 自动召回:在
agent/pre-step查询,向量与 FTS 候选混合打分后,注入 bounded 的<memory-recall>(recall.autoInject、recall.maxNodes默认 6,recall.timeoutMs默认 1500 ms)。 - 分层存储:hot(
memory.db,默认 <30 天)、warm(30–180 天)、cold(>180 天)轮转;定时 6 h、启动后及mem_rotate可触发。 - 工具面:暴露
mem_recall、mem_store、mem_stats、mem_dream、mem_rotate;mem_stats含compat:行,反映 normal / degraded / off。
兼容方面:README 写明在 DSH 0.2.1-rc.3( bundled Node 24)及 Node 22/24 上测试;CLI 需 Node ≥22.5;engines.dsh 为 ^0.2.1-alpha.2。无 native 构建,embedding 可选用 pollinations、dashscope、openai、ollama、custom,或离线 deterministic fake embedder / Ollama。
安装与启用¶
插件以当前 DSH 进程权限读写 $DSH_HOME 下配置与数据库;安装前请自行审阅源码与 MIT 许可证。官方 Quick start 不依赖 git clone,步骤如下。
- 准备 embedding 凭据(不要放进仓库):
echo '{"apiKey":"sk-..."}' > "$DSH_HOME/memory-tree/credentials.json"
- 安装到 DSH 实际加载的 profile(桌面端多为
~/.dsh/profiles/desktop,dsh web多为~/.dsh/profiles/web),然后重启 DSH:
node scripts/install.mjs --profile "$DSH_HOME/profiles/desktop" --copy-to
说明:需在已取得插件源码或发布包的环境中执行 scripts/install.mjs;安装器幂等,会备份 cordis.patch.yml,且不修改你的 key。无 --profile 时会自动探测并在 desktop/web 并存时警告。多机、npm/tarball、离线模式见仓库 docs/DEPLOY.md。
- 在 DSH 内验证:让智能体调用
mem_stats。
DSH 0.2.1-rc.3 默认关闭插件市场且无 index URL;若走市场发现流程,需自行生成 market/index.json 并在 Settings → Plugins → Discover 配置 URL,详见 docs/MARKET.md(README 中的 market-index.mjs / check-market.mjs 为发布与校验用,非普通用户一键安装命令)。
可选配置片段(插入 profile 的 cordis patch,键名以文档为准):
- insert:
- id: dsh-memory-tree
name: 'dsh-memory-tree'
config:
embedding:
preset: pollinations # pollinations | dashscope | openai | ollama | custom
dimensions: 1024
capture:
enabled: true
recall:
autoInject: true
maxNodes: 6
timeoutMs: 1500
storage:
tiered: true
hotDays: 30
warmDays: 180
完整默认值见 docs/PHASE1.md。设 storage.tiered: false 可退回单文件行为。
典型用法¶
经过上面的安装与重启,可按 README 建议做最小验证:
- 在同一项目里对话至少两轮。
- 开 新 session,再问第一轮里说过的事;若召回正常,应看到
<memory-recall>相关内容。 - 需要手动查库或运维时,调用
mem_stats看节点与兼容状态;需要整理分层库时调用mem_rotate。
打分与管线细节(捕获 → AST → embedding → 查询 → 注入)见 README 流程图与 docs/PRINCIPLES.md;仓库提供 node scripts/bench.mjs 等离线基准脚本,数值随机器与 embedder 变化,此处不重复罗列。
适用场景与注意¶
适合谁:在同一 DSH 项目里长期迭代、希望跨 session 找回结构化对话与笔记、且愿意本地持有一份 SQLite + 可选 embedding 调用的开发者。
注意:
- 插件与 DSH 同源插件生态一致:社区目录(如 SkillHub)独立于 DeepSeek / 幻方,并非官方应用商店。
- Embedding 预设除离线方案外通常需要 API key;凭据仅应放在
$DSH_HOME/memory-tree/credentials.json。 - DSH 侧 hook 变更会导致能力分级降级(例如 auto-recall 关闭而 capture / 工具仍可用),以
mem_stats的compat:为准。 - README 自述在 host 拒绝注入消息等情况下会关闭当轮 auto-recall 并写日志,行为以当前版本源码为准。
结尾¶
dsh-memory-tree 把长期记忆做成可检查、可轮转、可跨 session 召回的 AST + SQLite 方案,并绑定 DSH 生命周期钩子与一组 mem_* 工具。若要进一步了解设计取舍与部署变体,请读仓库 README(含 中文 README.zh.md)与 docs/。
- 目录页:https://www.skillhub.cn/plugins/qinghuaju/dsh-memory-tree
- GitHub:https://github.com/qinghuaju/dsh-memory-tree