第1章:从 Stateless Chatbot 到 Stateful Agent
上下文窗口的本质局限、Agent 与 Memory 的关系、状态/上下文/记忆/知识四者的层级、为什么 RAG ≠ Memory
LLM 是一颗”健忘的大脑”——每次对话开始都从零知晓世界,你昨天告诉它你不喜欢香菜,今天它依然热情推荐一份香菜捞面。让 LLM 拥有跨越对话边界的记忆,是 Agent 时代最核心的工程问题之一。本章把 Memory 这个看似抽象的概念拆成可量化的工程对象:它是什么、它和 RAG / Context / State / Knowledge 各自的边界在哪、它的设计有哪些不可能三角。
📑 目录
- 1. 一段对话的”灵魂消失”
- 2. 上下文窗口的三重本质局限
- 3. State / Context / Memory / Knowledge 四层架构
- 4. Memory ≠ RAG:一张表说清差异
- 5. 何时需要 Memory:决策清单
- 6. Agent Memory 的三个不可能三角
- 7. Memory 给 Agent 带来的”五种新能力”
- 自我检验清单
- 参考资料
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-128K | 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 都涉及”检索”,但解决的是完全不同的问题。
| 维度 | RAG | Memory |
|---|---|---|
| 数据来源 | 外部静态语料(文档、API、网页) | Agent 与用户/世界的交互记录 |
| 谁创建 | 人类编辑 | Agent 自己抽取 / 用户主动设置 |
| 时间属性 | 通常是”快照” | 强时序(t_valid / t_invalid / t_created) |
| 是否会变 | 文档版本更新 | 持续演化(用户搬家、改口味) |
| 冲突处理 | 文档之间通常无冲突 | 必须处理冲突(旧偏好 vs 新偏好) |
| 个性化 | 全用户共享 | 强 user 隔离 |
| 写入频率 | 低(批量索引) | 高(每次对话都可能产生新记忆) |
| 检索策略 | 语义相似度 | 语义 + 时间衰减 + importance + 关系 |
| 典型工具 | Pinecone / pgvector / RAGAS | Mem0 / 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 成本)
📚 参考资料
概念入门
- Memory for AI Agents: A New Paradigm of Context Engineering —— The New Stack:https://thenewstack.io/memory-for-ai-agents-a-new-paradigm-of-context-engineering/
- Long-Term Memory for AI Agents: The What, Why and How —— Mem0 Blog:https://mem0.ai/blog/long-term-memory-ai-agents
- Context Engineering vs Memory —— Weaviate:https://weaviate.io/blog/context-engineering
关键论文
- 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 —— 最权威综述
行业讨论
- State of AI Agent Memory 2026 —— Mem0 Blog:https://mem0.ai/blog/state-of-ai-agent-memory-2026
- AI Agent Memory: Types, Implementation, Challenges & Best Practices 2026:https://47billion.com/blog/ai-agent-memory-types-implementation-best-practices/