快速开始

记忆配置参考

本页列出 OpenClaw 记忆搜索的每一个配置开关。概念概览请参阅:

除非另有说明,所有记忆搜索设置都位于 openclaw.jsonagents.defaults.memorySearch 下。


提供商选择

类型 默认值 描述
provider string 自动检测 嵌入适配器 ID,例如 bedrockdeepinfrageminigithub-copilotlocalmistralollamaopenaivoyage;也可以是已配置的 models.providers.<id>,其 api 指向这些适配器之一
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 身份或共享配置),则选择。

  • 支持 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.apiKeystring

    覆盖 API 密钥。

    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 凭证解析顺序:

    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
    
    本地(GGUF + node-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 → 约 32 GB VRAM,而 4096 时约 8.8 GB)。

    默认模型:embeddinggemma-300m-qat-Q8_0.gguf(约 0.6 GB,自动下载)。源码检出仍然需要原生构建批准:先运行 pnpm approve-builds,再运行 pnpm rebuild node-llama-cpp

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

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

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

    内联嵌入超时

    sync.embeddingBatchTimeoutSecondsnumber

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

    未设置时使用提供商默认值:对于 localollamalmstudio 等本地/自托管提供商为 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 天分数减半

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

    完整示例

    {
      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 扫描器行为。

    对于按智能体限定的跨智能体 transcript 搜索,请使用 agents.list[].memorySearch.qmd.extraCollections,而不是 memory.qmd.paths。这些额外集合遵循相同的 { path, name, pattern? } 结构,但它们会按智能体合并,并且当路径指向当前工作区外部时,可以保留显式共享名称。如果同一个已解析路径同时出现在 memory.qmd.pathsmemorySearch.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 -- 批处理超时

    适用于 openaigeminivoyage。对于大规模回填,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 分词器(unicode61trigram

    QMD 后端配置

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

    类型 默认值 描述
    command string qmd QMD 可执行文件路径;当服务 PATH 与你的 shell 不同时,设置为绝对路径
    searchMode string search 搜索命令:searchvsearchquery
    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 不会为该模式运行语义向量就绪探测或 QMD embedding 维护,包括执行 memory status --deep 时;vsearchquery 仍然要求 QMD 向量就绪和 embeddings。

    OpenClaw 优先使用当前的 QMD collection 和 MCP 查询形态,但会在需要时尝试兼容的 collection pattern 标志和较旧的 MCP 工具名称,以保持较旧的 QMD 版本可用。当 QMD 声明支持多个 collection 过滤器时,同源 collection 会使用一个 QMD 进程进行搜索;较旧的 QMD 构建仍使用逐 collection 的兼容路径。同源意味着持久化记忆 collection 会分组在一起,而会话 transcript collection 仍保持为单独分组,因此来源多样化仍然同时包含两类输入。

    更新计划
    类型 默认值 描述
    update.interval string 5m 刷新间隔
    update.debounceMs number 15000 对文件更改进行 debounce
    update.onBoot boolean true 长驻 QMD 管理器打开时刷新;同时控制选择启用的启动刷新
    update.startup string off 可选的 Gateway 网关启动刷新:offidleimmediate
    update.startupDelayMs number 120000 startup: "idle" 刷新运行前延迟
    update.waitForBootSync boolean false 阻塞管理器打开,直到其初始刷新完成
    update.embedInterval string -- 单独的 embedding 节奏
    update.commandTimeoutMs number -- QMD 命令的超时时间
    update.updateTimeoutMs number -- QMD 更新操作的超时时间
    update.embedTimeoutMs number -- QMD embed 操作的超时时间
    限制
    类型 默认值 描述
    limits.maxResults number 6 最大搜索结果数
    limits.maxSnippetChars number -- 限制 snippet 长度
    limits.maxInjectedChars number -- 限制注入字符总数
    limits.timeoutMs number 4000 搜索超时时间
    范围

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

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

    随附默认值允许 direct 和 channel 会话,同时仍拒绝 groups。

    默认仅限私信。match.keyPrefix 匹配规范化的会话键;match.rawKeyPrefix 匹配包含 agent:<id>: 的原始键。

    引用

    memory.citations 适用于所有后端:

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

    QMD 启动刷新会在 Gateway 网关启动期间使用一次性子进程路径。当记忆搜索为交互式使用而打开时,长驻 QMD 管理器仍负责常规文件 watcher 和间隔 timer。

    完整 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 作为一次定时 sweep 运行,并使用内部 light/deep/REM 阶段作为实现细节。

    关于概念行为和 slash commands,请参阅 Dreaming

    用户设置

    类型 默认值 描述
    enabled boolean false 完全启用或禁用 dreaming
    frequency string 0 3 * * * 完整 dreaming sweep 的可选 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",
              },
            },
          },
        },
      },
    }
    

    相关