目录
- [1. 先加载「基础身份记忆」](#1. 先加载「基础身份记忆」)
- [2. 不加载历史对话(默认)](#2. 不加载历史对话(默认))
- [3. 构建初始「空上下文」+ 记忆索引可用](#3. 构建初始「空上下文」+ 记忆索引可用)
- [4. 你发第一条消息 → 触发记忆召回](#4. 你发第一条消息 → 触发记忆召回)
- [5. 会话进行中:记忆只增不减](#5. 会话进行中:记忆只增不减)
在 OpenClaw 里,新会话刚启动时,记忆不是一次性全塞给模型,而是走一套非常固定、轻量的初始化加载 + 按需召回流程。
下面用最清晰、最贴近源码逻辑的方式讲:
新会话开始时,记忆的完整使用流程
1. 先加载「基础身份记忆」
会话刚创建,第一步只加载最少、最稳定的记忆:
- 系统提示词(system prompt)
- Agent 自身配置(角色、能力、行为规则)
- 长期记忆 MEMORY.md 中的核心摘要
只加载:用户偏好、重要规则、关键约束,不加载全文
作用:
让模型知道自己是谁、知道你是谁、知道不能做什么。
2. 不加载历史对话(默认)
新会话 = 新上下文
- 不会自动加载旧聊天记录
- 不会加载几天前的短期记忆日志
- 不会加载其他会话的内容
目的:
避免上下文污染,保证新会话干净。
3. 构建初始「空上下文」+ 记忆索引可用
此时模型的状态是:
- 有身份
- 有长期记忆摘要
- 有向量库 + SQLite 索引已经就绪
- 但没有历史对话
这是 OpenClaw 典型的冷启动状态。
4. 你发第一条消息 → 触发记忆召回
关键步骤来了:
用户输入 → 自动检索记忆 → 把相关片段注入上下文
流程:
- 对你的问题做 embedding
- 在向量库 + 关键词索引中搜索- 长期记忆 MEMORY.md
- 历史短期记忆 daily log
- 文档、知识库
- 召回 Top-K 相关片段
- 拼到 prompt 前面,再送给 LLM
所以:
新会话里,模型看似"记得以前的事",其实是每次都现查记忆库。
5. 会话进行中:记忆只增不减
对话开始后:
- 每一轮都会追加新内容到当天短期记忆 YYYY-MM-DD.md
- 重要信息会被自动提取,更新到 MEMORY.md
- 索引实时更新
但:
- 旧记忆不会自动塞进上下文
- 只有相关的才会被召回
一句话总结(最核心)
新会话开始时:
- 加载长期记忆摘要,建立身份
- 不加载历史对话
- 索引准备好
- 你一发消息,自动检索相关记忆并注入上下文
OpenClaw 的记忆本质是:
不依赖上下文窗口,依赖检索。新会话永远冷启动,再按需热加载。