OpenClaw 永久記憶
看了一圈其實很少人教更進一步的 OpenClaw 設定。例如很多人會提到「永久記憶」,但卻沒教人怎麼設定。其實所謂的永久記憶,不可能是單純記錄在 Markdown 文件裡,因為當 Context(上下文)越來越多時,就會佔用越多 Context Window,而這是一種有限資源。隨著反覆對話的進行,所需的 Token 消耗會越來越大,因此當我們請 AI 解決問題時,提供的內容越精準越好。
這時候我們面臨的問題,其實正是 RAG(檢索增強生成)試圖解決的。試想一下,假設你「養」了一隻龍蝦一個月,它幫你產生了 50 份 Markdown 文件,下次請它幫忙解決之前的某個問題時,該怎麼辦?難道要把過去的 50 份文件都拿出來看嗎?這樣 Context Window 再大都不夠放。
直覺的解法是將相關內容整齊收納,並給予簡單的標籤(例如:旅遊、工作、生活、學習等)。這樣只要先判斷問題類別,就能忽略不相關的內容,達成我們想要的效果。
而在軟體工程上,有更精妙的解法——我們將文件切割成許多小塊,經運算後轉換為多維空間中的點(Vector)。當下次要查找時,同樣將問題運算至空間中,與之前算好的點進行比對,距離越近的相關性越高。直接拿這些相關資料餵給 AI,就能解決問題。這就是所謂的 Embedding Model 在做的事情。
OpenClaw 其實已經整合了這項功能。它預設使用 OpenAI 的 Embedding Model,但這是按量計費的。Gemini 也是如此,即使升級到 Pro 版本,Embedding 也是額外收費的。我試過用 Gemini 免費帳號使用 Embedding Model(gemini-embedding-001),但試用兩三次就達到上限了,所以這條路走不通。
替代方案就是使用本地的 Embedding Model。只要我們設定 provider 為 local,它就會自動下載 embeddinggemma-300M-Q8_0.gguf:
"memorySearch": {
"provider": "local",
"fallback": "none"
}
為什麼這件事情重要?因為我的 OpenClaw(龍蝦)昨天晚上還好好的,今天卻完全失憶。結果發現,他在回答我的時候調用 memory_search 這個 tool 失敗,說我的 api key 設定失敗,可能有些人暫時沒遇到這個問題是因為根本沒有開啟這個功能,一開始單純的一個 memory.md 或許夠用,但隨著龍蝦越養越大一定就會開始感覺到越來越不精準的問題,所以終究是跑不掉,不如現在先搞懂原理吧。