W
AI-Wiki
CONCEPT

Agent Memory

定义

Agent Memory 是面向 Agent 的长期记忆层,用来保存、更新、检索与当前任务相关的历史交互和状态信息,使系统在多轮对话、跨时段任务和连续操作中不必只依赖一次请求内的上下文窗口。

在本文语境中,它不是泛指一切 AI 数据存储,而是更具体地指向“回忆类能力”的工程实现:承担情景记录、情景摘要、实时数据抽取等能力,服务于 Agent 对过往状态的回看与继续推理。

它与 Knowledge 的边界被明确区分:

  • Memory 是“回忆”,强调会话上下文、状态同步、历史消息、摘要和事实提取等,要求低延时、高并发、灵活查询。
  • Knowledge 是“知识”,强调知识库原文、摘要、向量检索与全文检索,典型用于 RAG 和多模态搜索。

因此,Agent Memory 在本文中并不负责知识库原文管理,重点不是保存“所有资料”,而是保存 Agent 为了持续完成当前或后续任务所需要的用户相关上下文与状态。

在本文中的语境

原文将 AI Agent 简化概括为:

  • LLM(大型语言模型)
  • 记忆(Memory)
  • 规划技能(Planning skills)
  • 工具使用(Tool use)

这个划分的含义是:单有模型并不足以构成可持续工作的 Agent。Agent 要形成“感知—决策—行动”的闭环,除了推理模型本身,还需要能够回忆历史、保留状态并在后续步骤继续使用这些状态的机制。Agent Memory 因而是 Agent 闭环中的基础组成部分,而不是附属优化项。

原文进一步指出,AI Agent 对存储能力的挑战可以分成两类:Memory 和 Knowledge。其中本文讨论的重点是前者,即长期记忆如何在真实业务里做到可用、便宜、稳定且可扩展。

核心工程要求

Memory 场景并不是简单把聊天记录存下来,而是有一组很强的工程约束。原文强调的核心要求包括:

  • 毫秒级响应:Memory 参与在线推理链路,不能因为读取历史消息而显著拖慢模型调用。
  • 高并发:对话式应用、搜索型 Agent 和大规模用户场景都可能带来非常高的读写吞吐。
  • 动态 Schema 扩展:不同业务会不断新增 metadata、状态字段和分析字段,数据模型不能过于僵化。
  • 大规模低成本:Memory 往往是高频写入、长时间累积的数据,成本控制非常关键。
  • 稳定性能:在数据规模持续增长时,读写和查询延迟不能明显失控。
  • 灵活检索:既要能按会话取消息,也要能按条件过滤、按时间回看、按业务元数据筛选。

原文还指出,传统数据库如 MySQL 和 PostgreSQL 虽然在许多场景表现良好,但面对上述要求的组合时会存在不同程度瓶颈,因此作者基于 Tablestore 总结出一个更贴合 Memory 场景的轻量级框架。

框架定位

本文中的 Agent Memory 实现建立在 Tablestore 之上,并通过 Agent Memory SDK 屏蔽底层存储细节,让业务侧优先按 Memory/Knowledge 的场景接口进行开发,而不是直接面向底层数据库操作。

该框架的设计目标包括:

轻量化设计

  • 抽象通用存储接口,降低业务开发复杂度。
  • 屏蔽底层数据库和存储接口调用细节。
  • 在技术深度与易用性之间做平衡,使开发者可以更快产出业务结果。

场景驱动设计

原文说当前主要支持两个大场景:

  • Memory 的实时记忆存储
  • Knowledge 的长期语义检索

其中 Memory 侧并不只停留在聊天记录保存,而是明确提出后续会持续补充更贴近业务场景的能力,包括:

  • 摘要(Summary)记录
  • 事实数据提取
  • 用户画像挖掘
  • 用户标签挖掘

这说明 Agent Memory 在本文中被定义为一个可演进的能力层:先解决高频、核心、可落地的会话与消息存储,再逐步向更高层的结构化记忆能力扩展。

关键机制与组成

Session 表与 Message 表

原文在 Memory 记忆设计部分明确指出,最常见的情景记忆场景是“会话管理 + 历史消息存储”,并以此介绍两张核心表:

  • Session 表:承载会话级数据。
  • Message 表:承载消息级数据。

这是本文 Memory 设计的核心数据模型。

Session 表的职责

Session 表保存的是一个会话整体的信息,而不是单条对话内容。它适合记录:

  • 用户 ID 与会话 ID 的关联
  • 会话的更新时间 update_time
  • 会话级 metadata,例如使用的模型名称
  • 会话管理所需的其他聚合状态

从示例代码看,一个 Session 在创建时至少包含 user_idsession_id,并显式设置 update_time。此外,会话元数据中可以存 model_name = "qwen 2.5" 这样的业务字段,体现了动态 Schema 扩展能力。

Message 表的职责

Message 表保存的是会话中的每一条消息,是更细粒度的历史记录层。示例中每条 Message 都包含:

  • session_id:归属哪个会话
  • message_id:消息唯一标识
  • create_time:消息创建时间
  • content:消息正文
  • metadata:消息属性,例如 message_type

其中 message_type 在示例里被用来区分“用户”与“大模型”消息,这意味着后续检索既可以按时间取,也可以按消息类型过滤。

当前已实现与可扩展能力

原文对 Memory 侧的能力覆盖有明显层次:

当前典型实现

  • 会话管理
  • 历史消息存储

这两项是最基础、也最直接参与在线推理的能力。

后续扩展方向

  • 摘要记录
  • 事实提取
  • 用户画像
  • 标签挖掘
  • 会话行为分析

这些扩展说明本文中的 Agent Memory 并不是“只存原始日志”,而是可以逐步把原始对话加工成更可复用的长期状态,例如用户偏好、身份信息、已确认事实、行为模式等。

实际使用方式

原文给出了一个非常具体的聊天场景示例,能够反映 Agent Memory 在业务中的标准用法。

1. 创建会话

示例先创建一个 Session:

  • user_id = "1"
  • session_id = "session_id_1"
  • update_time = microseconds_timestamp()
  • metadata["model_name"] = "qwen 2.5"

然后调用 memory_store.put_session(session) 写入会话。

这一步表明 Session 是后续所有消息的容器,也是会话列表、最近活跃时间等功能的基础。

2. 写入用户消息