Agent 的记忆有几种?你的名字是?

即时上下文 → 长期记忆 → 知识库

Agent 的记忆不是一个大仓库,而是三层「速度、容量、寿命」各不相同的缓存------该快的东西要快、该记的东西要记、该分的东西要分。

前言

先看一个最常见的「失忆」现场:你跟一个 Agent 聊到一半,它突然忘了你十分钟前说的话;或者你关掉重开,它像从没见过你;又或者你问它「我上个月跟你说的那件事」,它翻出一堆毫不相关的知识片段。

这三种「失忆」,其实是三种完全不同的问题------忘了刚才(窗口溢出)、忘了过去(没有持久化)、分不清「关于我的事」和「通用知识」。把它们都叫「记忆」,然后指望一个数据库全解决,是注定做不好的。真正靠谱的做法,是把记忆分成三层,每一层用不同的机制、不同的取舍。

一、即时上下文:最快、最贵、最易失的「工作记忆」

第一层,是当前对话窗口里躺着的那些消息------系统提示词、历史对话、刚调过的工具结果。它「记得最快」(直接就在模型眼前),但也「最贵、最易失」。

ts 复制代码
// 工作记忆:直接塞进模型的那一坨,有硬性 token 上限
const window = [
  { role: 'system', content: systemPrompt },   // 每次都重发
  { role: 'user', content: '帮我看看报告' },
  { role: 'assistant', content: '好的,我先读文件...' },
  // ... 越聊越多,直到顶到上下文窗口上限
]

取舍点 :这一层的核心矛盾是「容量 vs 成本 」------塞得越多,模型记得越全,但每一轮都要为这一整坨付 token 钱,而且窗口有硬上限,超了必须做压缩或截断 (这就是前面反复出现的「上下文工程」)。所以工作记忆的原则是:只放当前任务真正需要的东西,放不下的,交给下一层。

二、长期记忆:跨会话的「关于你的事实」

第二层,是那些关掉对话也不该丢的、关于这个用户或项目的事实------你的偏好、做过的决定、项目里重要的约定。它要持久,所以得写盘;它不能全塞进窗口,所以得「按需检索」。

ts 复制代码
// 长期记忆:写盘 + 检索,而不是塞进每次的窗口
async function remember(user, fact) {
  const key = await embed(fact)      // 向量化
  memoryStore.put({ user, key, fact, time: now() })
}

async function recall(user, query) {
  return memoryStore.search(user, await embed(query), { topK: 5 })
}

取舍点 :这一层最难的不是「存」,而是「记什么、怎么取 」。不是每句话都值得记------要过滤掉噪声,只留「跨会话还有用」的事实;取的时候要按相关性检索,而不是把记忆全倒出来。长期记忆的价值,在于「下次见面它还记得你」,代价是「多一层写入 + 多一层检索」。

三、知识库:最慢、最大、最「客观」的外部资料

第三层,是外部文档、资料、手册------不是「关于你」,而是「关于世界」的通用知识。它最大,也最慢(要先检索、再注入),而且它不随会话改变。

ts 复制代码
// 知识库:RAG 检索,把相关片段按需塞回上下文
async function rag(query) {
  const chunks = vectorStore.search(query, { topK: 3 })  // 先检索
  return chunks.map((c) => c.text).join('\n')            // 再注入
}

取舍点 :知识库和长期记忆最容易混------两者都要「向量检索」,但信任边界不同 :长期记忆是「关于这个用户的、可能过期的、主观的」,知识库是「外部资料的、相对稳定的、客观的」。混在一起,模型就会拿「你上个月随口说的一个想法」去当「权威资料」回答。分层的意义之一,就是让模型知道「哪段话该信到什么程度」。

四、原点:记忆,是用「钱和延迟」换「上下文」

把三层放在一起看,它们其实是同一个维度的三个刻度:

层 速度 容量 寿命 本质
即时上下文 最快 最小(token 上限) 最短(窗口一关就没) 用钱换「就在眼前」
长期记忆 中(要检索) 中 长(持久) 用延迟换「下次还记得」
知识库 最慢(检索+注入) 最大 最长(资料不变) 用延迟换「知道更多」

记忆分层的本质,就是用「钱和延迟」去换「上下文」------越快的层越贵、越小;越慢的层越便宜、越大。设计记忆,就是决定「哪些信息值得放在哪一层」。

所以判断一个 Agent 的记忆设计好不好,就看三条:该快的东西快不快(工作记忆会不会被挤爆)、该记的东西忘不忘(长期记忆有没有真的持久)、该分的东西分不分(长期记忆和知识库混没混)。 三条都过关,才叫「有记忆」;只做一层,那叫「只有一个会溢出的缓冲区」。

(下一篇顺着「每一层都在烧 token、花真金白银」这条线,聊 Agent 的钱到底花哪了:token 与成本。)

结语

回到开头那句:Agent 的记忆不是一个仓库,而是三层速度、容量、寿命各不相同的缓存。

即时上下文负责「就在眼前」,长期记忆负责「下次还记得」,知识库负责「知道更多」。它们对应三种不同的失忆------忘了刚才、忘了过去、分不清对象 ,也对应三种不同的取舍------容量、持久、检索。

把记忆分层,不是把东西多存几份,而是让每一份信息,待在它该待的那一层。


参考:

相关推荐
机核研创社1 小时前
缝制工厂招工难?自动化改造把“靠人“变成“靠参数“
人工智能·自动化
你就是答案 -1481 小时前
2026 企业 AI 办公工具选型指南:匹配业务场景才是核心
大数据·人工智能
过客123451 小时前
从"发现"到"处置":一个无人值守 AI 闭环的完整拆解(85 天真实数据)
后端·agent·ai编程
小小测试开发1 小时前
同一批 30 题输出,等权 0.78、按长度加权掉到 0.61:加权口径能直接把结论掰弯
人工智能
guslegend1 小时前
AI 编程范式转换与 Memory 工程:从无状态模型到 AGENTS.md 声明式配置
人工智能·大模型·agent·ai编程·opencode
jeffsonfu1 小时前
序列到序列(Seq2Seq)模型:机器翻译背后的核心技术
人工智能·自然语言处理·机器翻译
Yolanda_20221 小时前
21.神经网络-线性层及其他层介绍
人工智能·深度学习·神经网络
鱼宵1 小时前
Spring AI 初体验:配好 yml 就能聊,ChatClient 四步链式调用
人工智能·spring·microsoft·大模型·springai·chatclient