團隊共享記憶庫:OpenClaw Agent 與 Hindsight 的協作之道

團隊共享記憶庫:OpenClaw Agent 與 Hindsight 的協作之道

前言

當你開始在 OpenClaw 上運行多個 Agent 時,是否曾遇到這樣的困擾?

你在 Copilot Agent 裡交代了「我喜歡繁體中文」,但切換到 Report Agent 時,它依然用簡體中文回覆。你在 Photography Agent 裡討論的拍攝計畫,切換到 Book Agent 時完全不記得這件事。

每個 Agent 都像是一個失憶症患者,無法共享彼此的記憶。這就是「資訊孤島」問題。

好消息是:Hindsight 的設計本來就支援共享記憶庫。只要設定得當,所有 Agent 都可以訪問同一個記憶池,讓協作真正變得順暢。


第一章:為什麼需要共享記憶?

分散的記憶造成資訊孤島

想像一下,如果公司裡每個部門都有自己的文件系統,但彼此之間完全無法訪問。業務部知道的客戶偏好,工程部不知道;工程部發現的問題,產品部也看不到。這就是沒有共享記憶時,AI Agent 會遇到的問題。

當你的 OpenClaw 運行多個 Agent 時,每個 Agent 如果都有獨立的記憶空間,會造成以下幾個問題:

首先,每次對話都需要重新介紹背景。昨天的會議結論、用戶的偏好設定、進行的專案進度,每個新對話都要重新說明一遍。這不只浪費時間,更讓 AI 的回應顯得「不貼心」。

其次,相同的資訊需要重複儲存。如果有三個 Agent 都需要知道「微風使用繁體中文」,你就得在三個不同的地方輸入這條資訊。當你需要更新時,又要改三個地方。

最後,缺乏全局視角。沒有共享記憶的情況下,每個 Agent 都只能看到自己的狹隘範圍,無法為用戶提供跨領域的綜合建議。

共享記憶的價值

當所有 Agent 共用同一個記憶庫時,這一切都改變了。

你在任何一個 Agent 留下的筆記,其他所有 Agent 都能看到。你告訴攝影 Agent 的拍攝想法,報告 Agent 也能參考。你在 Copilot 建立的專案脈絡,切換到 Email Agent 時依然有效。

這就像是從「每個人有自己的筆記本」變成「大家共用一個團隊知識庫」。資訊不再被困在個別 Agent 裡,而是成為真正的共享資產。


第二章:理解 Hindsight 的 Bank 機制

什麼是 Bank?

在深入設定之前,我們需要先理解 Hindsight 的一個核心概念:Bank。

Bank 是 Hindsight 用來隔離和管理記憶的基本單位。你可以把它想像成一個「記憶容器」或「記憶資料庫」。每一個 Bank 都有自己獨立的命名空間,存放在同一個 PostgreSQL 資料庫中的不同 schema 裡。

當你向 Hindsight 儲存一筆記憶時,這筆記憶會被歸到某個 Bank 下。當你召回記憶時,也是從特定的 Bank 中取出。

Bank ID 的命名規則

Hindsight 的 Bank ID 有特定的命名格式:

{prefix}-{agentId}::{userId}

舉例來說,如果你的 bankIdPrefix 是 openclaw,agent ID 是 main,user ID 是 [USER_ID],那麼完整的 Bank ID 就會是:

openclaw-main::[USER_ID]

這個格式的設計是,為了了在同一個 Hindsight 實例中,支援多個 Agent 和多個用戶的所有組合。

預設 Bank vs 自訂 Bank

Hindsight 預設會為每個 Agent-User 組合建立一個獨立的 Bank。這種設計的好處是隱私——每個用戶的記憶不會被其他用戶看到。

但有時候,你可能希望多個 Agent 共享同一個 Bank,讓它們能看到相同的記憶。這就是我們接下來要討論的「共享 Bank」設定。

每個 Agent 能否有自己的 Bank?

可以的。預設情況下,每個 Agent 都會有自己的 Bank,用 agentId 來區分。例如:

  • openclaw-main::[USER_ID] - 主 Agent 的 Bank
  • openclaw-copilot::[USER_ID] - Copilot Agent 的 Bank
  • openclaw-photography::[USER_ID] - Photography Agent 的 Bank

這些 Bank 在資料庫中是完全獨立的,存放在不同的 schema 裡。


第三章:OpenClaw Hindsight 插件的設定模式

模式 A:所有 Agent 共用同一個 Bank

這種模式下,不論是哪個 Agent,所有記憶都會寫入同一個 Bank。

設定方式:

{
  "plugins": {
    "entries": {
      "hindsight-openclaw": {
        "enabled": true,
        "config": {
          "dynamicBankId": false,
          "bankId": "shared-memory"
        }
      }
    }
  }
}

優點:

  • 所有 Agent 完全共享記憶
  • 設定最簡單
  • 使用者只需要在一處更新偏好

缺點:

  • Agent 之間沒有隱私
  • 記憶可能會被不同 Agent 的對話內容汙染
  • 難以區分記憶的來源

適用場景:

  • 個人使用,所有 Agent 都服務同一個人
  • 記憶庫主要是使用者偏好和背景資訊

模式 B:每個 Agent 有獨立的 Bank

這是預設模式,每個 Agent 都有自己專屬的 Bank。

設定方式:

{
  "plugins": {
    "entries": {
      "hindsight-openclaw": {
        "enabled": true,
        "config": {
          "dynamicBankId": true,
          "dynamicBankGranularity": ["agent", "user"],
          "bankIdPrefix": "openclaw"
        }
      }
    }
  }
}

優點:

  • 每個 Agent 的記憶完全隔離
  • 可以針對不同 Agent 訓練不同的「人格」
  • 容易追蹤記憶的來源

缺點:

  • Agent 之間隔離,缺乏協同效應
  • 使用者需要為每個 Agent 單獨建立偏好
  • 相同的背景資訊需要重複輸入

適用場景:

  • 多個用戶共享同一個 OpenClaw 實例
  • 每個 Agent 有不同的專業領域和用途

模式 C:混合模式(推薦)

這種模式下,系統會自動在「共享」和「獨立」之間取得平衡。

主要的用戶偏好和背景資訊存在一個共享 Bank 中,而每個 Agent 也有自己專屬的 Bank 來存放專業領域的臨時資訊。

設定方式:

{
  "plugins": {
    "entries": {
      "hindsight-openclaw": {
        "enabled": true,
        "config": {
          "dynamicBankId": true,
          "dynamicBankGranularity": ["agent", "user"],
          "bankIdPrefix": "openclaw",
          "autoRecall": true,
          "autoRetain": true,
          "retainTags": ["source:openclaw"]
        }
      }
    }
  }
}

優點:

  • 共享核心記憶
  • 每個 Agent 也有自己的專業記憶
  • 彈性好,適合大多數使用情境

第四章:實際設定教學

查看目前的插件設定

在修改之前,讓我們先看看你目前的設定。編輯你的 OpenClaw 設定檔案:

openclaw config edit

找到 plugins.entries.hindsight-openclaw.config 的部分,你應該會看到類似的內容:

"hindsight-openclaw": {
  "enabled": true,
  "config": {
    "hindsightApiUrl": "http://localhost:8888",
    "autoRecall": true,
    "autoRetain": true,
    "dynamicBankId": true,
    "dynamicBankGranularity": ["agent", "user"],
    "bankIdPrefix": "openclaw"
  }
}

修改 dynamicBankGranularity 參數

dynamicBankGranularity 參數控制 Bank 的顆粒度:

  • 設為 ["user"]:所有 Agent 共享同一個 Bank(以用戶區分)
  • 設為 ["agent", "user"]:每個 Agent-User 組合有獨立 Bank

如果你想要所有 Agent 共享記憶,可以將 dynamicBankGranularity 設為只有 user

"dynamicBankGranularity": ["user"]

但如果你希望每個 Agent 有自己的 Bank,但同時也能訪問共享資訊,保持 ["agent", "user"] 不變,因為 Hindsight 會自動處理跨 Bank 的召回。

設定 bankIdPrefix 來區分不同 Bank

bankIdPrefix 是 Bank ID 的前綴。預設是 openclaw,你可以根據喜好修改:

"bankIdPrefix": "myagent"

修改後,你的 Bank ID 會變成 myagent-main::[USER_ID] 的格式。

重啟服務讓設定生效

修改完設定後,需要重啟 Gateway 才能生效。最好使用我們之前建立的啟動腳本,確保 Hindsight 先啟動、Gateway 再啟動:

bash ~/.openclaw/scripts/start-openclaw.sh

或是手動重啟:

openclaw gateway restart

第五章:驗證與測試

如何確認各 Agent 已正確連接

重啟後,你可以透過查看 Gateway 日誌來確認插件是否正確啟動:

tail -f ~/.openclaw/logs/gateway.log | grep hindsight

如果看到類似以下的輸出,表示插件正常運作:

[hindsight] plugin entry invoked
[hindsight] registering plugin service
[hindsight] registering agent hooks
[hindsight] agent hooks registered

