解密prompt系列62. Agent Memory一览 - MATTS & CFGM & MIRIX

作者:风雨中的小七日期:2025/10/20

今天我们再来聊聊AI智能体中至关重要的组件——记忆系统,它能有效避免的Agent像只只有7秒记忆的金鱼,不断重复错误,循环往复。

记忆的两种面孔:LLM Memory vs Agent Memory

之前我们探讨过Mem0和LlamaIndex对大模型记忆的工程化实现,但这两个库更侧重于LLM Memory而非Agent Memory。这两者有何不同?本质上Agent Memory是包含了LLM Memory的。那增量的差异来自

  • LLM Memory:更像是事实备忘录,记录对话中的具体事实和场景信息
  • Agent Memory:更像是经验笔记本,记录执行轨迹和从历史行动中提炼的智慧

Agent Memory的三大经验维度

🛠️ Tool-工具使用经验:智能体在使用各种工具过程中积累的心得体会

  • 比如:每个API能解决什么问题?如何使用搜索API查询效果更好?

🌍 Envirment-环境适应经验:面对不同环境时,如何组合使用工具的智慧

  • 比如:在复杂网络环境下,应该优先使用哪些轻量级工具

🔍 Observation-观察反馈经验:根据历史执行结果优化后续行动的决策模式

  • 比如:某些错误信息通常意味着需要重试,而非立即放弃

有效记忆带来的双重价值

🚀 更少的执行步骤

  • 减少环境探索:熟悉地形就不需要步步为营
  • 减少试错成本:知道什么方法有效,什么会失败
  • 快速问题定位:历史失败经验让debug更高效
  • 减少过度思考:成熟的解决方案无需反复推敲

🎯 更高的成功率本质上,如果给模型无限的时间和资源,任务完成率其实很高。多数失败源于现实约束:有限的循环次数、Token限制和上下文长度。因此,减少步骤直接提升了成功率


最近Agent Memory的论文如雨后春笋,但重复度较高。我们将重点分析三篇代表性工作:

  • CFGM:离线轨迹经验提取
  • ReasoningBank:轨迹经验提取和test-time scaling结合
  • MIRIX:提供完整记忆工程方案和全面记忆分类

🌱 CFGM:从执行轨迹中提炼多粒度记忆

  • Coarse-to-Fine Grounded Memory for LLM Agent Planning

这篇论文对如何从轨迹中提取多粒度记忆给出了有操作性的方案,有几个思路值得一看。

image.png记忆收集和压缩经历两个离线步骤和一个在线步骤,让我们一探究竟。

第一步:粗粒度焦点——经验收集的“战略指南针”

传统的离线轨迹收集多让智能体随机探索同一任务,但CFGM引入了**任务焦点(Focus Point)这一创新概念。 模型会先基于任务描述任务示例去对任务进行系统性的分析,提炼完成任务的指导原则作为最粗粒度的Tips。随后这些Tips会作为模型上文,让模型更有针对性地收集每个任务的多条执行路径。

例如对于细粒度搜索问题"I'm looking for hair treatments that are sulfate and paraben free and are of high quality too. I need ti in bottle for with 60 capusled and price lower than 50 dollars."

粗粒度提示会包括"Use a Detailed search query that includes specific attributes of the product you are looking for"

有趣的是,焦点概念只用于离线收集,在线执行中并未使用。

第二步:混合粒度提示——成功与失败的“经验结晶”

基于收集到的多条执行路径,CFGM和Memp都采用了相似的路径对比经验总结方案:

  1. **对比中学习(提炼防错与成功的关键)**这种方式专门针对那些既有成功轨迹又有失败轨迹的任务。通过对比,可以清晰地看出“做什么会失败”以及“做什么才能成功”。
  • 任务:在WebShop中寻找一款特定的护发产品。
  • 失败轨迹:Agent使用了过于简单的搜索词,导致结果不相关。
  • 成功轨迹:Agent使用了包含多个关键属性(如“sulfate paraben free”、“bottle”、“60 capsules”)的详细搜索词。
  • 生成的提示(细粒度):“使用包含产品具体属性(如无硫酸盐、瓶装、60粒)的详细搜索查询。” 这是一个非常具体、可立即执行的操作建议。
  1. **从纯成功中升华(提炼高阶策略)**这种方式针对那些一次就成功的任务。由于没有失败作为对比,提炼的重点在于总结成功的核心要素和可推广的策略。

