dsh-identity-relay:把人格與長期記憶放在磁盤上,新會話自動讀檔

前言

在 DeepSeek Harness(DSH)裏做長期陪伴或帶人格的智能體時,上下文窗口是易失的:對話一滿會被裁剪,清上下文或壓縮後「她是誰、做到哪、答應過什麼」往往跟着歸零。常見做法是把設定寫進系統提示或某次會話裏,但換會話、重啓 DSH 之後,連續性仍靠人工複製粘貼。

人格接力(dsh-identity-relay)由 wumingzhiren-lab 維護,歸類爲「記憶」類 DSH 插件。下面介紹它如何把人格卡、交接書和長期記憶落到磁盤,並在每個新會話開工時自動注入,讓換會話、清上下文之後仍能從同一套檔案讀檔。

這是什麼

一句話:把「靈魂」從上下文搬到純文本文件;插件負責讀檔、注入、預警和維護,不負責自動採集聊天內容。

  • 倉庫:wumingzhiren-lab/dsh-identity-relay
  • 社區目錄:SkillHub 插件頁
  • 許可證:MIT(見倉庫)
  • 插件以當前 DSH 進程權限讀寫 memoryDir,安裝前建議通讀源碼與許可證;社區目錄爲獨立站點,與 DeepSeek / 幻方無官方從屬關係

三個磁盤文件

記憶庫默認目錄爲 ~/.dsh/identity-memory(可在配置裏改 memoryDir)。安裝後會自動生成模板,模板不等於已配好人格。

文件 作用
persona.md 人格卡:身份、性格、說話方式、紅線
handover.md 交接書:上一段在做什麼、接下來做什麼、答應過什麼
facts.jsonl 長期記憶:一行一條 JSON,含時間、內容、來源、狀態等

每次新會話開工(新建、恢復、清上下文、壓縮之後),插件會把「人格卡 + 交接書 + 近期記憶」注入第一輪上下文。上下文佔用接近上限時,會在下一步之前插入預警,提醒先用 relay_handover 寫交接書。會話進行中若磁盤上的三個文件被別的會話或人工編輯改動,下一步之前會提示先 relay_load 重讀。

relay_handover / relay_persona 覆蓋寫入前,舊版會自動進入 history/,各保留最近 10 份。

記憶的來源與狀態

每條長期記憶帶來源檔位與狀態,檢索默認只出 active 條目。

來源五檔(可信度從高到低):owner(主人)> self(自己說過/答應的)> evidence > tool > inferred;老數據可爲 unknown,不猜測。

  • 作廢:標 superseded 等狀態,不刪行;用 relay_recall 時設 includeSuperseded: true 可查看歷史
  • 同鍵 subject:新記憶寫入時舊條自動作廢並指向新條,由規則處理而非模型推斷
  • 關聯:related 最多 5 個 id,回憶命中時可帶出關聯條(最多 3 條)
  • 歸檔:status: archived 不再參與讀檔與默認檢索,行仍保留;收工整理腳本 ~/.dsh/identity-memory/tools/consolidate.mjs 僅歸檔符合條件的過程流水,owner / self 永不歸檔

八個工具

Bot 通過 DSH 暴露的工具讀寫檔案(名稱以倉庫文檔爲準):

  1. relay_load — 重讀人格卡、交接書與近期記憶
  2. relay_remember — 寫入一條長期記憶(可選 source、subject、related、validFrom / validTo、importance 等)
  3. relay_recall — 關鍵詞回憶,默認最多 20 條 active
  4. relay_retract — 按內容片段定位並蓋章作廢
  5. relay_conflicts — 規則檢測可能矛盾的記憶對;默認只報告,執行需顯式參數且主人原話不會從此入口被蓋
  6. relay_handover — 讀/寫交接書
  7. relay_persona — 讀/更新人格卡
  8. relay_status — 記憶庫統計、歷史備份數、上下文壓力

FAQ 中明確:不會自動把聊天摘要寫入記憶;只有調用 relay_remember(或你/她主動維護文件)纔會增長 facts.jsonl。

安裝與裝完檢查

推薦從 GitHub 安裝(無需 git clone):

dsh plugin add github:wumingzhiren-lab/dsh-identity-relay#main

也可在 DSH 插件管理器的市場/安裝中填寫 github:wumingzhiren-lab/dsh-identity-relay。本地開發可用 dsh plugin add <本目錄絕對路徑>。安裝後 HMR 生效,一般無需重啓。

裝完後建議按 README「裝完 60 秒」走一遍:

  1. 調用 relay_status,若人格卡/交接書仍是初始模板,會標 ⚠️
  2. 填寫 persona.md 或通過 relay_persona 寫入;插件不會替你編人格
  3. 用 relay_handover 寫第一份交接書
  4. 用只有檔案裏纔有的信息驗讀檔;不通則 relay_load 檢查是否仍是空模板

可選配置

在 cordis.patch.yml 的 config 中可調整行爲。常用項包括:

鍵 默認 說明
enabled true 總開關
memoryDir ~/.dsh/identity-memory 記憶庫路徑
injectOnCreated / injectOnResume / injectOnSubagents true 各類會話是否注入
warnRatio 0.7 上下文佔用比例預警(0.5–0.99,越界會被夾緊)
recallLimit 20 讀檔注入的記憶條數(1–100)
injectSelect "relevance" 讀檔挑記憶:relevance 或 recent
maxFactsChars 8000 記憶段字符預算;0 表示不設限

完整鍵表與邊界說明見倉庫 README「配置」一節(例如 maxFacts 有 100 條硬下限等防呆行爲)。

適用場景與注意

適合需要跨會話人格連續、可審計的長期記憶(來源、作廢、同鍵更新)的 DSH 智能體或 QQ Bot 等宿主場景。若只需要單次會話內的簡單摘要,不必上全套檔案模型。

使用時需接受幾件事:記憶要人工或工具寫入;開放世界的語義衝突不會全自動判死,需人終審或規則內的同鍵替換;插件零依賴、純文本存儲,便於備份與 diff,也意味你要自己管好 memoryDir 的備份與權限。

倉庫 README 提供本地測試命令(在臨時目錄跑,不碰真實記憶庫),例如 node test/smoke.mjs 及 step4–step18、benchmark、fuzz 等;文檔記載 2026-11-03 實測 426/426 通過。當前 package.json 版本爲 0.5.0,功能細節以 README / CHANGELOG 爲準。

結尾

人格接力解決的不只是「能不能記住」,而是「記住的內容還算不算數」:磁盤上的檔案、來源檔位與蓋章作廢,讓讀檔和回憶有憑據。DSH 生態主張「一切皆插件」;若要在 Harness 裏做長期身份連續,可從官方安裝命令裝好記憶庫,填人格卡與交接書,再用 relay_remember 把該留的東西寫進 facts.jsonl。

  • 目錄頁:https://www.skillhub.cn/plugins/wumingzhiren-lab/dsh-identity-relay
  • GitHub:https://github.com/wumingzhiren-lab/dsh-identity-relay
羽毛球分组比赛记分
小程序二维码

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

小夜