dsh-obsidian-memory: Powering DSH Agents' Long-Term Memory with Obsidian Vaults

前言

在 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 的开发者。

注意:

  1. 插件以当前 DSH 进程权限运行,安装前应阅读源码与 MIT 许可证,确认 vault 路径、同步与黑名单文件符合你的安全策略。
  2. BM25 对 paraphrase 弱于向量检索,但对关键词、标题与 wikilink 扩展更直接,且记忆不会为召回发往第三方 embedding 服务。
  3. 拒绝写入含秘密的笔记意味着该条不会进入库或同步队列;应用层仍应避免把 token 交给模型写入记忆。
  4. 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
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye