跳到主內容

Theme / v3.11.0

MemPalace

本地優先的 AI 記憶宮殿

基礎觀念

v3.11.0:Palace Audit、EmbeddingGemma 2 與 embedder identity

🟡 中階|掌握 v3.11.0(79 個 merged PRs)的重點:mempalace audit 五層評分與引導修復(dry run 直到 --yes)、EmbeddingGemma 2 opt-in embedder、原生媒體檢索、embedder identity fail-closed、升級後對話 re-mine 注意事項,以及大型 palace 效能與安全強化。

概述

MemPalace v3.11.0(2026-10-14 發布,79 個 merged PRs)主軸:palace audit 與引導修復、EmbeddingGemma 2 opt-in embedder 與 embedder identity、原生媒體檢索、大型 palace 效能。安裝 pip install -U mempalace==3.11.0。

palace audit 與引導修復(#2576)

mempalace audit 對五層(rooms/wings/tunnels/hallways/KG)評分:

  • 支援 --json、--fail-under——可進 cron/CI。
  • Read-only:可對服役中的 palace 直接執行。

引導修復全 family:

  • mempalace instructions audit
  • rooms propose/apply
  • wings split(machine-level transcript wing → per-project wing)
  • tunnels propose/prune
  • hallways –rebuild/–prune-spellings
  • kg normalize

全部 dry run 直到 --yes,中斷可續;LLM 步驟預設本地 endpoint、需 --accept-external-llm 才用外部 LLM。

EmbeddingGemma 2 opt-in embedder(#2694/#2717)

  • 設定 embedding_model: embeddinggemma2 + 安裝 mempalace[embeddinggemma2] 或 [multimodal]。
  • 需 Python 3.10+/PyTorch;CUDA/MPS/CPU;768/512/256/128 維;CUDA OOM 自動半 batch。

原生媒體檢索:內建 media source adapter 把原始檔 embed 進獨立 mempalace_assets collection;opt-in 的 CLI/MCP media search 回傳 typed local asset references(file-level 檢索為實驗性)。

embedder identity:mismatch 時 fail closed(#2717,修 #2709)

每個 palace 記錄建立它的 embedder;所有寫入路徑在 mismatch 時 fail closed:

  • repair rebuild-index 與 --mode from-sqlite 重建後再次記錄。
  • MCP 拒絕退回 Chroma 預設 embedder。
  • 既有 palace 不 opt-in 就不受影響;未知 embedding_model 保 MiniLM fallback,近似名稱拒絕。

升級注意(兩件事)

  1. 首次對話 mine 會 re-mine:exchange chunker 不再丟文字(#2591),3.11 之前的 conversation drawers 視為 stale 重新 chunk+embed。百萬 drawers 約 40 分~3 小時;可 mempalace mine <dir> --mode convos --limit 200 分批;中斷可續。
  2. Palace 拒絕以不同 embedding model 開啟:訊息會教你把 embedding_model 設回原模型,或 repair rebuild-index 重嵌。

效能

  • SQLite 後端 metadata-only 更新約 6000 倍快。
  • 狀態/搜尋/wake-up 在大型 palace 保持回應:count caches 不再過期即丟(8-12 秒 → 約 1ms @360k drawers);MCP server 不再每次呼叫重載向量索引;wake-up 從 SQLite 讀;mining 不再二次方 paging(#2593)。
  • Diary/單 drawer 查詢讀 SQLite(#2650)。

安全、移除與修正

  • ChromaDB telemetry 明確停用(GHSA-8h77);Pillow 12.3.0(Python 3.10+;3.9 停在 11.3.0 有未修 advisory)與 chromadb 1.5.9;SECURITY.md 警告勿暴露 Chroma HTTP server;read-only MCP 工具標 annotations.readOnlyHint(#2610/#2640)。
  • 移除 EntityRegistry.research()/confirm_research()(無人使用的 opt-in Wikipedia lookup;wiki_cache 仍被 lookup() 讀;GHSA-mrj5)。
  • 修正節選:mempalace_reconnect 等 mine(10 秒後 MineInProgress);event_list/event_wait 不因 from_agent 遮蔽他人請求(#2616);sync –apply 不刪仍在磁碟的 drawers(#2368/#2564);stdio MCP servers 保持回應(#2534/#2555/#2557)。

既有使用者影響

預設行為不變(新 embedder 與媒體檢索皆 opt-in);升級後首次 mine 會 re-mine 對話 drawers(大 palace 需規劃時段);以非預設 embedding model 建立的 palace 升級前先確認 embedding_model 設定。

學習重點

「palace 記錄自己的 embedder 並在 mismatch 時 fail closed」是資料層的身分契約——同一向量空間混用兩個 embedder 會靜默毀掉檢索品質,寧可拒開也要守住。audit 的 read-only 設計也值得借鑑:診斷永遠可以對服役中系統跑,修復才需要乾跑確認。