本文深入探讨了 Agent 的记忆系统,区分了上下文窗口与记忆系统的概念,阐述了短期记忆和长期记忆的区别及其在 Agent 架构中的位置。文章通过真实场景展示了记忆系统的工作原理,并指出了无记忆 Agent 可能遇到的问题。最后,提供了一套最小可用的记忆系统组件,包括对话缓存、摘要模块、记忆存储、记忆管理器等,帮助开发者构建具备基本记忆能力的 Agent。

一、先说清一个大前提:上下文窗口不是记忆

这是很多人最容易搞混的点。

你可能会说:“现在的模型不是有 128K、200K 的上下文窗口了吗?这不就是记忆吗?”

不是。

上下文窗口和记忆,是两个完全不同的东西。

上下文窗口是"工作台"

上下文窗口是模型单次推理时能看到的全部信息——System Prompt、对话历史、工具调用结果、中间状态,全部加在一起。

它有一个硬上限,超了就会被截断。

你可以把它想象成一张工作台:桌面上能放多少纸条,取决于桌面有多大。桌面满了,最早放上去的纸条就被挤下去了。

记忆系统是"档案柜"

记忆系统是一套独立于上下文窗口的存储和检索机制。它能把重要信息持久化保存,需要时再调出来放到工作台上。

你可以把它想象成档案柜:工作台放不下的东西,你可以归档到柜子里。下次要用的时候,打开柜子找出来就行。

上下文窗口是临时的、有限的、每次推理都要重新组装的。
记忆系统是持久的、可扩展的、跨会话可用的。

把上下文窗口当成记忆来用,就像把所有文件都堆在桌面上——桌面越来越满,找东西越来越慢,而且桌面一清空,什么都没了。

二、短期记忆和长期记忆各是什么

人的记忆有短期和长期之分,Agent 的记忆系统也是一样的。

短期记忆:当前任务的工作信息

短期记忆管理的是"这一次任务中需要用到的信息"。

典型内容包括:

  • 当前对话历史

    :用户说了什么,Agent 回答了什么

  • 工具调用结果

    :刚刚查了什么、搜了什么、读了什么文件

  • 中间推理步骤

    :Agent 目前的判断、分析、计划

  • 临时工作变量

    :比如计算中间值、待处理的任务列表

短期记忆的特点是:生命周期短,和当前任务强绑定,任务结束后大部分会被丢弃。

在工程上,短期记忆通常就是对话上下文本身,或者用一些管理策略来优化:

  • Buffer 策略

    :保留最近 N 轮对话

  • Summary 策略

    :对早期对话做摘要压缩

  • Sliding Window

    :窗口滑动,只保留窗口内的内容

长期记忆:跨会话持久化的知识

长期记忆管理的是"跨越多次任务、多个会话都需要复用的信息"。

典型内容包括:

  • 用户偏好和习惯

    :比如"这个用户喜欢用中文"、“偏好简洁回答”

  • 历史决策记录

    :比如"上次选了方案 A,效果不好"

  • 过往任务总结

    :比如"用户上周让我帮他写了一份项目计划"

  • 领域知识积累

    :比如"这个项目的技术栈是 Python + FastAPI"

长期记忆的特点是:生命周期长,独立于单次对话,需要持久化存储。

在工程上,长期记忆需要外部存储支持:

  • 向量数据库

    :用于语义检索(Pinecone、Chroma、Milvus 等)

  • 关系数据库

    :用于结构化查询(比如查某个用户的偏好设置)

  • 文件系统

    :用于存储文档、笔记、日志

两者的关系

短期记忆和长期记忆不是孤立的,而是有转化关系:

  • 短期 → 长期

    :任务结束后,把重要信息提炼出来存入长期记忆

  • 长期 → 短期

    :新任务开始时,根据当前需求从长期记忆中检索相关信息

三、记忆系统在 Agent 架构中的位置

很多人做 Agent 时只关注"模型怎么调"、“工具怎么接”、“Prompt 怎么写”,但忘了记忆在架构中的位置。

记忆系统不是一个可有可无的附加模块,它嵌在 Agent 的核心链路里,影响每一次推理的质量。

看这张架构图:

记忆系统做了两件事:

  1. 检索

    (在推理前):根据当前任务,从记忆存储中找出相关信息,塞进上下文

  2. 写入

    (在推理后):把本次推理中产生的重要信息,持久化到记忆存储

这两步构成了一个闭环。

如果只有检索没有写入,记忆库永远是空的。
如果只有写入没有检索,存了也白存。

