Skip to main content

内存配置参考

本页列出了 OpenClaw 内存搜索的所有配置项。有关概念性概览,请参阅: 除非另有说明,所有内存搜索设置都位于 openclaw.json 中的 agents.defaults.memorySearch 下。 如果你要查找 主动记忆 功能开关和子智能体配置,它位于 plugins.entries.active-memory 下,而不是 memorySearch 主动记忆使用双门控模型:
  1. 插件必须已启用,并且目标指向当前智能体 id
  2. 请求必须是符合条件的交互式持久聊天会话
有关激活模型、插件自有配置、转录持久化以及安全发布模式,请参阅 主动记忆

提供商选择

KeyTypeDefaultDescription
providerstring自动检测嵌入适配器 ID:openaigeminivoyagemistralbedrockollamalocal
modelstring提供商默认值嵌入模型名称
fallbackstring"none"主适配器失败时使用的后备适配器 ID
enabledbooleantrue启用或禁用内存搜索

自动检测顺序

当未设置 provider 时,OpenClaw 会选择第一个可用项:
  1. local — 如果已配置 memorySearch.local.modelPath 且文件存在。
  2. openai — 如果可以解析 OpenAI key。
  3. gemini — 如果可以解析 Gemini key。
  4. voyage — 如果可以解析 Voyage key。
  5. mistral — 如果可以解析 Mistral key。
  6. bedrock — 如果 AWS SDK 凭证链可以解析(实例角色、访问密钥、profile、SSO、web identity 或共享配置)。
支持 ollama,但不会自动检测(请显式设置)。

API 密钥解析

远程嵌入需要 API 密钥。Bedrock 则改用 AWS SDK 默认凭证链(实例角色、SSO、访问密钥)。
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
BedrockAWS 凭证链不需要 API 密钥
OllamaOLLAMA_API_KEY(占位符)
Codex OAuth 仅覆盖聊天/completions,不满足嵌入请求的要求。

远程端点配置

用于自定义 OpenAI 兼容端点或覆盖提供商默认值:
KeyTypeDescription
remote.baseUrlstring自定义 API 基础 URL
remote.apiKeystring覆盖 API 密钥
remote.headersobject额外的 HTTP headers(与提供商默认值合并)
{
  agents: {
    defaults: {
      memorySearch: {
        provider: "openai",
        model: "text-embedding-3-small",
        remote: {
          baseUrl: "https://api.example.com/v1/",
          apiKey: "YOUR_KEY",
        },
      },
    },
  },
}

Gemini 专用配置

KeyTypeDefaultDescription
modelstringgemini-embedding-001也支持 gemini-embedding-2-preview
outputDimensionalitynumber3072对于 Embedding 2:768、1536 或 3072
更改模型或 outputDimensionality 会触发自动全量重新索引。

Bedrock 嵌入配置

Bedrock 使用 AWS SDK 默认凭证链 — 不需要 API 密钥。 如果 OpenClaw 运行在具有 Bedrock 权限实例角色的 EC2 上,只需设置提供商和模型:
{
  agents: {
    defaults: {
      memorySearch: {
        provider: "bedrock",
        model: "amazon.titan-embed-text-v2:0",
      },
    },
  },
}
KeyTypeDefaultDescription
modelstringamazon.titan-embed-text-v2:0任意 Bedrock 嵌入模型 ID
outputDimensionalitynumber模型默认值对于 Titan V2:256、512 或 1024

支持的模型

支持以下模型(带系列检测和维度默认值):
Model IDProviderDefault DimsConfigurable Dims
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 identity token 凭证
  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

本地嵌入配置

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.enabledbooleanfalse启用 MMR 重排序
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"],
      },
    },
  },
}
路径可以是绝对路径,也可以是相对于工作区的路径。目录会递归扫描其中的 .md 文件。符号链接的处理取决于当前使用的后端:内置引擎会忽略符号链接,而 QMD 会遵循底层 QMD 扫描器的行为。 对于按智能体范围进行的跨智能体转录搜索,请使用 agents.list[].memorySearch.qmd.extraCollections,而不是 memory.qmd.paths。这些额外集合遵循相同的 { path, name, pattern? } 结构,但它们会按智能体进行合并,并且当路径指向当前工作区外部时,可以保留显式共享名称。 如果同一个解析后的路径同时出现在 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-previewfallback 必须为 "none" 支持的格式:.jpg.jpeg.png.webp.gif.heic.heif (图片);.mp3.wav.ogg.opus.m4a.aac.flac(音频)。

嵌入缓存

KeyTypeDefaultDescription
cache.enabledbooleanfalse在 SQLite 中缓存分块嵌入
cache.maxEntriesnumber50000最大缓存嵌入条目数
可防止在重新索引或转录更新期间,对未变化的文本重复生成嵌入。

批量索引

