コンテンツにスキップ

OpenClaw メモリ設定ガイド:検索最適化とQMDバックエンド設定

このページでは、OpenClaw のメモリ検索に関するすべての設定項目を紹介します。概念的な概要については、以下のドキュメントを確認してください。

特に指定がない限り、すべてのメモリ検索設定は openclaw.json の agents.defaults.memorySearch 配下に記述します。


キー型デフォルト説明
providerstring自動検出Embedding アダプター ID: openai, gemini, voyage, mistral, ollama, local
modelstringプロバイダーのデフォルトEmbedding モデル名
fallbackstring"none"プライマリが失敗した際のフォールバック用アダプター ID
enabledbooleantrueメモリ検索の有効化・無効化

provider が設定されていない場合、OpenClaw は利用可能なものを以下の順序で自動的に選択します。

  1. local — memorySearch.local.modelPath が設定されており、ファイルが存在する場合。
  2. openai — OpenAI のキーが解決できる場合。
  3. gemini — Gemini のキーが解決できる場合。
  4. voyage — Voyage のキーが解決できる場合。
  5. mistral — Mistral のキーが解決できる場合。

ollama もサポートされていますが、自動検出はされません。利用する場合は明示的に設定してください。

リモートの Embedding を利用するには API key が必要です。OpenClaw は、auth profiles、models.providers.*.apiKey、環境変数などから解決します。

プロバイダー環境変数設定キー
OpenAIOPENAI_API_KEYmodels.providers.openai.apiKey
GeminiGEMINI_API_KEYmodels.providers.google.apiKey
VoyageVOYAGE_API_KEYmodels.providers.voyage.apiKey
MistralMISTRAL_API_KEYmodels.providers.mistral.apiKey
OllamaOLLAMA_API_KEY (プレースホルダー)—

Codex OAuth は chat/completions のみをカバーしています。Embedding のリクエストには対応していないので注意

設定はすべて memorySearch.query.hybrid の下で行います。

キー型デフォルト説明
enabledbooleantrueBM25 とベクトル検索を組み合わせたハイブリッド検索を有効にします
vectorWeightnumber0.7ベクトルスコアの重み (0-1)
textWeightnumber0.3BM25 スコアの重み (0-1)
candidateMultipliernumber4候補プールのサイズの倍率
キー型デフォルト説明
mmr.enabledbooleanfalseMMR によるリランキングを有効にします
mmr.lambdanumber0.70 = 多様性を最大化、1 = 関連性を最大化
キー型デフォルト説明
temporalDecay.enabledbooleanfalse最新性のブーストを有効にします
temporalDecay.halfLifeDaysnumber30スコアが半分になる日数

Evergreen ファイル(MEMORY.md や memory/ 内の日付のないファイル)は、時間の経過によってスコアが減衰することはありません。

{
agents: {
defaults: {
memorySearch: {
query: {
hybrid: {
vectorWeight: 0.7,
textWeight: 0.3,
mmr: { enabled: true, lambda: 0.7 },
temporalDecay: { enabled: true, halfLifeDays: 30 },
},
},
},
},
},
}

キー型説明
extraPathsstring[]インデックスを作成する追加のディレクトリまたはファイル
{
agents: {
defaults: {
memorySearch: {
extraPaths: ["../team-docs", "/srv/shared-notes"],
},
},
},
}

パスは絶対パス、またはワークスペースからの相対パスで指定できます。ディレクトリを指定した場合は、その中にある .md ファイルが再帰的にスキャンされます。シンボリックリンクの扱いは、使用しているバックエンドによって異なります。組み込みエンジンはシンボリックリンクを無視しますが、QMD は QMD スキャナーの動作に従って処理します。

エージェントごとにスコープを絞ったクロスエージェントのトランスクリプト検索を行いたい場合は、memory.qmd.paths ではなく agents.list[].memorySearch.qmd.extraCollections を使用してください。これらの追加コレクションも { path, name, pattern? } という同じ形式をとりますが、エージェントごとにマージされます。また、パスが現在のワークスペース外を指している場合でも、明示的な共有名を保持できるというメリットがあります。

もし同じ解決済みパスが memory.qmd.paths と memorySearch.qmd.extraCollections の両方に存在する場合、QMD は最初に見つかったエントリを保持し、重複するものはスキップします。

Gemini Embedding 2 を使用して、Markdown と並行して画像や音声をインデックスに含めることができます。

KeyTypeDefaultDescription
multimodal.enabledbooleanfalseマルチモーダルインデックスを有効にする
multimodal.modalitiesstring[]—["image"], ["audio"], または ["all"]
multimodal.maxFileBytesnumber10000000インデックス対象の最大ファイルサイズ

この設定は extraPaths 内のファイルにのみ適用されます。デフォルトのメモリールートは Markdown のみのまま維持されます。 利用には gemini-embedding-2-preview が必要です。また、fallback は "none" に設定してください。

サポートされている形式: .jpg, .jpeg, .png, .webp, .gif, .heic, .heif(画像)、 .mp3, .wav, .ogg, .opus, .m4a, .aac, .flac(音声)。


KeyTypeDefaultDescription
cache.enabledbooleanfalseチャンクのエンベディングを SQLite にキャッシュする
cache.maxEntriesnumber50000キャッシュされるエンベディングの最大数

