从“你好消耗 1.5 万 token”说起:AI Agent 长期记忆的正确打开方式

请添加图片描述

如果你刚开始做 AI Agent(比如 OpenClaw / Dify / Coze / AutoGLM 这类可执行智能体),大概率会遇到两个诡异现象:

1)Agent 越用越贵:明明只问一句“你好”,却消耗了上万 token。
2)Agent 越用越笨:要么忘掉你之前说过的关键事实,要么把旧信息胡乱套用。

这不是模型突然变差,也不是你不会写 Prompt。
更核心的原因只有一个:

我们把“记忆”当成了“聊天记录”,然后把所有聊天记录塞回去让模型读。

结果就是:
在这里插入图片描述

  • 塞得越多 → token 爆炸 → 成本失控
  • 塞得越少 → 信息断层 → 行为混乱

所以长期记忆的正确问题,从来不是“存多少”,而是:

存什么?怎么存?用的时候怎么取?取多少?

这篇文章我会用最新手也能听懂的方式,把一套“可长期运行、可控成本、可精准召回”的 Agent 记忆架构讲清楚。你读完就能理解:为什么 Agent 需要分层记忆,以及如何把上下文从“全量加载”改成“按需加载”。


一、先把问题讲透:Agent 为什么会“爆炸”和“失忆”?

1)记忆爆炸:全量上下文塞进 prompt

很多同学做 Agent 的第一反应是:

“那我把历史对话都保存下来,每次都拼进 prompt,不就能记住了吗?”

看似合理,但它会很快把系统拖死:

  • 历史越积越多,prompt 越来越长
  • token 消耗指数级增长(尤其是有工具说明、系统提示、长对话时)
  • API 调用越来越贵,本地模型也跑不动
  • 更致命:模型注意力被“噪音”稀释,反而更容易答偏

你会看到这种荒诞现象:
一句“你好”,消耗上万 token。
不是“你好”值这么多钱,是因为你让模型把一整本“聊天史”重新读了一遍。


2)记忆缺失:只留最近几轮

另一种反应是:

“那我只保留最近 5~10 轮对话吧,省 token。”

这确实省钱,但会带来另一类崩溃:

  • 用户之前说过的关键事实(设备、目标、偏好、约束)丢失
  • Agent 每次像第一次见面一样重新问
  • 执行任务时缺少边界条件 → 动作变得危险或不可靠
  • 用户体验很差:“你怎么又忘了?”

3)结论:记忆不是越多越好,而是“可控 + 可用”

真正能长期跑的 Agent,必须同时满足:

  • 成本可控:不能每次都把过去全塞进去
  • 事实准确:对关键事实要“精准召回”,不能模糊匹配
  • 语境不断裂:对话风格、情绪氛围、场景细节要能还原一部分
  • 按需加载:用多少取多少,不要一次性把全部记忆拉满

这就引出了下一部分:人类是怎么做到的?


二、人类怎么记忆?这是最好的“入门类比”

想象一个问题:

“你大学住在哪?”

你会怎么回答?

你不会把大学四年所有聊天记录从头回放一遍。你更像这样:

1)先调出一个事实:城市/学校/宿舍区
2)如果对方追问,再想起当时的场景:周围环境、通勤路线、室友
3)如果再追问,再回忆更具体的细节:门牌号、哪栋楼、哪一层

注意这个顺序:

先事实(准确、短) → 再场景(丰富、有氛围) → 再细节(只有需要才想)

这就是我们要给 Agent 做的长期记忆系统:分类型 + 分层级 + 按需加载
在这里插入图片描述


三、核心架构:三类记忆分离(短期 / 事实画像 / 长期情景)

我最终采用的是一种“类人”的三层记忆架构:

1️⃣ 短期记忆(Short-Term Memory,STM)

它是什么:
最近 N 轮原始对话(比如 8~20 轮)

它解决什么:

  • 指代消解:“他/她/这个/那个”到底指什么
  • 保持对话连贯性:刚刚你说的,模型不能忘

它的特点:

  • 不做复杂检索
  • 直接拼进 prompt
  • 但必须严格限额(否则立刻爆炸)

一句话总结:

短期记忆负责“连贯”。


2️⃣ 实体画像记忆(Entity/Profile Memory,EPM)——核心层

这是整个系统最重要的一层。

它是什么:
把用户/项目/设备/偏好/约束等“事实型信息”提取出来,变成结构化记录。

比如用户说:

  • “我用 RTX 4070 Laptop GPU”
  • “我工作日通勤 07:00–08:00”
  • “我的主线是 AI 应用/自动化工程”
  • “我希望你用长期主义,不要让我竭泽而渔”

这些不是情绪,不是聊天氛围,而是可复用、可校验、跨会话有效的事实

为什么必须结构化?
因为事实需要的是精准召回,而不是模糊相似。

很多新手会犯一个错:
把“事实”也塞进向量库,用向量搜索来查。

问题是:向量检索擅长“语义相似”,不擅长“事实准确”。
它可能把“我有 RTX 4070”搜成“我有 4090”附近的内容,也可能把时间、数字搞混。

所以事实型信息应该进:

  • 结构化表(键值、三元组、档案式记录)
  • 可加置信度、来源、时间戳
  • 可更新、可覆盖、可冲突检测

一句话总结:

实体画像记忆负责“准确”。


