メインコンテンツへスキップ

メモリ検索

memory_search は、元のテキストと表現が異なる場合でも、メモリファイルから関連するノートを見つけます。メモリを小さなチャンクにインデックス化し、埋め込み、キーワード、またはその両方を使って検索することで動作します。

クイックスタート

OpenAI、Gemini、Voyage、または Mistral の API キーが設定されていれば、メモリ検索は自動的に動作します。プロバイダーを明示的に設定するには、次のようにします。
{
  agents: {
    defaults: {
      memorySearch: {
        provider: "openai", // または "gemini"、"local"、"ollama" など
      },
    },
  },
}
API キーなしでローカル埋め込みを使用するには、provider: "local" を使います(node-llama-cpp が必要です)。

サポートされているプロバイダー

プロバイダーIDAPI キーが必要注記
OpenAIopenaiはい自動検出、高速
Geminigeminiはい画像/音声のインデックス化をサポート
Voyagevoyageはい自動検出
Mistralmistralはい自動検出
BedrockbedrockいいえAWS 認証情報チェーンが解決されると自動検出されます
Ollamaollamaいいえローカル、明示的な設定が必要
LocallocalいいえGGUF モデル、約 0.6 GB のダウンロード

検索の仕組み

OpenClaw は 2 つの検索経路を並列で実行し、結果をマージします。
  • ベクトル検索 は、意味が近いノートを見つけます(「gateway host」が「OpenClaw を実行しているマシン」に一致するなど)。
  • BM25 キーワード検索 は、完全一致を見つけます(ID、エラー文字列、設定キーなど)。
片方の経路しか利用できない場合(埋め込みがない、または FTS がない場合)、もう片方だけで実行されます。

検索品質の改善

ノート履歴が大量にある場合、2 つのオプション機能が役立ちます。

時間減衰

古いノートはランキングの重みが徐々に下がるため、新しい情報が先に表示されやすくなります。デフォルトの半減期 30 日では、先月のノートは元の重みの 50% でスコアリングされます。MEMORY.md のようなエバーグリーンなファイルには減衰は適用されません。
エージェントに数か月分の日次ノートがあり、古い情報が最近のコンテキストより上位に出続ける場合は、時間減衰を有効にしてください。

MMR(多様性)

重複した結果を減らします。5 つのノートがすべて同じルーター設定に言及している場合、MMR によって上位結果が繰り返しではなく異なるトピックをカバーするようになります。
memory_search が異なる日次ノートからほぼ重複したスニペットばかり返す場合は、MMR を有効にしてください。

両方を有効にする

{
  agents: {
    defaults: {
      memorySearch: {
        query: {
          hybrid: {
            mmr: { enabled: true },
            temporalDecay: { enabled: true },
          },
        },
      },
    },
  },
}

マルチモーダルメモリ

Gemini Embedding 2 を使うと、Markdown と並べて画像や音声ファイルをインデックス化できます。検索クエリは引き続きテキストですが、視覚および音声コンテンツに対して一致します。設定方法については、Memory configuration reference を参照してください。

セッションメモリ検索

memory_search が以前の会話を想起できるように、セッショントランスクリプトを任意でインデックス化できます。これは memorySearch.experimental.sessionMemory によるオプトイン機能です。詳細は configuration reference を参照してください。

トラブルシューティング

結果が出ない場合 openclaw memory status を実行してインデックスを確認してください。空の場合は、openclaw memory index --force を実行します。 キーワード一致しか出ない場合 埋め込みプロバイダーが設定されていない可能性があります。openclaw memory status --deep を確認してください。 CJK テキストが見つからない場合 openclaw memory index --force で FTS インデックスを再構築してください。

さらに読む