再インデックスや文字起こしの更新を行う際、内容に変更のないテキストの再エンベディング処理をスキップできます。

大量のデータを一度に処理したいときは、Batch indexing(バッチインデックス作成)が便利です。API の制限を気にせず、効率的にデータを同期できます。

KeyTypeDefaultDescription
remote.batch.enabledbooleanfalseバッチ埋め込み API を有効化
remote.batch.concurrencynumber2並列バッチジョブ数
remote.batch.waitbooleantrueバッチ完了まで待機
remote.batch.pollIntervalMsnumber—ポーリング間隔
remote.batch.timeoutMinutesnumber—バッチのタイムアウト時間

この機能は openai、gemini、voyage で利用可能です。特に大規模なデータのバックフィル(過去データの再登録)を行うなら、OpenAI の Batch API が最も高速でコストも抑えられるのでおすすめです。


セッションメモリ検索(実験的機能)

Section titled “セッションメモリ検索(実験的機能)”

過去のやり取りを最大限に活用するための機能です。セッションのログをインデックス化して、memory_search 経由で呼び出せるようになります。

KeyTypeDefaultDescription
experimental.sessionMemorybooleanfalseセッションのインデックス作成を有効化
sourcesstring[]["memory"]"sessions" を追加してログを含める
sync.sessions.deltaBytesnumber100000再インデックスを行うバイト数の閾値
sync.sessions.deltaMessagesnumber50再インデックスを行うメッセージ数の閾値

セッションのインデックス作成はオプトイン方式で、バックグラウンド(非同期)で実行されます。そのため、検索結果に最新の会話が反映されるまで少し時間がかかる場合があります。また、セッションログはディスク上に保存されるため、ファイルシステムへのアクセス権限を信頼境界として適切に管理してください。

SQLite ベクトルアクセラレーション (sqlite-vec)

Section titled “SQLite ベクトルアクセラレーション (sqlite-vec)”
キー型デフォルト値説明
store.vector.enabledbooleantrueベクトルクエリに sqlite-vec を使用する
store.vector.extensionPathstringbundledsqlite-vec のパスを上書きする

sqlite-vec が利用できない場合、OpenClaw は自動的にプロセス内での cosine similarity 計算に切り替わります。


キー型デフォルト値説明
store.pathstring~/.openclaw/memory/{agentId}.sqliteインデックスの保存場所({agentId} トークンをサポート)
store.fts.tokenizerstringunicode61FTS5 tokenizer (unicode61 または trigram)

有効にするには memory.backend = "qmd" と設定してください。すべての QMD 設定は memory.qmd の下に配置します。

キー型デフォルト値説明
commandstringqmdQMD 実行ファイルのパス
searchModestringsearch検索コマンド: search, vsearch, query
includeDefaultMemorybooleantrueMEMORY.md と memory/**/*.md を自動インデックスする
paths[]array—追加パス: { name, path, pattern? }
sessions.enabledbooleanfalseセッションの書き起こしをインデックスする
sessions.retentionDaysnumber—書き起こしの保持期間
sessions.exportDirstring—エクスポート先ディレクトリ
キー型デフォルト値説明
update.intervalstring5mリフレッシュの間隔
update.debounceMsnumber15000ファイル変更のデバウンス時間
update.onBootbooleantrue起動時にリフレッシュする
update.waitForBootSyncbooleanfalseリフレッシュが完了するまで起動をブロックする
update.embedIntervalstring—個別の埋め込み(embed)サイクル
update.commandTimeoutMsnumber—QMD コマンドのタイムアウト時間
キー型デフォルト値説明
limits.maxResultsnumber6検索結果の最大数
limits.maxSnippetCharsnumber—スニペットの長さを制限する
limits.maxInjectedCharsnumber—注入される総文字数を制限する
limits.timeoutMsnumber4000検索のタイムアウト時間

どのセッションが QMD の検索結果を受け取れるかを制御します。設定方法は session.sendPolicy と同じスキーマを使用します。

{
memory: {
qmd: {
scope: {
default: "deny",
rules: [{ action: "allow", match: { chatType: "direct" } }],
},
},
},
}

デフォルトは DM(ダイレクトメッセージ)のみです。match.keyPrefix は正規化されたセッションキーに一致し、match.rawKeyPrefix は agent:<id>: を含む生のキーに一致します。

memory.citations はすべてのバックエンドに適用されます。

値挙動
auto (デフォルト)スニペットのフッターに Source: <path#line> を含める
on常にフッターを含める
offフッターを省略する(パス情報は内部的にエージェントへ渡されます)
{
memory: {
backend: "qmd",
citations: "auto",
qmd: {
includeDefaultMemory: true,
update: { interval: "5m", debounceMs: 15000 },
limits: { maxResults: 6, timeoutMs: 4000 },
scope: {
default: "deny",
rules: [{ action: "allow", match: { chatType: "direct" } }],
},
paths: [{ name: "docs", path: "~/notes", pattern: "**/*.md" }],
},
},
}
{
agents: {
defaults: {
memorySearch: {
provider: "openai",
model: "text-embedding-3-small",
remote: {
baseUrl: "https://api.example.com/v1/",
apiKey: "YOUR_KEY",
},
},
},
},
}
OpenClaw

OpenClaw Expert

まだ解決しませんか?

このページで解決しない場合は、OpenClaw Expertに直接質問してください。