首页 / OpenClaw 教程 / 上下文与记忆进阶:长对话怎么管、记住的东西存哪、窗口和知识库的区别

OpenClaw 教程

上下文与记忆进阶:长对话怎么管、记住的东西存哪、窗口和知识库的区别

本教程共 26 篇 · 第 20 篇 · 更新于 2026-07-27 · 约 8 分钟阅读

OpenClaw上下文记忆压缩Context EngineDreamingMEMORY.md知识库

20. 上下文与记忆的进阶管理

本节目标:分清”上下文窗口”和”持久记忆”这两件常被混为一谈的事,搞懂长对话怎么不掉线,记住的东西存在哪,以及上下文窗口和知识库到底差在哪。

先分清两件事

很多新手会把”上下文”和”记忆”当成一回事,其实它们天差地别。

上下文(Context)是 OpenClaw 每次运行喂给模型的一切内容。它受模型的上下文窗口(token 上限)约束,是临时、易逝的。一轮对话跑完,窗口里的东西就随这次运行散了。

**记忆(Memory)**是写在磁盘上的 Markdown 文件。它能跨会话留存,下次还能重新加载。模型只记得被存进文件的东西,没有隐藏状态。

一句话记住:上下文是会消失的工作台,记忆是能留下的档案。

Note

“上下文”不是”记忆”。记忆可以落盘后反复读回;上下文只活在模型当前那扇窗口里。这是本章所有内容的根。

上下文是怎么装进去的

每跑一次,OpenClaw 会组装这些内容送进窗口:

  • 系统提示(System Prompt):规则、工具清单、技能列表、时间、运行时信息,以及注入的工作区文件。
  • 会话历史:你发的消息 + 助手的回复。
  • 工具调用与结果、附件:命令输出、读到的文件、图片/音频等。

想看清自己的窗口有多满,有几个现成命令:

/status            # 快速看"窗口满没满" + 会话设置
/context list      # 注入了什么、各文件大致多大
/context detail    # 更细:每文件、每工具、每技能占多少
/context map       # 一张树状图,直观看谁最占地方
/usage tokens      # 回复末尾附上 token 用量
/compact           # 把旧历史压成摘要,腾出窗口

长对话怎么管:压缩与修剪

聊久了窗口必然不够。OpenClaw 用两招腾地方,要注意它们不一样。

压缩(Compaction):把较早的历史总结成一条摘要,写进会话记录,同时保留近期的消息。相当于”把前情提要写成一段,细节丢掉”。默认由内置的 legacy 上下文引擎负责。

修剪(Pruning):只从内存里的 prompt 中丢掉旧的工具结果,省出窗口空间。它不重写磁盘上的完整会话记录,所以你之后仍能翻看全部历史。

Tip

压缩会留一条摘要进记录;修剪只动内存、磁盘全历史还在。两者常配合:压缩管”前情”,修剪管”中间的工具垃圾”。

记忆存哪三个文件

OpenClaw 的记忆就是普通 Markdown,放在智能体的工作区(默认 ~/.openclaw/workspace),一共三类:

  • MEMORY.md:长期记忆。耐久的事实、偏好、已做决定。会话开始时加载。它不是流水账,也不是逐字稿,要精炼。
  • memory/YYYY-MM-DD.md(或带后缀的 memory/YYYY-MM-DD-<slug>.md):每日笔记。当天的观察、随手记。今天和昨天的会自动随 /new/reset 加载。
  • DREAMS.md(可选):梦境日记与巩固摘要,主要给人看。

想让助手记住什么,直接说就行:“记住我偏好 TypeScript。“它会写进对应文件。

Warning

MEMORY.md 涨过了引导预算,OpenClaw 会保留磁盘上的完整文件,但截断注入上下文的那份副本。这是信号:把细节挪到 memory/*.mdMEMORY.md 只留耐久摘要。用 /context list/context detailopenclaw doctor 能看原始大小、注入大小和是否截断。

怎么检索记忆:两个工具

记忆写下去,还得能找回来。默认由 memory-core 插件提供两个工具:

  • memory_search:用语义搜索找相关笔记,措辞不同也能命中。配置了 embedding 提供方后,它用混合搜索——向量相似度(语义)加关键词匹配(精确术语、ID、代码符号)。默认用 OpenAI 的 embedding,也可改成 Gemini、Voyage、Mistral、Bedrock、DeepInfra、本地 GGUF、Ollama、LM Studio、GitHub Copilot 或任意 OpenAI 兼容端点。
  • memory_get:读取指定的记忆文件或某几行。

自动保存与”睡眠巩固”

光靠手动记会漏。OpenClaw 有两层兜底。

自动记忆刷新(Memory Flush):在压缩把对话总结之前,OpenClaw 会先静默跑一轮,提醒助手把对话里的重要上下文存进记忆文件。默认开启;不想用就设 agents.defaults.compaction.memoryFlush.enabled: false

Dreaming(梦境巩固):可选的后台记忆整理。它收集短期召回信号、给候选打分,只把合格的项提升进 MEMORY.md。分三个阶段按顺序跑:light(整理/暂存短期素材)、REM(反思、浮现主题)、deep(把耐久事实提升进 MEMORY.md)。只有 deep 会真正写 MEMORY.md

// openclaw.json
{
  plugins: {
    entries: {
      "memory-core": {
        config: {
          dreaming: { enabled: true } // 默认 false;开启后 memory-core 自动管定时任务
        }
      }
    }
  }
}
Note

Dreaming 默认关闭。开启后 memory-core 自己维护一条定时任务(默认每天凌晨 3 点),不用手动 openclaw cron add。聊天里用 /dreaming on|off 开关,用 /dreaming status 查看状态。阶段摘要写进 DREAMS.md 供人审阅。

想当知识库用:memory-wiki

如果你希望长期记忆更像”被维护的知识库”,而非零散笔记,可装内置的 memory-wiki 插件。它把耐久记忆编译成一个 wiki 库:确定性页面结构、带证据的论点、矛盾与时效追踪、生成仪表盘。

不取代活跃记忆插件。记忆插件依旧负责召回、提升和 Dreaming;memory-wiki 只是在旁边加一层有出处可循的知识层。

上下文引擎:谁决定装什么

上下文引擎控制每次运行怎么组装上下文:消息怎么选、旧历史怎么总结、跨子代理边界怎么管。OpenClaw 内置 legacy 引擎并默认使用;想换不同组装/压缩/跨会话召回行为,才装插件引擎并选它(plugins.slots.contextEngine)。

要分清:记忆插件plugins.slots.memory)和上下文引擎是两回事。记忆插件管检索,上下文引擎管”模型这轮到底看到什么”。两者能协作——引擎组装时去调记忆插件的数据。

一点小提醒:行动敏感记忆

多数记忆是普通笔记。但当一条笔记涉及审批权限、临时约束、移交他人、失效条件、何时能动手、来源或 owner 是否影响信任时,要写清”什么时候能动、什么时候不能”。记忆能保留审批背景,但不替你强制策略——硬控制还得靠 OpenClaw 的审批设置、沙箱和定时任务。

Tip

简单事实就简短记;只有”丢了时机/权限/失效信息会让助手以后干错事”的笔记,才值得写清行动边界。


本章是 13–20 这批进阶内容的收尾。到这里,你已经能管住长对话、存好该记的东西,并分清上下文窗口与持久知识库的边界。本教程基准版本为 2026.7.1-2(npm latest),默认运行时官方 id 是 openclaw,社区旧称 Pi;Node 需满足 24.15+ / 22 LTS 22.22.3+ / 25.9+ 之一。后续若想深挖,可回到各章的官方概念页继续。