四、用一个真实场景,看看记忆到底怎么工作

场景:一个客服 Agent,用户连续咨询了两次。

第一次会话

用户:我买的那个蓝牙耳机,左耳没声音了。
Agent:您好,请问是哪款型号?
用户:就是上周在你们店买的 SoundMax Pro。
Agent:好的,SoundMax Pro 左耳无声,建议您先长按左耳 10 秒重置。如果还是不行,可以申请换货。
用户:好,我先试试重置。

会话结束后,记忆系统做了什么?

记忆管理器提炼关键信息,写入长期记忆:

用户购买了 SoundMax Pro 蓝牙耳机 问题:左耳无声 建议:长按 10 秒重置 用户表示会先试试 状态:待跟进

第二次会话(三天后)

用户:上次那个耳机的问题,重置了还是不行。

如果没有记忆系统,Agent 会问:

“请问您是哪款耳机?什么问题?”

用户已经说过一遍了,再问一遍会很烦。

如果有记忆系统,Agent 在收到消息时:

  1. 记忆管理器检索到上次会话的摘要
  2. 把"SoundMax Pro / 左耳无声 / 已尝试重置 / 未解决"注入上下文
  3. 模型看到完整背景后直接回答:

“SoundMax Pro 左耳无声的问题,您已经试过重置但没有效果,我帮您直接发起换货申请,您看可以吗?”

这就是记忆的价值:Agent 不用重新问,用户不用重新说,体验质的飞跃。

五、没有记忆的 Agent,会遇到哪些真实问题

这不是理论推演,是每个做过 Agent 的人都会遇到的坑。

问题 1:多轮对话信息丢失

对话轮次一多,上下文窗口塞不下了,最早的消息被裁掉。

Agent 就像一个只能看最近 5 页的人——前面的需求、条件、决策,全忘了。

问题 2:跨会话完全失忆

每次新会话,Agent 都是一张白纸。用户上次说过的偏好、做过的选择、确认过的方案,全部重来。

对用户来说,这就像每次打电话客服都要重新报一遍身份信息。

问题 3:Token 浪费严重

没有记忆管理,唯一的"记忆方式"就是把所有历史信息都塞进上下文。

30 轮对话 × 每轮几百 token = 上下文直接爆,成本指数增长,但大部分信息其实是冗余的。

问题 4:无法积累经验

Agent 犯了错误,下次还会犯。
Agent 做过一次正确决策,下次还是要重新推理。

因为它不记得自己之前的经历。

问题 5:无法做个性化

不记得用户是谁、喜欢什么格式、上次选了什么方案、讨厌什么风格。

没有记忆的"个性化 Agent",就是每次见面都自我介绍的社恐。

痛点速查表

问题 根因 影响
多轮忘事 上下文窗口有限 回答不连贯
跨会话失忆 没有持久化存储 用户体验差
Token 浪费 没有信息压缩 成本不可控
不积累经验 没有记忆写入 效率无法提升
无法个性化 没有用户画像 千人一面

六、一个最小可用的记忆系统需要什么

你不需要一上来就搞复杂的向量数据库和知识图谱。

一个最小可用的记忆系统,只需要 5 个组件:

组件 1:对话缓存(Chat Buffer)

保存最近 N 轮对话,确保短期内的连贯性。

`class ChatBuffer:  
    def __init__(self, max_turns=20):  
        self.max_turns = max_turns  
        self.messages = []  
      
    def add(self, role, content):  
        self.messages.append({"role": role, "content": content})  
        if len(self.messages) > self.max_turns * 2:  
            self.messages = self.messages[-self.max_turns * 2:]  
      
    def get_recent(self):  
        return self.messages`

组件 2:摘要模块(Summarizer)

当对话太长时,把早期内容压缩成摘要,节省 Token。

`class ConversationSummarizer:  
    def __init__(self, llm_client):  
        self.llm = llm_client  
      
    def summarize(self, messages):  
        prompt = f"""请将以下对话历史压缩成一段简洁的摘要,  
保留关键信息(用户需求、已做决策、重要结论):  

{messages}"""  
        return self.llm.generate(prompt)`

组件 3:记忆存储(Memory Store)

持久化保存重要信息,支持检索。最简单的实现可以用文件或 SQLite。

