🧠 科技深入探討 · 2026

OpenClaw 記憶體解釋:架構、設定及其忘記原因

OpenClaw 完整技術指南\

📅更新日期:2026 年 4 月⏱ 14 分鐘閱讀✍️ EasyClaw 社論
  • X(Twitter) icon
  • Facebook icon
  • LinkedIn icon
  • Copy link icon

為什麼 OpenClaw 總是忘記你(為什麼這不是一個錯誤)

遺忘體驗是 OpenClaw 記憶體系統設計的直接結果: memory lives as plain Markdown files on disk,不在資料庫中,不在 RAM 中,不在模型內部。文件是真相的來源。

當這些檔案在壓縮過程中遺失、配置錯誤或無提示地被覆蓋時,代理程式會遺失上下文 - 並且它無法告訴您發生了什麼事。

修復不是你翻轉的設定。它對三層架構有足夠的了解,可以對去哪裡做出深思熟慮的決定。

完整的 OpenClaw 記憶體架構(3 層解釋)

OpenClaw 記憶體跨三個不同的層運行,每個層都有不同的持久性特徵和故障模式。

完整的記憶體生命週期:

Write → Embed/Index → Search → Compact → Recover
  ↓          ↓           ↓         ↓         ↓
.md file   sqlite-vec  semantic  summary   MEMORY.md
created    indexes it  query     replaces  re-read at
           on save     returns   context   session start
                       chunks    window

該鏈中的每個階段都可能獨立失敗。大多數遺忘問題都可以追溯到一個破碎的階段。

第 1 層 — 活動上下文視窗

這是模型的工作記憶:目前載入到活動對話情境視窗中的所有內容。它包括您的系統提示、對話歷史記錄以及搜尋工具檢索到的任何記憶體區塊。

裡面裝的是什麼:

  • 系統提示符號(通常很大)
  • 檢索記憶摘錄
  • 工具呼叫歷史記錄
  • 話鋒一轉

溢出時會發生什麼事: 當上下文視窗接近其令牌限制時,OpenClaw 會觸發壓縮 - 它將現有上下文匯總為壓縮表示並繼續。對話中內聯的指令(而不是固定在持久記憶體檔案中)在此摘要期間經常被刪除。

實際限制:假設在系統提示和記憶體開銷之後,您有大約 60-70% 的模型廣告上下文視窗可用於實際對話。

第 2 層 — 每日筆記(滾動兩天視窗)

每日筆記是以 YYYY-MM-DD 格式命名的僅附加 Markdown 文件,儲存在 memory/ 目錄中。 OpenClaw 載入 今天和昨天的 在每個會話開始時自動產生文件。

  • 有關今天工作、做出的決定和活動任務的事實附加在此處
  • 它們不應該被編輯——將它們視為日誌
  • 兩天后,它們超出了自動加載窗口,只能通過語義搜索進行搜索

關鍵問題: OpenClaw 不會為您建立 memory/ 目錄。如果該目錄不存在,則每日筆記將被靜默刪除,不會引發任何錯誤,並且代理會忘記會話之間的所有內容。這個單一的遺漏導致了大多數「為什麼它總是忘記我」的報道。

第 3 層 — 持久記憶體(MEMORY.md 和 memory-wiki)

跨會話應保留的長期事實(您的姓名、專案情境、編碼偏好、架構決策)屬於 MEMORY.md 或結構化 memory-wiki 外掛程式庫。

記憶體.md

自由格式的 Markdown 文件。代理在會話開始時讀取它。在這裡寫下您總是想要加載的事實。簡單,零配置。

記憶維基

一個結構化插件,具有頁面層級組織、聲明和證據追蹤、矛盾檢測和新鮮度元資料。最適合擁有龐大且不斷發展的知識庫的生產代理商。

壓縮問題-為什麼你的指令在任務中消失

壓縮是 OpenClaw 中記錄最多的故障模式。大多數文章都涉及會話後遺忘。幾乎沒有地址 長時間運作的自主工作流程中的中期任務壓縮 — 當代理執行多步驟任務時,壓縮會在 12 步驟中的第 7 步靜默觸發,而第 1 步驟中的行為指令消失。

