@tr1v3r/dsh-ltm:DSH 本地長期記憶與 CJK 感知檢索

前言

在 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。

羽毛球分组比赛记分
小程序二维码

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

小夜