`import json  
from datetime import datetime  

class SimpleMemoryStore:  
    def __init__(self, storage_path="memory.json"):  
        self.path = storage_path  
        self.memories = self._load()  
      
    def save(self, key, content, metadata=None):  
        self.memories[key] = {  
            "content": content,  
            "metadata": metadata or {},  
            "timestamp": datetime.now().isoformat()  
        }  
        self._persist()  
      
    def search(self, query, top_k=5):  

        # 最简版本:关键词匹配  

        # 进阶版本:向量语义检索  

        results = []  
        for key, mem in self.memories.items():  
            if query.lower() in mem["content"].lower():  
                results.append(mem)  
        return results[:top_k]`

组件 4:记忆管理器(Memory Manager)

串联以上组件,决定什么时候检索、什么时候写入。

class MemoryManager:  
    def __init__(self, buffer, summarizer, store):  
        self.buffer = buffer  
        self.summarizer = summarizer  
        self.store = store  
      
    def before_inference(self, user_input):  
        """推理前:检索相关记忆"""  
        relevant = self.store.search(user_input)  
        context = "\n".join([m["content"] for m in relevant])  
        return context  
      
    def after_inference(self, user_input, agent_output):  
        """推理后:更新缓存,判断是否写入长期记忆"""  
        self.buffer.add("user", user_input)  
        self.buffer.add("assistant", agent_output)  
          

        # 判断是否需要持久化(简单策略:每 10 轮做一次摘要)  

        if len(self.buffer.messages) >= 20:  
            summary = self.summarizer.summarize(  
                self.buffer.messages[:10]  
            )  
            self.store.save(  
                key=f"session_{datetime.now().isoformat()}",  
                content=summary  
            )  
            self.buffer.messages = self.buffer.messages[10:]

组件 5:完整串联

class AgentWithMemory:  
    def __init__(self, llm, tools, memory_manager):  
        self.llm = llm  
        self.tools = tools  
        self.memory = memory_manager  
      
    def run(self, user_input):  

        # 1. 检索相关记忆  

        memory_context = self.memory.before_inference(user_input)  
          

        # 2. 组装上下文  

        messages = [  
            {"role": "system", "content": SYSTEM_PROMPT},  
            {"role": "system", "content": f"相关记忆:\n{memory_context}"},  
            *self.memory.buffer.get_recent(),  
            {"role": "user", "content": user_input}  
        ]  
          

        # 3. 模型推理(含工具调用循环)  

        response = self.llm.chat(messages, tools=self.tools)  
          

        # 4. 更新记忆  

        self.memory.after_inference(user_input, response)  
          
        return response

这五个组件加在一起,你的 Agent 就具备了基本的记忆能力:

  • 短期内能保持对话连贯
  • 长对话能自动压缩
  • 重要信息能持久化
  • 新会话能检索历史

七、记忆设计的常见误区

误区 1:什么都往记忆里存

记忆不是垃圾桶。如果什么都存,检索出来的全是噪声。

正确做法:只存有价值的信息——用户偏好、关键决策、任务结论。日常寒暄不需要存。

误区 2:只存不清理

记忆越积越多,过期信息和冗余信息会严重影响检索质量。

正确做法:设计清理策略——过期淘汰、重要性衰减、定期合并。

误区 3:把所有历史都塞进上下文

“既然记忆很重要,那我就把所有记忆都放进去。”——这会导致上下文爆炸、Token 浪费、推理质量下降。

正确做法:只检索和当前任务相关的记忆,不要全量注入。

误区 4:只有短期没有长期

只做了对话缓存,没有持久化存储。一关程序,什么都没了。

正确做法:起码有一个最简单的持久化层,哪怕是写文件。

误区 5:以为大窗口可以替代记忆

“我用 200K 上下文的模型,不需要记忆。”

200K token 大约是 15 万字。听起来很多,但如果你的 Agent 运行几天,几十轮对话加上工具调用结果,很快就不够了。

而且,窗口越大,推理成本越高,速度越慢。

正确做法:大窗口解决的是"短期能看多少",记忆系统解决的是"长期能记多少"。两者互补,不能替代。

误区速查表

误区 后果 正确做法
什么都存 检索噪声大 只存关键信息
只存不清理 质量衰减 设计淘汰策略
全量注入 Token 爆炸 按需检索
只有短期 无法跨会话 加持久化层
靠大窗口 成本高、速度慢 记忆 + 窗口互补

八、从第 07 篇到这篇,认知是怎么串起来的

上一篇我们讲了工具调用的完整链路。

当时提到一个关键步骤:工具执行结果要回传到上下文,模型才能基于结果继续推理。

这一步其实就是记忆的基础形态——短期记忆。

但上下文回传只够撑一次会话。会话结束后,这些信息就没了。

