前言¶
在 DSH(DeepSeek Harness)里做多轮对话或 Agent 开发时,常见做法是依赖厂商侧的记忆库或云端向量检索:数据不在本机、断网时检索失效、管线静默失败时界面仍显示「已开启」却长期 0 条注入。维护者 a1141171521 的 dsh-memfuse(仓库 a1141171521/dsh-plugin-memfuse)把真源定为磁盘上的纯文本 Markdown,读、写、注入、检索路径不调用模型;自动从对话抽取记忆可单独开关,默认开启且可跟随对话模型。下面介绍它的定位、存储与安装方式。
这是什么¶
dsh-memfuse 是 DSH 的长期记忆插件(npm 包名 dsh-memfuse,当前版本 0.1.0,许可证 MIT)。数据默认落在 ~/.dsh/memory/,可用编辑器修改、git diff 跟踪。社区目录页:skillhub.cn 插件页。权威功能清单与技术说明见仓库内 docs/spec.md。
它解决什么问题¶
README 用三张对比概括设计取向:
| 常见做法 | 后果 | dsh-memfuse |
|---|---|---|
| 记忆在厂商数据库 | 用户难以导出、修改、审计 | 纯文本 Markdown 在本地磁盘 |
| 检索依赖云端向量 | 断网或限流时检索失效 | 本地 CJK bigram + BM25,零网络 |
| 管线失败无反馈 | 开关开着却不生效 | 失败写入注入内容与 status.md |
自动抽取是唯一默认会用到模型的部分;在「设置 → 记忆」可关闭。关闭时其余能力(落盘、检索、注入、手动写入)仍可用,原始问答会写入 sessions/ 作为兜底。
存储布局与真源¶
默认根目录为 ~/.dsh/memory/(可改为 git 仓库跟踪变更):
~/.dsh/memory/
├── index.md ← L0 总索引(派生,可删后重建)
├── memories/<id>.md ← 原子记忆(真源)
├── skills/<id>.md ← 可复用技能(真源)
├── sessions/<date>.md ← 每轮原始问答(真源)
└── .memory/
├── state.json
├── usage.jsonl
└── status.md
index.md、status.md、usage.jsonl 为派生视图,删除后插件会重建。单条记忆为带 YAML front matter 的 Markdown,字段包括 id、kind、priority(P0/P1/P2)、confidence、title、summary、anchor、tags、lifecycle、stats 等,正文为用户可读描述。
遗忘链包括:准入打分、按优先级过期(如 P1 30 天 / P2 7 天未召回)、休眠、弱续期、容量预算淘汰、休眠满 30 天物理删除。P0 与用户手写记忆不过期、不因淘汰删除(破坏性操作仅标记)。
核心能力(已文档化部分)¶
检索与注入¶
- 检索:bigram 分词 + BM25,按优先级、
confidence、stats(召回/注入/反馈)综合;注入有预算,P0 常驻,相关块按分数取前 N 条,过多时退化为索引一行。 - 注入时标注信任边界:条目为参考资料而非指令,并经过
lib/guard.js消毒,避免凭据形态写入记忆库。
零 LLM 路径¶
读、写、注入、检索、技能判定在设计上为零模型调用;仓库 README 标明测试在零 LLM 下通过(徽章写 134 passing,文末亦提到 142 项测试,以仓库当前测试脚本为准)。自动抽取有独立总开关,默认开启(2026-10-17 起);关闭时健康度会说明总开关状态,且不算故障。
界面与技能(H7/H8)¶
- 回合尾部候选卡片(
conversation.chat.turnTail):当一组记忆可固化为技能时,内联展示「提炼成技能 / 不用」;渲染即记「看过」,「不用」后同簇 key 不变则不再打扰。 - 两段式提炼:点「提炼成技能」后宿主调模型生成草稿,用户「收下」后写入
~/.dsh/skills/<name>/SKILL.md,无需重启;未装前草稿在pending-skills/。
Agent 工具¶
| 工具 | 说明 |
|---|---|
memfuse_recall |
检索记忆,level=l0/l1/l2 控制详情层级 |
memfuse_write |
唯一写入路径,mode=add/replace/delete,保护 P0/用户资产 |
memfuse_status |
管线健康:条数、分布、最近成功/失败、待确认队列 |
memfuse_extract |
手动跑抽取,支持 dryRun |
memfuse_feedback |
回报记忆是否有用(学习闭环信号) |
memfuse_skill |
技能库:list / show / distill / approve / reject / patch / dismiss |
安装与启用¶
插件以当前 DSH 进程权限读写 ~/.dsh/ 下文件;安装前请自行审阅源码与 MIT 许可证。官方 README 给出两种方式,未给出统一的 dsh plugin add github:... 一键命令作为首选说明。
方式 A:profile 挂包(推荐)¶
编辑 ~/.dsh/profiles/<profile>/package.json:
{
"dependencies": {
"dsh-memfuse": "link:<本仓库的绝对路径>"
},
"dsh": {
"profile": {
"bundles": [
"@deepseek-ai/dsh-base",
"@deepseek-ai/dsh-web-app",
"dsh-memfuse"
]
}
}
}
使用 link: 时改代码需重启宿主进程;客户端 bundle 需重启应用后生效。
方式 B:cordis patch¶
编辑 ~/.dsh/profiles/<profile>/cordis.patch.yml(须用 insert: 语法):
- insert:
- id: dsh-memfuse
name: 'dsh-memfuse'
config:
extract:
enabled: false
完整配置项见仓库根目录 cordis.patch.yml。README 注明 extract.enabled 在 patch 示例中为 false;设置页中「开启记忆学习」总开关文档写的是默认开,以你实际 profile 与设置页为准。
设置入口¶
首选:设置 → 左侧「记忆」(与账号、通用、模型、插件等并列)。页顶为三态「记忆学习」横幅。亦可从 插件 → dsh-memfuse 卡片 → 包页 进入同一表单。选项包括:开启记忆学习、跟随对话模型、抽取模型、模型不可用策略、降级模型、候选落盘方式、技能建议开关等。
「设置 → 内置插件」为只读清单,不渲染本插件表单。
更新:README 写明可用 git pull 或 dsh plugin add 重装后重启 DSH;设置页「检查更新」只读比对远端版本(如 v0.1.0)。
开发与自测(可选)¶
在已获取源码的目录中,可不装 DSH 跑测试与预览:
npm test
npm run preview
npm run demo
npm run preview 启动静态服务并打开 docs/preview/turn-tail-card.html,加载真实 lib/client.js,用于离线查看候选卡片样式。要求 Node >= 18。
适用场景与注意¶
适合希望在 DSH 内长期保留偏好、约定、项目上下文,且要求数据可审计、可手改、检索不依赖网络的开发者。若完全不想消耗模型额度,可关闭记忆学习,仍可使用手动 memfuse_write、会话落盘与本地检索注入。
插件属于社区生态(SkillHub 目录与 DeepSeek / 幻方无官方从属关系),GitHub 星标约 3(以仓库页为准)。问题反馈可走 Issues;README 另提供 DSH 插件交流 QQ 群 1105449571(进群备注「dsh 插件」)。
结尾¶
dsh-memfuse 把长期记忆做成「本地 Markdown 真源 + 本地检索 + 失败可见 + 可选自动抽取」,与云端黑盒记忆形成清晰分工。目录页:https://www.skillhub.cn/plugins/a1141171521/dsh-plugin-memfuse;源码与 README:https://github.com/a1141171521/dsh-plugin-memfuse。