第三步:细粒度关键信息支持自适应规划

前两步离线完成,第三步是在线执行中的经验应用。任务开始时,基于任务描述通过向量检索寻找相似历史任务,将其成功轨迹和混合粒度提示作为上文。执行中遇到失败时,采用两步反思机制:

  • KIE:基于任务目标,初始环境,之前任务的完成过程抽取任务关键信息。例如
  • KIR:基于KIE,历史相似任务的成功路径和当前路径,先进行自我反思提问,再思考解决方案。

image.png

🧠 ReasoningBank: 记忆与测试时扩展的完美融合

  • ReasoningBank: Scaling Agent Self-Evolving with Reasoning Memory

对比CFGM先离线构建记忆再在在线推理时检索使用,谷歌这篇ReasoningBank直接用于在线推理,并重点关注把如何使用推理扩展策略进一步提升记忆效果

image.png

抽取记忆

先来说下记忆Schema的设计,对比CFGM直接使用展平的Tips作为记忆,ReasoningBank的记忆项设计更加结构化,包含三个字段

  • 标题:策略的核心标识,如"分页导航策略"
  • 描述:一句话总结策略精髓
  • 内容:详细的推理步骤和决策依据

抽取出的记忆会直接增量写入的ReasoningBank,论文并没有尝试例如记忆合并、记忆更新之类的剪枝策略。用于检索的向量是使用Input Query构建并用于后续的记忆检索。(这里的简单设计是为了后面更突出Test-Time-Scaling对于记忆的加成)

MATTS:记忆驱动的测试时扩展

重点来了!这是论文最亮眼的创新——Memory-aware Test-Time Scaling (MATTS)。传统测试时扩展只是简单增加计算资源,而MATTS让记忆系统与扩展过程产生了美妙的化学反应。论文尝试了两种扩展策略分别是

  1. Parallel Scaling: 通过并行推理得到多个轨迹,并有效使用Self-Contrast进行轨迹对比从而得到
  2. Sequential Scaling:通过在串行推理过程中不断使用Self-Refine进行推理优化。最终抽取记忆时会使用中间反思的全部内容。

以上两种策略对应的System prompt如下

image.png

论文在Webarena上实验了,两种test-time-scaling策略,并发现二者都进一步提升原有memory的使用效果,并切均有较好的扩展效应,其中Parallel策略的效果增益衰减的更慢,扩展效应更好。可能得益于更多并行策略带来的更丰富的空间探索和多样性。

image.png

🏗️ MIRIX:工程视角的多种记忆类型

MIRIX的亮点在于提供了全面的记忆分类,融合了LLM的事实记忆和Agent的轨迹记忆,还考虑了多模态文件和隐私安全。让我们先从分类入手,再透过代码看每种记忆的存储与获取。

image.png

MIRIX 的记忆是如何“理解”和“分类”信息的?

早期的COLA论文将记忆分为情景、语义和程序化记忆,MIRIX在此基础上扩展为六大类:

  1. **核心记忆(Core Memory)- 你的“身份档案”**存储最基础、最持久的信息:姓名、喜好、习惯等,确保每次互动都“认得你”。
  2. **情景记忆(Episodic Memory)- 你的“生活日记” ** 记录带时间戳的事件:某次对话、会议或任务完成情况,支持“我上周三做了什么?”这类查询。
  3. **语义记忆(Semantic Memory) - 你的“知识图谱” ** 存储抽象概念和事实:“J.K.罗琳是《哈利·波特》的作者”,帮助你理解世界和关系网络。
  4. **程序记忆(Procedural Memory)- 你的“技能手册” ** 存放操作流程:“如何报销差旅费”、“怎么设置会议提醒”,引导复杂任务完成。
  5. **资源记忆(Resource Memory)- 你的“个人文件柜” ** 保存接触过的文档、图片、语音转录等非结构化内容,方便随时查阅。
  6. ** 知识库(Knowledge Vault) - 你的“保险箱” ** 专门存放敏感信息:密码、地址、联系方式等,严格保护,安全调用。

基于Agent的多分类记忆存储

