AI Agent 记忆解析:从短期到长期的生产级记忆堆栈

AI Agent 记忆解析:从短期到长期的生产级记忆堆栈

记忆,是把模型变成产品的关键。 没有记忆的 Agent 每一次对话都是一次「初次见面」——它记不住你的偏好、学不会自己的错误、无法在多次交互中持续成长。本文从工程实践角度,系统梳理 AI Agent 记忆系统的架构设计与实现方案。


一、为什么记忆是 Agent 的「灵魂拼图」

大语言模型(LLM)本身是无状态的——每一次 API 调用都是一次全新开始。为了让 Agent 看起来有「记忆力」,开发者会把聊天历史拼接到 Prompt 中。但随着上下文窗口被填满,三个问题随之暴露:

  1. 成本飙升:对话每增长一轮,token 消耗翻倍,长对话的 API 成本是初始消息的 100 倍以上

  2. 注意力稀释:模型在超长上下文中出现「迷失在中间」效应,关键信息被掩埋

  3. 遗忘无可避免:会话结束后一切归零,用户的偏好和 Agent 的经验都无法传承

记忆系统正是为了解决这些问题而生。 它让 Agent 能够在单次对话中保持上下文连贯(短期记忆),同时能跨会话记住用户偏好、历史交互和领域知识(长期记忆)。


二、记忆系统的三大层级

借鉴人类认知心理学,AI Agent 的记忆通常划分为三个层级:

2.1 短期记忆 / 工作记忆(Short-Term Memory / Working Memory)

是什么: 当前会话中模型的活跃上下文窗口,是 Agent 当下「看得见」的工作台。

实现方式: 传递给 LLM 的 Message 对象数组,随着对话进行实时追加。

生命周期: 会话结束或被上下文窗口上限截断时清空。

管理策略:

策略

原理

适用场景

风险

滑动窗口

只保留最近的 N 轮

客服对话

丢失早期关键信息

对话摘要

LLM 压缩旧对话为摘要

长会话

摘要丢失细节

层级保留

System Prompt + 摘要 + 最近 N 轮

生产推荐

实现较复杂

最佳实践:

  • 保持简短——只保留当前任务需要的信息

  • 保持结构化——用 JSON/Schema 组织而非纯文本

  • 及时清理——任务切换时清除无关上下文

  • 优先级排序——最近的对话往往最重要

# 短期记忆的结构化示例
short_term_memory = {
    "session_id": "sess_abc123",
    "current_goal": "处理退款申请",
    "constraints": {
        "order_id": "12345",
        "refund_window": "30天"
    },
    "tool_outputs": [
        {"tool": "query_order", "result": {"status": "已交付", "damage_reported": True}}
    ],
    "conversation_summary": "用户收到损坏商品,要求退款"
}

2.2 长期记忆 / 语义记忆(Long-Term Memory / Semantic Memory)

是什么: 关于用户或世界的经过提炼的、客观的事实。它与被学到的具体时间解耦,是跨会话持久化的「知识库」。

示例:

  • 「用户的名字是 Alice,偏好深色模式」

  • 「用户的编程语言是 Python」

  • 「该项目的技术栈是 Node.js + MongoDB」

实现方案:提取 → 存储 → 检索 三阶段循环

短期记忆 → [后台 LLM 提取事实] → 向量化 → 向量数据库 → [检索注入] → 短期记忆

提取阶段: 在用户交互的同时,一个次级 LLM 进程在后台异步运行,从对话中提取客观事实和偏好。

# 提取 Prompt 示例
extract_prompt = """
从以下对话中提取客观事实、用户偏好和持久性知识。
格式化为 JSON 列表。

用户: "我正在把我的后端从 Node 迁移到 Go。另外,请始终使用 4 个空格缩进输出代码。"

输出:
[
  "用户正在将后端从 Node.js 迁移到 Go",
  "用户偏好使用 4 个空格的代码缩进"
]
"""

检索阶段: 当用户下次回来提问时,系统将当前查询向量化,在向量数据库中搜索最相关的记忆,注入到 System Prompt 中。

# 检索注入示例
relevant_memories = memory.search("帮我写个脚本", user_id="alice_123")
system_prompt = f"""
你是一个得力助手。
关于用户背景:{relevant_memories[0]['text']}
"""

2.3 情景记忆 / 经验记忆(Episodic Memory)

是什么: 过去事件和决策的按时间顺序的记录——不仅包括提取出的事实,还包括完整的上下文:什么步骤被采取了、什么工具被调用了、结果如何。

为什么重要:

  • 让 Agent 从错误中学习(「上次尝试 X 方案失败了」)

  • 提供个性化体验(「用户上次选择了更简洁的答复风格」)

  • 跳过已知的无效路径(「这个 API 已经弃用了」)

  • 保持连续性(「接着上次的进度继续」)

实现方案: 将完整的 Agent 执行轨迹(Trajectory)按任务类型和结果建立索引。当遇到相似任务时,检索成功的轨迹作为 Few-shot 示例。

存储决策,而非日志: 关键洞察是——不要存储原始聊天记录,而是存储结构化的决策记录:

{
  "episode_id": "ep_001",
  "task_type": "退款处理",
  "steps": [
    {"action": "查询订单", "result": "已交付"},
    {"action": "验证退款窗口", "result": "30天内,符合条件"},
    {"action": "发起退款", "result": "成功"}
  ],
  "outcome": "success",
  "reflection": "用户满意度高,此流程可复用",
  "timestamp": "2026-07-15T10:30:00Z"
}

