前言¶
在 DeepSeek Harness(DSH)里做智能体开发时,模型会在当前会话里推理、调工具、踩坑再修正;但这些结论往往只留在这一次任务里。换到另一个仓库或另一个 profile,同样的坑可能再踩一遍。社区里常见做法是依赖会话上下文、手动粘贴笔记,或单独查记忆库——步骤多,且很难在「下一步就要决策」的前一刻自动出现。
下面介绍维护者 OverDustD7 发布的 dsh-experience-recall(npm 包名 dsh-experience-recall,GitHub OverDustD7/dsh-experience-recall)。它属于 DSH 社区插件目录中的「记忆」类插件:监听当前会话里的推理、工具参数与结果、错误等事件,当运行中的工作与记忆库里曾在其他项目里学过的条目对上时,在下一步 agent/pre-step 边界前注入一条短消息。检索与相关性判断默认都在本机完成;注入内容仍会占用宿主模型的上下文与输入 token。
这是什么¶
一句话定位: Cross-project experience recall for DeepSeek Harness——工作匹配到别处已学经验时,把那条经验作为短消息注入下一步之前;全程可本地运行,由本地小模型做相关性裁决。
插件以 profile bundle 形式接入 DSH(Cordis 插件)。当前 npm 版本为 0.8.2(见仓库 package.json),许可证 MIT。SkillHub 目录页:dsh-experience-recall(社区站点,与 DeepSeek / 幻方无官方从属关系)。
核心功能¶
注入长什么样¶
README 给出真实会话中的注入示例(节选):标题为「可能相关的历史经验 · 来自其他项目」,正文刻意压缩成一行可复用结论,并带记忆 id,便于模型按需用 mnemon_recall / document_search 拉全文。每轮最多少量条,单条约 1.2 KB。
工作流程¶
- 从 session/event(推理、文本、工具参数与结果、错误)出发。
- 用从记忆库与项目文档派生的词表做机械关键词匹配(不调用模型)。
- 经过门控:每轮每词一次、每条记忆一次、冷却、每轮配额等。
- 本地小模型判断「这条经验是否会改变下一步该怎么做」(串行,约 0.4 s)。
- 就绪结果在下一个 agent/pre-step 边界追加;边界不等待——若检索或裁决未完成,本步照常进行,卡片可能晚一步到达。无法解析或不确定的裁决会丢弃,不会凭猜测注入。
词表不是手写:来自记忆库(作者标签/实体与正文专有名词)和项目文档(含各文档 ## 小节),并过滤无法区分的词。新的记忆在 mnemon_* 工具调用后会自动纳入。
依赖与行为边界¶
| 需求 | 作用 | 缺失时 |
|---|---|---|
DSH >= 0.1.5-rc.1 |
宿主 | — |
Node >= 22.5(推荐 24.x) |
经 node:sqlite 读记忆库;Node 22 需 --experimental-sqlite,23.4 起无需该 flag |
插件仍可运行,但记忆派生词表为空(文档与种子词仍可用) |
dsh-mnemon + mnemon CLI |
索引与语义检索 | 无 CLI 时仍可能触发已索引卡片,但 CLI 检索不可用 |
本机 Ollama(默认 http://localhost:11434,模型默认 qwen3.5:9b) |
生成卡片与裁决相关性 | 可观察、可写日志,但不注入——拒绝猜测 |
注入消息使用 DSH v4 的 producer-owned source(kind: "plugin:dsh-experience-recall"),并与旧版 { kind: "plugin", plugin } 包装兼容,便于可见性、去重与再注入距离等逻辑。
安装与启用¶
官方安装命令(README 原文;web 为 DSH Web UI 使用的 profile 名,若你改名请替换):
dsh plugin --profile web add dsh-experience-recall
也可跟踪 GitHub 或本地开发目录(同样经 profile 转发到包管理器):
dsh plugin --profile web add github:OverDustD7/dsh-experience-recall
dsh plugin --profile web add link:/path/to/dsh-experience-recall
安装后重启 dsh web。安装过程会把包写入 profile 的 dsh.profile.bundles,不要再手动重复添加同一 loader id,否则会报 duplicate loader entry id。
可选配置写在 bundle 行的 config 中(包内 cordis.patch.yml 或 $DSH_HOME/profiles/<name>/cordis.patch.yml,后者优先),例如:
- id: experience-recall
config:
maxInjectionsPerTurn: 0 # 仅观察,不注入
localModel: 'qwen3.5:9b'
常用键包括:enabled、stateDir(默认 $DSH_HOME/dsh-experience-recall)、localModel / localEndpoint、mnemonCliPath、mnemonDataDir / mnemonStore、cardBuilder(mechanical 可跳过模型建卡)等;完整表格见仓库 README。
典型用法¶
验证是否在工作¶
- 在聊天中执行
/experience-recall:输出词表规模、扫描/命中计数、裁决接受/拒绝/未答次数(含延迟与重试)、注入次数,以及最后一条通过的卡片。 - 查看磁盘日志:
$DSH_HOME/dsh-experience-recall/logs/observe.ndjson,记录trigger/recall/verify/inject/term-cooldown等,便于回答「为何注入或未注入」。 - 安装自检:
node node_modules/dsh-experience-recall/tools/check-install.mjs
若 state 目录不在默认位置,可加 --cache / --log。
新装后建议先跑几分钟真实任务:首次启动会用本地模型为每条记忆建卡(数百条记忆约 5 分钟),词表在建卡完成前会偏薄。
切换本地小模型¶
/experience-recall model # 列出 Ollama 已安装 chat 模型并卡片选择
/experience-recall model qwen3.6:35b-a3b # 直接指定,跳过卡片
/experience-recall help # 子命令帮助
裁决与建卡每次调用读取当前模型,切换后无需重启;选择会写回 profile patch。未安装的模型名会提示,裁决失败时卡片会回退到机械构建器;已建好的卡片 wording 不会随切换而改变。
适用场景与注意¶
适合谁: 已在 DSH 里用 mnemon 等能力沉淀跨项目经验、又希望当前任务在关键词与上下文对齐时自动看到「别处学过的结论」的开发者。强调本地裁决、可审计日志,与「一切皆插件」的 DSH 生态一致。
务必注意:
- 插件以当前 dsh 进程权限运行,安装前请自行审阅源码与 MIT 许可证,并确认 Ollama、mnemon 数据目录路径符合你的安全策略。
- 无本地模型时 deliberately 不注入,避免幻觉式「回忆」。
- 注入仍消耗宿主模型 token;可通过
maxInjectionsPerTurn: 0等配置只观察不注入。
结尾¶
dsh-experience-recall 把「其他项目里已经验证过的经验」从被动查库变成在关键步骤前的短消息提醒:机械匹配 + 门控 + 本地小模型裁决,且全过程可对照 observe.ndjson 复盘。目录与详情见 SkillHub 插件页,源码与完整配置说明见 GitHub 仓库。