前言¶
在 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