壓縮的作用是什麼:

  1. 檢測上下文視窗接近容量
  2. 將目前對話總結為壓縮區塊
  3. 用摘要取代原始上下文
  4. 繼續執行

The problem: summaries optimize for facts and task state, not behavioral instructions. A system instruction like "always write tests before implementation" or "never overwrite files without confirmation" can survive the first compaction cycle and be gone by the second.

當它觸發時: 預設 memory-core 插件中沒有可設定的閾值。它根據令牌計數而不是任務階段觸發。在 2 小時的自主運作中,您預計會有 3-5 個壓實週期。

如何建構抗壓縮檔案架構

將行為指令固定在 MEMORY.md 中,而不是對話中。 任何必須在多個壓縮週期中生存的內容都需要保存在持久性檔案中,該檔案在每次壓縮後都會重新讀取。

建議的固定模式:


## Agent Behavioral Rules (always active)
- Never overwrite files without showing a diff first
- Write tests before implementation (TDD mode: on)
- Use TypeScript strict mode in all new files

## Project Context
- Stack: Node.js 22, Fastify, PostgreSQL 16
- Repo root: /home/user/project
- Active sprint goal: migrate auth to Clerk

壓縮後的命名約定:

  • 使用 ## [PINNED] 為關鍵部分添加前綴 - 摘要器將大寫標頭視為高優先級
  • 盡可能將每個固定事實保留在一行中 - 總結密集的段落,單行事實往往會逐字保留
  • MEMORY.md 和今天的每日筆記中重複 3-5 個最關鍵的行為規則 - 冗餘是你的壓縮對沖

10 分鐘內從零到記憶體設定(完整檔案支架)

這是其他地方不存在的設定指南。複製這個結構,填寫你的上下文,然後你就可以運作了。

目錄樹:

memory/
├── MEMORY.md
├── 2026-04-27.md          ← today's daily note (create manually)
└── wiki/                  ← only if using memory-wiki plugin
    ├── index.md
    ├── project-context.md
    └── decisions.md

啟動器MEMORY.md

# Persistent Memory

## Identity & Preferences
- Name: [your name]
- Role: [your role]
- Preferred response style: concise, no preamble

## Project: [Project Name]
- Stack: [your stack]
- Key constraints: [e.g., no external APIs, TypeScript only]
- Current focus: [active task or sprint goal]

## Behavioral Rules
- [Rule 1]
- [Rule 2]

## Decisions Made
- [YYYY-MM-DD] Decided to use X because Y

入門每日筆記 (2026-04-27.md):

# 2026-04-27

## Session Goals
- [ ] Task 1
- [ ] Task 2

## Notes

插件槽配置(2026語法):

{
  "plugins": {
    "slots": {
      "memory": "memory-core"
    }
  }
}

要完全禁用記憶體:

{
  "plugins": {
    "slots": {
      "memory": false
    }
  }
}

驗證步驟:

  1. 執行一次會話並要求客服人員回憶您在上一次會話中告訴過的內容
  2. 檢查 memory/YYYY-MM-DD.md 是否已寫入(它應該有新內容)
  3. 直接問經紀人:「你對我了解多少?」— 它應該從 MEMORY.md 中提取

為生產知識庫配置記憶體維基

透過交換插件插槽來啟用它:

{
  "plugins": {
    "slots": {
      "memory": "memory-wiki"
    }
  }
}

memory-wiki 在 memory/wiki/ 下產生一個結構化保管庫。每個主題都有自己的頁面。該插件編譯一個 digest.md ,它聚合了高可信度、無矛盾的事實,以便代理在會話開始時加載。

生產代理的實用保險庫結構:

memory/wiki/
├── index.md              ← vault table of contents
├── digest.md             ← auto-generated; agent reads this
├── project-context.md    ← stack, goals, constraints
├── decisions.md          ← architectural decisions log
├── team.md               ← stakeholders, contacts
└── domain-knowledge.md   ← business rules, glossary

在以下情況下使用記憶體維基:

  • 您的知識庫超過約 50 個事實
  • 你需要矛盾檢測
  • 多個代理寫入同一個保管庫

