跳到主要内容
Agent Memory

第1章:从 Stateless Chatbot 到 Stateful Agent

上下文窗口的本质局限、Agent 与 Memory 的关系、状态/上下文/记忆/知识四者的层级、为什么 RAG ≠ Memory

Agent Memory Context Window Stateful RAG

LLM 是一颗”健忘的大脑”——每次对话开始都从零知晓世界,你昨天告诉它你不喜欢香菜,今天它依然热情推荐一份香菜捞面。让 LLM 拥有跨越对话边界的记忆,是 Agent 时代最核心的工程问题之一。本章把 Memory 这个看似抽象的概念拆成可量化的工程对象:它是什么、它和 RAG / Context / State / Knowledge 各自的边界在哪、它的设计有哪些不可能三角。

📑 目录


1. 一段对话的”灵魂消失”

来看两段同一个用户的对话,中间相隔 7 天。

Session 1(7 天前)

User: 我对乳糖不耐受,以后推荐餐厅时请帮我避开奶制品。
Assistant: 好的,已记住。我不会再给您推荐含奶的餐厅。

Session 2(今天,不同 chat 窗口)

User: 帮我推荐一家评分高的早餐店。
Assistant: 推荐"老北京豆浆店",招牌是奶香鲜虾豆腐脑和现烤奶酥...

🌟 问题:用户期待 Agent 自动避开奶制品——这是 7 天前的承诺,而不是今天对话里的内容。

Stateless Chatbot 的视角:每次 session 都是全新的世界,昨天是平行宇宙。 Stateful Agent 的视角:用户是同一个人,7 天前的偏好今天依然有效——除非用户主动撤回。

把 LLM 从 chatbot 变成 agent,Memory 是必经之路


2. 上下文窗口的三重本质局限

最直觉的反应是:“那把所有历史都塞进 context 不就行了?”——你会立刻撞上三堵墙。

2.1 容量墙

模型Context 上限一次塞 100 万 token 的成本(GPT-5 输入价 $5/MT 估算)
GPT-4 (2023)8K-128K0.010.01-0.6 / 次
Claude 3.5 (2024)200K$0.6 / 次
Gemini 2.5 (2025)1M-2M$1-2 / 次
GPT-5 (2025)1M$5 / 次

看起来 1M token 很大?一个重度用户一年的对话历史 + 工具调用日志 + 偏好可以轻松超过 10M token,塞不进任何模型。而且每次对话都把 1M 输入费用付一遍——商业模式直接崩盘。

2.2 注意力墙(Lost in the Middle)

即使硬塞进去,长上下文中位置在中间的信息会被严重忽略——这是经典的 “Lost in the Middle” 现象(Liu et al., 2023)。100K token 上下文中,中间 60K 的检索准确率比首尾低 30%+。

🍎 直觉比喻:你能轻易记住一本小说的开头和结尾,但 50 章往后找一段中间的细节就难了。LLM 的注意力机制有同样的”两端偏好”。

2.3 延迟墙

128K token 的 prefill 在 H100 上需要 1-3 秒,1M token 要 10+ 秒——用户等首 token 都嫌长。长 context 是用首 token 延迟换信息保留,显然不是性价比最优解。

🌟 结论:Memory 不是”上下文窗口的临时方案”,而是一个独立的、持久化的、可检索的、能演化的子系统**——它的本质和数据库管理类似,而不是 prompt 拼接**。


3. State / Context / Memory / Knowledge 四层架构

很多团队把这四个词混着用,实际它们是层级关系——分清边界才能设计对系统。

                    ┌──────────────────────┐
   永久 / 公开知识  │   Knowledge          │  ← 公司文档、产品手册、外部 RAG
                    ├──────────────────────┤
   长期 / 私有记忆  │   Memory             │  ← 用户偏好、过往对话、工具调用历史
                    ├──────────────────────┤
   会话级 / 临时    │   Context Window     │  ← 这一次对话发给 LLM 的所有 prompt
                    ├──────────────────────┤
   单步 / 瞬时      │   Working State      │  ← 当前 turn 的 scratchpad、中间变量
                    └──────────────────────┘
时间尺度持久化?个性化?典型实现
Working State毫秒 - 秒LangGraph state、Python dict
Context Window秒 - 分钟LLM 的 prompt 字符串
Memory分钟 - 年Mem0 / Letta / Zep / LangGraph Store
Knowledge永久RAG vector store、文档库

🧠 关键洞察:Memory 是”个性化 + 持久化”的交集。如果只持久化不个性化,那是 Knowledge;如果只个性化不持久化,那是 Context。


4. Memory ≠ RAG:一张表说清差异

新人最常见的误区:“我已经接了 RAG,Memory 不就解决了吗?”——不,RAG 和 Memory 都涉及”检索”,但解决的是完全不同的问题

维度RAGMemory
数据来源外部静态语料(文档、API、网页)Agent 与用户/世界的交互记录
谁创建人类编辑Agent 自己抽取 / 用户主动设置
时间属性通常是”快照”强时序(t_valid / t_invalid / t_created)
是否会变文档版本更新持续演化(用户搬家、改口味)
冲突处理文档之间通常无冲突必须处理冲突(旧偏好 vs 新偏好)
个性化全用户共享强 user 隔离
写入频率低(批量索引)(每次对话都可能产生新记忆)
检索策略语义相似度语义 + 时间衰减 + importance + 关系
典型工具Pinecone / pgvector / RAGASMem0 / Letta / Zep