三、五层记忆架构:生产级的记忆堆栈

在 2026 年的生产实践中,一个成熟的AI Agent 记忆系统遵循五层堆栈架构,每层解决不同的问题:

起步建议: 并非所有 Agent 都需要五层架构。从「短期 + 长期 + 语义」三层开始,随着 Agent 能力成熟逐步添加其余层级。


四、主流框架的记忆实现对比

Google ADK

通过 events_compaction_config 设置上下文处理策略:

from google.adk.apps.app import App, EventsCompactionConfig

app = App(
    name='my-agent',
    root_agent=root_agent,
    events_compaction_config=EventsCompactionConfig(
        compaction_interval=3,   # 每 3 次调用触发压缩
        overlap_size=1           # 包含前一个窗口的最后一次调用
    ),
)

LangChain

通过 SummarizationMiddleware 处理上下文:

from langchain.agents.middleware import SummarizationMiddleware

agent = create_agent(
    model="gpt-4o",
    tools=[...],
    middleware=[
        SummarizationMiddleware(
            model="gpt-4o-mini",
            max_tokens_before_summary=4000,
            messages_to_keep=20,
        ),
    ],
)

Mem0(开源长期记忆框架)

Mem0 自动处理「提取 → 向量化 → 存储 → 检索」的完整循环:

from mem0 import Memory

m = Memory()

# 存储一个事实(信息提取和向量化自动完成)
m.add(
    "我正在学习 AI Agent 开发,我喜欢 Python。",
    user_id="alice_123"
)

# 基于新的查询检索相关的记忆
relevant = m.search(
    "我下一个项目应该用什么语言?",
    user_id="alice_123"
)
# 输出:[{'text': '用户喜欢 Python', 'score': 0.89}]

五、记忆管理的最佳实践与避坑指南

✅ 最佳实践

  1. 保持最小有效记忆(Minimum Viable Memory)

    • 只存储能改善输出结果的记忆

    • 设置严格的 top_k 限制(如只检索最相关的前 5 条)

    • 设相关性分数阈值,低于阈值的记忆不注入

  2. 实施记忆衰减(Memory Decay)

    • 超过一定时间的记忆降低检索权重

    • 定期归档和折叠总结旧的情景记忆

    • 优先保留最近的语义事实

  3. 处理矛盾信息

    • 如果用户先说「我爱 Python」后说「我讨厌 Python,只用 Rust」

    • 后台提取 Prompt 需明确指示模型更新删除旧事实

    • 基于时间戳的新旧覆盖机制

  4. 隔离系统指令与用户记忆

    • 注入到 Prompt 的记忆需用 <user_memory> 标签清晰标记

    • 避免 LLM 把检索到的用户事实误当作核心系统指令

  5. 隐私第一

    • 不使用用户标签,而是严格按 user_idtenant_id 隔离

    • 实施自动过期策略

    • 提供用户可见、可管理的记忆控制面板

❌ 常见错误

错误一:把所有内容塞进上下文窗口 即使模型支持 100 万 Token,每次传入全量历史不仅成本高昂,还会显著降低输出质量。必须要用基于 RAG 的检索机制。

错误二:保存一切,从不清理 最常见的大坑——无限存储原始聊天日志。结果:检索噪音巨大、相关性极低、成本持续攀升。存储决策而非日志,定期归档和清理。

错误三:不记出处、不标来源 Agent 的长期记忆中如果丢失了信息来源(如知识库文档标题、上次对话时间戳),就无法追溯和验证记忆的真实性。每一条记忆都应该附带来源元数据。

错误四:长期记忆无差别全量加载 把整个用户画像数据库一股脑塞进 Prompt。每次只检索最相关的前 3-5 条,而不是加载整个资料库。


六、前沿趋势

6.1 时间知识图谱(Temporal Knowledge Graph)

Zep 架构采用的 Graphiti 引擎,能够综合对话和业务数据,维护历史关系。在基准测试中以 94.8% 的成绩超越 MemGPT 的 93.4%,证明了图结构在跨会话推理中的优势。

6.2 自改进记忆(Self-Improving Memory)

Agent 学习管理自己的记忆——决定存储什么、遗忘什么、如何组织信息以便高效检索。当前系统仍需手工设计规则,但这已成为最活跃的研究方向之一。

6.3 ENGRAM 范式

一种前沿方法,仅使用完整上下文基线约 1% 的 Token 就达到了最先进的性能。通过高度压缩的表示层替代全量上下文注入,大幅降低成本和延迟。


七、总结

记忆系统是 AI Agent 从「演示级原型」迈向「生产级产品」的分水岭。

起点

终点

无状态,每次归零

跨会话持续学习

全量历史拼接

按需精准检索

没有错误记忆

从失败中吸取教训

成本随对话线性增长

记忆压缩和衰减控制成本

通用回答

个性化、有上下文的回答

构建记忆系统的第一原则: 选择最小的记忆架构,满足当前需求即可。从「短期 + 长期记忆」开始,当系统暴露出新的记忆瓶颈时,再逐步添加情景记忆、图记忆等更复杂的层级。先跑起来,再优化——这在记忆系统的设计中比什么都重要。


本文参考了 Google ADK、LangChain、Mem0、Zep、Anthropic 等团队在 Agent 记忆领域的公开研究成果与实践经验。

AI Agent 的上下文管理与控制 2026-07-15
AI Agent 主流架构 9 种模式全景图 2026-07-16

评论区