快速开始

记忆配置参考

此页面列出了 OpenClaw 记忆搜索的每个配置开关。有关概念概览,请参阅:

除非另有说明,所有记忆搜索设置都位于 openclaw.json 中的 agents.defaults.memorySearch 下(或每个 agent 的 agents.list[].memorySearch 覆盖项)。


提供商选择

键名 类型 默认值 描述
enabled boolean true 启用或禁用记忆搜索
provider string "openai" 嵌入适配器 ID,例如 bedrockdeepinfrageminigithub-copilotlocalmistralollamaopenaiopenai-compatiblevoyage;也可以是已配置的 models.providers.<id>,其 api 指向记忆嵌入适配器或 OpenAI 兼容模型 API
model string 提供商默认值 嵌入模型名称
fallback string "none" 主提供商失败时使用的回退适配器 ID

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

provider 未设置、存在旧版 provider: "auto",或 provider: "none" 有意选择仅 FTS 模式时,在嵌入不可用的情况下,记忆召回仍可 使用词法 FTS 排名。

显式的非本地提供商会失败关闭。如果你将 memorySearch.provider 设置为 具体的远程后端提供商,例如 Bedrock、DeepInfra、Gemini、GitHub Copilot、LM Studio、Mistral、Ollama、OpenAI、Voyage,或 OpenAI 兼容的 自定义提供商,而该提供商在运行时不可用,memory_search 会返回不可用结果,而不是静默使用仅 FTS 召回。请修复 提供商/认证配置、切换到可访问的提供商,或在你希望有意使用仅 FTS 召回时设置 provider: "none"

自定义提供商 ID

memorySearch.provider 可以指向自定义 models.providers.<id> 条目,用于特定记忆的提供商适配器(例如 ollama),或用于 OpenAI 兼容模型 API(例如 openai-responses / openai-completions)。OpenClaw 会解析该提供商的 api 所有者用于嵌入适配器,同时保留自定义提供商 ID 以处理端点、认证和模型前缀。这使多 GPU 或多主机设置可以将记忆嵌入专用于特定本地端点:

json5
{  models: {    providers: {      "ollama-5080": {        api: "ollama",        baseUrl: "http://gpu-box.local:11435",        apiKey: "ollama-local",        models: [{ id: "qwen3-embedding:0.6b", name: "Qwen3 Embedding 0.6B" }],      },    },  },  agents: {    defaults: {      memorySearch: {        provider: "ollama-5080",        model: "qwen3-embedding:0.6b",      },    },  },}

API key 解析

远程嵌入需要 API key。Bedrock 改用 AWS SDK 默认凭证链(实例角色、SSO、访问密钥或 Bedrock API key)。

提供商 环境变量 配置键
Bedrock AWS 凭证链,或 AWS_BEARER_TOKEN_BEDROCK 不需要 API key
DeepInfra DEEPINFRA_API_KEY models.providers.deepinfra.apiKey
Gemini GEMINI_API_KEY models.providers.google.apiKey
GitHub Copilot COPILOT_GITHUB_TOKENGH_TOKENGITHUB_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 聊天凭证的通用 OpenAI 兼容 /v1/embeddings 服务器使用 provider: "openai-compatible"

remote.baseUrlstring

自定义 API 基础 URL。

remote.apiKeystring

覆盖 API key。

remote.headersobject

额外 HTTP 标头(与提供商默认值合并)。