🌟 一句话区分:RAG 检索”事物是什么”(facts about the world),Memory 检索”我和这个人发生过什么”(facts about our shared history)

两者互补:实际生产 Agent 几乎都是 RAG + Memory 双轨。RAG 负责”产品手册说什么”,Memory 负责”这个用户三个月前买过哪款”。


5. 何时需要 Memory:决策清单

不是所有 LLM 应用都需要 Memory。问自己以下问题:

问题答 Yes 越多越需要 Memory
用户会跨多次 session 来访吗?
应用对”个性化推荐 / 偏好”有要求吗?
用户的状态会随时间变化吗?(地址、订阅状态、购物车)
Agent 需要在不同 session 中”记住承诺”吗?
多个 sub-agent 需要共享一份用户上下文吗?
用户会问”上次那个问题怎么样了”这种引用历史的话吗?

如果以上答 ≥ 2 个 Yes,就该上 Memory。如果是纯 one-shot 工具(翻译、摘要),可以不上。


6. Agent Memory 的三个不可能三角

Memory 设计不存在”全都要”的解,你必须在三组矛盾中做权衡:

6.1 容量 vs 检索精度 vs 检索延迟

         容量




          └──────────► 检索延迟
         /
        /
       检索精度
  • 存得多(全量历史)→ 检索时噪声大,精度下降
  • 存得少(激进遗忘)→ 容量小、检索快,但可能丢关键信息
  • 加索引提升精度(KG / 多路 hybrid)→ 写入和查询延迟上升

6.2 写入实时性 vs LLM 抽取成本 vs 准确性

  • 写入实时(每条消息都立即抽取并入库)→ 大量 LLM 调用,成本爆炸
  • 批量写入(每天 batch 一次)→ 成本低但 agent 看不到刚说的话
  • schema-driven 抽取(规则替代 LLM)→ 便宜快,但漏掉非结构化偏好

6.3 隐私 vs 可解释 vs 跨用户复用

  • 强用户隔离(每用户独立 namespace)→ 最安全,但失去群体洞察
  • 跨用户聚合(从所有用户的偏好里学共性)→ 强洞察,但有隐私和合规风险
  • 可解释(每条 memory 留 source 和时间戳)→ 用户能 audit,但存储成本翻倍

🍎 这三个不可能三角贯穿后续所有章节——理解每个框架在三角中站在哪个位置,你就理解了它的设计哲学


7. Memory 给 Agent 带来的”五种新能力”

加上 Memory 后,Agent 能解锁的能力远不止”记住偏好”:

7.1 跨会话连续性(Continuity)

User: 上次咱们聊到的那个方案,后来怎么样了? Agent: (从 episodic memory 取出 7 天前的对话)我们当时定的是 A 方案…

7.2 个性化(Personalization)

User: 推荐一家附近的餐厅。 Agent: (semantic memory 知道用户乳糖不耐受 + episodic memory 记得上周去过 X)推荐 Y,他们家无奶选项很多…

7.3 自我反思(Self-Reflection)

Agent 周期性回顾自己的 memory,产出更高层的总结:

“用户每周三都会问周末安排,似乎更看重周末规划——以后我应该主动在周二准备建议。“

7.4 多 Agent 协同(Coordination)

Sales Agent 把”用户对价格敏感”写入 shared memory, CS Agent 第二天接到投诉时直接看到这条上下文,主动给折扣。

7.5 持续学习(Continual Learning)

不需要重新训练模型,只通过更新 procedural memory 中的”操作 SOP”就能让 Agent 学到新工作流——这是 ACE(Agentic Context Engineering)的核心思想。


✅ 自我检验清单

  • 灵魂消失场景:能向小白举出至少 3 个”如果没有 Memory,Agent 体验会崩”的具体例子
  • 上下文窗口三重墙:能用具体数字解释为什么”长 context 不能取代 Memory”
  • 四层架构:能说清 Working State / Context / Memory / Knowledge 各自的时间尺度和持久化属性
  • Memory vs RAG 一句话:能用一句话区分两者的本质差异
  • Memory vs RAG 互补:能举一个生产场景同时用到 RAG 和 Memory 的例子
  • 决策清单:面对一个具体应用,能用 6 个问题判断要不要上 Memory
  • 三个不可能三角:能默写,并能说出 Mem0 / Letta / Zep 各自在哪个三角偏哪边
  • 五种新能力:能给每种能力构造一个真实业务例子
  • 反直觉:解释为什么”加 Memory 后 LLM 调用反而更贵”(写入侧的 extraction 成本)

📚 参考资料

概念入门

关键论文

  • Lost in the Middle: How Language Models Use Long Contexts (Liu et al., 2023):arXiv 2307.03172 —— 长上下文注意力衰减的实证
  • MemGPT: Towards LLMs as Operating Systems (Packer et al., 2023):arXiv 2310.08560 —— LLM 的”虚拟内存”思想起源
  • Memory in the Age of AI Agents (2025):arXiv 2512.13564 —— 最权威综述

行业讨论