dsh-memory:爲 DSH Agent 實現仿人長期記憶

前言

在 DeepSeek Harness(DSH)裏給 agent 加「記憶」,常見做法是向量庫做相似檢索、把對話歷史堆進上下文,或用一個簡單的 key-value 表。這些方式要麼不會隨時間變弱,要麼上下文一滿就整段丟掉,也沒有「被線索喚起」而不是精確查詢的行爲。

dsh-memory 是社區維護者 Soulmate793 發佈的 DSH 插件(分類:記憶),把遺忘、鞏固、線索召回、分區隔離等機制做成可運行的本地存儲,數據默認只落在本機目錄,無第三方 npm 依賴。下面介紹它解決什麼問題、如何安裝,以及七個記憶工具的典型用法。

這是什麼

插件全名在倉庫中爲 dsh-memory(GitHub:Soulmate793/dsh-memory),當前 package 版本 1.1.0,許可證 MIT。簡介概括爲:Human-like memory plugin for DeepSeek Harness——艾賓浩斯式衰減、睡眠鞏固、記憶分區、哈希鏈審計;純本地、零外部依賴。

與「只增不減的向量庫」或「無限增長的對話日誌」相比,它強調:記憶有強度會衰減;被回憶會略作強化;空閒時可合併情節並升格爲語義記憶;召回依賴線索詞重疊而非精確匹配;自我、關係、情節等七個分區各有衰減與隱私策略(隔離區 vault 默認不參與召回)。

核心功能

記憶行爲

機制 說明
艾賓浩斯遺忘 強度按指數曲線衰減;重要度、情緒越高,衰減越慢
提取強化 每次被 memory_recall 命中,基礎強度回補,並更新訪問時間
睡眠鞏固 memory_consolidate 對情節記憶聚類合併、去重,高價值條目升格爲語義記憶
線索依賴召回 IDF 加權特徵重疊,並結合強度、近因、重要度與分區權重打分;無詞重合則不會返回
工作記憶 最近消息的環形緩衝,過期丟棄,不寫入長期庫

v1.1 相關能力(README 標註)

  • 記憶分區:self / relationship / episodic / semantic / life / learning / vault,各區獨立衰減、檢索權重與隱私策略
  • 關係臺賬:爲對話對象維護 relationships.json,可按人注入
  • 固定記憶:memory_pin 將關鍵記憶設爲不遺忘(文檔在「新增能力」中列出)
  • 情緒與性格:8 維情緒與性格成長,支持 emotion_set(可選模塊)
  • 容量:配置 maxItems: 500000,環境變量 MEMORY_MAX_ITEMS 可覆蓋
  • 鎖自愈:異常退出留下的殭屍鎖會被自動清理

審計與可選模塊

每次寫入、更新、遺忘會向 Ed25519 簽名的哈希鏈追加事件;memory_chain_verify 可校驗鏈連續性與和 memory.json 的對賬。可選文件包括情緒、性格、人物畫像、學習庫、語義向量、聯想圖等,均位於同一 dataDir。

安裝與啓用

環境要求:Node.js >= 20,倉庫聲明無第三方 npm 依賴。

方式一:作爲 DSH bundle 安裝(README 推薦)

將倉庫放到本機絕對路徑後,通過插件管理器安裝 bundle(路徑需替換爲你的實際目錄):

plugin_manager(action: "install_bundle", target: "<絕對路徑>/dsh-memory-plugin")

安裝後重啓 DSH,agent 會獲得 7 個記憶相關工具。

方式二:手動放進 profile

  1. 把倉庫目錄加入 profile 的 bundle 列表
  2. 在 cordis.patch.yml 中啓用 memory 行(可參考倉庫自帶 patch)
  3. 重啓 DSH

配置片段

在 cordis.patch.yml 中插件註冊示例:

- insert:
    - id: memory
      name: 'dsh-memory'
      config:
        memory:
          dataDir: ''          # 留空 = ~/.dsh/qq-memory
          maxItems: 500000     # 容量上限,超出按強度淘汰
          recallLimit: 8       # 默認召回條數
          includeVault: false  # 默認不讀取隔離區

環境變量 MEMORY_DIR 可覆蓋 dataDir。

典型用法

數據默認在 dataDir(留空時爲 ~/.dsh/qq-memory/),主要文件包括 memory.json、memory-chain.jsonl 及鏈相關密鑰文件;插件僅讀寫該目錄,README 說明無網絡請求。

下面示例來自倉庫 README,展示記住偏好、按線索回憶、分區查詢、鞏固與審計:

# 記住一個偏好
memory_remember({
  text: "她喜歡下雨天,討厭香菜",
  kind: "semantic",
  importance: 0.7,
  tags: ["preference"],
  zone: "relationship"
})

# 按場景回憶
memory_recall({ query: "她喜歡什麼天氣", limit: 5 })

# 只在自我區回憶
memory_recall({ query: "我是誰", zone: "self" })

# 讀取隔離區(需顯式允許)
memory_recall({ query: "暗號", zone: "vault", include_vault: true })

# 空閒時鞏固
memory_consolidate()

# 審計
memory_chain_verify()

常用工具還包括 memory_stats(庫統計)、memory_zones(分區統計)、memory_forget(軟刪除,鏈上留痕)。參數細節見倉庫 docs/tools.md。

適用場景與注意

適合誰:希望在 DSH 裏做長期、可衰減、可分區、可本地審計的 agent 記憶,且不接受默認「全量向量檢索 + 永不忘」模型的開發者。

運行與信任邊界:插件以當前 DSH 進程權限讀寫本地文件;安裝前請自行查看源碼與 MIT 許可證。memory-chain-key.pem 丟失後無法驗證歷史鏈,README 建議備份。隔離區目前策略爲默認不召回,路線圖提及未來可能增加加密存儲,當前並非加密 vault。

共享與上限:同一機器、同一 dataDir 可在多 agent/會話間共享;多進程寫入有文件鎖。超過 maxItems 時按強度淘汰最弱條目。重啓 DSH 不會清空已持久化記憶。

社區目錄頁(與 DeepSeek / 幻方無官方從屬關係):skillhub.cn 插件頁。源碼與完整設計文檔:GitHub 倉庫。

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

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

小夜