前言¶
用 DeepSeek Harness(DSH)開發智能體,繞不開一個問題:會話之間沒有記憶。用戶的偏好、項目的背景、之前定下的決定,每開一個新會話都得重新交代。
常見的補法有兩種。一種是把記憶寫成技能文件,靠模型自己主動加載——這是「軟保障」,模型哪次忘了調,記憶就沒進來;另一種是每次查詢現走一遍檢索——記憶永遠現查現用,缺乏持續沉澱。dsh-plugin-memory 走的是第三條路:把記憶 boot 塊隨系統提示詞運行時上下文在會話開頭強制注入,做成「硬保障」。下面介紹這個插件的機制與用法。
這是什麼¶
dsh-plugin-memory 是 LittleBlackTong 維護的 DeepSeek Harness 長期記憶插件:跨會話、可遷移、帶「靈魂」(SOUL.md 人格文件)的 markdown 記憶庫,會話開始自動注入。
基本情況:
- 當前版本 0.5.2,MIT 協議
- 純 ESM JavaScript,零構建,無編譯步驟
- 要求 Node >= 18
- 主入口 lib/index.js,CLI bin 爲 scripts/memory.mjs(命令名 dsh-memory)
- peerDependencies:@deepseek-ai/cordis ^4.0.1、@deepseek-ai/dsh-skill ^0.1.2-alpha.1、@deepseek-ai/dsh-system-prompt ^0.1.2-alpha.1、@deepseek-ai/schemastery ^3.18.1
記憶庫本身默認在 ~/.memory,是純 markdown + git + 自描述 schema。插件只負責工作流,不鎖定數據格式。
核心機制:開機強制注入¶
插件通過 ctx.systemPrompt.context() 把記憶 boot 塊注入每個會話開頭。boot 塊由四部分組成:SOUL.md 人格、MEMORY.md 協議、index.md 目錄,以及最近動態。
注入由宿主按投影去重:記憶內容不變時不重複注入,不白白消耗上下文;記憶更新後,新快照自動取代舊的。
這一點是它和技能文件做法的關鍵差別。技能只注入簡介,正文靠模型主動加載,屬於軟保障;boot 塊隨運行時上下文自動進入會話,不依賴模型自覺調技能。
SOUL.md 鑄魂¶
安裝後的第一次會話,agent 的首要任務不是幹活,而是與你對話定義它的靈魂:名字、性格、價值觀、語氣、邊界。整個過程由 BOOTSTRAP.md 清單驅動,complete 之前優先於常規任務。
鑄魂有自動引導機制:記憶庫尚無靈魂時,boot 塊會自動前置一段第一人稱引導詞,由 agent 在對話裏主動發起鑄魂,而不是等用戶來喂。鑄魂完成後引導詞自動消失。
複利記憶:四個操作¶
日常記憶維護遵循 Karpathy 的 LLM Wiki 約定:記憶是「一次編譯、持續保鮮」的持久產物,不是每次查詢重新 RAG。對應四個操作:
1、remember(記):把值得持久化的內容蒸餾成頁面,同步更新 index.md、追加時間線;
2、recall(憶):會話開始讀 boot 塊;查詢時先查 index.md 再鑽頁,必要時用 dsh-memory search 全文檢索;
3、consolidate(整理):用 dsh-memory lint 做完整性體檢,查矛盾、孤兒頁和該歸檔的冷頁;
4、forget(忘):顯式遺忘立即執行;自動衰減按 salience 三級衰減處理。
可遷移與 git 自動提交¶
記憶本體是純 markdown + git + 自描述 schema,任何能讀 markdown 的 agent 都能接手。跨機器遷移時,先在舊機器 pack 打包,再把歸檔拷到新機器 unpack 恢復,命令見下文 CLI 一節。
git 這一層也有機制兜底:記憶庫發生變更後,靜默 autoCommitQuietSeconds 無新改動,插件自動執行 git add -A && git commit;目錄沒有 .git 則跳過。歷史可回滾,不再依賴 agent 記得手動 commit。
防懶 digest 與主動追憶¶
插件還提供兩個空閒時的行爲,都獨立於 dsh-plugin-heartbeat,可單獨安裝、互不依賴。
防懶 digest 喚醒:每輪結束後,如果 agent 空閒、且記憶庫超過 digestNudgeAfterMinutes 未寫入,插件會注入一條 digest 提醒,把「會話收尾沉澱」從靠自覺變成機制兜底。帶冷卻與每會話限次,不會反覆騷擾。
主動追憶:對話空下來時,插件以第一人稱主動提起一件真實記得的事——用戶偏好、往事、未了的決定或最近進展。間隔在最短與最長之間隨機取值,每會話限次;純對話行爲,不寫記憶庫,不編造。
內嵌技能與文件技能的關係¶
插件通過 ctx.skills.register() 註冊內嵌的 memory 技能,操作協議隨插件分發。如果你項目裏已有手寫的 .dsh/skills/memory 文件技能,兩者可以共存:文件技能(rank 100)會覆蓋插件內嵌技能(rank 250)。
另一個注意點:如果你之前爲了「軟保障」改過系統提示詞 persona(比如 profile 補丁裏的開機指令),裝上本插件後建議移除那段 persona,避免雙份注入。
安裝與啓用¶
安裝命令:
dsh plugin --profile <profile> add dsh-plugin-memory
包內置 dsh.bundle manifest,dsh plugin add 會自動把它掛進 profile 的 bundles 層。安裝後重啓 profile(DSH Desktop 重啓應用)即生效。
有一個實機踩過的坑要強調:不要往 profile 的 cordis.patch.yml 手寫 - insert: {id: dsh-memory, ...}。這會與 bundle manifest 的自動掛載產生兩條同名 entry,profile 會以 duplicate loader entry id "dsh-memory" 啓動失敗(2026-08-18 實機事故)。需要覆蓋 composition 配置時,用不帶 insert 的 id 覆蓋條目,例如把 boot 塊字符預算調大:
- id: dsh-memory
config:
bootMaxChars: 12000
配置:熱改層與 composition 層¶
配置分兩層,改動方式不同。
運行期配置走 <dshHome>/memory.json(schema 校驗、原子落盤),由插件自注冊的 GET/POST /api/memory/config 路由服務,在 DSH 設置頁「記憶 Memory」區塊修改。可熱改的共八項,立即生效、無需重啓:
- enabled:總開關
- memoryDir:記憶庫目錄
- autoInject:開機注入
- registerSkill:技能註冊
- recallEnabled / recallIntervalMinMinutes / recallIntervalMaxMinutes / recallMaxPerSession:主動追憶的開關、隨機間隔範圍與每會話次數
其餘鍵——bootFiles、bootMaxChars、scaffold、configFile、digestNudge、autoCommit 等——只在 composition 配置層生效,改完需重啓。完整鍵表見倉庫 README 的配置一節。
CLI 工具¶
插件自帶 dsh-memory 命令行,覆蓋從初始化到遷移的完整流程:
dsh-memory init [dir] # 創建記憶庫腳手架
dsh-memory search <query> # 全文檢索
dsh-memory lint # 完整性體檢
dsh-memory status # 健康概覽
dsh-memory pack [out.tar.gz] # 打包導出
dsh-memory unpack <archive> [--force] # 從歸檔恢復
CLI 定位記憶庫的順序是:$MEMORY_DIR → ./.memory(存在時)→ ~/.memory。
開發與自測¶
想看實現或做改動,先克隆倉庫,再跑一次冒煙測試:
git clone https://github.com/LittleBlackTong/dsh-plugin-memory.git
cd dsh-plugin-memory
node scripts/memory.mjs --self-test
--self-test 無需安裝依賴即可運行。零構建意味着 lib/ 直接就是運行時代碼。
適用場景與注意¶
適合的場景:
- 希望 agent 跨會話記住用戶偏好、項目背景與歷史決定;
- 需要按項目隔離記憶時,把 memoryDir 配到項目內(CLI 會優先識別項目內的 ./.memory);
- 記憶含敏感內容時,可把 memoryDir 放進加密卷或私有倉庫,格式不變,插件無感知。
安裝前的兩點提醒:
1、插件以當前 dsh 進程的權限運行,安裝前應檢查插件源碼與許可證(MIT);
2、本插件與 dsh-plugin-heartbeat 相互獨立,按需選用即可。
結尾¶
回顧一下:boot 塊強制注入解決「新會話必先加載記憶」,SOUL.md 鑄魂解決身份一致,markdown + git + pack/unpack 解決遷移,digest 提醒與主動追憶讓記憶被真正用起來。如果你在 DSH 上做需要長期陪伴的 agent,值得裝上試一次。
DSH 的理念是「一切皆插件」,dsh-plugin-memory 是這個生態裏的一員。插件同時收錄在社區目錄 skillhub.cn——該目錄爲獨立站點,與 DeepSeek、幻方無官方從屬關係。
- GitHub:https://github.com/LittleBlackTong/dsh-plugin-memory
- 目錄頁:https://www.skillhub.cn/plugins/LittleBlackTong/dsh-plugin-memory