@ruqinhu/dsh-memory:帶字符上限的 DSH 長期記憶

前言

在 DeepSeek Harness(DSH)裏跑智能體時,「記住用戶偏好、項目約定、運維規則」往往靠會話內上下文或手寫 system prompt。上下文會隨輪次被擠掉;prompt 越寫越長,又和每次請求一起計費。社區裏也有把記憶文件整段塞進 prompt 的做法,但缺少硬上限時,規則被靜默截斷、沒人察覺的情況並不少見——README 裏引用的 Hermes 部署曾出現 MEMORY 超 cap 約 68%、USER 超 cap 約 100% 仍無告警的例子。

@ruqinhu/dsh-memory 是維護者 ruqinhu 發佈的 DSH 插件(社區目錄分類:記憶),用兩份 § 分隔的 Markdown 文檔、可配置的字符上限,以及搜索、按 id 讀取和帶證據的維護流程,把「記憶即 prompt 上下文」這件事做成可預期、可拒絕超限寫入的機制。下面介紹它是什麼、能做什麼、如何安裝與日常使用。

這是什麼

一句話:面向 DeepSeek Harness 的持久化 agent 記憶插件——整文件注入(在預算內)、關鍵詞搜索、以及有界的維護與冷條目採樣。

默認在 ~/.dsh/memory 下維護 MEMORY.md( durable 規則,默認 cap 2200 字符)和 USER.md(用戶畫像與長期偏好,默認 cap 1375 字符)。超限寫入會被拒絕,而不是靜默截斷。

核心機制與功能

兩份文檔與硬 cap

文檔 默認 cap 內容
MEMORY.md 2200 字符 durable 規則
USER.md 1375 字符 用戶畫像與長期偏好

記憶隨每次請求作爲 prompt 上下文注入,因此 cap 是設計約束,不是可選優化。

注入策略

兩份文檔合計 ≤ 6000 字符時,整份 inline 注入;超過則改爲 id + 首行索引,需要時再 memory_get(id) 拉全文(多一次工具調用,但避免擠佔工作上下文)。

條目 id 與搜索

  • 條目 id 由 (target, text) 哈希得到,10 位十六進制,前綴 m- / u-;改文案會換 id(有意爲之,避免 positional id 在壓縮後 silently 指錯條目)。
  • memory_search 做關鍵詞匹配;中文用 bigram,ASCII 按 ≥2 字符詞切分。
  • memory_recall(需 enableRecall)在 1500 字符預算內按分數注入,放不下的條目跳過,不截斷半條規則。

使用證據與維護

側車文件 .entry-index.json 記錄 hits、firstSeenAt、lastHitAt。inline 注入的條目不計數,因此統計是下界。memory_maintenance 會備份、輪轉、報告用量,並列出「冷」條目樣本:未使用達 staleAfterDays(默認 45 天)、且條目年齡大於 staleMinAgeDays(默認 14 天),最多 12 條、按體積優先——是樣本,不是全量清單。

若環境中存在 skill registry,插件會註冊 memory-curation skill(enableSkill 默認 true);無 registry 時跳過註冊,插件仍可加載。

工具一覽

工具 用途
memory_read 讀整份文檔及用量、條目數
memory_get 按 id 讀單條條目全文
memory_search 關鍵詞搜索,返回帶分數的 id
memory_recall 搜索並渲染可直接用的塊(需開啓 recall)
memory_write 替換整份文檔(超限拒絕)
memory_append 追加一條(超限拒絕)
memory_replace 精確子串替換,壓縮時的基本操作
memory_maintenance 備份、輪轉、用量報告、冷條目列表

README 建議:每週用定時任務調用 memory_maintenance,再用 memory_replace 合併或刪除條目,直到用量回到 cap 以內。

已知邊界(資料原文)

  • 自動 recall 默認關閉;僅在注入切到索引模式後纔有典型收益。
  • 跨設備無共享與鎖;跨文檔重複條目不檢測。
  • cap 單位是字符而非 token,換語言環境需重新評估。

安裝與啓用

插件以當前 DSH 進程權限讀寫 memoryDir,安裝前請自行審閱源碼與 MIT 許可證。

官方安裝命令(來自 README):

dsh plugin add @ruqinhu/dsh-memory

常用配置項(默認值見 README):

鍵 默認 含義
memoryCap 2200 MEMORY.md cap
userCap 1375 USER.md cap
enableInjection true 作爲動態 prompt 上下文注入
backupKeep 12 保留的備份目錄數
memoryDir ~/.dsh/memory 文檔與備份位置
enableRecall false 註冊 memory_recall
enableAutoRecall false 每輪自動 recall
recallBudgetChars 1500 單次 recall 字符上限
staleAfterDays 45 多久未用視爲 cold
staleMinAgeDays 14 更年輕的條目不列入 unused
enableSkill true 有 registry 時註冊 memory-curation

運行時依賴 @deepseek-ai/schemastery;@deepseek-ai/dsh-skill 爲可選 peer,缺失時無 skill,不影響插件本體。

典型用法

1、安裝並確認 enableInjection 爲 true 後,智能體每輪會在預算內看到記憶內容或索引。

2、需要查某條規則時,先搜索再按 id 讀取。README 實測示例:memory_search("網關") 得到 id(如 m-efa7252010),再 memory_get 返回完整條目(示例中爲 95 字符),側車 hits 會增加。

3、寫入或追加前留意 cap;若被拒絕,用 memory_maintenance 看用量與 cold 樣本,用 memory_replace 做壓縮,而不是指望截斷。

4、可選:開啓 enableRecall 註冊 memory_recall;索引模式下再考慮 enableAutoRecall(默認關)。

適用場景與注意

適合:需要在 DSH 里長期保存少量高價值規則與用戶偏好、且希望超限寫入失敗而非靜默丟內容的開發者或運維型 agent 部署。

注意:

  • 插件與 DSH 同進程權限,記憶目錄含備份,部署環境需自行隔離與備份策略。
  • recall 失敗會被吞掉,不會拖垮整輪對話;側車損壞會在下次 sync 時當空重建。
  • 社區目錄 skillhub.cn 爲獨立生態站點,與 DeepSeek / 幻方無官方從屬關係;星標等頁面元數據以目錄爲準(資料抓取時爲 0)。

結尾

@ruqinhu/dsh-memory 把長期記憶收成兩份有 cap 的文檔、可導航的 content-derived id,以及拒絕超限寫入和帶採樣的維護路徑,適合在 DSH「一切皆插件」的架構裏替代無上限的整文件堆 prompt。

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

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

小夜