meow-memory:DSH 跨會話七層長期記憶插件

前言

在 DeepSeek Harness(DSH)裏跑多輪、跨會話任務時,模型默認只依賴當前上下文。關掉窗口或換一個新會話,項目結構、用戶偏好、上一輪糾正過的教訓往往要重新交代一遍。常見做法是往 system prompt 裏塞長文檔,或靠外部筆記手動粘貼——前者容易破壞 KV 緩存、後者難以按需檢索。

meow-memory 是 Phant0Meow 維護的 DSH 記憶類插件,在每個工作區用 SQLite 維護結構化記憶庫,通過首輪快照注入、逐條關鍵詞命中和空閒時的 dream 整理,把 soul、user、project 等七層信息跨會話保留下來。下面介紹它的定位、能力與安裝方式。

這是什麼

meow-memory(npm 包名 meow-memory,倉庫 Phant0Meow/dsh-meow-memory)面向 DeepSeek Harness 的跨會話記憶場景。記憶數據存放在工作區下的 .dsh-meow/memory.db,基於 Node 內置的 node:sqlite,無額外原生依賴。

核心理念分兩條線:靜態記憶手冊(數據總覽、工具用法、寫作準則)以固定 section 註冊在 system prompt 裏,文本恆定、利於 provider 的 KV 緩存;動態內容(soul/user 全量、設計原則、記憶導引)作爲第一條真實用戶消息的前綴注入,從第二輪起每條用戶消息再做關鍵詞命中。模型需要深入內容時,調用 memory_searchmemory_project 等工具檢索。

當前版本 0.17.0,MIT 許可證。GitHub 約 37 stars。社區目錄頁:SkillHub — dsh-meow-memory

七層記憶與存儲結構

記憶按層級分表存儲,每條記錄帶 UUID 與時間前綴,id 順序即創建順序:

層級 含義
soul AI 自身相關信息
user 用戶基本信息與偏好
project 項目信息,含 subcategory(overview/structure/decisions/quotes/ops/todo)
fact 原子事實
lesson 教訓與糾正
topic 進行中的討論話題,可帶目標句
rules 設計原則與行爲準則

全局適用的條目,project"全局"(與留空區分)。同時適用於多個項目時,用英文逗號分隔,如 "dsh, femwa"。檢索與命中按「包含當前項目名或全局」判定。