json5
{  agents: {    defaults: {      memorySearch: {        provider: "openai-compatible",        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
json5
{  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 嵌入配置

Bedrock 使用 AWS SDK 默认凭证链以及 OpenClaw 检查的 bearer token,因此配置中不会存储 API key。如果 OpenClaw 在具有 Bedrock 权限实例角色的 EC2 上运行,只需设置提供商和模型:

json5
{  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, 384, 512, 768, 1024, 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)和带区域前缀的推理配置文件 ID(例如 us.amazon.titan-embed-text-v2:0)会继承基础模型的配置。

**区域:**按以下顺序解析:memorySearch.remote.baseUrl 覆盖项、models.providers.amazon-bedrock.baseUrl 配置、AWS_REGIONAWS_DEFAULT_REGION,然后默认使用 us-east-1

**身份验证:**OpenClaw 会先检查 AWS_ACCESS_KEY_ID + AWS_SECRET_ACCESS_KEYAWS_BEARER_TOKEN_BEDROCK,然后回退到标准 AWS SDK 默认凭证提供商链:

  1. 环境变量(AWS_ACCESS_KEY_ID + AWS_SECRET_ACCESS_KEY),除非同时设置了 AWS_PROFILE
  2. SSO(仅在已配置 SSO 字段时)
  3. 共享凭证和配置文件(fromIni,包含 AWS_PROFILE
  4. 凭证进程(AWS 配置文件中的 credential_process
  5. Web 身份令牌凭证
  6. ECS 或 EC2 实例元数据凭证

**IAM 权限:**IAM 角色或用户需要:

json
{  "Effect": "Allow",  "Action": "bedrock:InvokeModel",  "Resource": "*"}

为实现最小权限,请将 InvokeModel 限定到特定模型:

text
arn:aws:bedrock:*::foundation-model/amazon.titan-embed-text-v2:0
本地(GGUF + llama.cpp)
类型 默认值 描述
local.modelPath string 自动下载 GGUF 模型文件路径
local.modelCacheDir string node-llama-cpp 默认值 下载模型的缓存目录
local.contextSize number | "auto" 4096 嵌入上下文的上下文窗口大小。4096 可覆盖常见分块(128-512 个 token),同时限制非权重 VRAM。受限主机可降低到 1024-2048。"auto" 使用模型训练时的最大值,不建议用于 8B+ 模型(Qwen3-Embedding-8B:最高 40 960 个 token 可能将 VRAM 推到约 32 GB)。

先安装官方 llama.cpp 提供商:openclaw plugins install @openclaw/llama-cpp-provider。 默认模型:embeddinggemma-300m-qat-Q8_0.gguf(约 0.6 GB,自动下载)。源码检出仍需要原生构建批准:先运行 pnpm approve-builds,再运行 pnpm rebuild node-llama-cpp

使用独立 CLI 验证 Gateway 网关使用的同一提供商路径:

bash
openclaw memory status --deep --agent mainopenclaw memory index --force --agent main

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

内联嵌入超时

sync.embeddingBatchTimeoutSecondsnumber

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

未设置时使用提供商默认值:对于 localollamalmstudio 等本地/自托管提供商为 600 秒,对于托管提供商为 120 秒。当本地受 CPU 限制的嵌入批次运行正常但较慢时,请增大此值。


索引行为

除非另有说明,全部位于 memorySearch.sync 下:

类型 默认值 描述
onSessionStart boolean true 会话开始时同步记忆索引
onSearch boolean true 检测到内容变化后,在搜索时延迟同步
watch boolean true 监视记忆文件(chokidar)并在变化时安排重新索引
watchDebounceMs number 1500 用于合并快速文件监视事件的防抖窗口
intervalMinutes number 0 定期重新索引间隔(分钟,0 表示禁用)
sessions.postCompactionForce boolean true 压缩触发的转录更新后强制重新索引会话
chunking.tokensnumber

在嵌入前拆分记忆源时使用的分块大小,单位为 token(默认值:400)。

chunking.overlapnumber

相邻分块之间的 token 重叠量,用于保留拆分边界附近的上下文(默认值:80)。


混合搜索配置

全部位于 memorySearch.query 下:

类型 默认值 描述
maxResults number 6 注入前返回的最大记忆命中数
minScore number 0.35 纳入命中的最低相关性分数

以及 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 天分数减半

常青文件(MEMORY.mdmemory/ 中非日期命名的文件)永不衰减。

完整示例

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

其他记忆路径

类型 描述
extraPaths string[] 要索引的其他目录或文件
json5
{  agents: {    defaults: {      memorySearch: {        extraPaths: ["../team-docs", "/srv/shared-notes"],      },    },  },}

路径可以是绝对路径,也可以相对于工作区。目录会递归扫描 .md 文件。符号链接处理取决于当前后端:内置引擎会跳过符号链接,而 QMD 会遵循底层 QMD 扫描器行为。

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


多模态记忆(Gemini)

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

类型 默认值 描述
multimodal.enabled boolean false 启用多模态索引
multimodal.modalities string[] -- ["image"]["audio"]["all"]
multimodal.maxFileBytes number 10485760 用于索引的最大文件大小(10 MiB)

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


嵌入缓存

类型 默认值 描述
cache.enabled boolean true 在 SQLite 中缓存分块嵌入
cache.maxEntries number 未设置 缓存嵌入数量的尽力上限

在重新索引或转录更新期间,避免对未更改的文本重新生成嵌入。保持 maxEntries 未设置可使用无界缓存;当磁盘增长比峰值重新索引速度更重要时再设置它。设置后,一旦缓存超过限制,最旧的条目(按最后更新时间)会最先被清理。


批量索引

类型 默认值 描述
remote.nonBatchConcurrency number 4 并行内联嵌入
remote.batch.enabled boolean false 启用批量嵌入 API
remote.batch.concurrency number 2 并行批量作业
remote.batch.wait boolean true 等待批量完成
remote.batch.pollIntervalMs number 2000 轮询间隔
remote.batch.timeoutMinutes number 60 批量超时

适用于 geminiopenaivoyage。对于大型回填,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 重新索引的消息阈值

会话转录命中也遵守 tools.sessions.visibility。默认的 tree 可见性只暴露当前会话及其派生的会话。若要从不同会话(例如私信)中召回一个无关的、同一智能体的、由 Gateway 网关分发的会话,请有意将可见性扩大到 agent(只有在也需要跨智能体召回且智能体到智能体策略允许时,才使用 all)。

下面的示例将这些设置放在 agents.defaults 下。你也可以在按智能体覆盖中应用等效的 memorySearch 设置,用于仅让一个智能体索引和搜索会话转录。

对于同一智能体的 Gateway 网关到私信召回:

内置后端

json5
{  agents: {    defaults: {      memorySearch: {        experimental: { sessionMemory: true },        sources: ["memory", "sessions"],      },    },  },  tools: {    sessions: { visibility: "agent" },  },}

QMD 后端

json5
{  agents: {    defaults: {      memorySearch: {        experimental: { sessionMemory: true },        sources: ["memory", "sessions"],      },    },  },  memory: {    backend: "qmd",    qmd: {      sessions: { enabled: true },    },  },  tools: {    sessions: { visibility: "agent" },  },}

使用 QMD 时,agents.defaults.memorySearch.experimental.sessionMemorysources: ["sessions"] 本身不会把转录导出到 QMD。还需要设置 memory.qmd.sessions.enabled: true


SQLite 向量加速(sqlite-vec)

类型 默认值 描述
store.vector.enabled boolean true 使用 sqlite-vec 进行向量查询
store.vector.extensionPath string 内置 覆盖 sqlite-vec 路径

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


索引存储

内置记忆索引位于每个智能体的 OpenClaw SQLite 数据库: agents/<agentId>/agent/openclaw-agent.sqlite

类型 默认值 描述
store.fts.tokenizer string unicode61 FTS5 分词器(unicode61trigram

QMD 后端配置

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

类型 默认值 描述
command string qmd QMD 可执行文件路径;当服务 PATH 与你的 shell 不同时,请设置绝对路径
searchMode string search 搜索命令:searchvsearchquery
rerank boolean -- searchMode: "query" 和 QMD 2.1+ 一起设置为 false,以跳过 QMD 重排序
includeDefaultMemory boolean true 自动索引 MEMORY.md + memory/**/*.md
paths[] array -- 额外路径:{ name, path, pattern? }
sessions.enabled boolean false 将会话转录导出到 QMD
sessions.retentionDays number -- 转录保留期
sessions.exportDir string -- 导出目录

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

rerank: false 只会更改 QMD query 模式,并且需要 QMD 2.1 或更新版本。在直接 CLI 模式下,OpenClaw 会传递 --no-rerank;在由 mcporter 支持的 MCP 模式下,它会向 QMD 的统一查询工具传递 rerank: false。保持未设置即可使用 QMD 默认的查询重排序行为。

OpenClaw 优先使用当前的 QMD 集合和 MCP 查询形状,但会在需要时尝试兼容的集合模式标志和旧版 MCP 工具名称,从而保持旧版 QMD 发布可用。当 QMD 声明支持多个集合过滤器时,同源集合会用一个 QMD 进程搜索;旧版 QMD 构建会保留按集合划分的兼容路径。同源表示持久记忆集合(默认记忆文件加自定义路径)会归为一组,而会话转录集合会保留为单独一组,因此来源多样化仍然同时拥有两类输入。

mcporter 集成

全部位于 memory.qmd.mcporter 下。通过长驻 mcporter MCP 守护进程路由 QMD 搜索,而不是每次查询都生成 qmd,从而降低较大模型的冷启动开销。

类型 默认值 描述
enabled boolean false 通过 mcporter 路由 QMD 调用,而不是每次请求都生成 qmd
serverName string qmd 运行带有 lifecycle: keep-aliveqmd mcp 的 mcporter 服务器名称
startDaemon boolean true enabled 为 true 时自动启动 mcporter 守护进程

需要安装 mcporter 并位于 PATH 上,还需要配置一个运行 qmd mcp 的 mcporter 服务器。对于每次查询生成进程的成本可接受的更简单本地设置,请保持禁用。

更新时间表
类型 默认值 描述
update.interval string 5m 刷新间隔
update.debounceMs number 15000 对文件变更防抖
update.onBoot boolean true 长驻 QMD 管理器启动时刷新;设置为 false 可跳过立即启动更新
update.startup string off 可选的 Gateway 网关启动 QMD 初始化:offidleimmediate
update.startupDelayMs number 120000 startup: "idle" 刷新运行前的延迟
update.waitForBootSync boolean false 阻塞管理器启动,直到其初始刷新完成
update.embedInterval string 60m 单独的嵌入节奏
update.commandTimeoutMs number 30000 QMD 维护命令(集合 list/add)的超时
update.updateTimeoutMs number 120000 每个 qmd update 周期的超时
update.embedTimeoutMs number 120000 每个 qmd embed 周期的超时
限制
类型 默认值 描述
limits.maxResults number 4 最大搜索结果
limits.maxSnippetChars number 450 限制片段长度
limits.maxInjectedChars number 2200 限制注入字符总数
limits.timeoutMs number 4000 搜索超时
范围

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

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

随附的默认值是仅限私信/direct,拒绝群组和其他渠道类型。match.keyPrefix 匹配规范化后的会话键;match.rawKeyPrefix 匹配包含 agent:<id>: 的原始键。

引用

memory.citations 适用于所有后端:

行为
auto(默认) 在代码片段中包含 Source: <path#line> 页脚
on 始终包含页脚
off 省略页脚(路径仍会在内部传递给智能体)

启用 gateway-start QMD 初始化时,OpenClaw 只会为符合条件的智能体启动 QMD。如果 update.onBoot 为 true,且未配置间隔/embed 维护,启动时会使用一次性管理器执行启动刷新,然后关闭它。如果配置了更新或 embed 间隔,启动时会打开长期运行的 QMD 管理器,使其拥有 watcher 和间隔计时器;update.onBoot: false 只会跳过立即启动刷新。

完整 QMD 示例

json5
{  memory: {    backend: "qmd",    citations: "auto",    qmd: {      includeDefaultMemory: true,      update: { interval: "5m", debounceMs: 15000 },      limits: { maxResults: 4, timeoutMs: 4000 },      scope: {        default: "deny",        rules: [{ action: "allow", match: { chatType: "direct" } }],      },      paths: [{ name: "docs", path: "~/notes", pattern: "**/*.md" }],    },  },}

Dreaming

Dreaming 配置在 plugins.entries.memory-core.config.dreaming 下,而不是 agents.defaults.memorySearch 下。

Dreaming 作为一次定时扫描运行,并将内部的 light/deep/REM 阶段作为实现细节。

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

用户设置

类型 默认值 描述
enabled boolean false 完全启用或禁用 Dreaming
frequency string 0 3 * * * 完整 Dreaming 扫描的可选 cron 频率
model string 默认模型 可选的梦日记子智能体模型覆盖
phases.deep.maxPromotedSnippetTokens number 160 从每个提升到 MEMORY.md 的短期召回代码片段中保留的最大估算 token 数;来源元数据仍保持可见

示例

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

相关内容

Was this useful?
On this page

On this page