前言¶
在 DeepSeek Harness(DSH)裏跑長對話時,上下文會隨輪次線性變長:要麼遲早觸達窗口上限,要麼靠摘要、向量檢索等方式「省地方」,但摘要仍佔 token,向量庫往往還留着原文分塊。Full-Life Memory 是社區維護者 Toctsu 發佈在 DSH 插件目錄(分類:記憶)裏的一款插件,npm 包名爲 @tuhengyu/dsh-full-life-memory,當前 README 標註版本 0.7.1,MIT 許可。它的思路是:不存對話原文,只把舊輪次蒸餾成關鍵詞與 seed token 線索寫入 SQLite;需要時再交給模型按線索「想起」場景,同時通過 DSH surface 節點替換把被摺疊的歷史從下一輪請求裏物理移除。下面介紹它解決什麼問題、如何運轉,以及安裝與配置要點。
這是什麼¶
Full-Life Memory 是給 DeepSeek Harness 用的「仿生終身記憶」插件。自述目標是:上下文快滿時把舊對話摺疊成少量線索並從會話 surface 刪除;用戶再提起相關話題時,順着線索重建一段回憶提示,而不是把整段原文或 embedding 檢索結果塞回上下文。
與全量保留、LLM 摘要壓縮、向量 RAG 等做法相比,README 強調三點差異:遺忘階段用正則蒸餾、不調用模型(0 token 計費);落盤只有 keywords、seed_tokens 和摘要,沒有 message 正文與向量;摺疊走 surface 替換,被切節點不再進入後續請求,而不是僅在 system 裏要求模型忽略更早內容。
維護與源碼:https://github.com/Toctsu/dsh-full-life-memory。目錄頁:https://www.skillhub.cn/plugins/Toctsu/dsh-full-life-memory(社區站點,與 DeepSeek / 幻方無官方從屬關係)。
核心功能¶
自動遺忘(Phase 2,默認開啓)¶
在 agent/pre-step 階段用 tokenMeter.measure(session) 估算上下文。當 token 達到配置的閾值(默認 8000)且已完成輪數足夠時,保留最近若干輪(默認 4 輪),對最老的若干輪(默認 2 輪)做摺疊:
- 用規則從文本里抽取引號原話、路徑、標識符、中文短語等,得到
keywords與seed_tokens(不經過 LLM)。 - 線索寫入 SQLite 文件(默認
~/.dsh/full-life-memory/memory.db,WAL 模式)。 - 通過 surface 替換,把被摺疊的多條節點收成一條 checkpoint,並在界面側出現「記憶已摺疊」類提示。
手動回憶(Phase 1)¶
安裝後爲會話提供 recall_from_clues 工具。從線索庫按配置取回若干條(默認 limit: 5,上限 20),組裝回憶提示,字符總長受 maxPromptChars(默認 1800)限制,超出會截斷並標註更早線索已淡忘。
多場景與羣聊隔離¶
全局 YAML 可設 sceneOverrides,鍵爲會話 header.agentPreset(小寫);未匹配時可退回 header.origin 或 default。場景內未寫字段繼承全局;enabled: false 時該場景跳過摺疊。也可用 sceneMap 用正則匹配 preset、origin、會話 id、cwd,給未設 agentPreset 的橋接兜底。
Phase 3 支持 isolateByUser:從用戶消息前綴識別發送者(可配置 senderPatterns),摺疊時把本人對話記爲私有線索,他人對話可記爲全羣共享或丟棄(othersAsGlobal)。召回 scope 支持 auto / user / global。isolationScope 可選 user(跨羣同人共享)或 user+scene(同羣才共享私有線索)。
生態外消費同庫¶
倉庫含 AstrBot 側插件與 flm CLI,可讀寫同一 SQLite,供 NapCat / AstrBot 等不經 DSH 主鏈路的場景使用;DSH 不在場時,Full-Life Memory 的 Host 內鉤子不會執行,需按 README 選擇 AstrBot 插件或 CLI 接入。
安裝與啓用¶
環境要求:Node.js ≥ 24(README badge)。與 @deepseek-ai/dsh-agent、@deepseek-ai/dsh-tools 的 peer 兼容區間爲 >=0.2.1-rc.2 <0.3.0。
官方 README 給出的安裝方式爲 bundle / link 安裝(將 <本目錄的絕對路徑> 換成本地克隆或解壓後的插件目錄絕對路徑):
plugin_manager { action: "install_bundle", target: "<本目錄的絕對路徑>" }
裝完後需重啓一次 DSH。README 說明:link 安裝下改代碼不必重裝,但需重啓 Host 纔會重新加載模塊。
插件以當前 DSH 進程權限運行;安裝前應自行審閱 GitHub 源碼與 MIT 許可證,確認線索庫路徑與自動刪除歷史的行爲符合你的安全與合規要求。
配置示例¶
在 DSH 插件配置中插入(字段含義以 README 表格爲準):
- insert:
- id: full-life-memory
name: '@tuhengyu/dsh-full-life-memory'
config:
dbPath: '~/.dsh/full-life-memory/memory.db'
limit: 5
maxPromptChars: 1800
autoForget: true
forgetThresholdTokens: 8000
forgetTurns: 2
keepCompletedTurns: 4
sceneOverrides: {}
羣聊示例(更早觸發摺疊、按人隔離):
sceneOverrides:
qqbot:
enabled: true
forgetThresholdTokens: 4000
keepCompletedTurns: 1
isolateByUser: true
設置頁提供「Settings → 終身記憶」與插件詳情頁配置區兩處入口,可與手寫 YAML 並用。
典型用法¶
DSH 內¶
長對話過程中插件在 token 超閾值時自動摺疊;模型或用戶可通過 recall_from_clues 在提到舊事時拉取線索。摺疊後上下文裏會出現 checkpoint,舊輪次不再隨請求發送。
flm CLI(JSON 輸出)¶
全局安裝 npm 包後可使用(README 示例):
npm i -g @tuhengyu/dsh-full-life-memory
flm recall --text "你還記得上次那個數據庫嗎" --user 10001 --scene qqbot
flm remember --keywords "數據庫,sqlite" --seed "用 node:sqlite 存線索" --user 10001
flm stats
AstrBot¶
將 db_path 指向與 DSH 相同的 memory.db,在觸發詞命中時回憶並注入 system_prompt;安裝方式見倉庫 astrbot/README.md。
適用場景與注意¶
適合:需要長時間單 Session 對話、希望降低上下文與 KV 佔用、又願意用「線索 + 模型重建」代替原文或向量檢索的 DSH 用戶;QQ 羣等碎片消息多、需按人或按場景調節摺疊策略的場景。
注意:
- 線索是規則蒸餾結果,不是無損存檔;關鍵事實若只存在於被切除的原文且未進入線索,可能無法完整找回。
- 羣聊橋接必須按羣複用 DSH Session,且發送者格式需可被識別;純暱稱作鍵不穩定,README 建議橋接帶上 QQ 號形式前綴。
forgetThresholdTokens優先用ctx.tokenMeter;無該服務時按字符粗估。- 若整條鏈路不經過 DSH,應使用 AstrBot 插件或
flm,而非指望 Host 內鉤子。
結尾¶
Full-Life Memory 把「遺忘」做成零 LLM 成本的正則蒸餾 + surface 物理切除,把「回憶」做成線索查詢與提示重建,在 DSH 插件生態裏提供了一條與向量 RAG 不同的記憶路徑。進一步瞭解可查看目錄頁 dsh-full-life-memory 與源碼倉庫 Toctsu/dsh-full-life-memory。