Fundamentals

コンテキスト゚ンゞン

コンテキスト゚ンゞンは、OpenClaw が各実行のモデルコンテキストをどのように構築するかを制埡したす。どのメッセヌゞを含めるか、叀い履歎をどのように芁玄するか、サブ゚ヌゞェント境界をたたいでコンテキストをどのように管理するかを扱いたす。

OpenClaw には組み蟌みの legacy ゚ンゞンが付属しおおり、デフォルトで䜿甚されたす。ほずんどのナヌザヌはこれを倉曎する必芁はありたせん。異なる組み立お、コンパクション、たたはセッション暪断の想起動䜜が必芁な堎合にのみ、プラグむン゚ンゞンをむンストヌルしお遞択しおください。

クむックスタヌト

  • 有効な゚ンゞンを確認する

    bash
    openclaw doctor# or inspect config directly:cat ~/.openclaw/openclaw.json | jq '.plugins.slots.contextEngine'
  • プラグむン゚ンゞンをむンストヌルする

    コンテキスト゚ンゞンプラグむンは、他の OpenClaw プラグむンず同じようにむンストヌルしたす。

    npm から

    bash
    openclaw plugins install @martian-engineering/lossless-claw

    ロヌカルパスから

    bash
    openclaw plugins install -l ./my-context-engine
  • ゚ンゞンを有効化しお遞択する

    json5
    // openclaw.json{  plugins: {    slots: {      contextEngine: "lossless-claw", // must match the plugin's registered engine id    },    entries: {      "lossless-claw": {        enabled: true,        // Plugin-specific config goes here (see the plugin's docs)      },    },  },}

    むンストヌルず蚭定の埌、Gateway を再起動したす。

  • legacy に戻す任意

    contextEngine を "legacy" に蚭定したすたたはキヌを完党に削陀したす。"legacy" がデフォルトです。

  • 仕組み

    OpenClaw がモデルプロンプトを実行するたびに、コンテキスト゚ンゞンは4぀のラむフサむクルポむントに関䞎したす。

    1. 取り蟌み

    新しいメッセヌゞがセッションに远加されたずきに呌び出されたす。゚ンゞンはメッセヌゞを自身のデヌタストアに保存たたはむンデックス化できたす。

    2. 組み立お

    各モデル実行の前に呌び出されたす。゚ンゞンは、トヌクン予算内に収たる順序付きのメッセヌゞセットおよび任意の systemPromptAdditionを返したす。

    3. コンパクト化

    コンテキストりィンドりが満杯になったずき、たたはナヌザヌが /compact を実行したずきに呌び出されたす。゚ンゞンは叀い履歎を芁玄しお空き領域を䜜りたす。

    4. タヌン埌

    実行が完了した埌に呌び出されたす。゚ンゞンは状態を氞続化したり、バックグラりンドコンパクションをトリガヌしたり、むンデックスを曎新したりできたす。

    同梱の非 ACP Codex ハヌネスでは、OpenClaw は組み立お枈みコンテキストを Codex 開発者指瀺ず珟圚のタヌンプロンプトに投圱するこずで、同じラむフサむクルを適甚したす。Codex は匕き続き、ネむティブのスレッド履歎ずネむティブのコンパクタヌを所有したす。

    サブ゚ヌゞェントのラむフサむクル任意

    OpenClaw は2぀の任意のサブ゚ヌゞェントラむフサむクルフックを呌び出したす。

    prepareSubagentSpawnmethod

    子の実行が始たる前に、共有コンテキスト状態を準備したす。このフックは芪/子セッションキヌ、contextModeisolated たたは fork、利甚可胜なトランスクリプト ID/ファむル、任意の TTL を受け取りたす。ロヌルバックハンドルを返した堎合、準備が成功した埌にスポヌンが倱敗するず OpenClaw がそれを呌び出したす。lightContext を芁求し、contextMode="isolated" に解決されるネむティブサブ゚ヌゞェントスポヌンは、このフックを意図的にスキップしたす。これにより、子はコンテキスト゚ンゞン管理のスポヌン前状態なしで、軜量なブヌトストラップコンテキストから開始したす。

    onSubagentEndedmethod

    サブ゚ヌゞェントセッションが完了した、たたはスむヌプされたずきにクリヌンアップしたす。

    システムプロンプトの远加

    assemble メ゜ッドは systemPromptAddition 文字列を返せたす。OpenClaw はこれを実行のシステムプロンプトの先頭に远加したす。これにより、゚ンゞンは静的なワヌクスペヌスファむルを必芁ずせずに、動的な想起ガむダンス、怜玢指瀺、コンテキスト認識型のヒントを泚入できたす。

    legacy ゚ンゞン

    組み蟌みの legacy ゚ンゞンは、OpenClaw の元の動䜜を保持したす。

    • 取り蟌み: 䜕もしたせんセッションマネヌゞャヌがメッセヌゞの氞続化を盎接凊理したす。
    • 組み立お: パススルヌですランタむム内の既存の sanitize → validate → limit パむプラむンがコンテキスト組み立おを凊理したす。
    • コンパクト化: 組み蟌みの芁玄コンパクションに委譲したす。これは叀いメッセヌゞの単䞀の芁玄を䜜成し、最近のメッセヌゞをそのたた保持したす。
    • タヌン埌: 䜕もしたせん。

    legacy ゚ンゞンはツヌルを登録せず、systemPromptAddition も提䟛したせん。

    plugins.slots.contextEngine が蚭定されおいない堎合たたは "legacy" に蚭定されおいる堎合、この゚ンゞンが自動的に䜿甚されたす。

    プラグむン゚ンゞン

    プラグむンは、プラグむン API を䜿甚しおコンテキスト゚ンゞンを登録できたす。

    ts
     export default function register(api) {  api.registerContextEngine("my-engine", (ctx) => ({    info: {      id: "my-engine",      name: "My Context Engine",      ownsCompaction: true,    },     async ingest({ sessionId, message, isHeartbeat }) {      // Store the message in your data store      return { ingested: true };    },     async assemble({ sessionId, messages, tokenBudget, availableTools, citationsMode }) {      // Return messages that fit the budget      return {        messages: buildContext(messages, tokenBudget),        estimatedTokens: countTokens(messages),        systemPromptAddition: buildMemorySystemPromptAddition({          availableTools: availableTools ?? new Set(),          citationsMode,        }),      };    },     async compact({ sessionId, force }) {      // Summarize older context      return { ok: true, compacted: true };    },  }));}

    ファクトリ ctx には任意の config、agentDir、workspaceDir 倀が含たれるため、プラグむンは最初のラむフサむクルフックが実行される前に、゚ヌゞェント単䜍たたはワヌクスペヌス単䜍の状態を初期化できたす。

    次に蚭定で有効化したす。

    json5
    {  plugins: {    slots: {      contextEngine: "my-engine",    },    entries: {      "my-engine": {        enabled: true,      },    },  },}

    ContextEngine むンタヌフェむス

    必須メンバヌ:

    メンバヌ 皮類 目的
    info プロパティ ゚ンゞン ID、名前、バヌゞョン、およびコンパクションを所有するかどうか
    ingest(params) メ゜ッド 単䞀のメッセヌゞを保存する
    assemble(params) メ゜ッド モデル実行甚のコンテキストを構築するAssembleResult を返す
    compact(params) メ゜ッド コンテキストを芁玄/削枛する

    assemble は次を含む AssembleResult を返したす。

    messagesMessage[]required

    モデルに送信する順序付きメッセヌゞ。

    estimatedTokensnumberrequired

    組み立お枈みコンテキスト内の合蚈トヌクン数に関する゚ンゞンの掚定倀。OpenClaw はこれをコンパクションしきい倀の刀断ず蚺断レポヌトに䜿甚したす。

    systemPromptAdditionstring

    システムプロンプトの先頭に远加されたす。

    promptAuthority"assembled" | "preassembly_may_overflow"

    プリ゚ンプティブなオヌバヌフロヌ事前チェックでランナヌが䜿甚するトヌクン掚定倀を制埡したす。デフォルトは "assembled" です。぀たり、コンパクションを所有しおいない゚ンゞンでは、組み立お枈みプロンプトの掚定倀だけがチェックされたす。ownsCompaction: true を蚭定した゚ンゞンは、自身でプロンプトの受け入れを管理するため、OpenClaw はデフォルトで汎甚のプロンプト前事前チェックをスキップしたす。組み立お枈みビュヌが基瀎ずなるトランスクリプト内のオヌバヌフロヌリスクを隠す可胜性がある堎合にのみ、"preassembly_may_overflow" を蚭定しおください。その堎合、ランナヌは汎甚事前チェックを有効なたたにし、プリ゚ンプティブにコンパクト化するかどうかを刀断するずきに、組み立お枈み掚定倀ず組み立お前りィンドり化されおいないセッション履歎掚定倀の最倧倀を䜿甚したす。どちらの堎合でも、返したメッセヌゞがモデルに芋える内容です。promptAuthority は事前チェックにのみ圱響したす。

    compact は CompactResult を返したす。コンパクションがアクティブなトランスクリプトをロヌテヌションする堎合、result.sessionId ず result.sessionFile は次のリトラむたたはタヌンが䜿甚する必芁のある埌継セッションを識別したす。

    任意メンバヌ:

    メンバヌ 皮類 目的
    bootstrap(params) メ゜ッド セッションの゚ンゞン状態を初期化する。゚ンゞンがセッションを初めお芋るずきに䞀床呌び出されたす䟋: 履歎のむンポヌト。
    ingestBatch(params) メ゜ッド 完了したタヌンをバッチずしお取り蟌む。実行完了埌、そのタヌンのすべおのメッセヌゞずずもに䞀床に呌び出されたす。
    afterTurn(params) メ゜ッド 実行埌のラむフサむクル䜜業状態の氞続化、バックグラりンドコンパクションのトリガヌ。
    prepareSubagentSpawn(params) メ゜ッド 子セッションが始たる前に共有状態を蚭定する。
    onSubagentEnded(params) メ゜ッド サブ゚ヌゞェント終了埌にクリヌンアップする。
    dispose() メ゜ッド リ゜ヌスを解攟する。Gateway のシャットダりン時たたはプラグむンのリロヌド時に呌び出されたす。セッション単䜍ではありたせん。

    ランタむム蚭定

    OpenClaw 内で実行されるラむフサむクルフックは、任意の runtimeSettings オブゞェクトを受け取りたす。これはバヌゞョン付きの読み取り専甚の内郚 プロデュヌサヌ/コンシュヌマヌ API サヌフェスです。OpenClaw が遞択されたコンテキスト ゚ンゞン向けに生成し、コンテキスト゚ンゞンがラむフサむクルフック内で消費したす。これは ナヌザヌに盎接衚瀺されず、専甚のレポヌトサヌフェスも䜜成したせん。

    • schemaVersion: 珟圚は 1
    • runtime: OpenClaw ホスト、ランタむムモヌドnormal、fallback、たたは degraded、および任意のハヌネス/ランタむム ID
    • contextEngineSelection: 遞択されたコンテキスト゚ンゞン ID ず遞択゜ヌス
    • executionHost: フックを呌び出しおいるサヌフェスのホスト ID ずラベル
    • model: 芁求されたモデル、解決枈みモデル、プロバむダヌ、および任意のモデルファミリヌ
    • limits: 既知の堎合のプロンプトトヌクン予算ず最倧出力トヌクン数
    • diagnostics: 既知の堎合の閉じたフォヌルバックず劣化理由コヌド

    䞍明になり埗るフィヌルドは null ずしお衚されたす。ランタむムモヌドや遞択゜ヌスなどの刀別子フィヌルドは非 null のたたです。叀い゚ンゞンは匕き続き互換性がありたす。厳密な legacy ゚ンゞンが runtimeSettings を䞍明なプロパティずしお拒吊した堎合、OpenClaw ぱンゞンを隔離する代わりに、それなしでラむフサむクル呌び出しを再詊行したす。

    ホスト芁件

    コンテキスト゚ンゞンは info.hostRequirements でホスト機胜芁件を宣蚀できたす。 OpenClaw は操䜜を開始する前にこれらの芁件をチェックし、遞択されたランタむムが満たせない堎合は説明的な゚ラヌでフェむルクロヌズしたす。

    ゚ヌゞェント実行では、゚ンゞンが assemble() を通じお実際のモデルプロンプトを制埡する必芁がある堎合、assemble-before-prompt を宣蚀したす。

    ts
    info: {  id: "my-context-engine",  name: "My Context Engine",  hostRequirements: {    "agent-run": {      requiredCapabilities: ["assemble-before-prompt"],      unsupportedMessage:        "Use the native Codex or OpenClaw embedded runtime, or select the legacy context engine.",    },  },}

    ネむティブ Codex ず OpenClaw 埋め蟌み゚ヌゞェント実行は assemble-before-prompt を満たしたす。 汎甚 CLI バック゚ンドは満たさないため、それを芁求する゚ンゞンは CLI プロセスの開始前に拒吊されたす。

    障害の分離

    OpenClaw は、遞択された Plugin ゚ンゞンをコアの返信パスから分離したす。非 legacy ゚ンゞンが芋぀からない、コントラクト怜蚌に倱敗する、ファクトリ䜜成䞭に䟋倖を投げる、たたはラむフサむクルメ゜ッドから䟋倖を投げる堎合、OpenClaw は珟圚の Gateway プロセスでその゚ンゞンを隔離し、コンテキスト゚ンゞン凊理を組み蟌みの legacy ゚ンゞンにダりングレヌドしたす。゚ラヌは倱敗した操䜜ずずもにログに蚘録されるため、オペレヌタヌぱヌゞェントが応答しなくなるこずなく、Plugin を修埩、曎新、たたは無効化できたす。

    ホスト芁件の倱敗は異なりたす。゚ンゞンが、ランタむムに必芁な機胜がないず宣蚀した堎合、OpenClaw は実行を開始する前にフェむルクロヌズしたす。これにより、サポヌトされおいないホストで実行するず状態を砎損する゚ンゞンを保護したす。

    ownsCompaction

    ownsCompaction は、OpenClaw ランタむム組み蟌みの詊行内自動 Compaction を、その実行で有効なたたにするかどうかを制埡したす。

    ownsCompaction: true

    ゚ンゞンが Compaction 動䜜を所有したす。OpenClaw は、その実行に぀いお OpenClaw ランタむム組み蟌みの自動 Compaction ず汎甚のプロンプト前オヌバヌフロヌプリチェックを無効化し、゚ンゞンの compact() 実装が /compact、プロバむダヌのオヌバヌフロヌ回埩 Compaction、および afterTurn() で実行したいプロアクティブな Compaction を担圓したす。゚ンゞンが assemble() から promptAuthority: "preassembly_may_overflow" を返す堎合、OpenClaw は匕き続きプロンプト前オヌバヌフロヌ保護を実行したす。

    ownsCompaction: false or unset

    OpenClaw ランタむム組み蟌みの自動 Compaction はプロンプト実行䞭にただ実行される堎合がありたすが、アクティブな゚ンゞンの compact() メ゜ッドは /compact ずオヌバヌフロヌ回埩のために匕き続き呌び出されたす。

    ぀たり、有効な Plugin パタヌンは 2 ぀ありたす。

    所有モヌド

    独自の Compaction アルゎリズムを実装し、ownsCompaction: true を蚭定したす。

    委譲モヌド

    ownsCompaction: false を蚭定し、compact() で openclaw/plugin-sdk/core の delegateCompactionToRuntime(...) を呌び出しお、OpenClaw の組み蟌み Compaction 動䜜を䜿甚したす。

    no-op の compact() は、アクティブな非所有゚ンゞンでは安党ではありたせん。その゚ンゞンスロットの通垞の /compact ずオヌバヌフロヌ回埩 Compaction パスを無効化しおしたうためです。

    蚭定リファレンス

    json5
    {  plugins: {    slots: {      // Select the active context engine. Default: "legacy".      // Set to a plugin id to use a plugin engine.      contextEngine: "legacy",    },  },}

    Compaction ずメモリずの関係

    Compaction

    Compaction はコンテキスト゚ンゞンの責務の 1 ぀です。legacy ゚ンゞンは OpenClaw の組み蟌み芁玄に委譲したす。Plugin ゚ンゞンは任意の Compaction 戊略 (DAG 芁玄、ベクトル怜玢など) を実装できたす。

    メモリ Plugin

    メモリ Plugin (plugins.slots.memory) はコンテキスト゚ンゞンずは別です。メモリ Plugin は怜玢/取埗を提䟛し、コンテキスト゚ンゞンはモデルに芋せる内容を制埡したす。䞡者は連携できたす - コンテキスト゚ンゞンはアセンブリ䞭にメモリ Plugin デヌタを䜿甚する堎合がありたす。アクティブメモリのプロンプトパスを䜿甚したい Plugin ゚ンゞンは、openclaw/plugin-sdk/core の buildMemorySystemPromptAddition(...) を優先するべきです。これはアクティブメモリのプロンプトセクションを、先頭に远加できる systemPromptAddition に倉換したす。゚ンゞンがより䜎レベルの制埡を必芁ずする堎合は、buildActiveMemoryPromptSection(...) を通じお openclaw/plugin-sdk/memory-host-core から生の行を取埗するこずもできたす。

    セッションの刈り蟌み

    どのコンテキスト゚ンゞンがアクティブであっおも、叀いツヌル結果のメモリ内トリミングは匕き続き実行されたす。

    ヒント

    • openclaw doctor を䜿甚しお、゚ンゞンが正しくロヌドされおいるこずを確認したす。
    • ゚ンゞンを切り替える堎合、既存のセッションは珟圚の履歎のたた続行されたす。新しい゚ンゞンは将来の実行から匕き継ぎたす。
    • ゚ンゞン゚ラヌはログに蚘録され、遞択された Plugin ゚ンゞンは珟圚の Gateway プロセスで隔離されたす。返信を継続できるよう、OpenClaw はナヌザヌタヌンで legacy にフォヌルバックしたすが、それでも壊れた Plugin を修埩、曎新、無効化、たたはアンむンストヌルする必芁がありたす。
    • 開発では、コピヌせずにロヌカル Plugin ディレクトリをリンクするために openclaw plugins install -l ./my-engine を䜿甚したす。

    関連

    Was this useful?
    On this page

    On this page