メモリ検索
memory_searchは、元のテキストと表現が異なる場合でも、メモリファイルから関連するノートを見つけます。これは、メモリを小さなチャンクにインデックス化し、埋め込み、キーワード、またはその両方を使って検索することで動作します。
クイックスタート
OpenAI、Gemini、Voyage、またはMistralのAPIキーが設定されている場合、メモリ検索は自動的に動作します。プロバイダーを明示的に設定するには:
{
agents: {
defaults: {
memorySearch: {
provider: "openai", // または "gemini"、"local"、"ollama" など
},
},
},
}
APIキーなしでローカル埋め込みを使用するには、provider: "local"を使用します(node-llama-cppが必要です)。
サポートされているプロバイダー
| プロバイダー | ID | APIキーが必要 | 注記 |
|---|
| OpenAI | openai | はい | 自動検出、高速 |
| Gemini | gemini | はい | 画像/音声のインデックス作成をサポート |
| Voyage | voyage | はい | 自動検出 |
| Mistral | mistral | はい | 自動検出 |
| Ollama | ollama | いいえ | ローカル、明示的に設定が必要 |
| Local | local | いいえ | 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インデックスを再構築してください。
さらに読む