Interview AiBox logo

Interview AiBox 实时 AI 助手,让你自信应答每一场面试

立即体验 Interview AiBoxarrow_forward
2 分钟阅读Interview AiBox Team

OpenClaw Memory 实现详解:AI Agent 的三层记忆架构

深入技术分析 OpenClaw 的记忆系统——如何分离持久化文件、可检索索引和运行时召回机制。理解生产级 AI Agent 记忆设计的必读材料。

  • sellAI 洞察
  • sellAi Agent Tools
  • sellTechnical Deep Dive
OpenClaw Memory 实现详解:AI Agent 的三层记忆架构

大多数 AI Agent 都声称有"记忆"。但很少有人解释这在实际实现中到底意味着什么。OpenClaw 的架构揭示了一种三层方法论,将持久化存储、可检索索引和运行时召回分离——这是生产团队应该仔细研究的模式。

记忆幻觉

当开发者说"AI 有记忆"时,他们通常意味着两种情况之一:

  1. 上下文持久化:对话历史被维护
  2. 基于文件的存储:笔记被写入磁盘

两者都不是实际意义上的真正记忆。真正重要的是:AI 是否在重要时刻记住重要的事情,而不污染上下文?

OpenClaw 用三层架构来回答这个问题,值得详细了解。

第一层:持久化记忆文件

基础层将持久信息存储在工作区文件中:

memory/
├── YYYY-MM-DD.md    # 每日整合笔记
├── user-profile.md   # 用户偏好和模式
├── project-context.md # 项目特定知识
└── decisions.md      # 做出的架构决策

这些文件是"长期记忆",会话结束后依然存在。与上下文窗口不同,它们无限期持久化。与简单笔记不同,它们有结构化的组织。

关键特性:

  • 位置感知:文件与代码共存于工作区
  • 人类可读:Markdown 格式既可机器解析又可人类编辑
  • 版本控制:Git 历史记录记忆演变
  • 显式性:Agent 知道记忆存储在哪里

第二层:可检索的 Transcript 索引

第二层解决检索问题。只有记忆文件是不够的——你需要能找到相关信息。

OpenClaw 在以下内容上构建索引:

  1. 记忆文件:第一层的持久化文件
  2. 会话 transcript:历史对话
  3. 外部来源:可选的文档和参考资料
class MemoryIndexManager {
  // 监听记忆文件和 transcripts
  private watcher = chokidar.watch([
    'MEMORY.md',
    'memory.md',
    'memory/**/*.md',
    'sessions/**/*.md'
  ]);
  
  // 用关键词和语义搜索索引内容
  async search(query: string): Promise<SearchResult[]> {
    const keywordResults = await this.searchKeyword(query);
    const vectorResults = await this.searchVector(query);
    return this.mergeHybridResults(keywordResults, vectorResults);
  }
}

为什么混合搜索很重要:

  • 关键词搜索:技术术语、函数名、路径的精确匹配
  • 向量搜索:概念查询的语义相似性
  • 合并结果:结合精确率和召回率

索引在文件更改时自动更新,无需手动维护即可保持搜索相关性。

第三层:运行时召回机制

第三层决定记忆何时以及如何进入模型上下文。这是大多数实现失败的地方——它们把一切都灌入上下文,用噪音淹没模型。

OpenClaw 的方法是精准的:

召回规则注入

系统提示词包含显式的召回指令:

## Memory Recall
在回答任何关于之前工作、决策、日期、人员、偏好或待办事项之前:
在 MEMORY.md + memory/*.md + 索引的 session transcripts 上运行 memory_search;
然后使用 memory_get 提取所需的行。

模型被指示先搜索,再回答。记忆不是强制的——它是按需可用的。

基于工具的检索

两个工具处理召回:

  • memory_search:查找相关记忆文件
  • memory_get:从文件中提取特定行
const memorySearchTool = {
  name: 'memory_search',
  description: '搜索记忆文件以获取相关信息',
  execute: async (query: string) => {
    const results = await index.search(query);
    return formatSearchResults(results);
  }
};

模型根据召回规则决定何时调用这些工具。这不同于"总是注入所有记忆"——只有相关片段进入上下文。

记忆 Flush:会话结束时

当会话达到上下文限制时会发生什么?OpenClaw 实现了"记忆 flush"——在压缩前提取持久记忆的专门过程。

触发条件

Flush 在以下情况下激活:

  • 总 tokens 接近上下文阈值
  • Transcript 变得太大
  • 即将运行压缩周期

Flush 过程

不是在压缩期间丢失信息,而是专门的 Agent 运行提取关键学习:

Session → Flush 触发 → 专门 Agent → 每日笔记(append-only)
const memoryFlushPlan = {
  prompt: '从这个会话中提取持久记忆...',
  relativePath: 'memory/YYYY-MM-DD.md',
  allowedTools: ['read', 'write']  // 为安全限制工具
};

Append-Only 约束

关键安全特性:flush 写入是 append-only。Agent 不能删除或覆盖现有记忆。这防止了:

  • 重要上下文被意外删除
  • 有缺陷的提取导致记忆损坏
  • 历史决策丢失

记忆如何进入模型上下文

这是最容易被误解的部分。记忆不会自动"进入模型"。它遵循特定路径:

路径 1:系统提示词规则

记忆召回规则嵌入系统提示词中。模型知道记忆在哪里以及如何访问。

路径 2:工具结果

当模型调用 memory_searchmemory_get 时:

  1. 工具返回相关片段
  2. 片段作为工具结果出现在对话中
  3. 模型将这些信息整合到响应中

路径 3:上下文引擎组装

在最终模型调用之前,上下文引擎可以注入额外的记忆上下文:

const assembled = await assembleAttemptContextEngine({
  contextEngine: params.contextEngine,
  messages: activeSession.messages,
  // 记忆可以通过 systemPromptAddition 在这里添加
});

完整闭环

用户输入 → 系统提示词(带有召回规则)

模型决定:"我需要记忆吗?"

是 → memory_search → memory_get → 工具结果

模型将记忆整合到响应中

会话结束 → memory-flush → 每日笔记追加

下一会话 → 系统提示词(新召回规则)

循环重复

为什么这个架构有效

关注点分离

  • 文件处理持久化
  • 索引处理检索
  • 运行时处理相关性
  • 模型处理解释

没有哪一层试图做所有事情。

有界上下文

只有相关片段进入上下文。模型不会被不相关的记忆淹没。搜索结果被排序和过滤。

安全约束

  • Append-only flush 防止删除
  • 受限工具防止记忆损坏
  • 显式规则防止未授权访问

优雅降级

如果记忆搜索失败,系统继续运行而不受影响。如果 flush 失败,会话仍然完成。记忆有价值但非关键。

面试含义

当面试官问关于 AI Agent 记忆系统时,他们在测试:

  1. 架构思维:你能设计多层系统吗?
  2. 约束意识:你理解为什么朴素实现会失败吗?
  3. 生产经验:你处理过上下文限制、检索失败、记忆损坏吗?

常见问题:"你如何为一个 AI 助手实现记忆?"

强有力的回答结构:

1. 承认问题:上下文窗口是有限的
2. 提出三层:持久化存储、索引、运行时召回
3. 解释检索挑战:不是"如何存储"而是"如何找到"
4. 解决上下文问题:不是"注入一切"而是"先搜索"
5. 讨论安全:Append-only、受限工具、显式规则

应避免的反模式

永远不要说:"只是保存一切到文件然后读回来。"

这忽略了:

  • 上下文窗口限制
  • 检索相关性
  • 记忆损坏风险
  • 性能成本

这对你的 AI 应用意味着什么

无论你正在构建:

  • 面试准备助手
  • 编码 Agent
  • 客服机器人
  • 研究工具

记忆架构模式都适用:

  1. 分离存储和检索
  2. 使用混合搜索实现相关性
  3. 让模型决定何时召回
  4. 约束写入操作
  5. 用有界上下文测试

Interview AiBox 的位置

Interview AiBox 为面试准备实现了复杂的上下文管理。系统需要记住:

  • 你的目标公司和职位
  • 过去的面试经历和反馈
  • 技术优势和劣势
  • 会话特定上下文

这需要与 OpenClaw 展示的相同架构思维:分层记忆、选择性召回和安全约束。

功能概览中了解更多关于 Interview AiBox 如何处理上下文。

相关阅读

Interview AiBox logo

Interview AiBox — 面试搭档

不只是准备,更是实时陪练

Interview AiBox 在面试过程中提供实时屏幕提示、AI 模拟面试和智能复盘,让你每一次回答都更有信心。

分享文章

复制链接,或一键分享到常用平台

外部分享

继续阅读

工程约束优先:Claude Code 源码启示录

schedule2026年4月09日

工程约束优先:Claude Code 源码启示录

为什么 Claude Code 用正则做情绪检测、用 XML 做内部协议、用工具做结构化输出——关于确定性工程如何优于概率性 AI 控制问题的教训。

OpenClaw Memory 实现详解:AI Agent 的三层记忆架构 | Interview AiBox