前言¶
在 DeepSeek Harness(DSH)里跑智能体时,会话上下文会随对话结束而清空;若把偏好、决策理由、踩坑记录写进自建数据库或向量服务,往往要多维护一套存储、密钥和同步逻辑。下面介绍的 dsh-obsidian-memory(维护者 aoyamabf-max)把记忆落成 Obsidian 库里的普通 Markdown 笔记:带 YAML frontmatter,可用 Obsidian 阅读、编辑、链接与备份,卸载插件后笔记仍在库里。项目在 README 中标注为 early but working,Host 侧 7 个工具、8 条路由、侧边栏、BM25 召回、衰减归档与 GitHub 同步已在 DSH 0.2.1-rc.5 上验证;当前 package 版本为 0.3.2,许可证 MIT。
这是什么¶
一句话:Obsidian 为底的 DSH 长期记忆插件——侧边栏浏览与编辑、7 个供模型调用的工具、按 token 预算组装的召回、BM25 排序(无 embedding)、可选 GitHub Contents API 同步。分类属于社区目录中的「记忆」;目录页见 SkillHub 插件页,源码与说明见 GitHub 仓库。DSH 生态主张「一切皆插件」;SkillHub 为独立社区目录,与 DeepSeek / 幻方无官方从属关系。
核心功能¶
侧边栏与笔记形态¶
点击左侧栏脑图标,可浏览记忆、按标签筛选、按新近度或重要性排序,并在面板内就地阅读与编辑。每条记忆是库内一个 .md 文件,Obsidian 可原生索引;默认落在库根目录下的 Memories 子文件夹(可配置)。
七个智能体工具¶
模型可在未被显式提醒的情况下读写记忆:
| 工具 | 作用 |
|---|---|
obsidian_remember |
写入新记忆笔记 |
obsidian_search |
对标题、标签、正文做 BM25 搜索 |
obsidian_context |
在 token 预算内组装召回(tiny / compact / detailed 三档) |
obsidian_read |
按库内相对路径读单条笔记 |
obsidian_update |
编辑已有笔记,保留 id 与 createdAt |
obsidian_forget |
预览或执行衰减与归档(默认预览) |
obsidian_sync |
立即把变更笔记推送到 GitHub |
插件还会注册 system-prompt 片段,说明何时应写记忆(长期偏好、决策及理由、带完整错误信息的坑、本机路径与端口等)以及何时不写(一次性中间结果、可从代码读到的内容、无结论的闲聊等)。
BM25 与 token 预算¶
召回不依赖 embedding:离线可用,无需 API Key、向量库或额外模型调用;对 CJK 使用 bigram 分词以便中文查询。obsidian_context 用三档细节控制预览长度与关键词数量,使召回成本受 token 预算约束,而非整库体量。
衰减与归档¶
旧、不重要、未被引用的记忆会衰减;低于阈值的可移入 Memories/.archive/,不删除。修剪前会扫描 [[wikilink]] 目标,被引用的笔记跳过。配置项 forgettingEnabled 默认为 false,仅预览也可工作;设为 true 后才会真正写入归档。
密钥:拒绝而非脱敏¶
笔记若匹配内置模式或自定义黑名单中的秘密,会被跳过并给出原因,而不是脱敏后仍像完整记忆。内置模式包括 github_pat_、gh[pousr]_、AKIA、sk-、私钥块、常见「密码」写法等;自定义黑名单默认文件为 ~/.dsh/dsh-obsidian-memory/deny.txt(一行一条字面量,# 注释),仅在本机,不会进入源码树。
可选 GitHub 同步¶
配置 repo 为 owner/name 后,可通过 Contents API 推送变更;另一台机器可拉取。默认定时同步间隔 30 分钟(syncMinutes,最小 5);syncEnabled 默认 true,但未填 repo 时等同于不同步。Token 放在 ~/.dsh/dsh-obsidian-memory/token(或通过 tokenFile 指定),不会写入插件配置或仓库;同步状态在 ~/.dsh/dsh-obsidian-memory/sync-state.json,只推 sha256 有变的笔记。
安装与启用¶
插件无自有 runtime 依赖,所需 @deepseek-ai/schemastery、@deepseek-ai/cordis 与客户端 UI 包由 DSH Host 提供。Host 版本需在 peer 范围内:DSH >=0.2.0-rc.1 <0.3.0-0。
从 GitHub 直接安装(将 web 换成你的 profile 名):
dsh plugin --profile web add dsh-obsidian-memory@github:aoyamabf-max/dsh-obsidian-memory
若需固定版本,可钉 tag:
dsh plugin --profile web add dsh-obsidian-memory@github:aoyamabf-max/dsh-obsidian-memory#v0.3.0
安装后重启 DSH:左侧出现面板,工具对智能体立即可用。
Obsidian:非强制,但设计目标即配合 Obsidian。未设置 vaultPath 时,从 %APPDATA%\obsidian\obsidian.json(Windows)或 ~/.config/obsidian/obsidian.json(Linux/macOS)自动发现库,优先当前打开的库。
配置要点¶
各项均在 DSH 插件设置 UI 中展示,空配置即全部默认值。
| 字段 | 默认值 | 含义 |
|---|---|---|
vaultPath |
"" |
库绝对路径;空则自动发现 |
folder |
"Memories" |
相对库根的记忆子目录 |
maxNoteBytes |
262144 |
超长笔记截断硬上限 |
repo |
"" |
同步目标 owner/name;空则不同步 |
branch |
"main" |
推送分支 |
tokenFile |
"" |
GitHub token 文件;空则 ~/.dsh/dsh-obsidian-memory/token |
denyFile |
"" |
秘密黑名单;空则 ~/.dsh/dsh-obsidian-memory/deny.txt |
syncEnabled |
true |
是否运行定时同步 |
syncMinutes |
30 |
同步间隔(分钟,最小 5) |
forgettingEnabled |
false |
是否真正执行衰减归档写入 |
decayFactor |
0.9 |
每轮衰减乘数 |
pruneThreshold |
0.15 |
低于此重要性可归档 |
启用 GitHub 同步时,README 建议:建私有仓库;创建仅对该仓库 Contents: read and write 的 fine-grained token;写入 token 文件后在配置里设置 repo。
典型用法与文件布局¶
智能体侧主要由上述 7 个工具驱动;人工可在 Obsidian 或 DSH 侧边栏直接改笔记。单条记忆文件名形如:
<vault>/Memories/mem-YYYYMMDD-HHmmss <title>.md
归档目录:
<vault>/Memories/.archive/…
以点开头的 .archive 便于 Obsidian 默认图与搜索忽略。更新笔记时 frontmatter 中的 importance、level、accessCount 需一并保留,否则会被静默重置为默认。
手动立即同步(在 agent 可用 obsidian_sync,或由定时器按 syncMinutes 执行)前,需已完成 token 与 repo 配置。
适用场景与注意¶
适合:已在用 Obsidian 做个人知识库、希望 DSH 智能体记忆与人工笔记同一套文件、不想为记忆单独买 embedding 服务或维护向量库、需要在多台机器间用私有 GitHub 仓库同步 Markdown 的开发者。
注意:
- 插件以当前 DSH 进程权限运行,安装前应阅读源码与 MIT 许可证,确认 vault 路径、同步与黑名单文件符合你的安全策略。
- BM25 对 paraphrase 弱于向量检索,但对关键词、标题与 wikilink 扩展更直接,且记忆不会为召回发往第三方 embedding 服务。
- 拒绝写入含秘密的笔记意味着该条不会进入库或同步队列;应用层仍应避免把 token 交给模型写入记忆。
- README 提供「先 clone 再
dsh plugin add .」的手动安装路径,仅当你需要先审代码时使用;日常推荐上述add …@github:…命令。
结尾¶
dsh-obsidian-memory 把 DSH 长期记忆绑在 Obsidian Markdown 上:侧边栏、BM25、token 预算召回、归档而非删除、可选 GitHub 同步,并坚持「拒绝秘密、不脱敏」。若你要在 Harness 里长期沉淀可编辑、可备份的智能体记忆,可从目录页与 README 对照配置后安装。
- 目录页:https://www.skillhub.cn/plugins/aoyamabf-max/dsh-obsidian-memory
- GitHub:https://github.com/aoyamabf-max/dsh-obsidian-memory