Skip to main content
Active Memory は、対象となる会話セッションでメインの返信前にブロッキング方式のメモリ 検索サブエージェントを実行する、任意の同梱 Plugin です。 これは、ほとんどのメモリシステムが受動的であるために存在します。つまり、メインエージェントが メモリを検索すると判断するか、ユーザーが「これを覚えて」と言う必要があります。その時点では、 呼び出された情報を自然に感じさせるタイミングはすでに過ぎています。Active Memory は、 メインの返信が生成される前に、関連するメモリを提示する機会をシステムに制限付きで 1 回与えます。

会話をまたいで記憶する

個人用または完全に信頼されたエージェントでは、エージェントごとの設定 1 つで、他の 非公開会話をまたぐ制限付き検索を有効にします。
この設定は個人用インストールではデフォルトで有効です。グローバルな session.dmScope が 未設定または "main" であり、どのバインディングも session.dmScope を上書きしては なりません。DM 分離が設定されている場合、デフォルトでは無効になります。明示的な true または false が常に優先されます。有効にすると、 OpenClaw はそのエージェントのセッショントランスクリプトをインデックス化し、対象となる非公開返信の前に Active Memory 検索パスを実行します。このパスは、同じエージェントの他の非公開会話から 関連するトランスクリプトの抜粋を読み取れます。現在回答中の会話は除外されます。 プライバシー境界は固定されています。
  • 非公開のダイレクト会話と明示的な永続 UI 会話は、互いを検索できます
  • グループとチャンネルは、検索元にも検索先にもなりません
  • 別のエージェントのトランスクリプトは決して対象になりません
  • 十分な会話メタデータがない不明またはアーカイブ済みのトランスクリプトは拒否されます
