内存概览
内存如何工作。
内置引擎
默认的 SQLite 后端。
内存搜索
搜索管道和调优。
活动内存
用于交互式会话的内存子代理。
openclaw.json 顶层的 memory 下。搜索默认值使用 memory.search;按代理的搜索覆盖使用 agents.entries.*.memory.search。
对于推荐的个人代理工作流,请使用
memory.search.rememberAcrossConversations。高级活动内存定位、
模型、提示词和延迟控制位于 plugins.entries.active-memory 下。请参见 活动内存,了解两种激活路径、
会话记录持久化以及安全发布指南。跨会话记忆
仅当只有受信任的个人代理应使用跨会话转录回忆时,按代理进行配置:
memory.search 继承规则,并支持按代理覆盖。未设置时,仅当全局
session.dmScope 未设置或为 "main",且没有任何绑定配置 session.dmScope
覆盖时,才默认为开启。任何已配置的 DM 隔离都会使其默认为关闭。显式设置为 true 或
false 始终优先。启用后会启用会话转录索引,并将 sessions 添加到该代理解析后的记忆源中。
OpenClaw 的内置记忆提供商支持此受保护路径。其他记忆提供商可以继续使用自己的
回忆钩子和高级 Active Memory 工具,但除非当前提供商支持受保护的私密转录回忆,否则会跳过此设置。
openclaw doctor 会报告不受支持的提供商,或报告显式的 Active Memory toolsAllow 列表中未包含
memory_search 的情况。
检索边界比一般会话搜索更窄:
- 仅同一代理已识别的私密对话符合条件
- 正在回答的对话会被排除
- 群组和频道会被排除为来源和目标
- 未知的对话类型会失败并关闭
- 沙箱化回忆不能使用特殊的跨会话授权
tools.sessions.visibility、会话密钥、转录存储、传递路由,也不会更改
sessions_list、sessions_history 和 sessions_send 的权限。Active Memory 会执行一次有边界的只读检索;不可用或超时的检索不会阻塞回复。
提供方选择
当未设置
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 排名。
明确指定的非本地提供方会在失败时直接返回错误。如果你将 memory.search.provider 设置为
Bedrock、DeepInfra、Gemini、GitHub
Copilot、LM Studio、Mistral、Ollama、OpenAI、Voyage 或 OpenAI 兼容的
自定义提供方等具体的远程后端提供方,并且该提供方在运行时不可用,memory_search
会返回不可用结果,而不是静默退回到仅 FTS 检索。请修复
提供方/身份验证配置,切换到可访问的提供方,或者如果你希望有意使用仅 FTS 检索,
请设置 provider: "none"。
自定义提供方 ID
memory.search.provider 可以指向自定义的 models.providers.<id> 条目,用于内存专用的提供方适配器(例如 ollama),或用于 OpenAI 兼容的模型 API(例如 openai-responses / openai-completions)。OpenClaw 会解析该提供方的 api 所属适配器,同时保留自定义提供方 ID,以处理端点、身份验证和模型前缀。这使多 GPU 或多主机设置能够将内存嵌入专用于特定的本地端点:
API 密钥解析
远程嵌入需要 API 密钥。Bedrock 则使用 AWS SDK 默认凭证链(实例角色、SSO、访问密钥或 Bedrock API 密钥)。Codex OAuth 仅覆盖聊天/补全,不满足嵌入请求。
远程端点配置
对于不应继承全局 OpenAI 聊天凭证的通用 OpenAI 兼容/v1/embeddings 服务,请使用 provider: "openai-compatible"。
string
自定义 API 基础 URL。
string
覆盖 API 密钥。
object
额外的 HTTP 标头(与提供方默认值合并)。
提供方特定配置
Gemini
Gemini
| 键 | 类型 | 默认值 | 描述 |
| ---------------------- | ---------------------- | ------------------------------------------- |
|
model | string | gemini-embedding-001 | 也支持 gemini-embedding-2-preview |
| outputDimensionality | number | 3072 | 对于 Embedding 2:768、1536 或 3072 |OpenAI 兼容输入类型
OpenAI 兼容输入类型
OpenAI 兼容的嵌入端点可以选择启用提供方特定的 更改这些值会影响提供方批量索引的嵌入缓存标识;当上游模型对这些标签的处理方式不同时,应随后执行一次内存重建索引。
input_type 请求字段。这对于需要为查询和文档嵌入使用不同标签的非对称嵌入模型很有用。Bedrock
Bedrock
Bedrock 嵌入配置
Bedrock 使用 AWS SDK 默认凭证链,再加上 OpenClaw 检查过的 bearer token,因此配置中不会存储 API key。如果 OpenClaw 运行在启用了 Bedrock 的 EC2 实例角色上,只需设置 provider 和 model:model | string | amazon.titan-embed-text-v2:0 | 任意 Bedrock 嵌入模型 ID |
| outputDimensionality | number | 模型默认值 | 对于 Titan V2:256、512 或 1024 |支持的模型(带有家族检测和维度默认值):带吞吐量后缀的变体(例如
amazon.titan-embed-text-v1:2:8k)以及带区域前缀的推理配置文件 ID(例如 us.amazon.titan-embed-text-v2:0)会继承基础模型的配置。区域: 按以下顺序解析:memory.search.remote.baseUrl 覆盖值、models.providers.amazon-bedrock.baseUrl 配置、AWS_REGION、AWS_DEFAULT_REGION,最后使用默认值 us-east-1。身份验证: OpenClaw 会先检查 AWS_ACCESS_KEY_ID + AWS_SECRET_ACCESS_KEY 或 AWS_BEARER_TOKEN_BEDROCK,然后回退到标准 AWS SDK 默认凭证提供链:- 环境变量(
AWS_ACCESS_KEY_ID+AWS_SECRET_ACCESS_KEY),除非同时设置了AWS_PROFILE - SSO(仅当配置了 SSO 字段时)
- 共享凭证和配置文件(
fromIni,包含AWS_PROFILE) - 凭证进程(AWS 配置文件中的
credential_process) - Web 身份令牌凭证
- ECS 或 EC2 实例元数据凭证
InvokeModel 限定到特定模型:本地(GGUF + llama.cpp)
本地(GGUF + llama.cpp)
安装官方 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 使用的相同 provider 路径:openclaw memory status --deep 会在运行时加载完成后报告已知的 llama.cpp 后端、设备、卸载、请求的上下文以及带时间戳的内存信息;被动状态检查不会加载模型。对本地 GGUF 嵌入显式设置 provider: "local"。明确的本地配置支持 hf: 和 HTTP(S) 模型引用(通过 node-llama-cpp 的模型解析),但这不会改变默认提供方。索引行为
内存引擎负责同步、批处理、watch 以及压缩后索引启发式。OpenClaw 保持这些行为启用,并维持
默认设置,而不是暴露按安装实例划分的时序开关。
混合搜索配置
位于memory.search.query 下的所有配置:
混合检索仍处于启用状态。内置引擎始终对带日期的每日笔记应用固定的
30 天时效半衰期,并在混合相关性之后应用固定的重要性乘数,随后使用固定
lambda 值
0.7 进行 MMR 多样性排序。MEMORY.md、USER.md 以及其他长期记忆文件
不会衰减。可为空的重要性值按中性处理,因此现有索引无需迁移或新增调优键。
对已提升、受信任条目的强触发匹配,可在符合条件的交互轮次中注入最多三条
紧凑记忆。目前,根目录下的 MEMORY.md 和 USER.md 是精选的可注入层级。日记和转录内容绝不会
被自动注入。
完整示例
附加内存路径
/ 分隔、相对于根目录的 glob 来缩小目录范围;直接指定的
文件条目则会被精确索引。内置引擎会跳过符号链接。
多模态记忆(Gemini)
使用 Gemini Embedding 2 将图像和音频与 Markdown 一起建立索引:仅适用于
extraPaths 中的文件。默认记忆根目录仍仅支持 Markdown。需要 gemini-embedding-2-preview。fallback 必须为 "none"。.jpg、.jpeg、.png、.webp、.gif、.heic、.heif(图像);.mp3、.wav、.ogg、.opus、.m4a、.aac、.flac(音频)。
嵌入缓存
在重新索引或转录更新期间,防止对未更改的文本重新生成嵌入。
批量索引
批量索引
可用于
gemini、openai 和 voyage。对于大规模回填,OpenAI 批量通常是最快且最便宜的。
并发、轮询和超时行为由提供方负责。
会话记忆搜索
适用于
gemini、openai 和 voyage。对于大型回填任务,OpenAI 批处理通常速度最快且成本最低。
批处理启用是唯一的远程批处理设置。并发、轮询和超时行为由提供商负责。
会话记忆搜索
索引会话转录内容,并通过memory_search 呈现:
会话记忆钩子会将对话摘录保存到
<workspace>/memory/,而 memory 源已经会为其建立索引。
如果同时启用了转录索引,同一段对话可能会同时出现在 memory 和 sessions 中,从而导致搜索结果重叠,并增加嵌入处理的工作量。若只需使用钩子进行回忆,请设置 sources: ["memory"] 和 rememberAcrossConversations: false;仅设置 sources 是不够的,因为跨会话回忆会自动添加 sessions。如果需要完整转录回忆,请运行 openclaw hooks disable session-memory。只有在确实需要这两种表示形式时,才同时启用二者。tools.sessions.visibility。默认的
tree 可见性会暴露当前会话、由当前会话生成的会话,以及通过环境组感知机制监视的同代理组会话。其他不相关的会话需要使用 agent 可见性(只有在还需要跨代理回忆且代理间策略允许时,才使用 all)。
rememberAcrossConversations 不会扩大该设置。它提供了一个仅在运行时生效的单独授权,限制为
同代理私有转录,并且仅在有界的 Active Memory 过程期间有效。
下面的示例将这些设置放在顶层 memory.search 下。你也可以
在按代理的 memory.search 覆盖中应用等效设置,当只有一个
代理应当索引和搜索会话转录时。
用于同代理从网关到 DM 的回忆:
SQLite 向量加速(sqlite-vec)
当 sqlite-vec 不可用时,OpenClaw 会自动回退到进程内余弦相似度。
索引存储
内置内存索引位于每个 agent 的 OpenClaw SQLite 数据库中:agents/<agentId>/agent/openclaw-agent.sqlite。
引用
memory.citations 控制内置记忆结果的引用可见性:
梦境
梦境配置在plugins.entries.memory-core.config.dreaming 下,而不是在 memory.search 下。
梦境作为一次计划性扫描运行,并将内部的浅层/深层/REM 阶段作为实现细节。
有关概念性行为和斜杠命令,请参见 梦境。
用户设置
示例
- 梦境会将机器状态写入
memory/.dreams/。 - 梦境会将人类可读的叙述输出写入
DREAMS.md(或已有的dreams.md)。 - 深度整合会将之前的
MEMORY.md存储在基于 SQLite 的插件状态中,并在DREAMS.md中记录重写次数和要点。 - 在整合和持久化提升之前,不受信任和系统生成的候选项会在结构上被排除。
dreaming.model使用现有的插件子代理信任门控;在启用它之前,请设置plugins.entries.memory-core.subagent.allowModelOverride: true。- 当配置的模型不可用时,梦境日记会使用会话默认模型重试一次。信任或允许列表失败会被记录,不会被静默重试。
- 浅层/深层/REM 阶段策略和阈值属于内部行为,不是面向用户的配置。