跳转到内容

内存配置参考

本页列出了 OpenClaw 内存搜索的每一个配置选项。有关概念性概述,请参阅:

Memory overview

内存的工作原理。

Builtin engine

默认的 SQLite 后端。

QMD engine

本地优先的 sidecar。

Memory search

搜索管道和调优。

Active memory

用于交互式会话的内存子代理。

除非另有说明,所有内存搜索设置均位于 agents.defaults.memorySearch 下的 openclaw.json 中。


类型默认值描述
providerstring自动检测嵌入适配器 ID,例如 bedrockdeepinfrageminigithub-copilotlocalmistralollamaopenaivoyage;也可以是已配置的 models.providers.<id>,其 api 指向这些适配器之一
modelstring提供商默认值嵌入模型名称
fallbackstring"none"主适配器失败时的备用适配器 ID
enabledbooleantrue启用或禁用记忆搜索

当未设置 provider 时,OpenClaw 会选择第一个可用的:

  1. local

    如果配置了 memorySearch.local.modelPath 且该文件存在,则选中此项。

  2. github-copilot

    如果可以解析 GitHub Copilot 令牌(环境变量或身份验证配置文件),则选中此项。

  3. openai

    如果可以解析 OpenAI 密钥,则选中此项。

  4. gemini

    如果可以解析 Gemini 密钥,则选中此项。

  5. voyage

    如果可以解析 Voyage 密钥,则选中此项。

  6. mistral

    如果可以解析 Mistral 密钥,则选中此项。

  7. deepinfra

    如果可以解析 DeepInfra 密钥,则选中此项。

  8. bedrock

    如果 AWS SDK 凭证链解析成功(实例角色、访问密钥、配置文件、SSO、Web 身份或共享配置),则选中此项。

支持 ollama 但不会自动检测(需显式设置)。

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 密钥。Bedrock 改为使用 AWS SDK 默认凭证链(实例角色、SSO、访问密钥)。

提供商环境变量配置键
BedrockAWS 凭证链不需要 API 密钥
DeepInfraDEEPINFRA_API_KEYmodels.providers.deepinfra.apiKey
GeminiGEMINI_API_KEYmodels.providers.google.apiKey
GitHub CopilotCOPILOT_GITHUB_TOKENGH_TOKENGITHUB_TOKEN通过设备登录进行身份验证配置文件
MistralMISTRAL_API_KEYmodels.providers.mistral.apiKey
OllamaOLLAMA_API_KEY(占位符)
OpenAIOPENAI_API_KEYmodels.providers.openai.apiKey
VoyageVOYAGE_API_KEYmodels.providers.voyage.apiKey


对于自定义 OpenAI 兼容端点或覆盖提供商默认设置:

自定义 API 基础 URL。 覆盖 API 密钥。 额外的 HTTP 标头(与提供商默认设置合并)。
{
agents: {
defaults: {
memorySearch: {
provider: "openai",
model: "text-embedding-3-small",
remote: {
baseUrl: "https://api.example.com/v1/",
apiKey: "YOUR_KEY",
},
},
},
},
}

Gemini
类型默认值描述
modelstringgemini-embedding-001也支持 gemini-embedding-2-preview
outputDimensionalitynumber3072对于 Embedding 2:768、1536 或 3072
OpenAIOpenAI 兼容的输入类型

OpenAI 兼容的嵌入端点可以选择启用特定于提供商的 input_type 请求字段。这对于需要为查询和文档嵌入使用不同标签的非对称嵌入模型非常有用。

类型默认值描述
inputTypestring未设置查询和文档嵌入的共享 input_type
queryInputTypestring未设置查询时 input_type;覆盖 inputType
documentInputTypestring未设置索引/文档 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 使用 AWS SDK 默认凭证链——不需要 API 密钥。如果 OpenClaw 在 EC2 上运行并具有启用 Bedrock 的实例角色,只需设置提供商和模型:

{
agents: {
defaults: {
memorySearch: {
provider: "bedrock",
model: "amazon.titan-embed-text-v2:0",
},
},
},
}
类型默认值描述
modelstringamazon.titan-embed-text-v2:0任何 Bedrock 嵌入模型 ID
outputDimensionalitynumber模型默认值对于 Titan V2:256、512 或 1024

支持的模型(包含系列检测和维度默认值):

模型 ID提供商默认维度可配置维度
amazon.titan-embed-text-v2:0Amazon1024256, 512, 1024
amazon.titan-embed-text-v1Amazon1536
amazon.titan-embed-g1-text-02Amazon1536
amazon.titan-embed-image-v1Amazon1024
amazon.nova-2-multimodal-embeddings-v1:0Amazon1024256, 384, 1024, 3072
cohere.embed-english-v3Cohere1024
cohere.embed-multilingual-v3Cohere1024
cohere.embed-v4:0Cohere1536256-1536
twelvelabs.marengo-embed-3-0-v1:0TwelveLabs512
twelvelabs.marengo-embed-2-7-v1:0TwelveLabs1024

