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

メモリ検索

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はい自動検出
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_searchが以前の会話を思い出せるようにできます。これはmemorySearch.experimental.sessionMemoryによるオプトイン機能です。詳細は設定リファレンスを参照してください。

トラブルシューティング

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

さらに読む