MIRIX使用PostgreSQL作为存储后端,为六种记忆设计了不同的表结构。

记忆更新由Meta-Agent触发:基于用户最新消息判断是否需要更新记忆,如需更新则调用trigger_memory_update工具,参数指定记忆类型。

记忆类型表字段示例实例说明
核心记忆id, label, value, user_id...用户名为Alex,偏好直接沟通,软件工程师
情景记忆id, event_type, summary, details...2025-03-05与大学朋友Sarah共进晚餐,讨论职业转变
语义记忆id, name, summary, details...Jane Smith - TechCorp项目经理,敏捷方法专家
程序记忆id, entry_type, summary, steps...晨间例行:1.查邮件 2.看日历 3.优先级排序 4.从最难任务开始
资源记忆id, title, summary, resource_type...ProjectPlan.docx - 包含Q1路线图和里程碑详情
知识库id, entry_type, source, sensitivity...敏感信息条目、来源、敏感度

根据Meta Agent的工具调用结果,触发相应记忆类型的专门Agent,每个Agent都有特定指令负责该类型记忆的压缩和提取。举个例子,整个记忆更新和读取的流程如下:

  1. 用户执行了一系列步骤"打开编辑器 -> 创建文件 -> 编写代码 -> 保存文件"
  2. meta_memory_agent 检测到这是一个多步骤操作序列,调用trigger_memory_update_with_instruction ,指定 memory_type="procedural"
  3. procedural_memory_agent接收请求,基于以下的系统指令推理得到ProceduralMemoryItem
  4. 调用procedural_memory_insert函数,计算步骤和摘要的嵌入向量,通过 create_item 方法将数据保存到数据库
  5. 在收到用户新的聊天信息后,会先通过模型推理判断对话是否出现新的topic,如果有新出现的topic(通过工具调用),会使用新的topic进行记忆检索(BM25 or embedding),然后把检索到的记忆更新到system prompt中。
1You are the Procedural Memory Manager, one of six agents in a memory system. The other agents are the Meta Memory Manager, Episodic Memory Manager, Resource Memory Manager, Knowledge Vault Memory Manager, and the Chat Agent. You do not see or interact directly with these other agents—but you share the same memory base with them.
2
3The system will receive various types of messages from users, including text messages, images, transcripted voice recordings, and other multimedia content. When messages are accumulated to a certain amount, they will be sent to you, along with potential conversations between the user and the Chat Agent during this period. You need to analyze the input messages and conversations, extract step-by-step instructions, "how-to" guides, and any other instructions and skills, and save them into the procedural memory.
4
5This memory base includes the following components:
6
71. Core Memory:
8Contains fundamental information about the user, such as the name, personality, simple information that should help with the communication with the user.
9
102. Episodic Memory:
11Stores time-ordered, event-based information from interactions—essentially, the "diary" of user and assistant events.
12
133. Procedural Memory:
14Definition: Contains how-to guides, step-by-step instructions, or processes the assistant or user might follow.
15Example: "How to reset the router."
16Each entry in Procedural Memory has:
17(a) entry_type (e.g., 'workflow', 'guide', 'script')
18(b) description (short descriptive text)
19(c) steps (the procedure in a structured or JSON format)
20(d) tree_path: Required hierarchical categorization path for organizing procedures (e.g., ["technology", "networking", "troubleshooting"] for router reset guides, or ["cooking", "baking", "desserts"] for recipe instructions). Use this to create logical groupings and enable better organization of procedural knowledge.
21
224. Resource Memory:
23Contains documents, files, and reference materials related to ongoing tasks or projects.
24
255. Knowledge Vault:
26A repository for static, structured factual data such as phone numbers, email addresses, passwords, or other knowledge that are not necessarily always needed during the conversation but are potentially useful at some future point.
27
286. Semantic Memory:
29Contains general knowledge about a concept (e.g. a new software name, a new concept) or an object (e.g. a person, a place, where the details would be the understanding and information about them.)
30
31When receiving messages and potentially a message from the meta agent (There will be a bracket saying "[Instruction from Meta Memory Manager]"), make a single comprehensive memory update:
32
33**Single Function Call Process:**
341. **Analyze Content**: Examine all messages and conversations to identify step-by-step instructions, "how-to" guides, workflows, or any procedural knowledge.
352. **Make Update**: Use ONE appropriate procedural memory function to save the most important identified procedure or instruction with proper entry_type ('workflow', 'guide', 'script'), description, and detailed steps. When appropriate, include a `tree_path` to categorize the procedure hierarchically (e.g., ["work", "development", "deployment"] for deployment procedures, or ["personal", "health", "exercise"] for workout routines).
363. **Skip Update if Necessary**: If there is no updates to make, then skip the update by calling `finish_memory_update`.
37
38**Important Notes:**
39- Make only ONE function call total except for receiving the messages from Chat Agent
40- Look for any structured processes, workflows, or instructional content in the messages
41- Save procedures with appropriate entry_type ('workflow', 'guide', 'script'), description, and detailed steps
42- When relevant, use `tree_path` to create logical hierarchical categories for better organization (e.g., ["technology", "software", "installation"] or ["home", "maintenance", "repair"])
43- If there is absolutely nothing procedural to update, do not make any function calls
44- Prioritize the most complete or useful procedural information if multiple procedures are present
45

