大多数 LLM 每开启一个新对话都是从零开始——不知道你是谁、不记得讨论过什么、五分钟前在另一个窗口说的事也忘得干干净净。对简单聊天机器人这无所谓,但对需要持续执行任务、自主决策、越用越聪明的 Agent 来说,这种失忆是致命的。
真正的智能不只是响应好,还在于记得住、学得会、能复用。记忆把一个无状态的系统变成了能持续进化的实体。
三种记忆职责
Agentic Memory 不是单一组件,而是三个不同维度同时工作:
- 连续性(Continuity):记住你是谁、偏好什么、一起做过什么。没有它,每次交互都像陌生人对话。
- 上下文(Context):当前任务里刚发生了什么、用了什么工具、下一步该做什么。维持多步骤工作流不碎掉。
- 学习(Learning):理解什么有效、什么失败了,持续优化决策,不重蹈覆辙。
四种记忆类型
1. 上下文窗口(Context Window)
即模型当前能"看到"的全部信息——推理速度快,无需检索步骤,但有容量上限,且会话结束即清空。
包括:系统提示词、对话历史、工具返回结果、从外部检索来的记忆块、推理中间步骤(scratchpad)。
滑动窗口问题:对话一长,历史溢出上限。最原始的截断会丢失早期关键信息。更好的策略:
- 摘要压缩:定期将旧轮次压缩为摘要,替换原文
- 选择性保留:只保留含关键事实、决策、工具结果的轮次
- 外部化检索:将重要事实提取到向量存储,按需召回
2. 外部记忆(External Memory)
任何持久化存储——数据库、向量存储、键值存储、文件。能跨会话存在,Agent 可以记得六个月前的事。
两种形态:
- 结构化存储(精确查找):PostgreSQL、Redis、SQLite。按 key/ID/SQL 查询,适合用户画像、偏好、配置等结构化数据。
- 向量存储(语义搜索):Pinecone、Chroma、pgvector。按语义相似度召回,适合非结构化笔记和情景记忆检索。
检索是瓶颈。好的记忆架构是 20% 存储、80% 检索设计。
3. 情景记忆(Episodic Memory)
最被低估的类型。外部记忆存事实,情景记忆存事件——具体是过去动作的结果。
最简形式是结构化日志:每次 Agent 完成一个任务,就记录发生了什么。这个日志逐渐成为丰富的自省知识库,Agent 可以在做新决策前查阅。
{
"episode_id": "ep_20240315_003",
"task": "Summarize 50-page PDF into 3 bullet points",
"approach": "Sequential chunking, 2000 tokens per chunk",
"outcome": "success",
"duration_ms": 4820,
"token_cost": 12400,
"quality_score": 0.91,
"notes": "Worked well. Hierarchical chunking would be faster."
}
新任务来时,Agent 检索语义最相似的老任务,用来选择策略——本质上是"从个人历史做 few-shot 学习",而非从人工构造的数据集。
4. 参数记忆(Parametric Memory)
模型训练时就编码进去的记忆——世界知识、语言模式、推理策略、编程惯例、文化常识。生来就有,无需检索,但有硬限制:
- 冻结在训练截断日期
- 运行时无法更新新事实
- 无法检查模型"知道什么"
- 容易幻觉,用 plausibly-wrong 的答案填补空白
正确的心智模型:参数记忆是 Agent 的通识教育;外部、情景、上下文记忆是 Agent 的在职经验。最好的 Agent 两者结合。
遗忘策略
真正的记忆系统不是只增不减。无差别积累会导致检索噪音增加、延迟上升、相互矛盾的记事务必干扰 Agent。
三种主流策略:
基于重要性的过滤:存记忆时让模型给自己输出打分(0–1),只存高分项,从源头过滤噪音。
时间衰减评分:
def memory_score(relevance, importance, created_at, recency_weight=0.3, decay_factor=0.995):
hours_old = (datetime.utcnow() - created_at).total_seconds() / 3600
recency = math.pow(decay_factor, hours_old)
return relevance * 0.4 + importance * 0.3 + recency * recency_weight
夜间合并:每晚运行任务,将高度相似的记忆对合并为单一规范摘要——类似人类睡眠对记忆的整合过程。
核心架构图
每次 Agent 处理请求时,所有记忆系统都会参与:LLM 调用前进行检索,调用后写入记忆。模型本身是无状态的,正是记忆系统赋予了它"有状态"和"有意识"的假象。
真正落地的 Agent 系统,记忆层才是护城河,不是模型本身。这篇文章把记忆分层讲清楚了,但实现部分用的是 ChromaDB——本地玩具可以,上生产等着被向量检索的延迟坑死。