Technical reference
メモリ設定リファレンス
このページでは、OpenClaw のメモリ検索に関するすべての設定項目を一覧します。概念的な概要については、以下を参照してください。
メモリの仕組み。
デフォルトの SQLite バックエンド。
ローカルファーストのサイドカー。
検索パイプラインとチューニング。
対話型セッション用のメモリサブエージェント。
特に明記されていない限り、すべてのメモリ検索設定は openclaw.json の agents.defaults.memorySearch 配下にあります。
プロバイダーの選択
| キー | 型 | デフォルト | 説明 |
|---|---|---|---|
provider |
string |
自動検出 | bedrock、deepinfra、gemini、github-copilot、local、mistral、ollama、openai、voyage などの埋め込みアダプター ID。api がそれらのアダプターのいずれかを指す設定済みの models.providers.<id> も指定できます |
model |
string |
プロバイダーのデフォルト | 埋め込みモデル名 |
fallback |
string |
"none" |
プライマリが失敗したときのフォールバックアダプター ID |
enabled |
boolean |
true |
メモリ検索を有効または無効にする |
自動検出の順序
provider が設定されていない場合、OpenClaw は最初に利用可能なものを選択します。
local
memorySearch.local.modelPath が設定され、ファイルが存在する場合に選択されます。
github-copilot
GitHub Copilot トークンを解決できる場合に選択されます(環境変数または認証プロファイル)。
openai
OpenAI キーを解決できる場合に選択されます。
gemini
Gemini キーを解決できる場合に選択されます。
voyage
Voyage キーを解決できる場合に選択されます。
mistral
Mistral キーを解決できる場合に選択されます。
deepinfra
DeepInfra キーを解決できる場合に選択されます。
bedrock
AWS SDK の認証情報チェーンを解決できる場合に選択されます(インスタンスロール、アクセスキー、プロファイル、SSO、Web ID、共有設定)。
ollama はサポートされていますが、自動検出されません(明示的に設定してください)。
カスタムプロバイダー ID
memorySearch.provider はカスタム models.providers.<id> エントリを指すことができます。OpenClaw は埋め込みアダプター用にそのプロバイダーの api 所有者を解決しつつ、エンドポイント、認証、モデルプレフィックス処理にはカスタムプロバイダー ID を保持します。これにより、マルチ GPU またはマルチホスト構成で、特定のローカルエンドポイントにメモリ埋め込みを専用化できます。
{
models: {
providers: {
"ollama-5080": {
api: "ollama",
baseUrl: "http://gpu-box.local:11435",
apiKey: "ollama-local",
models: [{ id: "qwen3-embedding:0.6b" }],
},
},
},
agents: {
defaults: {
memorySearch: {
provider: "ollama-5080",
model: "qwen3-embedding:0.6b",
},
},
},
}
API キーの解決
リモート埋め込みには API キーが必要です。Bedrock は代わりに AWS SDK のデフォルト認証情報チェーンを使用します(インスタンスロール、SSO、アクセスキー)。
| プロバイダー | 環境変数 | 設定キー |
|---|---|---|
| Bedrock | AWS 認証情報チェーン | API キーは不要 |
| DeepInfra | DEEPINFRA_API_KEY |
models.providers.deepinfra.apiKey |
| Gemini | GEMINI_API_KEY |
models.providers.google.apiKey |
| GitHub Copilot | COPILOT_GITHUB_TOKEN, GH_TOKEN, GITHUB_TOKEN |
デバイスログインによる認証プロファイル |
| Mistral | MISTRAL_API_KEY |
models.providers.mistral.apiKey |
| Ollama | OLLAMA_API_KEY(プレースホルダー) |
-- |
| OpenAI | OPENAI_API_KEY |
models.providers.openai.apiKey |
| Voyage | VOYAGE_API_KEY |
models.providers.voyage.apiKey |
リモートエンドポイント設定
カスタム OpenAI 互換エンドポイント、またはプロバイダーのデフォルトを上書きする場合:
remote.baseUrlstringカスタム API ベース URL。
remote.apiKeystringAPI キーを上書きします。
remote.headersobject追加の HTTP ヘッダー(プロバイダーのデフォルトとマージされます)。
{
agents: {
defaults: {
memorySearch: {
provider: "openai",
model: "text-embedding-3-small",
remote: {
baseUrl: "https://api.example.com/v1/",
apiKey: "YOUR_KEY",
},
},
},
},
}
プロバイダー固有の設定
Gemini
| キー | 型 | デフォルト | 説明 |
|---|---|---|---|
model |
string |
gemini-embedding-001 |
gemini-embedding-2-preview もサポートします |
outputDimensionality |
number |
3072 |
Embedding 2 の場合: 768、1536、または 3072 |
OpenAI 互換の入力タイプ
OpenAI 互換の埋め込みエンドポイントでは、プロバイダー固有の input_type リクエストフィールドを使用できます。これは、クエリ埋め込みとドキュメント埋め込みに異なるラベルを必要とする非対称埋め込みモデルで便利です。
| キー | 型 | デフォルト | 説明 |
|---|---|---|---|
inputType |
string |
未設定 | クエリ埋め込みとドキュメント埋め込みで共有する input_type |
queryInputType |
string |
未設定 | クエリ時の input_type。inputType を上書きします |
documentInputType |
string |
未設定 | インデックス/ドキュメントの input_type。inputType を上書きします |
{
agents: {
defaults: {
memorySearch: {
provider: "openai",
remote: {
baseUrl: "https://embeddings.example/v1",
apiKey: "env:EMBEDDINGS_API_KEY",
},
model: "asymmetric-embedder",
queryInputType: "query",
documentInputType: "passage",
},
},
},
}
これらの値を変更すると、プロバイダーのバッチインデックス作成における埋め込みキャッシュの同一性に影響します。上流モデルがラベルを異なるものとして扱う場合は、メモリの再インデックスを行う必要があります。
Bedrock
Bedrock 埋め込み設定
Bedrock は AWS SDK のデフォルト認証情報チェーンを使用します。API キーは不要です。OpenClaw が Bedrock 対応のインスタンスロールを持つ EC2 上で動作している場合は、プロバイダーとモデルを設定するだけです。
{
agents: {
defaults: {
memorySearch: {
provider: "bedrock",
model: "amazon.titan-embed-text-v2:0",
},
},
},
}
| キー | 型 | デフォルト | 説明 |
|---|---|---|---|
model |
string |
amazon.titan-embed-text-v2:0 |
任意の Bedrock 埋め込みモデル ID |
outputDimensionality |
number |
モデルのデフォルト | Titan V2 の場合: 256、512、または 1024 |
サポートされるモデル(ファミリー検出と次元数のデフォルトを含む):
| モデル ID | プロバイダー | デフォルト次元 | 設定可能な次元 |
|---|---|---|---|
amazon.titan-embed-text-v2:0 |
Amazon | 1024 | 256、512、1024 |
amazon.titan-embed-text-v1 |
Amazon | 1536 | -- |
amazon.titan-embed-g1-text-02 |
Amazon | 1536 | -- |
amazon.titan-embed-image-v1 |
Amazon | 1024 | -- |
amazon.nova-2-multimodal-embeddings-v1:0 |
Amazon | 1024 | 256、384、1024、3072 |
cohere.embed-english-v3 |
Cohere | 1024 | -- |
cohere.embed-multilingual-v3 |
Cohere | 1024 | -- |
cohere.embed-v4:0 |
Cohere | 1536 | 256-1536 |
twelvelabs.marengo-embed-3-0-v1:0 |
TwelveLabs | 512 | -- |
twelvelabs.marengo-embed-2-7-v1:0 |
TwelveLabs | 1024 | -- |
スループットサフィックス付きのバリアント(例: amazon.titan-embed-text-v1:2:8k)は、ベースモデルの設定を継承します。
認証: Bedrock 認証は標準の AWS SDK 認証情報解決順序を使用します。
- 環境変数(
AWS_ACCESS_KEY_ID+AWS_SECRET_ACCESS_KEY) - SSO トークンキャッシュ
- Web ID トークン認証情報
- 共有認証情報ファイルと設定ファイル
- ECS または EC2 メタデータ認証情報
リージョンは AWS_REGION、AWS_DEFAULT_REGION、amazon-bedrock プロバイダーの baseUrl から解決されるか、デフォルトで us-east-1 になります。
IAM 権限: IAM ロールまたはユーザーには次が必要です。
{
"Effect": "Allow",
"Action": "bedrock:InvokeModel",
"Resource": "*"
}
最小権限にするには、InvokeModel のスコープを特定のモデルに限定します。
arn:aws:bedrock:*::foundation-model/amazon.titan-embed-text-v2:0
ローカル (GGUF + node-llama-cpp)
| キー | 型 | デフォルト | 説明 |
|---|---|---|---|
local.modelPath |
string |
自動ダウンロード | GGUF モデルファイルへのパス |
local.modelCacheDir |
string |
node-llama-cpp のデフォルト | ダウンロードされたモデルのキャッシュディレクトリ |
local.contextSize |
number | "auto" |
4096 |
埋め込みコンテキストのコンテキストウィンドウサイズ。4096 は非重み VRAM を抑えつつ、一般的なチャンク (128–512 トークン) をカバーします。制約のあるホストでは 1024–2048 まで下げてください。"auto" はモデルの訓練時の最大値を使用します。8B+ モデルでは推奨されません (Qwen3-Embedding-8B: 40 960 トークン → 4096 で約 8.8 GB に対し、約 32 GB VRAM)。 |
デフォルトモデル: embeddinggemma-300m-qat-Q8_0.gguf (約 0.6 GB、自動ダウンロード)。ソースチェックアウトでは、引き続きネイティブビルドの承認が必要です: pnpm approve-builds の後に pnpm rebuild node-llama-cpp。
Gateway が使用するものと同じプロバイダーパスを検証するには、スタンドアロン CLI を使用します。
openclaw memory status --deep --agent main
openclaw memory index --force --agent main
provider が auto の場合、local.modelPath が既存のローカルファイルを指しているときにのみ local が選択されます。hf: および HTTP(S) モデル参照は provider: "local" で明示的に使用できますが、モデルがディスク上で利用可能になる前に auto がローカルを選択することはありません。
インライン埋め込みタイムアウト
sync.embeddingBatchTimeoutSecondsnumberメモリのインデックス作成中に、インライン埋め込みバッチのタイムアウトを上書きします。
未設定の場合はプロバイダーのデフォルトが使用されます。local、ollama、lmstudio などのローカル/セルフホストプロバイダーでは 600 秒、ホスト型プロバイダーでは 120 秒です。ローカルの CPU バウンドな埋め込みバッチが正常だが遅い場合は、この値を増やしてください。
ハイブリッド検索設定
すべて memorySearch.query.hybrid の下にあります。
| キー | 型 | デフォルト | 説明 |
|---|---|---|---|
enabled |
boolean |
true |
ハイブリッド BM25 + ベクトル検索を有効化 |
vectorWeight |
number |
0.7 |
ベクトルスコアの重み (0-1) |
textWeight |
number |
0.3 |
BM25 スコアの重み (0-1) |
candidateMultiplier |
number |
4 |
候補プールサイズの乗数 |
MMR (多様性)
| キー | 型 | デフォルト | 説明 |
|---|---|---|---|
mmr.enabled |
boolean |
false |
MMR 再ランキングを有効化 |
mmr.lambda |
number |
0.7 |
0 = 最大の多様性、1 = 最大の関連性 |
時間減衰 (新しさ)
| キー | 型 | デフォルト | 説明 |
|---|---|---|---|
temporalDecay.enabled |
boolean |
false |
新しさブーストを有効化 |
temporalDecay.halfLifeDays |
number |
30 |
スコアは N 日ごとに半減します |
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 },
},
},
},
},
},
}
追加メモリパス
| キー | 型 | 説明 |
|---|---|---|
extraPaths |
string[] |
インデックス作成対象にする追加のディレクトリまたはファイル |
{
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)
Gemini Embedding 2 を使用して、Markdown と並べて画像と音声をインデックス作成します。
| キー | 型 | デフォルト | 説明 |
|---|---|---|---|
multimodal.enabled |
boolean |
false |
マルチモーダルインデックス作成を有効化 |
multimodal.modalities |
string[] |
-- | ["image"]、["audio"]、または ["all"] |
multimodal.maxFileBytes |
number |
10000000 |
インデックス作成対象の最大ファイルサイズ |
サポートされる形式: .jpg, .jpeg, .png, .webp, .gif, .heic, .heif (画像); .mp3, .wav, .ogg, .opus, .m4a, .aac, .flac (音声)。
埋め込みキャッシュ
| キー | 型 | デフォルト | 説明 |
|---|---|---|---|
cache.enabled |
boolean |
false |
チャンク埋め込みを SQLite にキャッシュ |
cache.maxEntries |
number |
50000 |
キャッシュされる埋め込みの最大数 |
再インデックス作成またはトランスクリプト更新時に、変更されていないテキストを再埋め込みすることを防ぎます。
バッチインデックス作成
| キー | 型 | デフォルト | 説明 |
|---|---|---|---|
remote.nonBatchConcurrency |
number |
4 |
並列インライン埋め込み |
remote.batch.enabled |
boolean |
false |
バッチ埋め込み API を有効化 |
remote.batch.concurrency |
number |
2 |
並列バッチジョブ |
remote.batch.wait |
boolean |
true |
バッチ完了を待機 |
remote.batch.pollIntervalMs |
number |
-- | ポーリング間隔 |
remote.batch.timeoutMinutes |
number |
-- | バッチタイムアウト |
openai, gemini, voyage で利用できます。大規模なバックフィルでは、OpenAI バッチが通常最速で最も低コストです。
remote.nonBatchConcurrency は、ローカル/セルフホストのプロバイダー、およびプロバイダーのバッチ API が有効でない場合のホスト型プロバイダーで使用されるインライン埋め込み呼び出しを制御します。Ollama は、小さめのローカルホストに過負荷をかけないよう、非バッチインデックス作成ではデフォルトで 1 になります。より大きなマシンでは高い値を設定してください。
これは、インライン埋め込み呼び出しのタイムアウトを制御する sync.embeddingBatchTimeoutSeconds とは別です。
セッションメモリ検索 (実験的)
セッショントランスクリプトをインデックス化し、memory_search 経由で表示します。
| キー | 型 | デフォルト | 説明 |
|---|---|---|---|
experimental.sessionMemory |
boolean |
false |
セッションインデックス作成を有効化 |
sources |
string[] |
["memory"] |
トランスクリプトを含めるには "sessions" を追加 |
sync.sessions.deltaBytes |
number |
100000 |
再インデックス作成のバイトしきい値 |
sync.sessions.deltaMessages |
number |
50 |
再インデックス作成のメッセージしきい値 |
SQLite ベクトル高速化 (sqlite-vec)
| キー | 型 | デフォルト | 説明 |
|---|---|---|---|
store.vector.enabled |
boolean |
true |
ベクトルクエリに sqlite-vec を使用 |
store.vector.extensionPath |
string |
同梱 | sqlite-vec パスを上書き |
sqlite-vec が利用できない場合、OpenClaw は自動的にプロセス内コサイン類似度にフォールバックします。
インデックスストレージ
| キー | 型 | デフォルト | 説明 |
|---|---|---|---|
store.path |
string |
~/.openclaw/memory/{agentId}.sqlite |
インデックスの場所 ({agentId} トークンをサポート) |
store.fts.tokenizer |
string |
unicode61 |
FTS5 トークナイザー (unicode61 または trigram) |
QMD バックエンド設定
有効にするには memory.backend = "qmd" を設定します。すべての QMD 設定は memory.qmd の下にあります。
| キー | 型 | デフォルト | 説明 |
|---|---|---|---|
command |
string |
qmd |
QMD 実行可能ファイルのパス。サービスの PATH がシェルと異なる場合は絶対パスを設定 |
searchMode |
string |
search |
検索コマンド: search, vsearch, query |
includeDefaultMemory |
boolean |
true |
MEMORY.md + memory/**/*.md を自動インデックス化 |
paths[] |
array |
-- | 追加パス: { name, path, pattern? } |
sessions.enabled |
boolean |
false |
セッショントランスクリプトをインデックス化 |
sessions.retentionDays |
number |
-- | トランスクリプトの保持期間 |
sessions.exportDir |
string |
-- | エクスポートディレクトリ |
searchMode: "search" は字句/BM25 のみです。OpenClaw はそのモードでは、memory status --deep の実行中も含め、セマンティックベクトルの準備状況プローブや QMD 埋め込みメンテナンスを実行しません。vsearch と query は引き続き QMD ベクトルの準備状況と埋め込みを必要とします。
OpenClaw は現在の QMD コレクションと MCP クエリ形式を優先しますが、必要に応じて互換性のあるコレクションパターンフラグや古い MCP ツール名を試すことで、古い QMD リリースも動作し続けるようにしています。QMD が複数のコレクションフィルター対応を通知する場合、同一ソースのコレクションは 1 つの QMD プロセスで検索されます。古い QMD ビルドでは、コレクションごとの互換性パスが維持されます。同一ソースとは、永続メモリコレクションがまとめてグループ化される一方で、セッショントランスクリプトコレクションは別グループのままになり、ソースの多様化で両方の入力が引き続き使われることを意味します。
更新スケジュール
| キー | 型 | デフォルト | 説明 |
|---|---|---|---|
update.interval |
string |
5m |
更新間隔 |
update.debounceMs |
number |
15000 |
ファイル変更のデバウンス |
update.onBoot |
boolean |
true |
長期稼働の QMD マネージャーが開いたときに更新する。オプトインの起動時更新も制御 |
update.startup |
string |
off |
任意の Gateway 起動時更新: off、idle、または immediate |
update.startupDelayMs |
number |
120000 |
startup: "idle" 更新が実行されるまでの遅延 |
update.waitForBootSync |
boolean |
false |
初回更新が完了するまでマネージャーのオープンをブロック |
update.embedInterval |
string |
-- | 個別の埋め込み周期 |
update.commandTimeoutMs |
number |
-- | QMD コマンドのタイムアウト |
update.updateTimeoutMs |
number |
-- | QMD 更新操作のタイムアウト |
update.embedTimeoutMs |
number |
-- | QMD 埋め込み操作のタイムアウト |
制限
| キー | 型 | デフォルト | 説明 |
|---|---|---|---|
limits.maxResults |
number |
6 |
最大検索結果数 |
limits.maxSnippetChars |
number |
-- | スニペット長を制限 |
limits.maxInjectedChars |
number |
-- | 注入される合計文字数を制限 |
limits.timeoutMs |
number |
4000 |
検索タイムアウト |
スコープ
どのセッションが 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 |
フッターを省略する(パスは内部的にエージェントへ渡される) |
QMD のブート更新は、Gateway 起動中にワンショットのサブプロセスパスを使用します。長期稼働の QMD マネージャーは、メモリ検索が対話的な使用のために開かれたとき、通常のファイルウォッチャーとインターバルタイマーを引き続き所有します。
完全な 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 は 1 つのスケジュールされたスイープとして実行され、実装の詳細として内部の light/deep/REM フェーズを使用します。
概念的な動作とスラッシュコマンドについては、Dreaming を参照してください。
ユーザー設定
| キー | 型 | デフォルト | 説明 |
|---|---|---|---|
enabled |
boolean |
false |
Dreaming 全体を有効または無効にする |
frequency |
string |
0 3 * * * |
完全な Dreaming スイープの任意の Cron 周期 |
model |
string |
デフォルトモデル | 任意の Dream Diary サブエージェントモデル上書き |
例
{
plugins: {
entries: {
"memory-core": {
subagent: {
allowModelOverride: true,
allowedModels: ["anthropic/claude-sonnet-4-6"],
},
config: {
dreaming: {
enabled: true,
frequency: "0 3 * * *",
model: "anthropic/claude-sonnet-4-6",
},
},
},
},
},
}