# 記憶系統架構說明 本文整理 Project Golem 目前實作中的記憶系統(v9.5 系列)與資料流。 ## 1. 核心組件 - `ChatLogManager`:`/src/managers/ChatLogManager.js` - 負責對話原始訊息落地(SQLite) - 負責多層摘要壓縮(daily / monthly / yearly / era) - `LanceDBProDriver`:`/packages/memory/LanceDBProDriver.js` - 向量記憶查詢與寫入(Recall / Memorize) - `SystemNativeDriver`:`/packages/memory/SystemNativeDriver.js` - 向量記憶不可用時的原生 fallback ## 2. 儲存路徑 - 對話日誌資料庫: - `logs/db/chat_logs_.sqlite` - 向量記憶: - `/knowledge/lancedb-pro/dim_/` - 記憶基底路徑(`MEMORY_BASE_DIR`): - 優先由 `PLAYWRIGHT_PROFILE` 決定(`./profiles/`) - 否則使用 `USER_DATA_DIR` - 再回退到 `./golem_memory` ## 3. 金字塔壓縮層級 - Tier 0:每小時原始訊息(SQLite `messages`) - Tier 1:每日摘要(`summaries.tier = daily`) - Tier 2:每月摘要(`summaries.tier = monthly`) - Tier 3:年度摘要(`summaries.tier = yearly`) - Tier 4:紀元摘要(`summaries.tier = era`) ## 4. 壓縮流程 1. `ConversationManager` 每回合會寫入 user/assistant 訊息到 `ChatLogManager`。 2. `index.js` 內排程 `runTieredCompression()`,定期觸發分層壓縮。 3. 壓縮時透過 `brain.sendMessage()` 產生摘要,回寫到 `summaries`。 4. 啟動時 `_injectSystemPrompt()` 會回灌近期摘要,建立長期上下文。 ## 5. 注意事項 - `golem_memory/` 可能包含瀏覽器登入狀態與敏感資料,請勿外流。 - 若調整 Tier 參數,需同步檢視 `src/core/constants.js` 的 retention 與摘要長度設定。 - 若切換 embedding provider(local / ollama),請留意向量維度會切換資料目錄(`dim_`)。 - 若設定 `GOLEM_OLLAMA_RERANK_MODEL`,Recall 會在向量召回後套用一次可選重排;若留空則保持原始 hybrid ranking。