alice-memory:DSH 下的分層混合長期記憶

前言

在 DeepSeek Harness(DSH)裏跑智能體時,上下文窗口始終是硬約束。把整段對話歷史原樣塞回下一輪,很快就會撞上限;只留一個摘要文件,細節又容易丟。社區插件按「一切皆插件」的思路擴展能力;目錄在 SkillHub 這類獨立站點上架,與 DeepSeek / 幻方無官方從屬關係。

下面介紹維護者 cycocyco 的 alice-memory:會話結束後自動捕獲值得記的內容,下一輪按語義相關性靜默召回,並暴露顯式工具供手動記、查、刪。插件分類爲「記憶」,當前 GitHub 星標爲 0;npm 包名 dsh-alice-memory,版本 3.0.0,許可證 MIT。

這是什麼

一句話:給 DSH 用的長期記憶插件——自動捕獲、向量 + FTS5 混合召回、零 npm 運行時依賴,純 Node(node:sqlite),不需要 Python 或獨立數據庫進程。

它針對兩種常見做法的缺口:全量注入會佔滿 token;純摘要會丟過程細節。alice-memory 把正文落在本機 SQLite,用 embedding 做語義檢索,用 FTS5 兜住專有名詞和字面匹配,並按熱度分成 hot / warm / cold,避免每條記憶每輪都掃全庫。

核心功能

自動捕獲

每輪結束時判斷對話是否值得記:過濾「好的」「繼續」、斜槓命令、插件自己的注入;壓縮成長度受限的問答文本,脫敏後寫入庫。配置項 capture.min_prose、capture.daily_cap 等可在 config.json 中調整(見安裝與配置)。

混合召回

用戶本輪輸入會先算 embedding(默認 6s 超時),再在 hot + warm 內存向量塊裏掃描,同時跑 FTS5 全文;命中不足時 worker 在預算內掃冷層。兩路排名用 RRF 融合(README 給出向量 1.0、全文 0.35、冷層 ×0.8 等權重)。默認 recall.limit 爲 3,recall.max_chars 爲 400,控制注入上下文的體量。

記憶分層

按時間衰減與被強化次數計算熱度,劃分 hot / warm / cold / archive。默認 memory.hot_max 3000、memory.warm_max 12000,只有 hot + warm 常駐一塊連續 Float32Array;冷層不佔這塊內存,需要時再掃盤。

顯式工具

除靜默召回外,插件註冊四個工具(README 表述爲「三個(其實是四個)」):

工具 用途
alice_memory_save 用戶要求「記一下」時手動寫入,默認 pinned、不衰減
alice_memory_recall 主動檢索
alice_memory_forget 按 id 或子串刪除,同步向量與墓碑
alice_memory_prune 清理長期未召回的冷記憶,默認僅預覽,需 token 或 force 才真刪

數據與隱私

單庫文件 <data_dir>/memories.sqlite3(WAL),正文、向量、墓碑、FTS 同庫。默認 data_dir 爲空時使用 $DSH_HOME/alice-memory。

要點有三條(來自 README「隱私」節):

  1. 向量檢索會把記憶正文發給配置的 embedding 服務商;可改 embedding.url 指向自託管或本地兼容接口。
  2. 默認脫敏會替換常見密鑰形態後再入庫,屬兜底而非絕對安全。
  3. 庫文件在本地,插件 README 聲明不聯網上傳、不統計。

安裝與啓用

要求 Node ≥ 24(node:sqlite 從 24 起穩定)。裝完重啓 DSH,插件會自行建庫並建索引,無需單獨初始化腳本。

尚未發佈到 npm,從 GitHub 安裝(命令摘自倉庫 README):

dsh plugin --profile <你的 profile> add github:cycocyco/alice-memory

本地聯調源碼時,README 給出 file:/absolute/path/to/alice-memory 方式;按你的任務約束,正文不展開 git clone 步驟。

插件在 當前 dsh 進程權限 下運行,安裝前建議自行審閱 倉庫源碼 與 MIT 許可證。

配置

開箱即用,默認值在 lib/config.mjs。要覆蓋時,將 config.example.json 複製爲插件目錄下的 config.json。優先級:環境變量 > config.local.json > config.json > 內置默認。

示例結構(字段含義以 README 爲準):

{
  "data_dir": "",
  "scope_id": "default",
  "api_key_env": "SILICONFLOW_API_KEY",
  "embedding": {
    "url": "https://api.siliconflow.cn/v1/embeddings",
    "model": "BAAI/bge-m3",
    "dimensions": 1024
  },
  "recall": { "limit": 3, "timeout_ms": 6000, "max_chars": 400 },
  "capture": { "min_prose": 25, "daily_cap": 150 },
  "memory": { "hot_max": 3000, "warm_max": 12000, "half_life_days": 45 }
}

API key 建議放在 $DSH_HOME/.env,例如:

SILICONFLOW_API_KEY=sk-...

更換 embedding 模型或 dimensions 會導致全庫重嵌,選型前需想清楚。

典型用法

在對話裏

依賴 DSH 把工具暴露給模型:用戶說「記住以後都用 pnpm」會走 alice_memory_save;「回憶一下上週那個方案」走 alice_memory_recall;「刪掉關於 X 的記憶」走 alice_memory_forget;「整理記憶」走 alice_memory_prune(先預覽再確認)。

命令行排查

插件提供 alice-memory 可執行文件,常用示例如下:

alice-memory status
alice-memory doctor
alice-memory recall "上週說的那個方案"
alice-memory remember "以後都用 pnpm" --title 包管理
alice-memory forget --id <id>
alice-memory prune --days 90
alice-memory export dump.jsonl

doctor 會真實請求一次 embedding,用於確認 key 與接口可用;export 便於人工查看或遷移。

適用場景與注意

更適合:長期在同一 profile 下做項目助手、個人偏好與過程性結論需要跨會話保留,且能接受爲 embedding 配置 API(或自建兼容端點)的場景。上萬條量級時,分層 + 混合檢索比全量 Markdown 注入更可維護。

需要提前想清楚:

  • 必須有可用的 embedding 服務(或本地兼容實現),這是語義召回的前提,也帶來費用與出網範圍問題。
  • 冷層召回受 README 所述時間預算約束,老記憶的延遲可能高於熱區。
  • 實現複雜度高於「單文件摘要」方案,出問題時可依賴 status / doctor / CLI recall 分解耗時。

README 在 Windows 11、Node 26、約 1 萬條 × 1024 維庫上給出端到端召回約 289ms 的實測參考;你的環境會以網絡 embedding 延遲爲主。

結尾

alice-memory 把 DSH 會話變成可檢索、可分層、可導出的 SQLite 記憶庫:自動捕獲減人工,RRF 混合召回兼顧說法變化和字面命中,四個顯式工具保留可控性。零第三方 npm 依賴、單文件 SQLite,適合想在自建 Harness 上補長期記憶、又不願再起一套向量數據庫服務的開發者。

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

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

小夜