會話級已見記錄寫在 .dsh-meow/sessions/<id>.json:注入過的 id 不重複注入;收到會話壓縮信號(compaction/*)時釋放已見記錄,壓縮後可再次被命中。

注入與檢索機制

首輪長期記憶塊:第一條真實用戶消息前注入固定格式——===== 長期記憶 =====【關於你】(soul 全量)→ 【關於user】(user 全量)→ 【設計原則】(全局 rules 且 importance≥2)→ 【記憶導引】(用法說明 + 用戶所有 project 列表)→ ===== 長期記憶結束 ===== + 本輪用戶prompt:。首輪不跑關鍵詞命中;即使首條用戶消息與插件通知同批到達,快照仍掛在真實用戶消息上。

每消息關鍵詞命中:從第二條用戶消息起,對 fact/lesson/rules/topic 檢索(範圍 = 全局 + 當前 project 錨定),top-2 命中以「可能相關的記憶,僅供參考:」前綴注入。打分基於條目關鍵詞(LLM 提取或自動 bigram),結合 idf、覆蓋率、按時間戳的艾賓浩斯衰減、importance 權重與 title 加成。未錨定 project 時,命中只搜全局,避免閒聊誤傷項目記憶。

當前 project 錨定memory_remembermemory_searchmemory_updatememory_projectproject 參數即錨定該會話的當前項目。

緩存友好:靜態 meow-memory:guide section(order 130)在 system prompt 註冊一次;memory_search 默認 top10 中前 5 條按相關度取(不排除已見),後 5 條繞開已見補齊。

工具集

插件向模型暴露一組 memory_* 工具,常用能力如下:

  1. memory_remember:寫入記憶。必填 contentprojectkeywordsimportance,缺失會報錯引導重填;支持自動去重合並,返回讀回確認。
  2. memory_search:BM25 檢索,支持 levelprojectstatusdays 過濾;默認 top10,返回歸屬、完整 id、相對時間與關鍵詞列表(不含原文)。
  3. memory_projectproject 參數必填。按子標籤分組輸出項目全景,todo 區顯示「已完成:」最近 5 條與「To do list:」,末尾附記憶庫與會話歷史定位說明。
  4. memory_find_similar:查重與衝突檢測。
  5. memory_read / memory_update:讀取與更新,含 status(active/archived/stale)、importancegoalkeywords 等字段。
  6. memory_dream:手動觸發本窗口記憶整理。

記憶時間戳以 updated_at(最後更新時間)爲準;dream 封存或 memory_update 刷新時更新。

按窗口 dream 整理

窗口空閒達到 idleMinutes(默認 180 分鐘)且非峯時抑制時段時,該窗口的主 agent 在空閒時整理記憶。整理範圍爲本窗口建立或提取過(注入、檢索、memory_read)的記憶,以窗口最後一次對話時間戳凍結知識。

整理分三輪:第 1 輪處理 project/fact/lesson/rules/soul/user;第 2 輪處理 topic;第 3 輪在項目涉及具體項目時追加項目總結(調 memory_project 複查並精簡,舊條目歸檔)。長期穩定的 rules 默認 2 天內有更新才進入重審清單(dream.rulesReviewDays),避免無意義刷新。

峯時抑制按 timeZone(默認 Asia/Shanghai)計算:默認 09:00–12:00、14:00–18:00 及各自開始前 15 分鐘(suppressLeadMinutes)不自動觸發;進行中的 dream 不打斷。無 live agent 且超過 24 小時的舊窗口、已歸檔會話不處理。

不想等空閒觸發時,在輸入框輸入 /dream 可立即喚起本窗口整理(與 memory_dream 同語義,不受峯時抑制)。左側會話行「…」菜單可設置「跳過夢境整理記憶」,被跳過的窗口不再被空閒定時器自動 dream,手動 /dreammemory_dream 仍可用。

dream 防重複機制包括:DB 原子 60 秒檢查節流、dream_pending 冪等搶佔、未收尾 dream 自動補收尾、跨實例孤兒收尾。

反思與客戶端 UI

連續 ≥7 個工具 step(默認 reflectTurns)後,插件會詢問模型自上次整理以來是否有值得記憶的內容;若最後一步已是 memory_* 則視爲已主動記憶,不重複反思。

客戶端還提供:

  • 首輪長期記憶與關鍵詞命中注入摺疊爲「▸ 已注入記憶」橫條,點開查看全文,用戶 prompt 以氣泡直接顯示。
  • 反思輪與 dream 輪默認摺疊爲橫條(如「新增記憶 N 條」「記憶夢境任務」),可展開查看 Think、tool call 等細節。
  • 會話列表中,dream 整理後無新活動的會話顯示淡黃色月牙標識;dream 進行中爲呼吸燈月牙。狀態通過 /meow-memory/dream-events SSE 推送。

安裝與啓用

插件以當前 DSH 進程權限運行,安裝前建議閱讀源碼與 MIT 許可證。DSH 採用「一切皆插件」的裝配方式;SkillHub 爲社區目錄站點,與 DeepSeek / 幻方無官方從屬關係。

通過 npm(推薦)

在 profile 的 node_modules 中安裝(loader 在此解析插件):

cd $DSH_HOME/profiles/web          # 默認 home: ~/.dsh/profiles/web
npm install meow-memory

在 profile 的 package.json 中將包加入裝配 bundles(v0.9.0 起推薦寫法):

"dsh": {
  "profile": {
    "bundles": ["@deepseek-ai/dsh-base", "@deepseek-ai/dsh-web-app", "meow-memory"]
  }
}

插件自帶 dsh.bundle.patch,bundle 機制會自動裝配。新增插件請走 bundles 數組,勿依賴 profile patch 的 insert 尋址。

重啓 dsh web 後,新會話自動加載插件。

手動安裝

  1. 將包複製或軟鏈到 profile 的 node_modules
mkdir -p ~/.dsh/profiles/web/node_modules
ln -s /path/to/meow-memory ~/.dsh/profiles/web/node_modules/meow-memory
  1. 同樣將 meow-memory 加入 dsh.profile.bundles
  2. 重啓 dsh web

配置項

所有字段可選,可通過 profile patch 或 cordis.patch.yml 覆蓋:

- id: meow-memory
  name: 'meow-memory'
  config:
    enabled: true          # 總開關
    projectDir: '.dsh-meow' # 記憶目錄(相對工作區)
    hitTopK: 2             # 每條用戶消息關鍵詞命中上限
    reflect: true          # 連續工具輪後自動反思
    reflectTurns: 7        # 觸發反思所需的連續工具輪數
    dream:
      enabled: true
      idleMinutes: 180      # 空閒 ≥180 分鐘允許 dream
      suppressWindows:      # 峯時抑制時段(按 timeZone)
        - start: '09:00'
          end: '12:00'
        - start: '14:00'
          end: '18:00'
      suppressLeadMinutes: 15
      checkMinutes: 15
      timeZone: 'Asia/Shanghai'

運行要求

零運行時依賴:node:sqlite(Node ≥22.13 默認可用;22.5–22.12 需 --experimental-sqlite)加自包含 esbuild 產物 lib/index.js,無原生模塊。

適用場景與注意

適合需要跨會話保留項目上下文、用戶偏好與教訓糾正的 DSH 工作流——例如長期維護同一倉庫、多窗口並行但共享記憶庫的場景。雙實例共享同一記憶庫時,跳過 dream 等狀態持久保存、天然一致。

注意:記憶質量依賴模型主動調用 memory_remember 與 dream 整理;關鍵詞命中基於條目關鍵詞而非全文,寫入時 keywords 字段值得認真填寫。峯時抑制時段內不會自動 dream,緊急整理請用 /dream

鏈接

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

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

小夜