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

メモリ設定リファレンス

このページでは、OpenClawメモリ検索のすべての設定項目を一覧します。 概念的な概要については、次を参照してください: 特に注記がない限り、すべてのメモリ検索設定は openclaw.jsonagents.defaults.memorySearch 配下にあります。

プロバイダー選択

KeyTypeDefaultDescription
providerstring自動検出EmbeddingアダプターID: openaigeminivoyagemistralollamalocal
modelstringproviderデフォルトEmbeddingモデル名
fallbackstring"none"プライマリ失敗時のフォールバックアダプターID
enabledbooleantrueメモリ検索を有効または無効にする

自動検出順序

provider が設定されていない場合、OpenClawは最初に利用可能なものを選択します:
  1. localmemorySearch.local.modelPath が設定されていて、そのファイルが存在する場合。
  2. openai — OpenAIキーを解決できる場合。
  3. gemini — Geminiキーを解決できる場合。
  4. voyage — Voyageキーを解決できる場合。
  5. mistral — Mistralキーを解決できる場合。
ollama はサポートされていますが自動検出されません(明示的に設定してください)。

APIキー解決

リモートembeddingにはAPIキーが必要です。OpenClawは次から解決します: auth profile、models.providers.*.apiKey、または環境変数。
ProviderEnv varConfig key
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 リクエストには使えません。

リモートエンドポイント設定

カスタムOpenAI互換エンドポイントやproviderデフォルトを上書きする場合:
KeyTypeDescription
remote.baseUrlstringカスタムAPI base URL
remote.apiKeystringAPIキーを上書き
remote.headersobject追加のHTTP header(providerデフォルトとマージ)
{
  agents: {
    defaults: {
      memorySearch: {
        provider: "openai",
        model: "text-embedding-3-small",
        remote: {
          baseUrl: "https://api.example.com/v1/",
          apiKey: "YOUR_KEY",
        },
      },
    },
  },
}

Gemini固有の設定

KeyTypeDefaultDescription
modelstringgemini-embedding-001gemini-embedding-2-preview もサポート
outputDimensionalitynumber3072Embedding 2向け: 768、1536、または3072
モデルまたは outputDimensionality を変更すると、自動的に完全再インデックスが実行されます。

ローカルembedding設定

KeyTypeDefaultDescription
local.modelPathstring自動ダウンロードGGUFモデルファイルへのパス
local.modelCacheDirstringnode-llama-cppデフォルトダウンロード済みモデルのキャッシュディレクトリ
デフォルトモデル: embeddinggemma-300m-qat-Q8_0.gguf(約0.6 GB、自動ダウンロード)。 ネイティブビルドが必要です: pnpm approve-builds の後に pnpm rebuild node-llama-cpp

ハイブリッド検索設定

すべて memorySearch.query.hybrid 配下です:
KeyTypeDefaultDescription
enabledbooleantrueハイブリッドBM25 + ベクター検索を有効化
vectorWeightnumber0.7ベクタースコアの重み(0-1)
textWeightnumber0.3BM25スコアの重み(0-1)
candidateMultipliernumber4候補プールサイズの倍率

MMR(多様性)

KeyTypeDefaultDescription
mmr.enabledbooleanfalseMMRによる再ランキングを有効化
mmr.lambdanumber0.70 = 最大多様性、1 = 最大関連性

時間減衰(新しさ)

KeyTypeDefaultDescription
temporalDecay.enabledbooleanfalse新しさブーストを有効化
temporalDecay.halfLifeDaysnumber30スコアがN日ごとに半減
常設ファイル(MEMORY.mdmemory/ 内の非日付ファイル)は減衰しません。

完全な例

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

追加メモリパス

KeyTypeDescription
extraPathsstring[]インデックス化する追加のディレクトリまたはファイル
{
  agents: {
    defaults: {
      memorySearch: {
        extraPaths: ["../team-docs", "/srv/shared-notes"],
      },
    },
  },
}
パスは絶対パスでもworkspace相対でもかまいません。ディレクトリは .md ファイルを再帰的にスキャンします。symlinkの扱いはアクティブなバックエンドに依存します: 組み込みengineはsymlinkを無視しますが、QMDは基盤となるQMD スキャナーの動作に従います。 agentスコープのcross-agent transcript検索には、 memory.qmd.paths ではなく agents.list[].memorySearch.qmd.extraCollections を使用してください。 これらの追加コレクションも同じ { path, name, pattern? } 形式に従いますが、 agentごとにマージされ、パスが現在のworkspace外を指す場合でも明示的な共有名を保持できます。 同じ解決済みパスが memory.qmd.pathsmemorySearch.qmd.extraCollections の両方に現れた場合、QMDは最初のエントリーを保持し、 重複はスキップします。

マルチモーダルメモリ(Gemini)

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(音声)。

Embeddingキャッシュ

KeyTypeDefaultDescription
cache.enabledbooleanfalseチャンクembeddingをSQLiteにキャッシュ
cache.maxEntriesnumber50000最大キャッシュembedding数
再インデックスやtranscript更新時に、変更のないテキストの再embeddingを防ぎます。

バッチインデックス作成