3️⃣ 长期情景记忆(Long-Term Scene Memory,LSM)

它是什么:
记录对话中“非事实但有价值”的部分:

  • 你那天很累、昏沉、头晕
  • 你对某个方向焦虑或兴奋
  • 你在某次项目上卡住的过程
  • 你和某人关系的语气、氛围、心理线索

这些东西不一定能结构化成固定字段,但它决定了:

  • 你和 Agent 的互动是否“像在跟熟悉的人说话”
  • 建议是否贴合当下状态
  • 推进节奏是否合适(比如你状态差,就不适合强推高强度任务)

这类记忆适合:

  • 向量形式存储
  • 用相似度检索找“类似情境”
  • 但同样要控制量、控制调用

一句话总结:

长期情景记忆负责“语境与温度”。
在这里插入图片描述


四、关键升级:再加一层“摘要-概览-详情”的分层索引(像图书馆)

即使你把记忆分成 STM/EPM/LSM 三类,如果你每次都把它们原文全部加载,还是会爆炸。

所以必须引入第二个关键思路:

像图书馆一样:先看目录,再决定读哪几页。

这就是“分层索引”。

我把每条长期记忆都拆成三层:
在这里插入图片描述

L0:摘要层(一句话定位)

  • 作用:快速判断“这条记忆跟我现在的问题有没有关系”
  • 形式:一句话

L1:概览层(目录/结构导航/要点)

  • 作用:在不加载原文的情况下,拿到足够的决策信息
  • 形式:要点列表、结构大纲

L2:详情层(原文/证据/对话片段)

  • 作用:只有在必须引用细节、需要证据、或遇到冲突时才加载
  • 形式:原始记录、长文本、完整事件过程

这样你每次调用模型时,默认只带:

  • EPM 的 L1(事实目录)
  • LSM 的 L1(情境目录)
  • STM 的最近对话(但限额)

而不是:把所有 L2 原文全部塞进去。

这一步,往往就是节省 80% token 的核心来源。
在这里插入图片描述


五、Agent 工作流程:一次请求是怎么“取记忆”的?

把流程说清楚,你就能写出一个能长期跑的 Agent。

当 Agent 收到用户问题时,它不是直接“把历史全拼上”,而是这样做:

Step 1:先判断本次问题属于什么类型

  • 是问“事实”?(设备、计划、目标、规则)
  • 是问“建议”?(健康、训练、选择、决策)
  • 是问“延续对话”?(刚聊到哪了)
  • 是要“执行任务”?(操作电脑、调用工具、写代码)

这一步决定“需要哪些记忆”。


Step 2:先查实体画像(EPM)——保证事实准确

  • 用精准查询把相关事实拿出来
  • 默认只拿 L1(要点),不拿原文

比如用户问“我现在应该怎么学习融合 openclaw?”
那你需要的是:

  • 用户的主线定位、时间精力结构、学习原则(事实)
  • 用户已有技术栈(Python、MySQL、Dify、OpenClaw)
  • 用户的作息约束(每天可用时间)

这些都应该从 EPM 拉出。


Step 3:再查长期情景(LSM)——补语境与近期状态

  • 用相似检索找最近类似情境
  • 默认只拿 L1

比如用户问“今天状态昏沉怎么办?”
那你需要的是:

  • 最近几天的状态记录(情景)
  • 最近训练和饮食的波动(情景)

Step 4:再加短期对话(STM)——保证连贯

  • 最近 N 轮原文放进来
  • 但如果 token 紧,就裁剪成最近 4~8 轮

Step 5:只有必要时才升级加载 L2 详情

触发条件通常包括:

  • 需要引用原话(“你之前说过一句话是什么?”)
  • 出现冲突(同一事实前后不一致)
  • 高风险动作(真实账号操作、付款、删除文件)
  • 用户强要求“不许改动、逐字复述”

这时才把相关记忆的 L2 拉进上下文。


在这里插入图片描述

六、给新手的落地建议:先做“最小可用版”,不要一上来造航母

如果你是刚入门的同学,不要想着一步到位做完美系统。

最小可用版本只需要 4 件事:

1)强制限制上下文预算

  • 永远不要允许“无限拼接历史”
  • 先把 token 控制住

2)短期记忆只保留最近 N 轮

  • N=8~20 轮即可
  • 超了就丢弃(环形队列)

3)把“事实”从对话里抽出来单独存

  • 用结构化方式存(哪怕是 JSON 文件也行)
  • 不要把事实丢进向量库当作唯一方案

4)情景记忆只保存“值得保存的”

  • 不要全量存储
  • 只存“复用价值高”的事件/状态/氛围

你会发现:
只要做到这四点,你的 Agent 就已经从“玩具”进化成“能长期运行的系统”。


在这里插入图片描述

七、总结:长期记忆的本质不是“记住一切”,而是“按需想起”

最后用一句话收束:

Agent 的长期记忆设计,不是让它拥有无限记忆,而是让它像人一样:先记关键事实,再记重要情境,用的时候先看目录,必要时再翻原文。

当你把“记忆”从“聊天记录”升级为“分层知识系统”,Agent 才真正具备了长期可用性:

  • token 消耗可控
  • 事实召回准确
  • 语境更像真实交互
  • 系统能长期跑,不会越跑越贵、越跑越乱

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