KeyTypeDefaultDescription
remote.batch.enabledbooleanfalse启用批量嵌入 API
remote.batch.concurrencynumber2并行批量任务数
remote.batch.waitbooleantrue等待批量完成
remote.batch.pollIntervalMsnumber轮询间隔
remote.batch.timeoutMinutesnumber批量超时时间
适用于 openaigeminivoyage。对于大规模回填,OpenAI 批量通常最快且最便宜。

会话内存搜索(实验性)

索引会话转录,并通过 memory_search 提供结果:
KeyTypeDefaultDescription
experimental.sessionMemorybooleanfalse启用会话索引
sourcesstring[]["memory"]添加 "sessions" 以包含转录
sync.sessions.deltaBytesnumber100000触发重新索引的字节阈值
sync.sessions.deltaMessagesnumber50触发重新索引的消息阈值
会话索引为可选启用,并以异步方式运行。结果可能会略有滞后。会话日志保存在磁盘上,因此应将文件系统访问视为信任边界。

SQLite 向量加速(sqlite-vec)

KeyTypeDefaultDescription
store.vector.enabledbooleantrue对向量查询使用 sqlite-vec
store.vector.extensionPathstringbundled覆盖 sqlite-vec 路径
当 sqlite-vec 不可用时,OpenClaw 会自动回退到进程内余弦相似度计算。

索引存储

KeyTypeDefaultDescription
store.pathstring~/.openclaw/memory/{agentId}.sqlite索引位置(支持 {agentId} 令牌)
store.fts.tokenizerstringunicode61FTS5 分词器(unicode61trigram

QMD 后端配置

设置 memory.backend = "qmd" 以启用。所有 QMD 设置都位于 memory.qmd 下:
KeyTypeDefaultDescription
commandstringqmdQMD 可执行文件路径
searchModestringsearch搜索命令:searchvsearchquery
includeDefaultMemorybooleantrue自动索引 MEMORY.md + memory/**/*.md
paths[]array额外路径:{ name, path, pattern? }
sessions.enabledbooleanfalse索引会话转录
sessions.retentionDaysnumber转录保留期
sessions.exportDirstring导出目录
OpenClaw 优先使用当前的 QMD collection 和 MCP query 结构,但会在需要时回退到旧版 --mask collection 标志和旧版 MCP 工具名称,以保持与较早 QMD 版本的兼容性。 QMD 模型覆盖配置保留在 QMD 侧,而不是 OpenClaw 配置中。如果你需要全局覆盖 QMD 的模型,请在 Gateway 网关运行时环境中设置诸如 QMD_EMBED_MODELQMD_RERANK_MODELQMD_GENERATE_MODEL 之类的环境变量。

更新计划

KeyTypeDefaultDescription
update.intervalstring5m刷新间隔
update.debounceMsnumber15000文件变更去抖时间
update.onBootbooleantrue启动时刷新
update.waitForBootSyncbooleanfalse在刷新完成前阻塞启动
update.embedIntervalstring单独的嵌入执行周期
update.commandTimeoutMsnumberQMD 命令超时时间
update.updateTimeoutMsnumberQMD 更新操作超时时间
update.embedTimeoutMsnumberQMD 嵌入操作超时时间

限制

KeyTypeDefaultDescription
limits.maxResultsnumber6最大搜索结果数
limits.maxSnippetCharsnumber限制片段长度
limits.maxInjectedCharsnumber限制注入字符总数
limits.timeoutMsnumber4000搜索超时时间

范围

控制哪些会话可以接收 QMD 搜索结果。使用与 session.sendPolicy 相同的 schema:
{
  memory: {
    qmd: {
      scope: {
        default: "deny",
        rules: [{ action: "allow", match: { chatType: "direct" } }],
      },
    },
  },
}
默认仅限私信。match.keyPrefix 匹配规范化后的会话 key; match.rawKeyPrefix 匹配包含 agent:<id>: 的原始 key。

引用

memory.citations 适用于所有后端:
ValueBehavior
auto(默认)在片段中包含 Source: <path#line> 页脚
on始终包含页脚
off省略页脚(路径仍会在内部传递给智能体)

完整 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 配置位于 plugins.entries.memory-core.config.dreaming 下, 而不在 agents.defaults.memorySearch 下。 Dreaming 作为一次计划内扫描运行,并将内部的 light/deep/REM 阶段作为实现细节来使用。 有关概念行为和斜杠命令,请参阅 Dreaming

用户设置

KeyTypeDefaultDescription
enabledbooleanfalse完全启用或禁用 Dreaming
frequencystring0 3 * * *完整 Dreaming 扫描的可选 cron 执行周期

示例

{
  plugins: {
    entries: {
      "memory-core": {
        config: {
          dreaming: {
            enabled: true,
            frequency: "0 3 * * *",
          },
        },
      },
    },
  },
}
说明:
  • Dreaming 会将机器状态写入 memory/.dreams/
  • Dreaming 会将人类可读的叙述输出写入 DREAMS.md(或现有的 dreams.md)。
  • light/deep/REM 阶段策略和阈值属于内部行为,不是面向用户的配置。