Clawdbot 為什麼能記住你說過的話?AI 記憶系統拆解

這部影片由 Bilibili 創作者「碼里奧 Ziho」製作,深入拆解了 OpenClaw(原 Clawdbot)的 AI 記憶系統運作原理。影片圍繞記憶的寫入、儲存與讀取三個環節,說明該工具如何透過 Markdown 檔案儲存日常記錄與長期記憶,並運用 RAG(檢索增強生成)技術搭配向量索引,讓 AI 能夠回憶起過往的對話內容,實現「越用越聰明」的效果。


原影片連結:https://www.bilibili.com/video/BV1fv61B4EQ5

影片重點

  • OpenClaw 的記憶以純 Markdown 形式儲存在智能體的工作區中
  • 記憶系統分為「日常記錄」和「長期記憶」兩種類型
  • 每次對話結束時會觸發 Silent Agent Turn,自動總結對話內容
  • 長期記憶分散在 Memory.md、Sword.md、Tools.md、User.md 等檔案中
  • AI 可主動記錄重要事件,使用者也可手動命令 AI 記住特定資訊
  • 記憶讀取使用 RAG(Retrieval Augmented Generation)技術
  • 新對話會自動載入過去兩天的對話記錄和長期記憶
  • Memory.search 功能需手動開啟,否則 AI 只能逐一翻閱記憶檔案
  • 索引系統使用 Embedding 模型將資料向量化,存入 SQLite 資料庫
  • 支援 Hybrid Search,結合向量相似度匹配與 BM25 文本搜索

詳細內容

[00:00] OpenClaw 簡介與記憶系統概覽

OpenClaw(原名 Clawdbot)是一款近期備受關注的 AI 工具,它不僅能使用電腦上的各種工具、支援遠程指揮,最令人印象深刻的特色是它能「越用越智能」——能記住使用者之前的聊天記錄。

根據官方文件的描述,OpenClaw 的記憶是以「純 Markdown」的形式,儲存在智能體的工作區當中。整個記憶系統圍繞 Markdown 檔案運作,可以分為三個環節:記憶的寫入、記憶的儲存、以及記憶的讀取。

[00:43] 記憶儲存:日常記錄與長期記憶

記憶儲存路徑下有大量的 Markdown 檔案,分為兩大類:

日常記錄:每次和 AI 的對話結束(或即將達到上下文限制)時,系統會觸發一次「Silent Agent Turn」——這是一輪使用者不可見的對話。在這輪隱藏對話中,AI 會自動總結當次會話的內容,以日期格式寫入記錄。例如「小福喜歡吃什麼?小福最喜歡吃三文魚」這樣的精簡摘要。需要注意的是,這個功能需要在 Config 裡主動開啟。

長期記憶:由多個專門的 Markdown 檔案組成:

  • Memory.md:記錄重要資訊
  • Sword.md:記錄 AI 的聊天風格
  • Tools.md:記錄可使用的工具
  • User.md:記錄使用者資訊(如生日、寵物等)

[01:51] 長期記憶的兩種寫入方式

長期記憶有兩種儲存方式:

第一種是自動寫入:根據提示詞的設定,當 AI 發現了重要的事件、想法、決定、觀點或學到的內容時,它會主動將這些資訊記錄到長期記憶檔案中。

第二種是手動命令:使用者可以直接命令 AI,例如「幫我記住某件事情」,AI 就會將指定的內容寫入長期記憶的對應檔案。

[02:18] 記憶讀取:RAG 檢索增強生成

記憶的使用依賴一個核心概念——RAG(Retrieval Augmented Generation,檢索增強生成)。當使用者與 AI 進行對話時,系統會主動搜索已儲存的記憶,將相關內容拼接到上下文中,讓 AI 能夠了解之前發生的事情。

對於每個新的對話 Session,系統會自動載入過去兩天的對話記錄,以及長期記憶(即 Memory.md 等檔案的內容),作為上下文的一部分提供給 AI。

[03:04] Memory.search 功能與手動翻閱的對比

當使用者詢問例如「小福喜歡吃什麼」時,AI 會調用 Memory.search 工具進行搜索。但這個功能預設並未開啟,需要在 Config 的 Agents 設定中找到 Memory.search 手動打開。

在未啟用 Memory.search 的情況下,AI 會透過上下文手動翻閱記憶檔案,逐個閱讀 Markdown 檔案來查找資訊。這種方式效率非常低,尤其是當對話記錄越來越多時,問題會更加明顯。

[04:00] 索引系統:Embedding 與向量化

要提升記憶搜索效率,需要啟用索引功能。在 Config Agents 中找到 Memory.search session index 並開啟,同時配置 Google 或 OpenAI 的 API(也可使用 local,但配置較為複雜)。

有了 API 之後,系統會對記錄進行 Embedding。為了避免頻繁構建索引,系統採用了 Debounce(防抖)機制:距離上一次構建 1.5 秒之後,或達到閾值(50 條新消息或 100,000 bytes 的新內容)時,才會觸發新一輪索引構建。

構建索引時,系統會調用 Google 或 OpenAI 的 Embedding 模型,將資料切塊、向量化後保存到 SQLite 資料庫中。資料庫中的每個向量都會標示其所屬的檔案和位置。

[05:15] 索引搜索與 Hybrid Search

有了索引之後,使用 Memory.search 時,系統會比對搜索內容與索引資料的相似度,然後調用 Memory.get 獲取完整文件。