測試記憶是否能在 Agent 間共享

讓我們做一個簡單的測試:

步驟 1:在 Copilot Agent 中建立一筆測試記憶

告訴 Copilot Agent:「請記住這句話:微風的咖啡偏好是熱美式加奶精」。

步驟 2:檢查記憶是否已儲存

透過 API 查看所有 Agent 的 Bank:

curl -s "http://localhost:8888/v1/default/banks" \
  -H "Authorization: Bearer YOUR_API_KEY"

步驟 3:在另一個 Agent 中嘗試召回

切換到另一個 Agent,詢問:「我的咖啡偏好是什麼?」

如果共享設定正確無誤,應該能得到正確的答案。

查看 Hindsight 的記憶注入日誌

Gateway 日誌會記錄每次記憶注入的狀況:

[hindsight] injecting 10 memories into context (bank: openclaw-main::[USER_ID])
[hindsight] injecting 8 memories into context (bank: openclaw-copilot::[USER_ID])

如果你看到某個 Bank 的數量異常(例如始終是 0),可能是該 Agent 的連線有問題。


第六章:常見問題與解決方案

問題一:Agent 無法連接到 Hindsight

症狀: 插件日誌顯示 fetch failedCannot connect to external Hindsight API

解決方法:

  1. 確認 Hindsight 是否正在運行:curl http://localhost:8888/health
  2. 如果沒有運行,先啟動 Hindsight 再重啟 Gateway
  3. 確認 hindsightApiUrl 設定正確(預設是 http://localhost:8888
  4. 使用安全啟動腳本:bash ~/.openclaw/scripts/start-openclaw.sh

問題二:記憶數量異常或沒有更新

症狀: Bank 的記憶數量停在某個數字不動,或是召回的內容過時

解決方法:

  1. 檢查 Hindsight 的處理延遲——記憶萃取可能需要幾秒鐘
  2. 查看 Hindsight 日誌是否有錯誤:tail ~/.openclaw/hindsight/hindsight.log
  3. 確認 LLM API 設定正確,萃取功能需要有效的 API Key
  4. 嘗試手動建立一筆記憶來測試寫入功能

問題三:多個 Agent 同時寫入的衝突處理

症狀: 擔心多個 Agent 同時寫入會造成資料衝突或覆蓋

解決方法:

  1. Hindsight 底層使用 PostgreSQL,有完善的交易機制,不需要擔心衝突
  2. 每個 Agent 的寫入會自動隔離在自己的 Bank 裡
  3. 共享 Bank 的場景下,Hindsight 會自動處理並髮引用
  4. 建議定期使用 Hindsight 的 consolidation 功能來整理和合併記憶

問題四:忘記當前使用的是哪個 Bank

解決方法:

你可以隨時查看 Gateway 日誌中最近一筆的 injecting memories 記錄,它會顯示當前使用的 Bank ID:

injecting 15 memories into context (bank: openclaw-main::[USER_ID])

也可以透過 API 直接查詢 Bank 列表:

curl -s "http://localhost:8888/v1/default/banks" \
  -H "Authorization: Bearer YOUR_API_KEY"

第七章:讓其他 Agent 知道並善用 Hindsight

設定完成後,你可能會想:「現在其他 Agent 知道有 Hindsight 可以用了嗎?他們會自動開始使用嗎?」

答案是:插件會自動處理這件事,但你也可以透過一些方式讓效果更好。

Hindsight 插件的自動化機制

當你安裝並啟用 @vectorize-io/hindsight-openclaw 插件後,以下事情會自動發生:

自動記憶萃取(Auto-Retain)

每次 Agent 與用戶的對話結束時,插件會自動萃取對話中的重要資訊,並存入對應的 Bank。你不需要告訴 Agent 「請把這件事記住」——插件會自動幫你做到。

自動記憶召回(Auto-Recall)

每次 Agent 開始新對話時,插件會自動從 Bank 中召回最相關的記憶,並注入到上下文(context)中。Agent 會在完全不知情的情況下,獲得這些記憶的幫助。

這就是這個插件設計的美妙之處:對話雙方都不需要額外操作,記憶功能在背景默默運作。

如何驗證其他 Agent 正在使用 Hindsight

即使插件是全自動的,你依然可以驗證它確實在工作:

方法 1:查看日誌中的記憶注入記錄

每次 Agent 處理對話時,日誌會顯示類似這樣的訊息:

[hindsight] injecting 12 memories into context (bank: openclaw-copilot::[USER_ID])

如果你看到不同 Agent 的 Bank 都有這樣的記錄,代表所有 Agent 都正在使用 Hindsight。

方法 2:測試跨 Agent 記憶共享

  1. 在 Copilot Agent 中說:「我的名字是微風,請記住」
  2. 等待 30 秒讓記憶萃取完成
  3. 切換到 Report Agent(同一個用戶)
  4. 詢問:「我叫什麼名字?」

如果設定正確,Report Agent 應該能正確回答。

透過系統提示詞增強 Agent 的記憶意識

雖然插件會自動處理記憶萃取和召回,但你可以透過系統提示詞(System Prompt)讓 Agent 更好地善用這些記憶。

在 OpenClaw 的設定中,你可以為每個 Agent 添加這樣的提示:

你是一個配備了 Hindsight 長期記憶系統的 AI 助理。

重要原則:
- 你有訪問過去對話記憶的能力
- 當用戶提到過去的事情時,主動搜索相關記憶
- 如果記憶中有相關資訊,在回覆中體現出來
- 不要假設用戶需要重複解釋已經記錄過的事情

每次回覆前,可以考慮:
1. 這件事在記憶中有記錄嗎?
2. 用戶的偏好或習慣是什麼?
3. 之前的專案進度到哪裡了?

這樣的提示可以幫助 Agent 更有意識地利用 Hindsight 的能力,而不是把它當作透明的背景服務。

為不同 Agent 建立不同的「記憶使用策略」

每個 Agent 的用途不同,你可能希望它們以不同的方式使用記憶:

專業型 Agent(如 Copilot、Report)

  • 重點:召回用戶偏好、專案脈絡、之前討論的內容
  • 提示方向:強調「主動搜索相關記憶」、「不要假設用戶需要重複」

創意型 Agent(如 Photography、Book)

  • 重點:召回用戶的審美偏好、創作風格、已完成的作品
  • 提示方向:強調「瞭解用戶風格」、「保持創作連貫性」

瑣事型 Agent(如 Email、NAS)

  • 重點:召回用戶的帳號設定、偏好操作方式
  • 提示方向:強調「記住用戶的設定偏好」、「提高執行效率」

讓新 Agent 快速上手的簡單方法

如果你建立了一個新的 Agent,想讓它快速知道有 Hindsight 可用,最簡單的方式是:

在 Agent 的歡迎訊息或系統提示詞中加入:

提示:我配備了 Hindsight 長期記憶系統。
我會記住我們的對話內容,並在未來參考。
你不需要重複告訴我已經記住的事情。

這麼做有兩個好處:

  1. 用戶知道:他們不需要每次都重複同樣的資訊
  2. Agent 知道:它會有意識地依賴記憶系統,而不是每次都假設用戶需要從頭解釋

記憶的隱私與安全考量

最後,雖然 Hindsight 讓記憶共享變得簡單,但也需要注意一些安全問題:

共享 vs 獨立的平衡

  • 共享 Bank 讓所有 Agent 都能看到相同的資訊
  • 如果某些內容非常敏感,可能需要考慮使用獨立 Bank
  • 建議:一般偏好可以共享,敏感內容手動處理

記憶的生命週期

  • Hindsight 預設會自動合併(consolidate)記憶
  • 但你不應該完全依賴它來管理非常敏感的資訊
  • 重要資訊建議另外備份

總結

在這篇文章中,我們探討瞭如何讓 OpenClaw 的多個 Agent 共用 Hindsight 記憶資料庫。

我們首先理解了「資訊孤島」問題——沒有共享記憶時,每個 Agent 都像是失憶症患者。接著介紹了 Hindsight 的 Bank 機制,說明如何透過 Bank 來組織和隔離記憶。

最重要的部分是如何設定插件的三種模式:完全共享、獨立 Bank、以及混合模式。我推薦大多數使用者採用混合模式,既能享受共享記憶的便利,又能在必要時保持 Agent 的獨立性。

然後我們學會瞭如何驗證設定是否正確運作,以及遇到問題時的疑難排解方法。

最後一章特別強調,Hindsight 插件會自動為所有 Agent 啟用記憶功能,但你依然可以透過系統提示詞來增強 Agent 的記憶使用意識。

希望這篇文章幫助你在 OpenClaw 上打造一個真正「互聯互通」的 AI Agent 協作環境。


相關文章:

  • 《讓 AI 記得你:Hindsight 記憶系統完整解析》
  • 《從零開始:Hindsight 記憶系統安裝教學》
  • 《從 404 到正常運行:Hindsight MiniMax 串接疑難排解》

留言