Sessions and memory
メモリ検索
memory_search は、表現が元のテキストと異なる場合でも、メモリファイルから関連するノートを検索します。メモリを小さな断片に分割し、埋め込み、キーワード、またはその両方を使用して検索します。
クイックスタート
OpenClaw はデフォルトで OpenAI の埋め込みを使用します。別のプロバイダーを使用するには、明示的に設定します。
{ memory: { search: { provider: "openai", // または "gemini", "voyage", "mistral", "bedrock", "local", "ollama", "lmstudio", "github-copilot", "openai-compatible" }, },}provider は、カスタムの models.providers.<id> エントリ(例: ollama-5080)を参照することもできます。ただし、そのエントリで api が "ollama"、またはメモリ埋め込みアダプターを持つ別のプロバイダー ID に設定されている必要があります。
API キーなしでローカル埋め込みを使用するには、公式の llama.cpp プロバイダー Plugin をインストールし、provider: "local" を設定します。
openclaw plugins install @openclaw/llama-cpp-providerソースチェックアウトでは、引き続きネイティブビルドの承認が必要です。pnpm approve-builds を実行してから、pnpm rebuild node-llama-cpp を実行します。
一部の OpenAI 互換埋め込みエンドポイントでは、検索用の "query" や、インデックス化されたチャンク用の "document"/"passage" など、非対称な input_type ラベルが必要です。これらは queryInputType と documentInputType で設定します。詳細はメモリ設定リファレンスを参照してください。
対応プロバイダー
| プロバイダー | ID | API キーが必要 | 備考 |
|---|---|---|---|
| Bedrock | bedrock |
いいえ | AWS 認証情報チェーンを使用 |
| DeepInfra | deepinfra |
はい | デフォルトモデルは BAAI/bge-m3 |
| Gemini | gemini |
はい | 画像および音声のインデックス化に対応 |
| GitHub Copilot | github-copilot |
いいえ | Copilot サブスクリプションを使用 |
| Local | local |
いいえ | GGUF モデル、約 0.6 GB を自動ダウンロード |
| LM Studio | lmstudio |
いいえ | ローカル/セルフホスト型サーバー |
| Mistral | mistral |
はい | |
| Ollama | ollama |
いいえ | ローカル/セルフホスト型サーバー |
| OpenAI | openai |
はい | デフォルト |
| OpenAI 互換 | openai-compatible |
通常は必要 | 汎用 /v1/embeddings エンドポイント |
| Voyage | voyage |
はい |
検索の仕組み
OpenClaw は 2 つの検索経路を並列で実行し、その結果を統合します。
flowchart LR
Q["クエリ"] --> E["埋め込み"]
Q --> T["トークン化"]
E --> VS["ベクトル検索"]
T --> BM["BM25 検索"]
VS --> M["重み付き統合"]
BM --> M
M --> R["上位の結果"]- ベクトル検索は、意味が類似する内容を照合します(「gateway host」は「OpenClaw を実行しているマシン」と一致します)。
- BM25 キーワード検索は、完全に一致する用語(ID、エラー文字列、設定キー)を照合します。
- ファイル名検索は、ノート本文とは別にパスをインデックス化します。完全なフルパス、ベース名、ファイル名の語幹は、部分的なパス一致より上位にランクされますが、スニペットと本文のキーワードスコアは引き続きノートの内容から取得されます。
一方の経路しか利用できない場合は、その経路のみが実行されます。
FTS 専用モード。 埋め込みを意図的に無効化し、キーワードのみで検索するには、provider: "none" を設定します。provider を未設定のままにするか "auto" に設定した場合も、埋め込み認証が構成されていなければ、エラーを発生させずにキーワードのみのランキングへフォールバックします。provider: "local"(GGUF/llama.cpp プロバイダー)が失敗した場合も同様です。
明示的に指定したプロバイダーが利用できない場合。 その他のプロバイダー(例: openai、ollama、gemini)を明示的に指定し、リクエスト時に利用できなくなった場合(認証エラー、ネットワーク障害)、memory_search は暗黙的に FTS 専用の結果へ機能低下させるのではなく、メモリが利用できないことを報告します。これにより、設定済みプロバイダーの障害が明確になります。意図的に FTS 専用の検索を行うには provider: "none" を設定します。セマンティックランキングを復元するには、プロバイダーまたは認証の設定を修正します。
検索品質の向上
大規模なノート履歴では、2 つのオプション機能が役立ちます。
時間的減衰
古いノートのランキング重みは徐々に低下し、最近の情報が先に表示されるようになります。デフォルトの半減期は 30 日で、先月のノートのスコアは元の重みの 50% になります。MEMORY.md と、memory/ 配下にある日付なしのその他のファイルは恒久的に扱われ、減衰しません。減衰するのは、日付付きの memory/YYYY-MM-DD.md ファイルのみです。
MMR(多様性)
重複する結果を減らします。5 件のノートがすべて同じルーター設定に言及している場合、MMR によって、同じ内容を繰り返すのではなく、上位の結果が異なるトピックを網羅するようになります。
両方を有効化
{ memory: { search: { query: { hybrid: { mmr: { enabled: true }, temporalDecay: { enabled: true }, }, }, }, },}マルチモーダルメモリ
gemini-embedding-2-preview を使用すると、Markdown とともに画像や音声をインデックス化できます。これは memory.search.extraPaths 配下のファイルにのみ適用され、デフォルトのメモリルート(MEMORY.md、memory/*.md)は引き続き Markdown のみを扱います。検索クエリはテキストのままですが、視覚および音声コンテンツと照合されます。設定については、メモリ設定リファレンスを参照してください。
セッションメモリ検索
セッショントランスクリプトから完全一致の全文検索を行うには、sessions_searchを使用し、sessions_history で結果を開きます。セッションメモリ検索は、セマンティック検索を補完する実験的機能です。
必要に応じてセッショントランスクリプトをインデックス化し、memory_search から以前の会話を呼び出せるようにできます。この機能はオプトインです。experimental.sessionMemory: true を設定し、sources に "sessions" を追加します(デフォルトの sources は ["memory"] です)。
セッションの検索結果は tools.sessions.visibility に従います。デフォルトの "tree" では、現在のセッション、そのセッションが生成したセッション、および周辺グループ認識を通じて監視されている同一エージェントのグループセッションが公開されます。session.dmScope: "main" では、複数ユーザーの DM 設定がそのメインセッションを共有するため、そこにルーティングされたユーザーは、監視対象グループのコンテンツを呼び出せます。DM を分離するにはピアごとの dmScope を使用するか、可視性を "self" に設定して、周辺で監視されているセッションの読み取りを無効にします。それ以外の無関係な同一エージェントのセッションには、引き続き "agent" の可視性が必要です。
QMD バックエンドを使用する場合は、トランスクリプトが QMD コレクションへエクスポートされるように、memory.qmd.sessions.enabled: true も設定します。experimental.sessionMemory と sources だけでは、トランスクリプトは QMD にエクスポートされません。詳細は設定リファレンスを参照してください。
トラブルシューティング
結果がありませんか? openclaw memory status を実行してインデックスを確認します。空の場合は、openclaw memory index --force を実行します。
キーワード一致しかありませんか? 埋め込みプロバイダーが設定されていない可能性があります。openclaw memory status --deep を確認してください。
ローカル埋め込みがタイムアウトしますか? ollama、lmstudio、local は、プロバイダーが管理するより長いバッチ期限を使用します。プロバイダーの状態を確認し、openclaw memory index --force を再実行してください。
CJK テキストが見つかりませんか? openclaw memory index --force を使用して FTS インデックスを再構築してください。