在以下情況下堅持使用原始 MEMORY.md:

  • 您是獨立開發者
  • 你的背景很穩定
  • 您想要零維護費用

語意搜尋與嵌入-SQLite、sqlite-vec 和 JS Fallback

OpenClaw 使用以下方式索引您的記憶體文件 SQLite with the sqlite-vec extension 用於向量相似性搜尋。當您或代理程式發出記憶體搜尋時,它會嵌入查詢並檢索語義上最相關的區塊。

驗證您的向量儲存是否正常:

# Check that the memory index exists
ls memory/.index/

# Reset a corrupted index (safe to run — it rebuilds from .md files)
rm -rf memory/.index/ && OpenClaw reindex

如果 sqlite-vec 不可用(在 ARM Linux 和某些 Windows 配置上常見),OpenClaw 將回退到純 JS 向量擴充。明確強制回退:

{
  "memory": {
    "vectorBackend": "js"
  }
}

特定於段的記憶體策略

獨立開發人員 - 最小的開銷,最大的召回率

建議設定:memory-core 外掛程式、MEMORY.md + 僅每日筆記,無 wiki 庫。

  • MEMORY.md 保持在 200 行以下 - 較長的檔案會減慢會話啟動速度
  • 積極地添加日常筆記;不要試圖保持它們乾淨
  • 每週審查和修剪 MEMORY.md — 過時的事實會降低搜尋質量

多代理管道-跨代理共享內存

當多個代理程式讀取和寫入相同 memory/ 目錄時,您需要明確的所有權規則。

  • One agent owns writes to each file — 並發寫入同一個 .md 檔案會產生衝突
  • 每個代理程式使用子目錄:memory/agent-a/memory/agent-b/,以及共享的 memory/shared/MEMORY.md
  • 使用記憶體維基作為共享庫 - 它的摘要編譯比原始文件更好地處理多個編寫者之間的新鮮度

長時間運作的自主任務-存活執行時間

對於運行以小時為單位的任務的代理:

  • Force memory writes at checkpoints — 在每個主要任務階段之後,指示代理將其當前狀態附加到今天的每日筆記中
  • Pre-load compaction-resistant context — 在執行開始之前將完整的任務規格放入 MEMORY.md 中,而不僅僅是在初始訊息中
  • Set explicit continuation markers 在日常筆記中:<!-- RESUME POINT: completed steps 1-4, next: step 5 -->,以便代理人可以在壓實週期後自我定向

為什麼 EasyClaw 在長時間運行的記憶體任務中獲勝

EasyClaw 是桌面原生建構的 - 這表示您的記憶體檔案、向量索引和每日筆記與本機磁碟上的項目一起存在,而不是在逾時時驅逐上下文的雲端會話中。預設情況下,您會獲得抗壓縮內存,而不是通過配置。

  • ✅ 重新啟動後仍然存在的持久記憶體 - 無雲會話限制
  • ✅ 零網路延遲的本機 sqlite-vec 索引
  • ✅ 內建結構化記憶體維基 - 無需配置額外的插件
  • ✅ 在每個主要任務階段自動檢查點寫入
  • ✅ 壓縮感知固定-行為規則永遠不會被總結掉
免費試用 EasyClaw →

OpenClaw 記憶體故障排除 — 在 2 分鐘內診斷任何遺忘問題

按順序完成這些步驟:

步驟 1 — 記憶體/目錄是否存在?

  • No → 創建它。這修復了約 40% 的遺忘報告。
  • Yes → 繼續步驟 2。

步驟 2 — 是否寫了每日筆記?

  • 檢查 memory/ 中名為今天日期的文件
  • No file → 插件插槽可能配置錯誤。驗證 plugins.slots.memory 已設置,而不是 false
  • File exists but 為空 → 代理正在載入記憶體但未寫入。檢查目錄的寫入權限。

步驟 3 — 壓縮是否觸發並剝奪了您的指令?

  • Symptom: 代理記住事實,但在會話中忽略行為規則
  • Fix: 將所有行為規則移至 ## [PINNED] 區段下的 MEMORY.md

步驟 4 — 壓縮前上下文視窗是否溢出?

  • Symptom: 代理開始忽略長對話的早期部分
  • Fix: 減少系統提示大小、修剪 MEMORY.md 或將任務拆分為具有明確檢查點註釋的較短會話

步驟 5 — SQLite 向量索引是否已損壞?

  • Symptom: 記憶體搜尋未回傳結果或明顯不相關的結果
  • Fix: rm -rf memory/.index/ && OpenClaw reindex
  • 如果日誌中出現sqlite-vec錯誤:透過"vectorBackend": "js"切換到JS後端

常見問題

Q:為什麼關閉終端後 OpenClaw 會忘記所有內容?

答:最常見的原因是 memory/ 目錄不存在。當目錄遺失時,OpenClaw 會默默地刪除每日筆記 — 沒有錯誤,沒有警告。在專案根目錄中建立目錄,並驗證下一個會話後是否會出現一個帶有日期的檔案。

Q:我的代理在開始時遵循指示,但後來在長期任務中忽略它們。為什麼?

答:這就是壓實。當上下文視窗填滿時,OpenClaw 會總結先前的內容以騰出空間。摘要保留事實,而不是行為指示。將您的規則移至 ## [PINNED] 部分下的 MEMORY.md 中,以便在每個壓縮週期後重新讀取它們。

Q:我應該使用記憶體核心還是記憶體維基?

答:從 memory-core 開始。它是零配置的,可以很好地處理大多數獨立開發人員的工作負載。只有當您的知識庫超過約 50 個事實、需要矛盾檢測或多個代理正在寫入同一內部庫時,才升級到 memory-wiki

Q:在 2 小時的自主運作中,我預計可以進行多少次壓實循環?

答:預計 3-5 個壓實週期。此閾值基於令牌計數,而不是經過的時間或任務階段,並且在預設的 memory-core 插件中使用者不可設定。這就是為什麼 MEMORY.md 中的抗壓縮固定對於長時間運行的任務至關重要。

Q:記憶體搜尋傳回不相關的結果。我該如何修復它?

答:SQLite 向量索引可能已損壞或過時。執行 rm -rf memory/.index/ && OpenClaw reindex 以從 .md 檔案重建它。這樣可以隨時安全運作。如果 sqlite-vec 錯誤仍然存在(在 ARM Linux 和某些 Windows 設定上常見),請切換到 JS 回退後端。

Q:我可以針對同一記憶體目錄運行多個代理程式嗎?

答:Yes,但需要明確的所有權規則。對同一個 .md 檔案的並發寫入將產生衝突。將每個代理程式的子目錄(memory/agent-a/memory/agent-b/)與共享 memory/shared/MEMORY.md 一起使用,並為共享保管庫使用記憶體維基。

Q:每日筆記在自動載入視窗中停留多久?

答:只有今天和昨天的每日筆記會在會話開始時自動載入。較舊的註釋不在自動載入視窗之內,只能透過語義搜尋存取。這是設計使然——加載每個歷史筆記會消耗太多的上下文預算。

最終結論——實際有效的記憶體設置

Recommended baseline 針對大多數使用者: memory-core 插件,在第一次會話之前建立的 memory/ 目錄,MEMORY.md 在明確標記的固定部分中包含行為規則,在每個會話中附加每日註釋。

80% 的遺忘問題背後有個錯誤: 不建立 memory/ 目錄,且在 MEMORY.md 中沒有抗壓縮固定。代理在第一個壓縮週期中丟棄上下文,並且無處可寫回。

您的行動清單:

  • 在專案根目錄中建立 memory/ 目錄
  • 複製上面的起始 MEMORY.md 範本並填寫您的上下文
  • 驗證 plugins.slots.memory 設定為 "memory-core" (或您選擇的插件)
  • MEMORY.md 中的 ## [PINNED] 下新增 3–5 個最關鍵的行為規則
  • 第一次會議後,確認已寫下註明日期的每日筆記
  • 如果語意搜尋感覺不太好,請執行 OpenClaw reindex 來重建向量索引

一旦你了解它,這個架構就是合理的。大多數遺忘問題會在遵循此清單後 10 分鐘內解決。