跳转到内容

内存配置参考

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

Memory overview

内存的工作原理。

Builtin engine

默认的 SQLite 后端。

QMD engine

本地优先的 sidecar。

Memory search

搜索管道和调优。

Active memory

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

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


类型默认值描述
providerstring"openai"嵌入适配器 ID,例如 bedrockdeepinfrageminigithub-copilotlocalmistralollamaopenaiopenai-compatiblevoyage;也可以是已配置的 models.providers.<id>,其 api 指向内存嵌入适配器或 OpenAI 兼容的模型 API
modelstring提供商默认值嵌入模型名称
fallbackstring"none"主适配器失败时的备用适配器 ID
enabledbooleantrue启用或禁用记忆搜索

当未设置 provider 时,OpenClaw 使用 OpenAI 嵌入。显式设置 provider 以使用 Gemini、Voyage、Mistral、DeepInfra、Bedrock、GitHub Copilot、 Ollama、本地 GGUF 模型或 OpenAI 兼容的 /v1/embeddings 端点。 仍然显示 provider: "auto" 的旧配置会解析为 openai

如果您的网络无法访问 OpenAI 嵌入,内存召回将开放失败,而不是阻止当前轮次。将现有的 memorySearch.provider 字段设置为可访问的本地、Ollama、区域或 OpenAI 兼容的提供商,以恢复语义排序。

memorySearch.provider 可以指向自定义 models.providers.<id> 条目,用于特定于内存的提供商适配器(如 ollama),或用于 OpenAI 兼容的模型 API(如 openai-responses / openai-completions)。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_TOKEN, GH_TOKEN, GITHUB_TOKEN通过设备登录的身份验证配置文件
MistralMISTRAL_API_KEYmodels.providers.mistral.apiKey
OllamaOLLAMA_API_KEY (placeholder)
OpenAIOPENAI_API_KEYmodels.providers.openai.apiKey
VoyageVOYAGE_API_KEYmodels.providers.voyage.apiKey


provider: "openai-compatible"OpenAI 用于通用的 OpenAI 兼容 /v1/embeddingsOpenAI 服务器,该服务器不应继承全局 OpenAI 聊天凭据。

自定义 API 基础 URL。 覆盖 API 密钥。 额外的 HTTP 标头(与提供商默认值合并)。
{
agents: {
defaults: {
memorySearch: {
provider: "openai-compatible",
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
兼容 OpenAI 的输入类型

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

类型默认值描述
inputTypestring未设置查询和文档嵌入共享的 input_type
queryInputTypestring未设置查询时的 input_type;覆盖 inputType
documentInputTypestring未设置索引/文档 input_type;覆盖 inputType
{
agents: {
defaults: {
memorySearch: {
provider: "openai-compatible",
remote: {
baseUrl: "https://embeddings.example/v1",
apiKey: "${EMBEDDINGS_API_KEY}",
},
model: "asymmetric-embedder",
queryInputType: "query",
documentInputType: "passage",
},
},
},
}

更改这些值会影响提供商批量索引的嵌入缓存标识,当上游模型对标签的处理不同时,应该随后重新索引记忆。

Bedrock

Bedrock 使用 AWS SDK 默认凭证链 — 无需 API 密钥。如果 OpenClaw 在具有 Bedrock 启用实例角色的 EC2 上运行,只需设置提供商和模型:

{
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 个 token),同时限制了非权重 VRAM。在资源受限的主机上可降低至 1024–2048。"auto" 使用模型训练的最大值——不推荐用于 8B+ 模型(Qwen3-Embedding-8B:40 960 个 token → 约 32 GB VRAM,而在 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

为本地 GGUF 嵌入显式设置 provider: "local"。支持显式本地配置的 hf: 和 HTTP(S) 模型引用,但它们不会更改默认提供商。

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

未设置则使用提供商的默认值:本地/自托管提供商(如 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.enabledbooleantrue在 SQLite 中缓存块嵌入
cache.maxEntriesnumber50000最大缓存嵌入数

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


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

适用于 openaigeminivoyage。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 构建版本则保持逐个集合的兼容路径。同源意味着持久记忆集合被分组在一起,而会话记录集合保持为一个单独的组,以便源多样化仍然拥有这两种输入。

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

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

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

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

默认为仅私信。match.keyPrefix 匹配规范化的会话键;match.rawKeyPrefix 匹配包括 `agent:

:` 在内的原始键。

引用

memory.citations 适用于所有后端:

ValueBehavior
auto (default)在代码段中包含 `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默认模型可选的梦境日记子代理模型覆盖
phases.deep.maxPromotedSnippetTokensnumber160从提升到 MEMORY.md 的每个短期召回片段中保留的最大估算 token 数;来源元数据仍然可见
{
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",
},
},
},
},
},
}