Sessions and memory

記憶搜尋

memory_search 會從你的記憶檔案中找出相關筆記,即使用字與原始文字不同也可以。它的運作方式是將記憶索引成小區塊,並使用 embeddings、關鍵字或兩者來搜尋。

快速開始

如果你已設定 GitHub Copilot 訂閱、OpenAI、Gemini、Voyage 或 Mistral API 金鑰,記憶搜尋會自動運作。若要明確設定供應商:

{
  agents: {
    defaults: {
      memorySearch: {
        provider: "openai", // or "gemini", "local", "ollama", etc.
      },
    },
  },
}

對於多端點設定,當該供應商設定 api: "ollama" 或其他 embedding adapter 擁有者時,provider 也可以是自訂的 models.providers.<id> 項目,例如 ollama-5080

若要使用不需要 API 金鑰的本機 embeddings,請設定 provider: "local"。原始碼 checkout 可能仍需要核准原生建置:pnpm approve-builds,接著執行 pnpm rebuild node-llama-cpp

某些 OpenAI 相容的 embedding 端點需要非對稱標籤,例如搜尋時使用 input_type: "query",索引區塊時使用 input_type: "document""passage"。請使用 memorySearch.queryInputTypememorySearch.documentInputType 設定這些項目;請參閱記憶設定參考

支援的供應商

供應商 ID 需要 API 金鑰 備註
Bedrock bedrock AWS 憑證鏈可解析時自動偵測
Gemini gemini 支援圖片/音訊索引
GitHub Copilot github-copilot 自動偵測,使用 Copilot 訂閱
本機 local GGUF 模型,下載約 0.6 GB
Mistral mistral 自動偵測
Ollama ollama 本機,必須明確設定
OpenAI openai 自動偵測,速度快
Voyage voyage 自動偵測

搜尋的運作方式

OpenClaw 會平行執行兩條擷取路徑,並合併結果:

flowchart LR
    Q["查詢"] --> E["Embedding"]
    Q --> T["權杖化"]
    E --> VS["向量搜尋"]
    T --> BM["BM25 搜尋"]
    VS --> M["加權合併"]
    BM --> M
    M --> R["最相關結果"]
  • 向量搜尋會找出意義相近的筆記(「gateway host」會符合「執行 OpenClaw 的機器」)。
  • BM25 關鍵字搜尋會找出完全符合的項目(ID、錯誤字串、設定鍵)。

如果只有一條路徑可用(沒有 embeddings 或沒有 FTS),另一條路徑會單獨執行。

當 embeddings 無法使用時,OpenClaw 仍會對 FTS 結果使用詞彙排名,而不是只退回原始的完全符合排序。這種降級模式會提升查詢詞涵蓋度較強且檔案路徑相關的區塊,讓即使沒有 sqlite-vec 或 embedding 供應商時,召回率仍保持實用。

改善搜尋品質

當你有大量筆記歷史時,兩個選用功能會有所幫助:

時間衰減

舊筆記會逐漸降低排名權重,讓近期資訊優先浮現。使用預設 30 天半衰期時,上個月的筆記分數會是原始權重的 50%。像 MEMORY.md 這類長青檔案永遠不會衰減。

MMR(多樣性)

減少重複結果。如果五則筆記都提到相同的路由器設定,MMR 會確保最相關結果涵蓋不同主題,而不是重複相同內容。

同時啟用兩者

{
  agents: {
    defaults: {
      memorySearch: {
        query: {
          hybrid: {
            mmr: { enabled: true },
            temporalDecay: { enabled: true },
          },
        },
      },
    },
  },
}

多模態記憶

使用 Gemini Embedding 2 時,你可以將圖片和音訊檔案與 Markdown 一起索引。搜尋查詢仍是文字,但會與視覺和音訊內容比對。設定方式請參閱記憶設定參考

工作階段記憶搜尋

你可以選擇性索引工作階段逐字稿,讓 memory_search 能回想先前的對話。這需要透過 memorySearch.experimental.sessionMemory 選擇啟用。詳情請參閱設定參考

疑難排解

沒有結果? 執行 openclaw memory status 檢查索引。如果是空的,請執行 openclaw memory index --force

只有關鍵字符合? 你的 embedding 供應商可能尚未設定。請檢查 openclaw memory status --deep

本機 embeddings 逾時? ollamalmstudiolocal 預設會使用較長的 inline 批次逾時。如果主機只是速度較慢,請設定 agents.defaults.memorySearch.sync.embeddingBatchTimeoutSeconds,然後重新執行 openclaw memory index --force

找不到 CJK 文字? 使用 openclaw memory index --force 重建 FTS 索引。

延伸閱讀

相關