如果你想让 Agent:

  • 跨会话保持一致
  • 不重复问用户已经说过的话
  • 能积累经验、越用越好
  • 能降低 Token 成本

那你就需要从"上下文回传"升级到"记忆系统"。

所以你可以这样理解两篇文章的关系:

工具调用回传,是记忆的起点。记忆系统,是工具结果持久化的完整方案。

九、总结

如果把这篇文章浓缩成几句话:

  1. 上下文窗口是"工作台",记忆系统才是"档案柜"。工作台放不下的,必须有地方存。
  2. 短期记忆管当前任务,长期记忆管跨会话复用。
  3. 没有记忆的 Agent,注定是一次性的助手。
  4. 一个最小可用的记忆系统只需要:对话缓存 + 摘要模块 + 持久化存储 + 记忆管理器。

后面我们还会讲任务拆解、规划与反思——而规划和反思能力,都依赖 Agent 能记住之前做了什么、状态到哪了。

没有记忆,就没有规划。
没有规划,Agent 就只能走一步看一步。

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线科技企业深耕十二载,见证过太多因技术卡位而跃迁的案例。那些率先拥抱 AI 的同事,早已在效率与薪资上形成代际优势,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在大模型的学习中的很多困惑。我们整理出这套 AI 大模型突围资料包

  • ✅ 从零到一的 AI 学习路径图
  • ✅ 大模型调优实战手册(附医疗/金融等大厂真实案例)
  • ✅ 百度/阿里专家闭门录播课
  • ✅ 大模型当下最新行业报告
  • ✅ 真实大厂面试真题
  • ✅ 2026 最新岗位需求图谱

所有资料 ⚡️ ,朋友们如果有需要 《AI大模型入门+进阶学习资源包》下方扫码获取~
在这里插入图片描述

① 全套AI大模型应用开发视频教程

(包含提示工程、RAG、LangChain、Agent、模型微调与部署、DeepSeek等技术点)
在这里插入图片描述

② 大模型系统化学习路线

作为学习AI大模型技术的新手,方向至关重要。 正确的学习路线可以为你节省时间,少走弯路;方向不对,努力白费。这里我给大家准备了一份最科学最系统的学习成长路线图和学习规划,带你从零基础入门到精通!
在这里插入图片描述

③ 大模型学习书籍&文档

学习AI大模型离不开书籍文档,我精选了一系列大模型技术的书籍和学习文档(电子版),它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础。
在这里插入图片描述

④ AI大模型最新行业报告

2025最新行业报告,针对不同行业的现状、趋势、问题、机会等进行系统地调研和评估,以了解哪些行业更适合引入大模型的技术和应用,以及在哪些方面可以发挥大模型的优势。
在这里插入图片描述

⑤ 大模型项目实战&配套源码

学以致用,在项目实战中检验和巩固你所学到的知识,同时为你找工作就业和职业发展打下坚实的基础。
在这里插入图片描述

⑥ 大模型大厂面试真题

面试不仅是技术的较量,更需要充分的准备。在你已经掌握了大模型技术之后,就需要开始准备面试,我精心整理了一份大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余

图片

以上资料如何领取?

在这里插入图片描述

为什么大家都在学大模型?

最近科技巨头英特尔宣布裁员2万人,传统岗位不断缩减,但AI相关技术岗疯狂扩招,有3-5年经验,大厂薪资就能给到50K*20薪!

图片

不出1年,“有AI项目经验”将成为投递简历的门槛。

风口之下,与其像“温水煮青蛙”一样坐等被行业淘汰,不如先人一步,掌握AI大模型原理+应用技术+项目实操经验,“顺风”翻盘!
在这里插入图片描述
在这里插入图片描述

这些资料真的有用吗?

这份资料由我和鲁为民博士(北京清华大学学士和美国加州理工学院博士)共同整理,现任上海殷泊信息科技CEO,其创立的MoPaaS云平台获Forrester全球’强劲表现者’认证,服务航天科工、国家电网等1000+企业,以第一作者在IEEE Transactions发表论文50+篇,获NASA JPL火星探测系统强化学习专利等35项中美专利。本套AI大模型课程由清华大学-加州理工双料博士、吴文俊人工智能奖得主鲁为民教授领衔研发。

资料内容涵盖了从入门到进阶的各类视频教程和实战项目,无论你是小白还是有些技术基础的技术人员,这份资料都绝对能帮助你提升薪资待遇,转行大模型岗位。
在这里插入图片描述
在这里插入图片描述

以上全套大模型资料如何领取?

在这里插入图片描述

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