Total Recall — 自主 Agent 記憶
唯一一個會自行監控的記憶技能。
無需資料庫。無需向量。無需手動儲存。只靠一個 LLM 觀察者,將對話壓縮成優先級筆記,在筆記增長時進行合併,並能恢復遺漏的任何內容。五層備援,零維護。每月約 $0.00(使用免費模型)。
其他記憶技能要你記得去記,而這個技能只管專心傾聽。
架構
第 1 層:觀察者(cron,每 15-30 分鐘)
↓ 壓縮最近的訊息 → observations.md
第 2 層:反射器(自動觸發,當 observations 超過 8000 字時)
↓ 合併,移除已過時的資訊 → 減少 40-60%
第 3 層:會話恢復(每次 /new 或 /reset 時執行)
↓ 捕捉觀察者可能遺漏的任何會話
第 4 層:反應式監視器(inotify 守護行程,僅 Linux)
↓ 在 40 次以上新的 JSONL 寫入後觸發觀察者,冷卻 5 分鐘
第 5 層:預壓縮鉤子(memoryFlush)
↓ 在 OpenClaw 壓縮上下文之前緊急捕捉
功能說明
- 觀察者:讀取最近的會話記錄(JSONL),傳送給 LLM,並將壓縮後的觀察結果附加到
observations.md,附帶優先級(高、中、低) - 反射器:當觀察結果過大時自動介入,合併相關項目並移除過時的低優先級條目
- 會話恢復:在會話啟動時執行,檢查上一個會話是否被捕捉,若無則進行緊急觀察
- 反應式監視器:使用 inotify 監控會話目錄,確保高活動時期的捕捉速度比 cron 間隔更快
- 預壓縮鉤子:在 OpenClaw 準備壓縮上下文時觸發,確保不遺漏任何內容
快速開始
1. 安裝技能
clawdhub install total-recall
2. 設定 API 金鑰
加入 .env 或 OpenClaw 設定檔:
OPENROUTER_API_KEY=sk-or-v1-xxxxx
3. 執行設定腳本
bash skills/total-recall/scripts/setup.sh
此腳本會:
- 建立記憶體目錄結構(
memory/、logs/、備份) - 在 Linux 上若使用 inotify + systemd:安裝反應式監視器服務
- 列印 cron 工作和 Agent 設定指示,供您手動新增
4. 設定 Agent 載入觀察結果
在 Agent 的工作區上下文(例如 MEMORY.md 或系統提示)中加入:
在會話啟動時,讀取 `memory/observations.md` 以取得跨會話上下文。
或使用 OpenClaw 的 memoryFlush.systemPrompt 來注入啟動指令。
平台支援
| 平台 | 觀察者 + 反射器 + 恢復 | 反應式監視器 |
|---|---|---|
| Linux(Debian/Ubuntu 等) | 完整支援 | 搭配 inotify-tools |
| macOS | 完整支援 | 不可用(僅 cron) |
所有核心腳本皆使用可攜式 bash。stat、date 和 md5 指令透過 _compat.sh 跨平台處理。
設定
所有腳本都從環境變數讀取,並提供合理的預設值:
| 變數 | 預設值 | 說明 |
|---|---|---|
OPENROUTER_API_KEY | (必要) | 用於 LLM 呼叫的 OpenRouter API 金鑰 |
MEMORY_DIR | $OPENCLAW_WORKSPACE/memory | observations.md 的存放位置 |
SESSIONS_DIR | ~/.openclaw/agents/main/sessions | OpenClaw 會話記錄 |
OBSERVER_MODEL | stepfun/step-3.5-flash:free | 用於壓縮的主要模型(免費) |
OBSERVER_FALLBACK_MODEL | nvidia/nemotron-3-nano-30b-a3b:free | 主要模型失敗時的備用模型(免費) |
OBSERVER_LOOKBACK_MIN | 15 | 回顧分鐘數(白天) |
OBSERVER_MORNING_LOOKBACK_MIN | 480 | 回顧分鐘數(上午 8 點前) |
OBSERVER_LINE_THRESHOLD | 40 | 觸發反應式監視器的行數(Linux) |
OBSERVER_COOLDOWN_SECS | 300 | 反應式觸發之間的冷卻時間(Linux) |
REFLECTOR_WORD_THRESHOLD | 8000 | 觸發反射器的字數門檻 |
REFLECTOR_MODEL | nvidia/nemotron-3-super-120b-a12b:free | 用於合併觀察結果的模型(免費) |
REFLECTOR_FALLBACK_MODEL | openrouter/hunter-alpha | 反射器模型失敗時的備用模型(免費) |
OPENCLAW_WORKSPACE | ~/your-workspace | 工作區根目錄 |
LLM 提供商設定
Total Recall 使用任何與 OpenAI 相容的聊天補全 API。透過設定環境變數切換提供商:
| 變數 | 預設值 | 說明 |
|---|---|---|
LLM_BASE_URL | https://openrouter.ai/api/v1 | API 端點 |
LLM_API_KEY | 備用為 OPENROUTER_API_KEY | API 金鑰 |
LLM_MODEL | deepseek/deepseek-v3.2 | 要使用的模型 |
提供商範例
# OpenRouter(預設)
export OPENROUTER_API_KEY="your-key"
# Ollama(本機)
export LLM_BASE_URL="http://localhost:11434/v1"
export LLM_API_KEY="ollama"
export LLM_MODEL="llama3.1:8b"
# Groq
export LLM_BASE_URL="https://api.groq.com/openai/v1"
export LLM_API_KEY="your-groq-key"
export LLM_MODEL="llama-3.3-70b-versatile"
建立的檔案
memory/
observations.md # 主要觀察記錄(啟動時載入)
observation-backups/ # 反射器備份(保留最近 10 份)
.observer-last-run # 上次觀察者執行的時間戳記
.observer-last-hash # 上次處理訊息的去重雜湊值
logs/
observer.log
reflector.log
session-recovery.log
observer-watcher.log
Cron 工作
設定腳本會建立以下 OpenClaw cron 工作:
| 工作 | 排程 | 說明 |
|---|---|---|
memory-observer | 每 15 分鐘 | 壓縮最近的對話 |
memory-reflector | 每小時 | 若觀察結果過大則進行合併 |
反應式監視器(僅 Linux)
反應式監視器使用 inotifywait 檢測會話活動,並比 cron 更快觸發觀察者。需要 Linux 系統已安裝 inotify-tools。
# 安裝 inotify-tools(Debian/Ubuntu)
sudo apt install inotify-tools
# 檢查監視器狀態
systemctl --user status total-recall-watcher
# 檢視日誌
journalctl --user -u total-recall-watcher -f
成本
使用 OpenRouter 的預設免費模型:
- 典型使用情況下(觀察者 + 反射器)每月約 $0.00(使用免費層模型)
- 每天約 15-30 次 cron 執行,每次處理幾百個 token
- 所有預設模型皆為免費層模型
模型注意事項
腳本包含對 API 回應中 .content 和 .reasoning 欄位的防禦性處理。雖然大多數模型在標準的 .content 欄位中回傳內容,但備用至 .reasoning 可確保與可能使用不同回應格式的模型相容。
運作方式(技術細節)
觀察者
- 尋找最近修改過的會話 JSONL 檔案
- 過濾掉子Agent/cron 會話
- 從回顧視窗中提取使用者和助理訊息
- 使用 MD5 雜湊比較進行去重
- 將結果傳送給 LLM,附上觀察者提示(基於優先級的壓縮)
- 將結果附加到
observations.md - 若觀察結果超過字數門檻,觸發反射器
反射器
- 備份目前的觀察結果
- 將整個記錄傳送給 LLM,附上合併指示
- 驗證輸出比輸入短(合理性檢查)
- 用合併後的版本取代觀察結果
- 清除舊備份(保留最近 10 份)
會話恢復
- 每次
/new或/reset時執行 - 對上一個會話檔案的最新幾行進行雜湊
- 與上次觀察者執行時儲存的雜湊進行比較
- 若不匹配:以恢復模式執行觀察者(4 小時回顧)
- 備用方案:若觀察者失敗,則提取原始訊息
反應式監視器
- 使用
inotifywait監控會話目錄 - 僅計算對主要會話檔案的 JSONL 寫入次數
- 超過 40 行後:觸發觀察者(附帶 5 分鐘冷卻)
- 當檢測到 cron/外部觀察者執行時,重置計數器
自訂提示
觀察者和反射器的系統提示位於 prompts/ 目錄:
prompts/observer-system.txt— 控制對話如何被壓縮prompts/reflector-system.txt— 控制觀察結果如何被合併
編輯這些檔案以符合 Agent 的個性和優先級。
夢境循環
夢境循環是一個可選的夜間 Agent,在離峰時段執行以合併 observations.md。它會歸檔過時的項目,並加入語義掛鉤,確保有用的東西不會真正遺失。上下文保持精簡;一切仍然可以找到。
功能說明
- 根據影響力(關鍵 / 高 / 中 / 低 / 極低)和時效對每個觀察進行分類
- 歸檔已超過相關性門檻的項目
- 為每個歸檔項目加入一個語義掛鉤(特定關鍵字 + 歸檔參考)
- 驗證結果,若出現問題則自動回退
特性
多重掛鉤檢索 — 每個歸檔項目有 4-5 個替代搜尋措辭。即使用與原始詞彙不同的詞語搜尋,仍能找到記憶。
置信度評分 — 每個觀察都獲得一個置信度評分(0.0-1.0)和來源類型(explicit、implicit、inference、weak、uncertain)。高置信度項目保留更久;低置信度項目較早歸檔。
記憶類型系統 — 7 種類型,各有不同的壽命:event(14 天)、fact(90 天)、preference(180 天)、goal(365 天)、habit(365 天)、rule(永不)、context(30 天)。作為不可見的 HTML 元數據註解嵌入在 observations.md 中。
觀察分塊 — 3 個以上相關觀察的叢集被壓縮成單一摘要條目。原始觀察被歸檔;一個塊掛鉤取代它們。可實現高達 75% 的 token 減少。
重要性衰減 — 每次歸檔決策前,對重要性分數應用每日衰減。衰減至歸檔門檻以下的項目將被排入移除佇列。衰減率:event(-0.5/天)、fact(-0.1/天)、preference(-0.02/天)、rule/habit/goal(無衰減)。
模式提升 — 掃描最近的夢境日誌,尋找重複出現的主題(在 3 個不同日期中出現 3 次以上)。將提升建議寫入 memory/dream-staging/ 以供人工審查。使用 staging-review.sh 來列出、顯示、批准或拒絕建議。context 類型永遠不會被自動提升。
設定
-
執行
bash skills/total-recall/scripts/setup.sh— 自動建立夢境循環目錄。 -
將夜間 cron 工作新增為完整的 Agent 回合:
# 夢境循環 — 夜間(建議淩晨 3 點;請根據您的時區調整) # 夢境循環作為一個完整的 Agent 回合執行 — 而不是直接呼叫 bash。 # dream-cycle.sh 是由 Agent 呼叫的檔案操作輔助工具,而非進入點。 # # 0 3 * * * bash -c 'source ~/.openclaw/shared/secrets/openclaw-secrets.env \ # && openclaw agent --agent main \ # --message "執行 Total Recall 夢境循環。嚴格遵循 \ # $WORKSPACE/skills/total-recall/prompts/dream-cycle-prompt.md 中的指示。\ # 使用 READ_ONLY_MODE=false 和 DREAM_PHASE=1。" \ # --json >> $WORKSPACE/logs/dream-cycle.log 2>&1' -
使用
prompts/dream-cycle-prompt.md作為系統提示來設定您的 cron Agent。推薦模型:Claude Sonnet 作為夢想家(分析 + 決策),DeepSeek v3.2 作為觀察者(便宜、快速)。 -
前幾個晚上使用
READ_ONLY_MODE=true啟動。每次執行後檢查memory/dream-logs/,以驗證它原本會歸檔哪些內容。 -
滿意後切換至
READ_ONLY_MODE=false。
設定
| 變數 | 預設值 | 說明 |
|---|---|---|
DREAM_TOKEN_TARGET | 8000 | 合併後 observations.md 的 token 目標 |
READ_ONLY_MODE | false | 設為 true 以進行乾執行分析而不寫入 |
檔案
| 檔案 | 說明 |
|---|---|
scripts/dream-cycle.sh | 由 Agent 呼叫的 shell 輔助工具(非獨立執行工具):前置檢查、歸檔、更新觀察、寫入日誌、寫入指標、驗證、回退 |
prompts/dream-cycle-prompt.md | 夜間夢境循環執行的 Agent 提示 |
dream-cycle/README.md | 夢境循環快速參考 |
schemas/observation-format.md | 擴展觀察元數據格式 |
建立的目錄
memory/
archive/
observations/ # 歸檔項目(每晚一個 .md 檔案)
chunks/ # 分塊的觀察組
dream-logs/ # 夜間執行報告
dream-staging/ # 等待人工審查的模式提升建議
.dream-backups/ # 執行前安全備份
research/
dream-cycle-metrics/
daily/ # 每晚的 JSON 指標
疑難排解
觀察者沒有執行?
- 檢查
logs/observer.log中的錯誤 - 確認
OPENROUTER_API_KEY已設定且有效 - 確認 cron 處於活動狀態:
crontab -l
會話啟動時未載入觀察結果?
- 確保 Agent 的啟動指示包含讀取
memory/observations.md - 檢查
MEMORY_DIR是否指向正確位置
反應式監視器未觸發(Linux)?
- 執行
systemctl --user status total-recall-watcher - 檢查
inotify-tools是否已安裝:which inotifywait - 檢視監視器日誌:
journalctl --user -u total-recall-watcher -f
夢境循環歸檔過於積極?
- 啟用
READ_ONLY_MODE=true並在正式啟用前檢視夢境日誌 - 調高
DREAM_TOKEN_TARGET以減少每次執行的歸檔量
夢境循環歸檔不足?
- 調低
DREAM_TOKEN_TARGET以觸發更積極的合併
靈感來源
此系統的靈感來自人類記憶在睡眠時的運作方式——海馬體(觀察者)捕捉經驗,而在睡眠鞏固期間(反射器),重要的記憶會被強化,雜訊則被拋棄。
了解更多:Your AI Has an Attention Problem
「Get your ass to Mars.」— 嗯,讓你的 Agent 的記憶動起來吧。