快速開始
將以下內容貼到openclaw.json,即可使用安全預設值:外掛開啟、範圍限於 main、僅限直接訊息會話,模型繼承自該會話。
plugins.entries.*(包含 active-memory.config)位於免重新啟動設定類別:閘道會自動重新載入外掛執行階段,不需要手動重新啟動。如果你仍想強制完整重新啟動,請執行:
plugins.entries.active-memory.enabled: true會開啟外掛config.agents: ["main"]只讓main代理加入config.allowedChatTypes: ["direct"]將範圍限制為直接訊息會話(群組/頻道需明確加入)config.model(選填)會固定使用專用回想模型;未設定時會繼承目前會話模型config.modelFallback只在無法解析明確或繼承模型時使用config.promptStyle: "balanced"是recent模式的預設值- 主動記憶仍只會在符合資格的互動式持久聊天會話中執行(請參閱何時執行)
運作方式
阻塞式子代理只能呼叫已設定的記憶回想工具(請參閱記憶工具)。如果查詢與可用記憶之間的關聯薄弱,它會傳回NONE,主要回覆會在沒有額外脈絡的情況下繼續。
主動記憶是對話增強功能,不是全平台推論功能:
| 介面 | 會執行主動記憶嗎? |
|---|---|
| Control UI / 網頁聊天持久會話 | 是,若外掛已啟用且代理已被指定 |
| 位於相同持久聊天路徑上的其他互動式頻道會話 | 是,若外掛已啟用且代理已被指定 |
| 無頭一次性執行 | 否 |
| 心跳偵測/背景執行 | 否 |
通用內部 agent-command 路徑 | 否 |
| 子代理/內部輔助執行 | 否 |
何時執行
兩道閘門都必須通過:- 設定加入 — 外掛已啟用,且目前代理 id 位於
config.agents。 - 執行階段資格 — 會話是符合資格的互動式持久聊天會話,其聊天類型已允許,且其對話 id 未被篩除。
會話類型
config.allowedChatTypes 控制哪些種類的對話可以執行主動記憶。預設值:
direct、group、channel、explicit(入口網站樣式會話,具有不透明的會話 id,例如 agent:main:explicit:portal-123)。
直接訊息會話預設會執行;群組、頻道與明確會話需要加入:
config.allowedChatIds 和 config.deniedChatIds:
allowedChatIds是已解析對話 id 的允許清單。非空時,主動記憶只會針對其對話 id 位於清單中的會話執行,這會一次縮小所有允許的聊天類型,包括直接訊息。若要保留所有直接訊息,同時只縮小群組範圍,也請將直接對等端 id 加入allowedChatIds,或將allowedChatTypes保持限定在你正在測試的群組/頻道推出範圍。deniedChatIds是拒絕清單,永遠優先於allowedChatTypes和allowedChatIds。
chat_id/open_id、Telegram chat id、Slack channel id)。比對不區分大小寫。如果 allowedChatIds 非空,且 OpenClaw 無法解析該會話的對話 id,主動記憶會略過該回合,而不是猜測。
會話切換
不需編輯設定,即可暫停或恢復目前聊天會話的主動記憶:plugins.entries.active-memory.config.enabled 或其他全域設定。
若要改為暫停/恢復所有會話,請使用全域形式(需要擁有者或 operator.admin):
plugins.entries.active-memory.config.enabled,但會讓 plugins.entries.active-memory.enabled 保持開啟,因此稍後仍可使用命令重新開啟主動記憶。
如何查看
預設情況下,主動記憶會注入隱藏的不受信任提示前綴,不會顯示在一般回覆中。請開啟符合你想要輸出的會話切換:/verbose on會加入狀態行:🧩 Active Memory: status=ok elapsed=842ms query=recent summary=34 chars/trace on會加入偵錯摘要:🔎 Active Memory Debug: Lemon pepper wings with blue cheese.
/trace raw 時,追蹤的 Model Input (User Role) 區塊會顯示原始隱藏前綴:
查詢模式
config.queryMode 控制阻塞式子代理能看到多少對話內容。請選擇仍能妥善回答後續追問的最小模式;隨著脈絡大小從 message 到 recent 再到 full 增加,也請提高 timeoutMs。
- message
- recent
- full
只會傳送最新的使用者訊息。當你想要最快的行為、最強烈偏向穩定偏好回想,且後續回合不需要對話脈絡時使用。
config.timeoutMs 可從約 3000-5000 ms 開始。提示風格
config.promptStyle 控制子代理回傳記憶時的積極或嚴格程度:
| 風格 | 行為 |
|---|---|
balanced | recent 模式的一般用途預設值 |
strict | 最不積極;最少受到鄰近脈絡滲入影響 |
contextual | 最重視連續性;對話歷史更重要 |
recall-heavy | 在較弱但仍合理的匹配上浮現記憶 |
precision-heavy | 除非匹配很明顯,否則積極偏好 NONE |
preference-only | 針對最愛、習慣、例行事項、品味、反覆出現的個人事實最佳化 |
config.promptStyle 未設定時的預設對應:
config.promptStyle 一律會覆寫此對應。
模型備援政策
如果未設定config.model,主動記憶會依下列順序解析模型:
config.modelFallbackPolicy 是為舊設定保留的已棄用相容欄位;它不再改變執行階段行為,modelFallback 嚴格來說只是上述鏈中的最後手段,而不是在已解析模型出錯時換用另一個模型的執行階段容錯移轉。
速度建議
將config.model 保持未設定(繼承會話模型)是最安全的預設值:它會遵循你現有的提供者、驗證與模型偏好。若要降低延遲,請改用專用快速模型;回想品質很重要,但在這裡延遲比主要回答路徑更重要,且工具介面很窄(只有記憶回想工具)。
好的快速模型選項:
cerebras/gpt-oss-120b,專用的低延遲回憶模型google/gemini-3-flash,不變更主要聊天模型的低延遲備援- 你的正常工作階段模型,做法是讓
config.model保持未設定
Cerebras 設定
chat/completions 存取權限 — 僅能看見 /v1/models 並不保證有該權限。
記憶工具
config.toolsAllow 會設定阻塞式子代理可
呼叫的具體工具名稱。預設值取決於啟用中的記憶提供者:
plugins.slots.memory | 預設 toolsAllow |
|---|---|
未設定 / memory-core(內建) | ["memory_search", "memory_get"] |
memory-lancedb | ["memory_recall"] |
toolsAllow 只接受具體的記憶工具名稱:萬用字元、group:*
項目,以及核心代理工具(read、exec、message、web_search 和
類似工具)都會在隱藏子代理啟動前被靜默濾除。
內建 memory-core
不需要明確設定toolsAllow:
LanceDB 記憶
選取記憶插槽就足以讓主動記憶使用memory_recall:
Lossless Claw
Lossless Claw 是 外部脈絡引擎外掛(openclaw plugins install @martian-engineering/lossless-claw),並有自己的回憶工具。請先將它設定為
脈絡引擎;請參閱脈絡引擎。接著
讓主動記憶指向它的工具:
lcm_expand 加入 toolsAllow;Lossless Claw 會將它作為
委派展開用的較低階工具,而不是給最上層
主動記憶子代理使用。
進階逃生口
不屬於建議設定的一部分。config.thinking 會覆寫子代理的思考等級(預設為 "off",
因為主動記憶在回覆路徑中執行,額外思考時間會直接
增加使用者可感知的延遲):
config.promptAppend 會在預設提示之後、
對話脈絡之前加入操作員指示 — 當
非核心記憶外掛需要特定工具順序或查詢塑形時,請搭配自訂 toolsAllow 使用:
config.promptOverride 會完全取代預設提示(對話
脈絡仍會在之後附加)。除非刻意
測試不同的回憶合約,否則不建議使用 — 預設提示已調校為讓主模型
收到 NONE 或精簡的使用者事實脈絡:
逐字稿持久化
阻塞式子代理執行會在呼叫期間建立真正的session.jsonl 逐字稿。預設會寫入暫存目錄,並在執行完成後立即刪除。
若要將這些逐字稿保留在磁碟上以便偵錯:
config.transcriptDir 變更相對子目錄。請謹慎使用此功能:逐字稿在繁忙工作階段可能快速累積,full 查詢
模式會複製大量對話脈絡,而且這些逐字稿包含
隱藏提示脈絡以及回憶到的記憶。
設定
所有主動記憶設定都位於plugins.entries.active-memory 底下。
| Key | Type | Meaning |
|---|---|---|
enabled | boolean | 啟用外掛本身 |
config.agents | string[] | 可使用主動記憶的代理程式 ID |
config.model | string | 選用的阻塞式子代理程式模型參照;未設定時,會繼承目前工作階段的模型 |
config.allowedChatTypes | ("direct" | "group" | "channel" | "explicit")[] | 可執行主動記憶的工作階段類型;預設為 ["direct"] |
config.allowedChatIds | string[] | 選用的每個對話允許清單,會在 allowedChatTypes 之後套用;非空清單會預設拒絕 |
config.deniedChatIds | string[] | 選用的每個對話拒絕清單,會覆寫允許的工作階段類型和允許的 ID |
config.queryMode | "message" | "recent" | "full" | 控制阻塞式子代理程式可看到多少對話內容 |
config.promptStyle | "balanced" | "strict" | "contextual" | "recall-heavy" | "precision-heavy" | "preference-only" | 控制阻塞式子代理程式在決定是否傳回記憶時的積極或嚴格程度 |
config.toolsAllow | string[] | 阻塞式子代理程式可呼叫的具體記憶工具名稱;預設為 ["memory_search", "memory_get"],或當 plugins.slots.memory 為 memory-lancedb 時預設為 ["memory_recall"];萬用字元、group:* 項目和核心代理程式工具會被忽略 |
config.thinking | "off" | "minimal" | "low" | "medium" | "high" | "xhigh" | "adaptive" | "max" | 阻塞式子代理程式的進階思考覆寫;預設 off 以提升速度 |
config.promptOverride | string | 進階完整提示詞替換;不建議一般使用 |
config.promptAppend | string | 附加到預設或覆寫提示詞的進階額外指示 |
config.timeoutMs | number | 阻塞式子代理程式的硬性逾時(範圍 250-120000 ms;預設 15000) |
config.setupGraceTimeoutMs | number | 召回逾時到期前的進階額外設定預算;範圍 0-30000 ms,預設 0。請參閱冷啟動寬限取得 v2026.4.x 升級指引 |
config.maxSummaryChars | number | 主動記憶摘要中的字元數上限(範圍 40-1000;預設 220) |
config.logging | boolean | 調校時發出主動記憶日誌 |
config.persistTranscripts | boolean | 將阻塞式子代理程式逐字稿保留在磁碟上,而不是刪除暫存檔 |
config.transcriptDir | string | 代理程式工作階段資料夾下的相對阻塞式子代理程式逐字稿目錄(預設 "active-memory") |
config.modelFallback | string | 僅作為模型備援鏈最後一步使用的選用模型 |
config.qmd.searchMode | "inherit" | "search" | "vsearch" | "query" | 覆寫阻塞式子代理程式使用的 QMD 搜尋模式;預設 "search"(快速詞彙搜尋)— 使用 "inherit" 以符合主要記憶後端設定 |
| Key | Type | Meaning |
|---|---|---|
config.recentUserTurns | number | 當 queryMode 為 recent 時要包含的先前使用者回合(範圍 0-4;預設 2) |
config.recentAssistantTurns | number | 當 queryMode 為 recent 時要包含的先前助理回合(範圍 0-3;預設 1) |
config.recentUserChars | number | 每個近期使用者回合的最大字元數(範圍 40-1000;預設 220) |
config.recentAssistantChars | number | 每個近期助理回合的最大字元數(範圍 40-1000;預設 180) |
config.cacheTtlMs | number | 重複相同查詢的快取重用(範圍 1000-120000 ms;預設 15000) |
config.circuitBreakerMaxTimeouts | number | 同一代理程式/模型連續逾時達到此次數後略過召回。成功召回或冷卻時間到期後重設(範圍 1-20;預設 3)。 |
config.circuitBreakerCooldownMs | number | 斷路器觸發後略過召回的時長,以 ms 為單位(範圍 5000-600000;預設 60000)。 |
建議設定
從recent 開始:
/verbose on 顯示狀態列,並使用 /trace on 顯示偵錯摘要
兩者都會在主要回覆之後作為後續訊息傳送,而不是
在之前。接著移至 message 以降低延遲,或在額外情境
值得較慢的子代理程式執行時使用 full。
冷啟動寬限
在 v2026.5.2 之前,外掛會在冷啟動期間悄悄將timeoutMs 額外延長 30000
ms,因此模型暖機、嵌入索引載入和第一次
召回可以共用一個較大的預算。v2026.5.2 將該寬限移到
明確的 setupGraceTimeoutMs 設定後面:除非你選擇啟用,否則 timeoutMs 現在預設是召回工作
預算。阻塞式鉤子會將該預算包裝成
兩個固定階段:召回
開始前最多 1500 ms 用於工作階段/設定預檢,接著在召回工作停止後,另有固定 1500 ms 用於中止收尾和逐字稿
復原。兩者都不會延長模型或工具
執行。
如果你從 v2026.4.x 升級,並針對舊的
隱含寬限情境調校了 timeoutMs(建議的起始 timeoutMs: 15000 就是一個
例子),請設定 setupGraceTimeoutMs: 30000 以還原 v5.2 之前的有效
預算:
timeoutMs + setupGraceTimeoutMs + 3000 毫秒(已設定的召回工作預算,加上最多 1500 毫秒的預檢,再加上固定的 1500 毫秒召回後完成寬限)。內嵌召回執行器會使用相同的有效逾時預算,因此 setupGraceTimeoutMs 同時涵蓋外層提示建構看門狗和內層阻塞式召回執行。
對於資源緊繃且可接受冷啟動延遲作為取捨的閘道,較低的值(5000-15000 毫秒)也可運作;取捨是閘道重新啟動後,第一次召回在暖機完成前回傳空結果的機率較高。
偵錯
如果主動記憶沒有出現在你預期的位置:- 確認外掛已在
plugins.entries.active-memory.enabled下啟用。 - 確認目前的代理 id 已列在
config.agents中。 - 確認你是透過互動式持久聊天工作階段進行測試。
- 開啟
config.logging: true並觀察閘道記錄。 - 使用
openclaw status --deep驗證記憶搜尋本身可正常運作。
maxSummaryChars。如果主動記憶太慢,請降低 queryMode、降低 timeoutMs,或減少最近回合數與每回合字元上限。
常見問題
主動記憶依附於已設定記憶外掛的召回管線,因此多數召回意外狀況是嵌入提供者問題,而不是主動記憶錯誤。預設的memory-core 路徑使用 memory_search 和 memory_get;memory-lancedb 槽位使用 memory_recall。如果你使用其他記憶外掛,請確認 config.toolsAllow 指名該外掛實際註冊的工具。
嵌入提供者已切換或停止運作
嵌入提供者已切換或停止運作
如果未設定
memorySearch.provider,OpenClaw 會使用 OpenAI embeddings。請為 Bedrock、DeepInfra、Gemini、GitHub
Copilot、LM Studio、local、Mistral、Ollama、Voyage 或 OpenAI-compatible
embeddings 明確設定 memorySearch.provider。如果設定的提供者無法執行,memory_search 可能會降級為僅詞彙檢索;提供者已選定後發生的執行階段失敗不會自動回退。只有在你想要刻意設定單一回退時,才設定選用的 memorySearch.fallback。請參閱記憶搜尋取得完整的提供者清單與範例。召回感覺緩慢、空白或不一致
召回感覺緩慢、空白或不一致
- 開啟
/trace on,在工作階段中顯示外掛擁有的主動記憶偵錯摘要。 - 開啟
/verbose on,也在每次回覆後查看🧩 Active Memory: ...狀態列。 - 觀察閘道記錄中的
active-memory: ... start|done、memory sync failed (search-bootstrap)或提供者嵌入錯誤。 - 執行
openclaw status --deep以檢查記憶搜尋後端與索引健康狀態。 - 如果你使用
ollama,請確認已安裝嵌入模型(ollama list)。
閘道重新啟動後第一次召回回傳 `status=timeout`
閘道重新啟動後第一次召回回傳 `status=timeout`
在 v2026.5.2 及更新版本中,如果冷啟動設定(模型暖機 + 嵌入索引載入)尚未在第一次召回觸發時完成,執行可能會命中設定的
timeoutMs 預算,並在輸出為空時回傳 status=timeout。閘道記錄會在重新啟動後第一次符合條件的回覆附近顯示 active-memory timeout after Nms。請參閱建議設定下的冷啟動寬限,了解建議的 setupGraceTimeoutMs 值。