带吞吐量后缀的变体(例如 amazon.titan-embed-text-v1:2:8k)继承基础模型的配置。

身份验证: Bedrock 认证使用标准的 AWS SDK 凭证解析顺序:

  1. 环境变量 (AWS_ACCESS_KEY_ID + AWS_SECRET_ACCESS_KEY)
  2. SSO 令牌缓存
  3. Web 身份令牌凭证
  4. 共享凭证和配置文件
  5. ECS 或 EC2 元数据凭证

区域从 AWS_REGIONAWS_DEFAULT_REGIONamazon-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
Local (GGUF + node-llama-cpp)
KeyTypeDefaultDescription
local.modelPathstringauto-downloadedGGUF 模型文件的路径
local.modelCacheDirstringnode-llama-cpp default已下载模型的缓存目录
local.contextSizenumber | "auto"4096嵌入上下文的上下文窗口大小。4096 覆盖了典型的分块(128–512 个令牌),同时限制了非权重显存。在受限的主机上降低到 1024–2048。"auto" 使用模型训练时的最大值 — 不推荐用于 8B+ 模型(Qwen3-Embedding-8B: 40 960 个令牌 → ~32 GB 显存 vs 4096 时的 ~8.8 GB)。

默认模型:embeddinggemma-300m-qat-Q8_0.gguf(约 0.6 GB,自动下载)。源码检出版本仍需原生构建批准:pnpm approve-builds 然后 pnpm rebuild node-llama-cppCLIGateway(网关)。

使用独立 CLI 来验证 Gateway 使用的相同提供商路径:

Terminal window
openclaw memory status --deep --agent main
openclaw memory index --force --agent main

如果 providerauto,则仅当 local.modelPath 指向现有的本地文件时才会选择 localhf: 和 HTTP(S) 模型引用仍可通过 provider: "local" 显式使用,但它们不会使 auto 在模型可用到磁盘之前就选择 local。

覆盖内存索引期间内联嵌入批处理的超时时间。

未设置则使用提供商默认值:本地/自托管提供商(如 localollamalmstudio)为 600 秒,托管提供商为 120 秒。当本地 CPU 密集型嵌入批次处理健康但缓慢时,请增加此值。


所有配置均在 memorySearch.query.hybrid 下:

