Full-Life Memory:用 Token 線索做 DSH 仿生終身記憶

前言

在 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 輪)做摺疊:

  1. 用規則從文本里抽取引號原話、路徑、標識符、中文短語等,得到 keywords 與 seed_tokens(不經過 LLM)。
  2. 線索寫入 SQLite 文件(默認 ~/.dsh/full-life-memory/memory.db,WAL 模式)。
  3. 通過 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。

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

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

小夜