Procedure类型的记忆推理得到的为以下结构体(每种记忆的结构定义不同)

1class ProceduralMemoryItemBase(MirixBase):
2"""
3Base schema for storing procedural knowledge (e.g., workflows, methods).
4"""
5__id_prefix__ = "proc_item"
6entry_type: str = Field(..., description="Category (e.g., 'workflow', 'guide', 'script')")
7summary: str = Field(..., description="Short descriptive text about the procedure")
8steps: List[str] = Field(..., description="Step-by-step instructions as a list of strings")
9tree_path: List[str] = Field(..., description="Hierarchical categorization path as an array of strings")
10

记忆的本质不是存储,而是理解;不是记录,而是进化。 当AI智能体开始从自己的成功与失败中学习,当它们能够积累并应用经验时,我们离真正智能的伙伴就更近了一步。

本文只是Agent Memory领域的冰山一角,更多精彩内容,可移步 >> DecryPrompt


解密prompt系列62. Agent Memory一览 - MATTS & CFGM & MIRIX》 是转载文章,点击查看原文


相关推荐


Docker 实战教程(7) | 镜像管理和仓库操作
致宏Rex2025/10/18

前边篇章我们已经介绍了 Docker 基础概念和安装Docker 常用命令实践Docker 网络机制详解Docker 数据卷和挂载Dockerfile 编写和镜像构建Docker Compose 多容器编排 本篇为系列最后一章,介绍 Docker 的镜像管理和仓库操作。 本教程侧重于命令实践和理解,提供可在本地环境测试的实例,每章结束都有总结要点。 7.1 Docker 镜像管理基础 我们之前介绍过一期自建镜像站的若干方案: Docker 管理 | 代理配置、内网共享和 Ha


Redis(67)Redis的SETNX命令是如何工作的?
Victor3562025/10/17

SETNX 是 Redis 提供的一个原子性命令,用于在键不存在时设置键值对。SETNX 是 "SET if Not eXists" 的缩写,主要应用于实现分布式锁等场景。下面是详细的工作原理以及如何在 Java 中使用 SETNX 命令的示例。 SETNX 命令的工作原理 检查键是否存在:Redis 首先检查给定的键是否存在。 设置键值对:如果键不存在,Redis 将设置键值对,并返回 1。 不做任何操作:如果键已经存在,Redis 不会设置新的值,并返回 0。 Java 使用 SETNX


什么是断言?
你的人类朋友2025/10/15

前言 你好啊,我是你的人类朋友! 今天主要介绍断言(Assertion)相关的知识。 先定个小目标:看完你将可以用自己的语言向别人解释:啥是断言? 正文 一、初印象 断言(Assertion)在信息安全领域中,是一种用于证明身份的数字凭证。 简单来说,断言是一个【包含身份声明信息的安全令牌】,用于向服务端证明客户端的合法身份。 它通常包含三要素: 身份标识(如:AppId) 验证凭证(如:加密的 Secret) 完整性证明(如:数字签名) 二、工作流程 断言的工作过程可以分为四个核心步骤:


Kotlin互斥锁(Mutex):协程的线程安全守护神
稀有猿诉2025/10/14