类型默认值描述
enabledbooleantrue启用混合 BM25 + 向量搜索
vectorWeightnumber0.7向量分数的权重 (0-1)
textWeightnumber0.3BM25 分数的权重 (0-1)
candidateMultipliernumber4候选池大小倍数
类型默认值描述
mmr.enabledbooleanfalse启用 MMR 重排
mmr.lambdanumber0.70 = 最大多样性,1 = 最大相关性
{
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 扫描器的行为。

对于特定于代理的跨代理转录本搜索,请使用 agents.list[].memorySearch.qmd.extraCollections 而不是 memory.qmd.paths。这些额外的集合遵循相同的 { path, name, pattern? } 形状,但它们是按代理合并的,并且当路径指向当前工作区外部时,可以保留显式的共享名称。如果相同的解析路径同时出现在 memory.qmd.pathsmemorySearch.qmd.extraCollections 中,QMD 将保留第一个条目并跳过重复项。


使用 Gemini Embedding 2 与 Markdown 一起索引图像和音频:

类型默认值描述
multimodal.enabledbooleanfalse启用多模态索引
multimodal.modalitiesstring[]["image"]["audio"]["all"]
multimodal.maxFileBytesnumber10000000索引的最大文件大小

支持的格式:.jpg.jpeg.png.webp.gif.heic.heif(图像);.mp3.wav.ogg.opus.m4a.aac.flac(音频)。


类型默认值描述
cache.enabledbooleanfalse在 SQLite 中缓存分块嵌入
cache.maxEntriesnumber50000最大缓存嵌入数

防止在重新索引或转录更新时对未更改的文本进行重新嵌入。


类型默认值描述
remote.nonBatchConcurrencynumber4并行内联嵌入
remote.batch.enabledbooleanfalse启用批量嵌入 API
remote.batch.concurrencynumber2并行批处理作业
remote.batch.waitbooleantrue等待批处理完成
remote.batch.pollIntervalMsnumber轮询间隔
remote.batch.timeoutMinutesnumber批处理超时

适用于 openaigeminivoyageOpenAI。对于大规模回填,OpenAI 批处理通常是最快且最便宜的。

remote.nonBatchConcurrency 控制本地/自托管提供商以及当提供商批量 API 未激活时的托管提供商所使用的内联嵌入调用。Ollama 对于非批量索引默认为 1,以避免压垮较小的本地主机;在较大的机器上请设置更高的值。

这与 sync.embeddingBatchTimeoutSeconds 不同,后者控制内联嵌入调用的超时时间。


索引会话转录并通过 memory_search 展示它们:

类型默认值描述
experimental.sessionMemorybooleanfalse启用会话索引
sourcesstring[]["memory"]添加 "sessions" 以包含转录
sync.sessions.deltaBytesnumber100000重新索引的字节阈值
sync.sessions.deltaMessagesnumber50重新索引的消息阈值


类型默认值描述
store.vector.enabledbooleantrue使用 sqlite-vec 进行向量查询
store.vector.extensionPathstringbundled覆盖 sqlite-vec 路径

当 sqlite-vec 不可用时,OpenClaw 会自动回退到进程内余弦相似度计算。


类型默认值描述
store.pathstring~/.openclaw/memory/{agentId}.sqlite索引位置(支持 {agentId} 令牌)
store.fts.tokenizerstringunicode61FTS5 分词器(unicode61trigram

设置 memory.backend = "qmd" 以启用。所有 QMD 设置均位于 memory.qmd 下:

类型默认值描述
commandstringqmdQMD 可执行文件路径;当服务 PATH 与您的 Shell 不同时,请设置绝对路径
searchModestringsearch搜索命令:searchvsearchquery
includeDefaultMemorybooleantrue自动索引 MEMORY.md + memory/**/*.md
paths[]array额外路径:{ name, path, pattern? }
sessions.enabledbooleanfalse索引会话记录
sessions.retentionDaysnumber记录保留
sessions.exportDirstring导出目录

searchMode: "search"OpenClaw 仅为词法/BM25 模式。对于该模式,OpenClaw 不会运行语义向量就绪探测或 QMD 嵌入维护,包括在 memory status --deep 期间;vsearchquery 仍然需要 QMD 向量就绪和嵌入。

OpenClaw 优先使用当前的 QMD 集合和 MCP 查询形式,但通过在需要时尝试兼容的集合模式标志和较旧的 MCP 工具名称,保持旧版 QMD 版本正常工作。当 QMD 宣布支持多个集合过滤器时,同源集合将由一个 QMD 进程搜索;较旧的 QMD 构建版本保留按集合兼容的路径。同源意味着持久化内存集合被分组在一起,而会话记录集合保持为一个单独的组,因此源多样化仍然具有这两个输入。

更新计划
类型默认值描述
update.intervalstring5m刷新间隔
update.debounceMsnumber15000文件更改防抖
update.onBootbooleantrue当长期存在的 QMD 管理器打开时刷新;同时也控制可选的启动时刷新
update.startupstringoff可选的网关启动时刷新:offidleimmediate
update.startupDelayMsnumber120000startup: "idle" 刷新运行前的延迟
update.waitForBootSyncbooleanfalse阻止管理器打开,直到其初始刷新完成
update.embedIntervalstring单独的嵌入节奏
update.commandTimeoutMsnumberQMD 命令超时
update.updateTimeoutMsnumberQMD 更新操作超时
update.embedTimeoutMsnumberQMD 嵌入操作超时
Limits
KeyTypeDefaultDescription
limits.maxResultsnumber6最大搜索结果
limits.maxSnippetCharsnumber限制片段长度
limits.maxInjectedCharsnumber限制总注入字符数
limits.timeoutMsnumber4000搜索超时
Scope

控制哪些会话可以接收 QMD 搜索结果。架构与 session.sendPolicy 相同:

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

默认配置允许直接消息和渠道会话,但仍然拒绝群组。

默认为仅限私信。match.keyPrefix 匹配标准化的会话键;match.rawKeyPrefix 匹配包含 `agent:

:` 的原始键。

Citations

memory.citations 适用于所有后端:

ValueBehavior
auto (默认)在片段中包含 `Source:

页脚 | |on | 始终包含页脚 | |off` | 省略页脚(路径仍在内部传递给代理) |

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 是在 plugins.entries.memory-core.config.dreaming 下配置的,而不是在 agents.defaults.memorySearch 下。

Dreaming 作为一次计划扫描运行,并使用内部的浅睡/深睡/REM 阶段作为实现细节。

有关概念行为和斜杠命令,请参阅 Dreaming

类型默认值描述
enabledbooleanfalse完全启用或禁用做梦
frequencystring0 3 * * *完整梦境扫描的可选 cron 频率
modelstring默认模型可选的 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",
},
},
},
},
},
}