KeyTypeDefaultDescription
remote.batch.enabledbooleanfalseバッチembedding APIを有効化
remote.batch.concurrencynumber2並列バッチジョブ数
remote.batch.waitbooleantrueバッチ完了を待機
remote.batch.pollIntervalMsnumberポーリング間隔
remote.batch.timeoutMinutesnumberバッチタイムアウト
openaigeminivoyage で利用できます。OpenAIバッチは通常、 大規模なバックフィルで最も高速かつ低コストです。

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

session transcriptをインデックス化し、memory_search 経由で公開します:
KeyTypeDefaultDescription
experimental.sessionMemorybooleanfalseセッションインデックスを有効化
sourcesstring[]["memory"]transcriptを含めるには "sessions" を追加
sync.sessions.deltaBytesnumber100000再インデックスのバイト閾値
sync.sessions.deltaMessagesnumber50再インデックスのメッセージ閾値
セッションインデックス作成はopt-inで、非同期に実行されます。結果はわずかに 古くなることがあります。セッションログはディスクに保存されるため、ファイルシステムアクセスを信頼 境界として扱ってください。

SQLiteベクター高速化(sqlite-vec)

KeyTypeDefaultDescription
store.vector.enabledbooleantrueベクタークエリにsqlite-vecを使用
store.vector.extensionPathstring同梱版sqlite-vecのパスを上書き
sqlite-vecが利用できない場合、OpenClawは自動的にプロセス内コサイン 類似度へフォールバックします。

インデックス保存先

KeyTypeDefaultDescription
store.pathstring~/.openclaw/memory/{agentId}.sqliteインデックス保存場所({agentId} トークン対応)
store.fts.tokenizerstringunicode61FTS5 tokenizer(unicode61 または trigram

QMDバックエンド設定

有効にするには memory.backend = "qmd" を設定します。すべてのQMD設定は memory.qmd 配下にあります:
KeyTypeDefaultDescription
commandstringqmdQMD実行ファイルパス
searchModestringsearch検索コマンド: searchvsearchquery
includeDefaultMemorybooleantrueMEMORY.md + memory/**/*.md を自動インデックス化
paths[]array追加パス: { name, path, pattern? }
sessions.enabledbooleanfalseセッショントランスクリプトをインデックス化
sessions.retentionDaysnumbertranscript保持期間
sessions.exportDirstringエクスポートディレクトリ

更新スケジュール

KeyTypeDefaultDescription
update.intervalstring5m更新間隔
update.debounceMsnumber15000ファイル変更のデバウンス
update.onBootbooleantrue起動時に更新
update.waitForBootSyncbooleanfalse更新完了まで起動をブロック
update.embedIntervalstringembedding用の独立した周期
update.commandTimeoutMsnumberQMDコマンドのタイムアウト
update.updateTimeoutMsnumberQMD更新処理のタイムアウト
update.embedTimeoutMsnumberQMD embedding処理のタイムアウト

制限

KeyTypeDefaultDescription
limits.maxResultsnumber6最大検索結果数
limits.maxSnippetCharsnumbersnippet長の制限
limits.maxInjectedCharsnumber注入文字数合計の制限
limits.timeoutMsnumber4000検索タイムアウト

スコープ

どのsessionがQMD検索結果を受け取れるかを制御します。スキーマは session.sendPolicy と同じです:
{
  memory: {
    qmd: {
      scope: {
        default: "deny",
        rules: [{ action: "allow", match: { chatType: "direct" } }],
      },
    },
  },
}
デフォルトはDMのみです。match.keyPrefix は正規化されたsession keyに一致し、 match.rawKeyPrefixagent:<id>: を含む生のkeyに一致します。

引用

memory.citations はすべてのバックエンドに適用されます:
ValueBehavior
auto (default)snippetに Source: <path#line> フッターを含める
on常にフッターを含める
offフッターを省略する(パスは引き続き内部的にagentへ渡される)

完全なQMDの例

{
  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" }],
    },
  },
}

Dreaming(実験的)

Dreamingは agents.defaults.memorySearch ではなく、 plugins.entries.memory-core.config.dreaming 配下で設定します。概念的な詳細とチャット コマンドについては、Dreaming を参照してください。
KeyTypeDefaultDescription
modestring"off"プリセット: offcorerem、または deep
cronstringプリセットデフォルトスケジュール用cron式の上書き
timezonestringユーザーのタイムゾーンスケジュール評価用のタイムゾーン
limitnumberプリセットデフォルト1サイクルあたりに昇格する候補の最大数
minScorenumberプリセットデフォルト昇格に必要な最小加重スコア
minRecallCountnumberプリセットデフォルト最小想起回数閾値
minUniqueQueriesnumberプリセットデフォルト最小ユニーククエリ数閾値

プリセットデフォルト

Mode間隔minScoreminRecallCountminUniqueQueries
off無効
core毎日午前3時0.7532
rem6時間ごと0.8543
deep12時間ごと0.8033

{
  plugins: {
    entries: {
      "memory-core": {
        config: {
          dreaming: {
            mode: "core",
            timezone: "America/New_York",
          },
        },
      },
    },
  },
}