此外,系統還支援 Hybrid Search(Memory.searchHyper,預設開啟),同時使用:

  • 向量相似度匹配:基於語意理解的搜索
  • BM25 演算法:傳統的精確文本搜索

這兩種方式兼顧了語意理解和精確匹配,最終將搜索結果合併(merge)後拼接到上下文中,讓使用者能輕鬆找到之前的聊天記錄。

我的想法

這部影片清楚地拆解了 OpenClaw 的記憶系統架構,讓我們看到即使是看似神奇的「AI 記憶」功能,底層其實是相當務實的工程實作——Markdown 檔案 + RAG + 向量搜索。

值得注意的是,這套記憶系統的設計反映了當前 AI Agent 領域的一個重要趨勢:將非結構化的對話資訊轉化為結構化的知識儲存。透過 Silent Agent Turn 自動總結、分類儲存到不同的 Markdown 檔案,再用 Embedding + Hybrid Search 高效檢索,形成了一個完整的記憶生命週期。

對於想要建構類似系統的開發者,有幾個實用的啟示:第一,Debounce 機制在索引構建中很重要,可以避免不必要的 API 呼叫成本;第二,Hybrid Search 結合語意搜索和關鍵字搜索是目前的最佳實踐;第三,將記憶以 Markdown 純文字儲存的做法既簡單又具可移植性,值得參考。

進階測驗:AI 記憶系統拆解

測驗目標:驗證你是否能在實際情境中應用 OpenClaw 記憶系統的知識。
共 5 題,包含情境題與錯誤診斷題。

1. 你正在使用 OpenClaw,發現它無法記住你昨天告訴它的寵物名字。你想讓 AI 能更有效率地搜索過往記憶。 情境題

目前狀態: – Config 中的 Memory.search 功能已開啟 – 但尚未配置任何 Embedding API – AI 只能逐一翻閱 Markdown 記憶檔案,效率很低

你應該優先做什麼來改善搜索效率?

  • A. 增加更多的 Markdown 記憶檔案分類
  • B. 在 Config 中開啟 session index 並配置 Google 或 OpenAI 的 Embedding API
  • C. 手動將所有對話記錄複製到 Memory.md 中
  • D. 關閉 Memory.search 功能,改用手動翻閱模式

2. 你發現 OpenClaw 的索引系統在短時間內被頻繁觸發構建,導致 API 呼叫成本過高。 情境題

觀察到的現象: – 每次發送訊息後都會立即觸發索引重建 – API 呼叫次數遠超預期 – Embedding 費用明顯偏高

根據 OpenClaw 的設計,系統應該用什麼機制來避免這個問題?

  • A. 設定每天只構建一次索引的排程任務
  • B. 手動控制什麼時候觸發索引構建
  • C. Debounce(防抖)機制:距上次 1.5 秒後,且達到 50 條新消息或 100,000 bytes 閾值才觸發
  • D. 限制每小時最多構建 5 次索引

3. 你希望 OpenClaw 在搜索記憶時,既能理解語意相近的內容,又能精確匹配特定關鍵字。 情境題

需求: – 搜索「我的寵物」時能找到「小福是我養的貓」 – 搜索「三文魚」時也能精確找到包含這個詞的記錄 – 兩種需求都需要同時滿足

OpenClaw 使用什麼技術來同時實現這兩個需求?

  • A. 只使用向量相似度搜索,因為它已經足夠智能
  • B. 只使用 BM25 文本搜索,搭配更多關鍵字同義詞
  • C. 使用正則表達式搜索所有 Markdown 檔案
  • D. Hybrid Search:結合向量相似度匹配與 BM25 文本搜索,兼顧語意和精確匹配

4. 小華設定好 OpenClaw 後,發現每次開啟新對話時 AI 完全不記得之前的任何內容,但他確信之前有正常對話過。 錯誤診斷

小華的設定狀態: – 已正常使用 OpenClaw 進行多次對話 – Config 中的 Silent Agent Turn 功能未開啟 – Memory.search 已開啟 – Embedding API 已配置 問題:新對話中 AI 完全不知道之前聊過什麼

最可能的根本原因是什麼?

  • A. Embedding API 配置錯誤,無法建立向量索引
  • B. Silent Agent Turn 未開啟,對話結束時沒有自動總結並寫入記憶檔案
  • C. Memory.search 功能有 Bug,搜索不到已有的記憶
  • D. 需要手動重啟 OpenClaw 才能載入新的記憶

5. 小明在 OpenClaw 中問「我昨天說了什麼?」,AI 花了很長時間才回覆,而且回覆中提到它「逐一讀取了多個 Markdown 檔案」。 錯誤診斷

AI 的回覆過程: 1. 讀取 memories/daily/2025-01-15.md 2. 讀取 memories/daily/2025-01-14.md 3. 讀取 memories/daily/2025-01-13.md …(逐個檔案翻閱) 耗時:約 30 秒 正常預期:應該在數秒內透過搜索找到結果

這個效能問題最可能的原因是什麼?

  • A. 日常記錄的 Markdown 檔案太大,需要壓縮
  • B. OpenClaw 的 LLM 模型處理速度太慢
  • C. 未開啟 session index 索引功能,AI 只能遍歷檔案而非使用向量搜索
  • D. Memory.md 長期記憶檔案損壞導致搜索失敗
0

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *