Context Engine
一個 context engine 控制 OpenClaw 如何為每次執行建立模型上下文。 它決定要包含哪些訊息、如何摘要舊歷史記錄,以及如何 跨越子代理邊界管理上下文。 OpenClaw 提供內建的legacy 引擎。外掛程式可以註冊
替代引擎,以取代活躍的 context-engine 生命週期。
快速開始
檢查哪個引擎處於活躍狀態:安裝 context engine 外掛程式
Context engine 外掛程式像任何其他 OpenClaw 外掛程式一樣安裝。先安裝, 然後在 slot 中選擇引擎:contextEngine 設為 "legacy"(或
完全移除金鑰 — "legacy" 是預設值)。
運作方式
每當 OpenClaw 執行模型 prompt 時,context engine 在 四個生命週期點參與:- Ingest — 當新訊息新增到 session 時呼叫。引擎 可以在其自己的資料存儲中存儲或索引訊息。
- Assemble — 在每次模型執行前呼叫。引擎返回一個有序的
訊息集合(和可選的
systemPromptAddition),適應 token 預算。 - Compact — 當上下文視窗滿時或使用者執行
/compact時呼叫。引擎摘要舊歷史記錄以釋放空間。 - After turn — 在執行完成後呼叫。引擎可以持久化狀態, 觸發背景壓縮,或更新索引。
子代理生命週期(選用)
OpenClaw 目前呼叫一個子代理生命週期 hook:- onSubagentEnded — 當子代理 session 完成或被清除時清理。
prepareSubagentSpawn hook 是介面的一部分,供未來使用,但
執行時尚未叫用它。
System prompt addition
assemble 方法可以返回一個 systemPromptAddition 字串。OpenClaw
將此加到執行的 system prompt 中。這讓引擎可以注入
動態召回指引、檢索指令或上下文感知提示
而無需靜態工作區檔案。
舊版引擎
內建的legacy 引擎保留 OpenClaw 的原始行為:
- Ingest:無操作(session manager 直接處理訊息持久化)。
- Assemble:傳遞(執行時現有的 sanitize → validate → limit pipeline 處理上下文組裝)。
- Compact:委託給內建摘要壓縮,這建立 舊訊息的單一摘要並保持最近訊息完整。
- After turn:無操作。
systemPromptAddition。
當沒有設定 plugins.slots.contextEngine(或設為 "legacy")時,
此引擎會自動使用。
外掛程式引擎
外掛程式可以使用外掛程式 API 註冊 context engine:ContextEngine 介面
必要的成員:| 成員 | 類型 | 目的 |
|---|---|---|
info | 屬性 | 引擎 id、名稱、版本和是否擁有壓縮 |
ingest(params) | 方法 | 儲存單個訊息 |
assemble(params) | 方法 | 為模型執行建立上下文(返回 AssembleResult) |
compact(params) | 方法 | 摘要/減少上下文 |
assemble 返回一個 AssembleResult,包含:
messages— 要發送給模型的有序訊息。estimatedTokens(必需,number)— 引擎對組裝上下文中總 token 數的估計。OpenClaw 使用它來進行壓縮閾值決定和診斷報告。systemPromptAddition(可選,string)— 加到 system prompt 前。
| 成員 | 類型 | 目的 |
|---|---|---|
bootstrap(params) | 方法 | 為 session 初始化引擎狀態。當引擎首次看到 session 時呼叫一次(例如匯入歷史記錄)。 |
ingestBatch(params) | 方法 | 將完成的 turn 作為批次攝取。在執行完成後呼叫,同時含有該 turn 中的所有訊息。 |
afterTurn(params) | 方法 | 執行後生命週期工作(持久化狀態、觸發背景壓縮)。 |
prepareSubagentSpawn(params) | 方法 | 為子 session 設定共享狀態。 |
onSubagentEnded(params) | 方法 | 子代理結束後清理。 |
dispose() | 方法 | 釋放資源。在 gateway 關閉或外掛程式重新載入期間呼叫 — 不是 per-session。 |
ownsCompaction
ownsCompaction 控制 Pi 的內建嘗試中自動壓縮是否保持
為執行啟用:
true— 引擎擁有壓縮行為。OpenClaw 禁用該執行的 Pi 內建 自動壓縮,引擎的compact()實現負責/compact、溢出恢復壓縮和任何它想在afterTurn()中做的主動壓縮。false或未設定 — Pi 的內建自動壓縮仍可能在 prompt 執行期間執行,但活躍引擎的compact()方法仍會為/compact和溢出恢復呼叫。
ownsCompaction: false 不表示 OpenClaw 自動回退到
舊版引擎的壓縮路徑。
這意味著有兩種有效的外掛程式模式:
- 擁有模式 — 實現您自己的壓縮演算法並設定
ownsCompaction: true。 - 委託模式 — 設定
ownsCompaction: false並讓compact()呼叫delegateCompactionToRuntime(...),來自openclaw/plugin-sdk/core,以使用 OpenClaw 的內建壓縮行為。
compact() 對於活躍的非擁有引擎是不安全的,因為它
禁用了該引擎 slot 的正常 /compact 和溢出恢復壓縮路徑。
設定參考
kind: "context-engine" 外掛程式仍可載入並執行其註冊
代碼;plugins.slots.contextEngine 只選擇當 OpenClaw 需要 context engine 時解析的已註冊引擎 id。
與壓縮和記憶的關係
- Compaction 是 context engine 的一個職責。舊版引擎 委託給 OpenClaw 的內建摘要。外掛程式引擎可以實現 任何壓縮策略(DAG 摘要、向量檢索等)。
- Memory 外掛程式(
plugins.slots.memory)與 context engines 分開。 Memory 外掛程式提供搜尋/檢索;context engines 控制 模型看到的內容。它們可以協同工作 — context engine 可能在 組裝時使用 memory 外掛程式資料。 - Session pruning(在記憶體中修剪舊工具結果)仍然執行 無論哪個 context engine 活躍。
提示
- 使用
openclaw doctor驗證您的引擎正確載入。 - 如果切換引擎,現有 session 繼續使用其當前歷史記錄。 新引擎接管未來執行。
- 引擎錯誤被記錄並在診斷中顯示。如果外掛程式引擎
無法註冊或選擇的引擎 id 無法解析,OpenClaw
不會自動回退;執行失敗直到您修復外掛程式或
將
plugins.slots.contextEngine切換回"legacy"。 - 對於開發,使用
openclaw plugins install -l ./my-engine連結 本地外掛程式目錄而無需複製。