前言¶
在 DeepSeek Harness(DSH)裏給智能體掛長期記憶,常見做法是插件化接入:模型通過 memory_write、memory_search 等工具讀寫事實,系統在 prompt 裏自動召回一段摘要。社區裏的 dsh-memory@0.1.0 用 SQLite FTS5 存 flat text,但默認分詞器對中文不友好——整句往往變成一個 token,檢索幾乎失效。長期事實還需要 scope、標籤、去重、過期複覈和可控的 prompt 預算,而不只是追加和搜索。
下面介紹維護者 tr1v3r 發佈的 @tr1v3r/dsh-ltm(社區分類:記憶)。它以本地 SQLite 爲主存儲,提供 CJK 感知分詞檢索、BM25 與字符 n-gram 混合重排、近重複檢測與記憶生命週期管理,並支持從 dsh-memory 遷移;不強制聯網,也不需要 API Key 或 embedding 服務。
這是什麼¶
@tr1v3r/dsh-ltm 是面向 DeepSeek Harness 的結構化長期記憶插件:數據落在本地 SQLite(默認 $DSH_HOME/memory/ltm.db),與舊版 memory/memory.db 獨立,不會寫入 legacy 路徑。
在 DSH「一切皆插件」的生態裏,插件經 profile 的 Cordis 配置加載;社區目錄頁見 skillhub.cn/plugins/tr1v3r/dsh-ltm,源碼與文檔在 GitHub tr1v3r/dsh-ltm(MIT 許可證)。npm 包當前版本爲 0.3.3(見倉庫 package.json)。
核心功能¶
檢索與存儲¶
- 本地 SQLite + FTS5,配合 CJK 感知分詞與 hybrid BM25 + char n-gram rerank,改善中文查詢效果。
- 寫入前近重複檢測(Jaccard ≥
dedupeThreshold默認 0.8,或 cosine ≥dedupeCosineThreshold默認 0.92);重複項可返回候選而非寫入,除非force: true。 - 結構化 scope、tags;
staleAfterDays(默認 90)未確認的記憶在展示上標記爲 stale,可用memory_confirm刷新複覈時間戳。 - 自動 prompt 召回段:可配置最近條數、UTF-16 字符上限;可選離線
promptMaxTokens+ 本地tokenizer.json做 token 預算(需自行準備資產,啓動時校驗,無網絡請求)。
項目隔離(autoProjectScope)¶
默認 autoProjectScope: true 時,每個 agent 按 session.header.cwd 解析項目:Git 倉庫用 canonical common Git directory(子目錄與 linked worktree 共享 scope);非 Git 工作區用規範目錄名。寫入與去重限定在當前 project scope;搜索與自動 recall 只見當前 project 與全局(scope="")。memory_list 與 CLI 仍可跨 project 做管理面操作。scope 是上下文隔離,不是 OS 級權限邊界。
模型側工具¶
與 dsh-memory 習慣兼容:
memory_write(text, tags?, pinned?, force?)memory_search(query, limit?)memory_forget(id)
新增:
memory_update(id, text?, tags?, pinned?, expectedRevision?)memory_confirm(id | "*", expectedRevision?)memory_list(scope?, tags?, stale?, limit?)memory_merge(targetId, sourceIds[], …)
每條記憶帶 revision;對 memory_update / memory_confirm / memory_forget / memory_merge 傳入 expectedRevision 可在單事務內 CAS,衝突返回 MEMORY_REVISION_CONFLICT 且不寫入。省略版本字段則保持舊版無 CAS 行爲。
CLI 與管理¶
獨立 CLI 入口 dsh-ltm,支持 list / search / show / edit / tag / pin / merge / confirm / forget / upgrade-schema / export / import 等,均可 --json。另有隻讀 doctor 做質量診斷(不輸出記憶正文)。從 dsh-memory 的一次性導入在倉庫 scripts/legacy-migration/,不在已發佈 CLI 內;庫間備份轉移用 export / import。
安裝與啓用¶
DSH peer 依賴需匹配 README 列出的運行時範圍(含已驗證的 0.2.1-rc.1 desktop 與 0.2.1-rc.2 CLI,以及 pre-0.2.0 區間;其他 0.2.x 預發佈需自行驗證兼容)。Node 引擎要求 ^22.19.0 || >=24.0.0。
@tr1v3r/dsh-ltm 0.1.2 及以上可用 bundle 一鍵安裝並註冊配置:
dsh plugin --profile web add @tr1v3r/dsh-ltm
將 web 換成你的 profile 名(例如 dsh-tui),然後重啓該 profile。bundle 會把數據庫路徑設爲 $DSH_HOME/memory/ltm.db。
若從 dsh-memory 切換,須先禁用舊插件條目:兩者都註冊 memory_write、memory_search、memory_forget。若曾手動插入 ltm 條目,啓用 bundle 前需刪掉,避免重複實例。安裝不會自動遷移舊庫,遷移見下文。
0.1.0–0.1.1 無 bundle manifest 時,可手動在 profile 的 cordis.patch.yml 插入:
- insert:
- id: ltm
name: '@tr1v3r/dsh-ltm'
config:
path: !!js dshHomePath('memory/ltm.db')
path 爲必填,代碼側無默認值;也可設爲 :memory:。
配置要點¶
| 配置項 | 默認 | 含義 |
|---|---|---|
path |
(必填) | SQLite 路徑或 :memory: |
defaultScope |
"" |
關閉自動 project 時的固定 scope |
autoProjectScope |
true |
按 session cwd/Git 推導 project |
promptRecentCount |
10 |
recall 段未 pin 的最近條數 |
promptMaxChars |
2000 |
recall 段 UTF-16 字符硬上限 |
maxTextChars |
2000 |
單條記憶最大字符 |
searchLimitDefault / searchLimitMax |
10 / 50 |
搜索條數上下限 |
staleAfterDays |
90 |
未確認多久視爲 stale |
非法配置(空 path、閾值不在 [0,1] 等)在插件加載時拋錯,而不是等到第一次工具調用。
可選 token 預算示例(須同時設置兩項 token 相關字段,並自備本地 tokenizer.json):
promptMaxChars: 2000
promptMaxTokens: 512
promptTokenizerPath: /path/to/pinned-model-revision/tokenizer.json
典型用法¶
1、Profile 內由模型使用工具¶
智能體在對話中調用 memory_search 查已有事實,用 memory_write 寫入;若返回近重複候選,用 memory_update 修訂同一條,或確認後 force: true 寫入。長期有效的偏好可 pinned: true。不確定 id 時先搜索,同一事實的狀態變化優先 memory_update 而非重複 write。
2、CLI 瀏覽與維護¶
默認庫路徑爲 $DSH_HOME/memory/ltm.db:
npx -p @tr1v3r/dsh-ltm dsh-ltm --db /path/to/ltm.db search "部署命令" --json
npx -p @tr1v3r/dsh-ltm dsh-ltm --db /path/to/ltm.db list --json
帶 CAS 的編輯示例(先 show 讀到 revision,再傳入 --expected-revision):
dsh-ltm --db /path/to/ltm.db edit 42 --text "更新後的內容" --expected-revision 3
3、schema v1 → v2¶
舊庫無 revision 列時,普通打開會被拒絕,需停掉所有寫入方(含運行中的插件)後顯式升級:
dsh-ltm --db /path/to/ltm.db upgrade-schema
dsh-ltm --db /path/to/ltm.db upgrade-schema --backup /path/to/new-backup.db
4、從 dsh-memory 遷數據¶
安裝插件本身不遷移 memory/memory.db。一次性從 retired dsh-memory 導入需使用倉庫內 scripts/legacy-migration/(見該目錄 README)。在 dsh-ltm 庫之間備份與轉移,用 export / import,可保留 project scope 與 review 時間戳。
適用場景與注意¶
適合需要在 DSH 里長期積累個人或項目級事實、且重視中文檢索與記憶生命週期(去重、複覈、scope 隔離)的開發者。設計目標是個人長期事實庫,而非大規模文檔庫:同 scope 內每次非 forced memory_write 會掃描該 scope 全部記憶做去重,寫入成本隨條數與長度增長;多會話可共享本地 WAL 庫,但 SQLite 寫仍串行,遇 SQLITE_BUSY 需自行重試。
插件以當前 dsh 進程權限運行,可讀寫配置的 SQLite 路徑;安裝前請查閱源碼與 MIT 許可證,確認路徑與 profile 配置符合你的安全預期。社區目錄與 DeepSeek / 幻方無官方從屬關係。
結尾¶
@tr1v3r/dsh-ltm 把 DSH 長期記憶做成本地優先:CJK 感知搜索、結構化 scope、去重與過期複覈、可選 revision CAS,以及從 dsh-memory 的遷移路徑——默認不必聯網。目錄頁:https://www.skillhub.cn/plugins/tr1v3r/dsh-ltm;倉庫:https://github.com/tr1v3r/dsh-ltm。