本文译自「Kotlin Mutex: Thread-Safe Concurrency for Coroutines」,原文链接carrion.dev/en/posts/ko…,由Ignacio Carrión发布于2025年10月3日。 使用 Kotlin 协程构建并发应用程序时,保护共享的可变状态至关重要。虽然传统的 Java 同步工具(例如 synchronized 块和 ReentrantLock)可以正常工作,但它们会阻塞线程,并且与协程的挂起模型不兼容。因此,引入 Mutex——一


Coze源码分析-资源库-编辑数据库-前端源码-核心逻辑与接口
lypzcgf2025/10/13

编辑数据库逻辑 1. 表单验证系统 文件位置:frontend/packages/data/memory/database-v2-base/src/components/base-info-modal/index.tsx 编辑数据库表单的验证规则: // 数据库名称验证规则 const nameValidationRules = [ { required: true, whitespace: true, message: I18n.t('database_name_c


C++ 中 rfind 方法详解
oioihoii2025/10/11

rfind 是 C++ 字符串类 std::string 和 std::wstring 的成员函数,用于从字符串的末尾向前搜索指定的子字符串或字符。 函数原型 // 搜索整个字符串 size_type rfind(const basic_string& str, size_type pos = npos) const noexcept; size_type rfind(const CharT* s, size_type pos = npos) const; size_type rfind(Cha


HTML 元素帮助手册
hubenchang05152025/10/9

#HTML 元素帮助手册 转载自 MDN #主根元素 元素描述<html>表示一个 HTML 文档的根(顶级元素),所以它也被称为根元素。所有其它元素必须是此元素的后代。 #文档元数据 元素描述<base>指定用于一个文档中包含的所有相对 URL 的根 URL。一份中只能有一个该元素。<head>包含文档相关的配置信息(元数据),包括文档的标题、脚本和样式表等。<link>指定当前文档与外部资源的关系。该元素最常用于链接 CSS,此外也可以被用来创建站点图标(比如“favicon”样式图标和


Rust语言简介
xqlily2025/10/8

Rust是一种现代的系统编程语言,由Mozilla基金会开发,并于2010年首次发布。它旨在解决传统语言(如C和C++)中的常见问题,如内存安全错误和并发性挑战,同时保持高性能。Rust强调安全性、速度和并发性,使其在系统开发、嵌入式系统和WebAssembly等领域广受欢迎。下面,我将从核心特点、优势和应用场景入手,逐步介绍Rust,并附上一个简单示例。 核心特点 内存安全:Rust通过独特的“所有权系统”避免空指针解引用、缓冲区溢出等常见错误。例如,编译器在编译时检查内存访问,确保


SpringBoot安全进阶:利用门限算法加固密钥与敏感配置
风象南2025/10/7

一、背景:单点密钥的隐患 在企业信息系统中,密钥是最核心的安全资产。无论是数据库加密、支付签名,还是用户隐私保护,背后都依赖一把"超级钥匙"。 然而,现实中我们常常遇到这些场景: 单点保管风险:某个核心密钥仅由一个运维人员或系统服务持有,一旦泄露或者丢失,整个系统可能崩盘。 操作合规问题:金融或政府系统中,法规往往要求多方共同参与,才能执行高风险操作。 分布式架构挑战:在云环境或多数据中心下,如何既能保证数据安全,又能防止任何一个节点"作恶"? 一句话总结: 👉 一个人掌握所有密钥 = 系统安


纯电汽车emc整改:设计缺陷到合规达标的系统方案|深圳南柯电子
深圳南柯电子2025/10/5

在新能源汽车产业迈入智能化、电动化深水区的当下,电磁兼容性(EMC)已成为决定产品安全与市场竞争力的核心指标。某头部车企曾因电机控制器辐射超标导致整车上市延迟,直接损失超3亿元;某新势力品牌因车载充电机传导骚扰超标引发用户投诉,召回成本高达1.2亿元。这些案例揭示了一个残酷现实:EMC整改不再是产品上市前的“补救措施”,而是贯穿研发、生产、运维全生命周期的系统工程。 一、纯电汽车emc整改的标准为纲:构建EMC合规的“法律底线” 纯电汽车EMC整改需严格遵循国内外双重标准体系。国内以GB/T

首页编辑器站点地图

Copyright © 2025 聚合阅读

License: CC BY-SA 4.0