これによりトランスクリプトが統合されたり、セッションキーや配信ルートが変更されたり、 tools.sessions.visibility が拡張されたり、より広範な sessions_* ツールアクセスが付与されたりすることはありません。共有 ワークスペースメモリ(MEMORY.mdmemory/*.md)は既存の動作を維持します。 Active Memory は有効なままにする必要があります。検索により、対象となる返信へ制限付きのブロッキング処理が 追加されます。タイムアウト、検索不能、結果なしのいずれの場合も、呼び出されたトランスクリプトコンテキストを使わずに 返信が続行されます。OpenClaw の組み込みメモリ プロバイダーは、builtin と QMD の両方のバックエンドで、この保護されたトランスクリプト検索パスを サポートします。他のメモリプロバイダーは独自の検索動作を維持しますが、 非公開トランスクリプトへの認可を自動的には受け取りません。openclaw doctor は、 未対応のプロバイダーまたは不足している memory_search ツールを報告します。

高度な Active Memory のクイックスタート

高度で安全なデフォルトとして openclaw.json に貼り付けます。Plugin を有効にし、 main のみに限定し、ダイレクトメッセージセッションだけを対象にし、モデルはセッションから継承します。
plugins.entries.*active-memory.config を含む)は、再起動不要の 設定カテゴリに含まれます。 Gateway は Plugin ランタイムを自動的に再読み込みするため、手動で再起動する 必要はありません。それでも完全な再起動を強制する場合は、次を実行します。
会話内でリアルタイムに確認するには、次を実行します。
主要なフィールドの役割は次のとおりです。
  • plugins.entries.active-memory.enabled: true は Plugin を有効にします
  • config.agents: ["main"]main エージェントのみを対象にします
  • config.allowedChatTypes: ["direct"] はダイレクトメッセージセッションに限定します(グループやチャンネルは明示的にオプトインします)
  • config.model(任意)は専用の検索モデルを固定します。未設定の場合は現在のセッションモデルを継承します
  • config.modelFallback は、明示的なモデルも継承モデルも解決されない場合にのみ使用されます
  • config.fastMode は、メインエージェントを変更せずに検索用の高速モードを任意で上書きします
  • config.promptStyle: "balanced"recent モードのデフォルトです
  • Active Memory は、対象となる対話型の永続チャットセッションでのみ実行されます(実行条件を参照)

仕組み

ブロッキング方式のサブエージェントは、設定されたメモリ検索ツールのみを呼び出せます( メモリツールを参照)。クエリと 利用可能なメモリの関連性が弱い場合、NONE を返し、メインの返信は 追加コンテキストなしで続行されます。 Active Memory は会話を強化する機能であり、プラットフォーム全体の 推論機能ではありません。 セッションが永続的でユーザー向けであり、エージェントに検索対象となる 有意義な長期メモリがあり、生のプロンプト決定性よりも継続性やパーソナライズが 重要な場合に使用します。たとえば、安定した好み、繰り返される習慣、 自然に提示すべき長期的なコンテキストです。自動化、内部ワーカー、 ワンショット API タスク、または非表示のパーソナライズが意外に感じられる場所には 適していません。

実行条件

Active Memory には 2 つの有効化パスがあります。
  1. 会話をまたいで記憶するは、有効な memory.search.rememberAcrossConversations 設定を持つエージェントを自動的に対象にしますが、 非公開のダイレクト会話または明示的な永続 UI 会話に限られます。
  2. 高度な Active Memoryは、 plugins.entries.active-memory.config.agents に列挙されたエージェント ID を対象にし、Plugin のチャット タイプとチャット ID の制御を適用します。
どちらのパスでも、Plugin が有効であり、対象となる対話型の 永続会話である必要があります。セッションスコープの /active-memory off は、その会話で両方の パスを一時停止します。いずれかの条件が満たされない場合、そのターンでは Active Memory は実行されず、 メインの返信には影響しません。

セッションタイプ

config.allowedChatTypes は、高度な Active Memory パスを実行できる 会話の種類を制御します。「会話をまたいで記憶する」の範囲を拡張することはできません。 高度な Active Memory がグループやチャンネルで許可されていても、 その製品設定は非公開会話のみに限定されたままです。デフォルトは次のとおりです。
有効な値: directgroupchannelexplicit(不透明なセッション ID を持つポータル形式のセッション。 たとえば agent:main:explicit:portal-123)。 ダイレクトメッセージセッションはデフォルトで実行されます。グループ、チャンネル、明示的セッションは オプトインする必要があります。
許可されたチャットタイプ内でさらに限定して展開するには、 config.allowedChatIdsconfig.deniedChatIds を追加します。
  • allowedChatIds は、解決済み会話 ID の許可リストです。 空でない場合、Active Memory は会話 ID がリストに含まれるセッションでのみ 実行されます。これにより、ダイレクトメッセージを含む、許可されたすべてのチャットタイプが 一度に絞り込まれます。グループだけを絞り込みつつ、すべてのダイレクトメッセージを維持するには、 ダイレクトの相手 ID も allowedChatIds に追加するか、allowedChatTypes を テスト中のグループ/チャンネル展開に限定してください。
  • deniedChatIds は拒否リストであり、常に allowedChatTypesallowedChatIds より優先されます。
ID は永続チャンネルセッションキーから取得されます(たとえば Feishu の chat_id/open_id、Telegram のチャット ID、Slack のチャンネル ID)。照合では 大文字と小文字が区別されません。allowedChatIds が空でなく、OpenClaw が セッションの会話 ID を解決できない場合、Active Memory は推測せずにそのターンを スキップします。

セッション切り替え

設定を編集せずに、現在のチャットセッションで Active Memory を一時停止または 再開します。
これは現在のセッションにのみ影響します。plugins.entries.active-memory.config.enabled、エージェントの memory.search.rememberAcrossConversations 設定、その他のグローバル 設定は変更しません。 代わりにすべてのセッションで一時停止/再開するには、グローバル形式を使用します( 所有者または operator.admin が必要です)。
グローバル形式は plugins.entries.active-memory.config.enabled に書き込みますが、 plugins.entries.active-memory.enabled は有効なままにするため、後で Active Memory を 再度有効にするコマンドを引き続き利用できます。

確認方法

デフォルトでは、Active Memory は通常の返信には表示されない、非表示の信頼されていない プロンプト接頭辞を挿入します。必要な出力に対応するセッション切り替えを 有効にします。
これらを有効にすると、OpenClaw は通常の返信後に診断行を追加します( フォローアップとして追加するため、チャンネルクライアントで返信前の別バブルが一瞬表示されることはありません)。
  • /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 は、ブロッキング方式のサブエージェントに表示される会話の量を 制御します。フォローアップへ適切に回答できる最小のモードを選択してください。コンテキストサイズの増加に合わせて、 timeoutMsmessage から recentfull へと増やします。
最新のユーザーメッセージのみが送信されます。
最速の動作、安定した好みの検索への最も強い偏りが必要で、 フォローアップターンに会話コンテキストが不要な場合に使用します。 config.timeoutMs では 30005000 ms 前後から始めます。

プロンプトスタイル

config.promptStyle は、サブエージェントがメモリを返す際の積極性や厳格さを制御します。 config.promptStyle が未設定の場合のデフォルトマッピング:
明示的な config.promptStyle は常にこのマッピングを上書きします。

モデルのフォールバックポリシー

config.model が未設定の場合、Active Memory は次の順序でモデルを解決します。
このチェーン内で何も解決されない場合、Active Memory はそのターンの想起をスキップします。 config.modelFallbackPolicy は古い設定のために保持されている非推奨の互換性フィールドです。ランタイムの動作には影響しなくなりました。modelFallback は厳密に上記チェーンの最後の手段であり、解決済みモデルでエラーが発生した際に別のモデルへ切り替えるランタイムフェイルオーバーではありません。

速度に関する推奨事項

config.model を未設定のままにしてセッションモデルを継承するのが最も安全なデフォルトです。既存のプロバイダー、認証、モデルの設定に従います。レイテンシを下げるには、代わりに専用の高速モデルを使用してください。想起品質は重要ですが、ここではメインの回答パスよりレイテンシの方が重要であり、ツールサーフェスも限定的です(メモリ想起ツールのみ)。 高速モデルとして適した選択肢:
  • cerebras/gpt-oss-120b、専用の低レイテンシ想起モデル
  • google/gemini-3-flash、プライマリチャットモデルを変更しない低レイテンシのフォールバック
  • config.model を未設定にして、通常のセッションモデルを使用

Cerebras の設定

選択したモデルについて、Cerebras API キーに chat/completions アクセス権があることを確認してください。/v1/models に表示されているだけでは保証されません。

メモリツール

config.toolsAllow は、高度な Active Memory のためにブロッキングサブエージェントが呼び出せる具体的なツール名を設定します。デフォルトは現在のメモリプロバイダーによって異なります。 設定されたツールがどれも利用できない場合、またはサブエージェントの実行が失敗した場合、Active Memory はそのターンの想起をスキップし、メインの応答はメモリコンテキストなしで続行されます。カスタム想起ツールでは、構造化された結果フィールドが空の結果または失敗を明示的に報告しない限り、空でないモデル可視のツール出力が想起の根拠として扱われます。 toolsAllow は具体的なメモリツール名のみを受け付けます。ワイルドカード、group:* エントリ、およびコアエージェントツール(readexecmessageweb_search など)は、非表示のサブエージェントが起動する前に暗黙的に除外されます。

組み込みメモリ

明示的な toolsAllow は不要です。

LanceDB メモリ

LanceDB をインストールして設定すると、Active Memory は自動的に memory_recall を使用します。明示的な toolsAllow は不要です。
これは、LanceDB 自体に保存されたメモリを対象とする高度な Active Memory パスです。 memory.search.rememberAcrossConversations は、memory_recall を通じて非公開のセッショントランスクリプトを公開しません。LanceDB がアクティブなメモリプロバイダーの場合は、LanceDB の自動想起または上記の高度な設定を使用してください。

Lossless Claw

Lossless Claw は、独自の想起ツールを備えた外部コンテキストエンジン Plugin(openclaw plugins install @martian-engineering/lossless-claw)です。まずコンテキストエンジンとして設定してください。コンテキストエンジンを参照してください。その後、Active Memory にそのツールを指定します。
ここでは lcm_expandtoolsAllow に追加しないでください。Lossless Claw はこれを委任された展開のための低レベルツールとして使用しており、トップレベルの Active Memory サブエージェント向けではありません。Lossless Claw は現在のメモリプロバイダーを置き換えずに、コンテキストの組み立て方を変更します。rememberAcrossConversations も使用する場合は、memory_searchtoolsAllow に残してください。LCM 専用のツールリストも高度な Active Memory では有効ですが、製品のトランスクリプト想起パスは無効になります。

高度なエスケープハッチ

推奨設定には含まれません。 config.thinking はサブエージェントの思考レベルを上書きします(デフォルトは "off")。Active Memory は応答パス内で実行されるため、思考時間を増やすとユーザーに見えるレイテンシが直接増加します。
config.fastMode は、ブロッキングメモリサブエージェントについてのみ高速モードを上書きします。truefalse、または "auto" を使用してください。未設定のままにすると、通常のエージェント、セッション、モデルのデフォルトを継承します。"auto" は想起モデルに設定された fastAutoOnSeconds のカットオフを使用します。
config.promptAppend は、デフォルトプロンプトの後、会話コンテキストの前にオペレーター指示を追加します。コア以外のメモリ Plugin で特定のツール順序やクエリ形成が必要な場合は、カスタムの toolsAllow と組み合わせてください。
config.promptOverride はデフォルトプロンプトを完全に置き換えます(会話コンテキストはその後も追加されます)。別の想起コントラクトを意図的にテストする場合を除き、推奨されません。デフォルトプロンプトは、メインモデル向けに NONE または簡潔なユーザー事実コンテキストのいずれかを返すよう調整されています。

トランスクリプトの永続化

ブロッキングサブエージェントの実行では、呼び出し中に実際の session.jsonl トランスクリプトが作成されます。デフォルトでは一時ディレクトリに書き込まれ、実行完了直後に削除されます。 デバッグのためにこれらのトランスクリプトをディスク上に保持するには、次のように設定します。
永続化されたトランスクリプトは、対象エージェントのセッションフォルダー配下に、メインのユーザー会話トランスクリプトとは別のディレクトリとして保存されます。
相対サブディレクトリは config.transcriptDir で変更できます。使用には注意してください。ビジーなセッションではトランスクリプトが急速に蓄積する可能性があり、full クエリモードでは大量の会話コンテキストが重複します。また、これらのトランスクリプトには非表示のプロンプトコンテキストと想起されたメモリが含まれます。

設定

Active Memory のすべての設定は plugins.entries.active-memory 配下に置かれます。 調整に役立つフィールド:

推奨セットアップ

まず recent から始めます:
調整中は、ステータス行に /verbose on、デバッグ要約に /trace on を 使用します。どちらもメインの応答より前ではなく、その後のフォローアップとして送信されます。 その後、レイテンシーを下げるには message に移行し、サブエージェントの実行が遅くなっても 追加コンテキストに価値がある場合は full に移行します。

コールドスタート猶予

v2026.5.2 より前では、Plugin はコールドスタート時に timeoutMs を暗黙的にさらに 30000 ms 延長していたため、モデルのウォームアップ、埋め込みインデックスの読み込み、最初の リコールで 1 つの大きな予算を共有できました。v2026.5.2 では、この猶予が明示的な setupGraceTimeoutMs 設定の背後に移されました。オプトインしない限り、デフォルトでは timeoutMs がリコール処理の予算になります。ブロッキングフックはその予算を 2 つの固定フェーズで囲みます。リコール開始前のセッション/設定の事前確認に最大 1500 ms、 リコール処理停止後の中止処理の確定とトランスクリプト復旧に別途固定 1500 ms が割り当てられます。 どちらの割り当てもモデルまたはツールの実行時間を延長しません。 v2026.4.x からアップグレードし、従来の暗黙的な猶予がある環境向けに timeoutMs を調整していた場合(推奨されていた初期値 timeoutMs: 15000 がその一例です)、v5.2 より前の実効予算を復元するには setupGraceTimeoutMs: 30000 を設定します。
最悪の場合のブロッキング時間は timeoutMs + setupGraceTimeoutMs + 3000 ms です(設定されたリコール処理予算に、最大 1500 ms のプリフライトと、固定の 1500 ms のリコール後完了猶予を加えた時間)。組み込みのリコールランナーは同じ実効タイムアウト予算を使用するため、setupGraceTimeoutMs は外側のプロンプト構築ウォッチドッグと内側のブロッキングリコール実行の両方に適用されます。 コールドスタートのレイテンシーを許容可能なトレードオフとするリソースの限られた Gateway では、より低い値(5000-15000 ms)も使用できます。ただし、ウォームアップの完了中に Gateway の再起動後の最初のリコールが空の結果を返す可能性が高くなります。

デバッグ

Active Memory が想定した場所に表示されない場合:
  1. Plugin が plugins.entries.active-memory.enabled で有効になっていることを確認します。
  2. 会話をまたぐ Remember では、エージェントの実効 memory.search.rememberAcrossConversations 設定が有効であることを確認し、 openclaw doctor を実行して、現在のメモリプロバイダーが保護された トランスクリプトのリコールをサポートしていることを検証します。また、明示的に設定している場合は、 config.toolsAllowmemory_search が含まれていることを確認します。高度な Active Memory では、エージェント ID が config.agents に記載されていることを確認します。
  3. 対象となる対話型の永続的な会話でテストしていることを確認します。
  4. グループとチャンネルでは、会話をまたぐトランスクリプトのリコールが使用されないことに注意してください。
  5. config.logging: true をオンにして、Gateway のログを監視します。
  6. openclaw status --deep を使用して、メモリ検索自体が機能することを確認します。
メモリヒットにノイズが多い場合は、maxSummaryChars を厳しくします。Active Memory が遅すぎる場合は、queryMode または timeoutMs を下げるか、直近のターン数とターンごとの文字数上限を減らします。

よくある問題

高度な Active Memory は設定済みメモリ Plugin のリコールパイプライン上で動作するため、リコールに関する予想外の動作の多くは Active Memory のバグではなく、埋め込みプロバイダーの問題です。デフォルトの memory-core パスでは memory_searchmemory_get を使用し、memory-lancedb スロットでは memory_recall を使用します。別のメモリ Plugin を使用する場合は、config.toolsAllow に、その Plugin が実際に登録するツールが指定されていることを確認します。会話をまたぐ Remember の適用範囲はより限定的です。現在のメモリプロバイダーが、OpenClaw の保護された同一エージェント/プライベートセッション向けリコールパスをサポートしている必要があります。
memory.search.provider が未設定の場合、OpenClaw は OpenAI の埋め込みを使用します。Bedrock、DeepInfra、Gemini、GitHub Copilot、LM Studio、local、Mistral、Ollama、Voyage、または OpenAI 互換の 埋め込みを使用する場合は、memory.search.provider を明示的に設定します。設定されたプロバイダーを実行できない場合、memory_search は 字句検索のみへ機能低下することがあります。プロバイダーがすでに選択された後に発生したランタイム障害では、 自動的なフォールバックは行われません。意図的に単一のフォールバックを使用する場合にのみ、オプションの memory.search.fallback を設定します。プロバイダーと例の完全な 一覧については、メモリ検索を参照してください。
  • /trace on をオンにして、Plugin が管理する Active Memory のデバッグ サマリーをセッション内に表示します。
  • /verbose on もオンにすると、各応答後に 🧩 Active Memory: ... ステータス行も表示されます。
  • Gateway のログで active-memory: ... start|donememory sync failed (search-bootstrap)、またはプロバイダーの埋め込みエラーを監視します。
  • openclaw status --deep を実行して、メモリ検索バックエンドと インデックスの正常性を確認します。
  • ollama を使用する場合は、埋め込みモデルがインストールされていることを確認します (ollama list)。
v2026.5.2 以降では、最初のリコールが実行される時点までにコールドスタートのセットアップ(モデルのウォームアップ + 埋め込み インデックスの読み込み)が完了していない場合、実行が設定済みの timeoutMs 予算に達し、空の出力とともに status=timeout を返すことがあります。Gateway のログでは、再起動後の最初の対象応答付近に active-memory timeout after Nms が表示されます。推奨される setupGraceTimeoutMs の値については、推奨セットアップのコールドスタートの猶予を参照してください。

関連ページ