🤖 AI 跟我学 新手入门

AI Agent 记忆怎么实现?短中长记忆全解

AI Agent 记忆机制怎么工作?这篇用人话讲清短期/中期/长期 3 层记忆 + OpenAI Session/Trimming/Summarization 方案对比

发布 2026/05/18 📎 参考官方文档

一句话说清 AI Agent 记忆怎么实现

AI Agent 记忆通过 3 层结构实现:短期记忆(当前对话上下文)、中期记忆(本次任务历史摘要)、长期记忆(跨任务持久信息),由 Session 机制统一管理,配合 Trimming(裁剪)和 Summarization(压缩)解决长任务上下文爆窗问题。

直白一点:Agent 的「脑容量」叫上下文窗口(context window),它和人脑一样会爆。OpenAI Agents SDK、Claude、扣子等所有 Agent 平台都在解决一个问题——任务跑长了怎么让 Agent 还记得最初目标、关键决策、用户偏好

下面拆开讲。

用一个生活场景理解

假设你雇了个秘书帮你跑一周长项目。

没有记忆机制的秘书:每隔 2 小时记忆清空一次。你周一交代「客户姓张不喜欢加班」,周三他完全忘了,又安排周日上午开会,客户当场翻脸。

有 3 层记忆的秘书

  • 短期:他眼前的便签 — 现在正在处理的邮件、刚说的话
  • 中期:他桌上的项目本 — 这周整个项目的关键决策、已完成和待办
  • 长期:他存在脑子里的客户档案 — 张总不喜欢加班、王总爱喝茶不爱咖啡

3 层联动,他能从早到晚连续干一周不掉线。AI Agent 的记忆机制就是在模拟这套结构。

AI Agent 的 3 层记忆架构

理解这 3 层,你看任何 Agent 平台的「记忆」功能都不会再懵。

第 1 层:短期记忆(Working Context)

是什么:Agent 正在处理的「这一轮对话」能看到的全部内容。本质就是模型的上下文窗口(GPT-5 是 400K tokens、Claude Opus 4.7 是 1M tokens)。

包含什么

  • 系统提示词(system prompt,告诉 Agent 它的角色和规则)
  • 用户最新输入
  • 最近几轮的对话历史
  • 当前正在调用的工具及返回结果

特点:模型每次推理都会”看到”全部短期记忆,所以这一层最准、最贵、最容易爆。

类比:你眼前正在写的微信窗口里看到的所有内容。

第 2 层:中期记忆(Session History / Task Memory)

是什么:这次任务从开始到现在的所有历史,但已经被压缩成更紧凑的形态。

包含什么

  • 任务最初的目标和约束
  • 中途的关键决策和结果
  • 已经做过的工具调用摘要
  • 失败和修正记录

特点:不是每次推理都全塞进上下文,而是按需检索 + 摘要后注入。

类比:你桌上摊开的项目笔记本,平时合着,需要时翻一下。

第 3 层:长期记忆(Long-term Memory)

是什么:跨任务、跨会话、跨天数的稳定信息。

包含什么

  • 用户的偏好(“我不爱接电话,邮件优先”)
  • 用户的画像(“程序员、住在深圳、用 Mac”)
  • 历史项目档案
  • 学过的领域知识(针对企业 Agent)

特点:通常存在外部数据库(向量库、PostgreSQL、Redis),按需检索注入到当前对话。

类比:你脑子里关于客户、同事、规则的”常识”,不需要每次开会都翻。本质是 RAG 的一种应用。

OpenAI Agents SDK 的 Session 机制

理解了 3 层架构,看 OpenAI 是怎么实现的。

Agents SDK 提供一个 Session 对象,自动管理上下文长度、历史和连续性。开发者不需要手动追踪每条消息——只要不停调用 session.run("..."),SDK 自己帮你处理:

  • 把新输入加到上下文
  • 决定哪些旧内容要丢/要压
  • 调用模型,把回复加回历史
  • 跨多轮保持任务的连续感

这套机制把「上下文管理」这件繁琐事抽象成了一个开关,工程师可以专心写业务逻辑。

解决「上下文爆窗」的 2 种主流方案

任务跑长了,短期记忆塞不下,怎么办?OpenAI Cookbook 把方案归纳成 2 种:

方案 1:Context Trimming(上下文裁剪)

做法:只保留最近 N 轮(一轮 = 一条用户消息 + 后续所有助理/工具回复,直到下一条用户消息)。N 之外的全部丢掉。

优点

  • 行为确定性强(永远是最后 N 轮)
  • 延迟低(短上下文跑得快)
  • 工程实现简单

缺点

  • 远期上下文一刀切丢,可能丢关键信息
  • 对长任务(如客服处理跨多个问题)不友好

适合场景

  • 工具调用密集、每轮独立的操作型任务
  • 短流程、要可控延迟的场景
  • 比如「执行命令型 Agent」「订票 Agent」

方案 2:Context Summarization(上下文压缩)

做法:把旧消息压缩成一段结构化摘要,作为合成的「用户—助理消息对」注入上下文。最近 N 轮保留原文。

优点

  • 长期记忆能压得很紧
  • 关键约束、用户偏好不丢
  • 适合「需要跨多个问题保持理解」的长对话

缺点

  • 摘要可能有损(关键细节被压掉)
  • 摘要可能”污染”上下文(错的事实被反复引用)
  • 实现复杂度更高

适合场景

  • 长跨度规划、教练、咨询类任务
  • 需要把约束/偏好延续到后续问题
  • 客服跨硬件+软件等多问题的场景

OpenAI Cookbook 提供了一个 SummarizingSession 类作为参考实现——它逐字保留最近 N 轮,把更早的全部压缩成两条合成消息(一条”过去用户说过的”,一条”过去助理回答的”)。

一张表对比 Trimming vs Summarization

维度Trimming(裁剪)Summarization(压缩)
远期记忆完全丢失压缩保留
实现难度
延迟
成本中(要额外跑摘要模型)
准确率近期高、远期 0整体中等
适合任务短流程、工具密集长流程、多问题串联

经验值:先用 Trimming 跑起来;发现远期上下文确实丢得太狠,再升级到 Summarization。

写好上下文摘要的 4 个原则

如果你要自己实现 Summarization,OpenAI 推荐 4 条原则:

1. 按时间顺序(Temporal Ordering)

事件按发生先后排列。“先发生的写在前面,后发生的写在后面”。这样模型重建上下文更顺畅。

2. 不矛盾(Contradiction Checking)

摘要要和系统指令、最初目标一致。如果用户中途改了主意,要明确标注”用户最初说 X,后改为 Y”。

3. 结构化分类(Structured Formatting)

把摘要分到固定字段里,比如:

  • 环境/产品信息(用什么设备、什么版本)
  • 问题描述(用户反馈的核心问题)
  • 已尝试方案(试过哪些方法、结果如何)
  • 未解决项(还没搞定的问题)

这种格式让模型一眼能找到对应信息,比一段流水账好用 10 倍。

4. 标记不确定信息(Hallucination Control)

摘要时拿不准的细节,明确写 “UNVERIFIED”(未核实)。这样后续模型不会拿不确定的当事实再引用。

长期记忆怎么实现:通常靠外部向量库

短期、中期都在内存里搞定,长期记忆需要持久化存外面。主流方案:

1. 向量数据库 + 嵌入

  • 每条要记的事实(用户偏好、历史决策)转成向量存进 Pinecone / Milvus / pgvector
  • 每次新对话开始,根据当前话题检索相关历史
  • 检索到的塞进 system prompt

这本质就是 RAG,只不过资料库存的是”用户和 Agent 的过往交互”。

2. 结构化数据库

  • 用户档案(姓名、偏好、企业角色)存 PostgreSQL / Redis
  • 关键事实结构化存储,按 key 查
  • 适合规则明确的”档案型”长期记忆

3. 混合方案

  • 结构化的存数据库(用户姓名、订阅状态)
  • 非结构化的存向量库(过往对话摘要)
  • 用 Agent 自己决定查哪个

ChatGPT 的 Memory 功能、Claude 的 Projects、扣子 Coze 的”用户记忆”底层都是这套思路。

一个判断「我的 Agent 该用哪种记忆方案」的 prompt

记忆方案选错了,要么爆窗要么花冤枉钱。用下面这个 prompt 帮你判断:

📋 Prompt 模板

你是 AI Agent 记忆架构顾问。我会描述一个 Agent 使用场景,请按 5 个维度判断该用什么记忆方案:

  1. 单次任务长度:通常几轮对话搞定(少于 5 / 5-20 / 20-100 / 不限)
  2. 跨任务延续:需要不需要记住用户上一次说过啥(不需要 / 需要 / 必须)
  3. 远期信息重要性:开头说的约束在结尾要不要再用(不重要 / 重要 / 关键)
  4. 工程能力:能不能维护向量库(不能 / 能 / 有专门团队)
  5. 预算:每次对话能承担多少成本(几毛 / 几块 / 不在乎)

最后给明确建议:

  • 短期记忆方案(直接窗口 / Trimming / Summarization)
  • 长期记忆方案(需不需要 / 用什么实现)
  • 推荐 1-2 个具体平台

我的 Agent 场景是:[这里描述你的场景]

把方括号里换成你的实际场景,扔给 ChatGPT / Claude 就能拿到判断。

AI Agent 记忆的 3 个常见坑

坑 1:什么都往长期记忆里塞

用户随口说一句”今天有点冷”,Agent 也记成长期偏好,下次还在追问要不要开暖气。判断标准

  • 短期事实(“我今天有点头疼”)→ 别记
  • 稳定偏好(“我对花生过敏”)→ 必须记
  • 不确定的别记,等用户重复 2 次以上再记

坑 2:摘要把关键约束压没了

用户最初说”预算 5000 块以内”,几轮后摘要把这条丢了,Agent 推荐了 1 万的方案。最佳实践

  • 明确把「约束/偏好」列为摘要必保留字段
  • 用结构化摘要而不是流水账
  • 关键决策点单独记录

坑 3:记忆机制没做 Eval

新功能上线,没人知道记忆是不是真的有用。任何记忆方案上线前要做对照测试

  • 准备 30 条「需要记忆才能答对」的问题
  • 用裸 LLM 和带记忆 Agent 各跑一遍
  • 看准确率差距,差距小说明记忆没起作用

国内能用什么 Agent 记忆方案?

国产平台都内置了基础记忆能力,按需选:

平台短期记忆长期记忆
扣子 Coze内置会话上下文内置「用户长期记忆」
Dify内置对话上下文接向量库自建(推荐 Milvus)
Kimi200 万字超长上下文创建项目自动记忆
百度千帆 AppBuilder内置 Session集成百度向量数据库

最佳入门路径:用扣子 Coze 试一下”用户记忆”功能,理解 Agent 记忆的实际效果,再决定要不要往深里搞。

下一步

读完这篇你已经知道 AI Agent 记忆怎么分层、怎么压缩、什么场景用哪种方案。接着值得看的:

常见问题

Q:ChatGPT 的 Memory 功能算 AI Agent 记忆吗? A:算长期记忆的一种实现。它把你说过的”我是程序员住深圳”这类稳定信息存在用户档案里,每次新对话自动注入。详细看 ChatGPT Memory 怎么用

Q:Claude 的 Projects 算记忆吗? A:Projects 是中期记忆(项目级上下文)+ 长期记忆(项目知识库)的组合。详细看 Claude Projects 怎么用

Q:上下文窗口越大,是不是就不需要记忆机制了? A:缓解但不解决。即使 1M tokens 也会爆,而且长上下文有「中间丢信息」问题(lost in the middle),关键信息夹中间反而读不到。所以再大窗口也需要主动管理。

Q:记忆机制会泄露隐私吗? A:会,要小心。长期记忆里可能存了用户姓名、地址、偏好。生产环境必须:1)加密存储;2)用户可见可删;3)符合 GDPR/PIPL;4)敏感字段不入向量库。

Q:完全不会代码能用 Agent 记忆吗? A:能。扣子 Coze 的”用户长期记忆”完全可视化配置,Kimi 创建项目自动管理记忆,ChatGPT Memory 直接说”记住 X”就行。代码自建是给企业级场景准备的。

Q:Agent 记忆和数据库有啥区别? A:数据库是按 key 查的精确存储,Agent 记忆通常是按语义查的模糊存储。两者经常配合:硬数据进数据库,软偏好进向量库。