AI

每天吃透一个 AI 知识点 —— Agent 系统,记忆机制如何设计?

转载:小红书 AI产品赵哥

前言🔖


有朋友面试 AI Agent 开发、AI 产品经理,都被问到了这样一个问题:

你的 Agent 架构里,如何设计记忆机制?

正好最近我一直在做 Agent,发现无论是手搓 Agent 的小伙伴,还是打算面试 AI Agent 开发、产品岗的小伙伴,可能都绕不开今天要聊的话题 ——Agent 记忆机制

大家有没有遇到过这种情况:

  • 上午跟 Agent 详细讨论了项目 A 的各种细节,下午再问它,它一脸茫然地问 “项目 A 是什么?”
  • 或者你跟它说了喜欢简洁的报告风格,下次它还是给你整出一堆花里胡哨的客套话。
  • 昨天刚纠正过的错误,换个问法它又犯了。

是不是挺崩溃的?

面试的时候,如果被问到 Agent 的记忆机制怎么设计,直接回答 “用向量数据库”,这道题大概都很难及格。

因为这里有个根本矛盾:上下文窗口(Context Window)是有限的,但任务和交互周期可能是无限的。就像你的背包容量有限,但旅行没有终点。

所以记忆系统不是简单堆个数据库就完了。它更像大脑的分层记忆体系。今天我们就来拆解一下这种设计思路。大家准备好的话,咱可就发车了!!!

  

一、第一层:短期记忆🔖


首先,这是记忆系统的第一层,也是最直接的一层 —— 短期记忆,也叫工作记忆(Working Memory)。

🔹【是什么?】

你可以把它想象成你书桌的工作台,或者是电脑的内存(RAM)。

这个台上,放着你当前正在处理的任务所需的一切工具和材料。它非常方便,你一伸手就能拿到,一低头就能看到。但缺点也很明显:台面空间非常有限,而且下班后(任务结束后)不清空就会乱成一团。

在 Agent 中,短期记忆通常就是指被直接放进上下文窗口(Context Window)里的那部分信息。它包含了:

  • 最近几轮的对话历史:你和 AI 刚刚聊了什么。
  • 当前的工具调用结果:AI 刚刚查询了天气 API,返回的结果 “北京,晴,25 度”。
  • 当前的执行计划:AI 正在执行一个分为三步的计划,目前进行到第二步。
  • 临时变量和中间思考:AI 为了解决一个复杂问题,自己进行的一些思考链(Chain of Thought)的中间产物。

  

🔹【核心价值】

短期记忆的核心价值在于即时性和高相关性。它保证了 AI 在执行每一步推理时,都能立刻访问到最关键、最新的信息,从而保持对话的连贯性和任务的流畅性。

  

🔹【面临的挑战】

但是,问题也随之而来。上下文窗口不是无限的,而且是按 token 计费的,非常昂贵。如果你不加节制地把所有东西都堆在工作台上,很快就会:

  1. 台面溢出:上下文窗口被塞满,更早的信息被挤掉,导致 AI 突然失忆。
  2. 成本飙升:每次请求都带着几万甚至几十万的 token,你的钱包在燃烧。
  3. 效率下降:台面太乱,AI 在做决策时,需要处理的无关信息太多,反而影响了推理的质量和速度。

所以,短期记忆虽然好用,但必须有一个机制来管理它,不能让它无限膨胀。这就引出了我们的第二层。

  

二、第二层:记忆压缩🔖


当你的工作台越来越乱时,你会怎么做?你会把已经完成的工作材料整理归档,把一些讨论过程写成一份简洁的会议纪要,然后把不重要的草稿纸扔掉,对吧?

💡 记忆压缩,扮演的就是这个整理员和纪要员的角色。

🔹【是什么?】

记忆压缩,也叫上下文压缩(Context Compaction),是一种将冗长的、非结构化的历史信息,通过 AI 自身能力,总结、提炼成一份简短、结构化的摘要的技术。

假设你已经和 Agent 对话了 50 轮,为了修复一个 bug。到了第 51 轮,AI 真的有必要知道第一轮你是怎么跟它打招呼的吗?完全没必要。

记忆压缩要做的是,让 AI 回头看,然后生成一份类似这样的摘要:

{
  "task_id": "BUG-FIX-2023-1028",
  "user_goal": "修复用户登录时500错误的问题",
  "progress_summary": [
    "已确认bug可在测试环境稳定复现",
    "已定位问题代码位于 auth_service.js 的 getToken 函数",
    "初步尝试增加try-catch块,但未解决根本问题"
  ]
  "next_steps": [
    "尝试分析数据库连接池在高峰期的表现",
    "考虑引入重试机制"
  ],
  "key_decisions": [
    "用户明确表示,不希望修改数据库表结构"
  ]
}

  

🔹【核心价值】

这份摘要的价值巨大:

  • 信息降噪:它过滤掉了大量的口水话、寒暄、错误尝试等噪音,只保留了最有价值的信号。
  • 成本控制:用一个几百 token 的结构化摘要,替换掉几万 token 的原始对话历史,极大地节省了上下文成本。
  • 状态保持:即使原始对话被移出短期记忆,这份摘要也能让 AI 在后续的对话中,快速回想起任务的核心状态。

Anthropic 公司在开发长任务 Agent 时,就大量使用了这种技术。他们发现,定期地让 AI 自我总结,是维持长期对话连贯性的关键。

  

🔹【如何实现?】

通常是在对话进行到一定长度(比如每 10 轮或 20 轮),或者在任务的一个阶段性节点完成后,触发一个特殊的 Prompt,让 AI 根据之前的对话历史,生成或更新这样一份摘要。这份摘要可以被保留在短期记忆的顶端,或者存入长期记忆,供后续随时调取。

记忆压缩就像一座桥梁,它连接了短暂易逝的短期记忆和永久保存的长期记忆。

  

三、第三层:长期记忆🔖


现在,我们来到了记忆系统最核心的也是最能体现 Agent 智慧的部分 —— 长期记忆。如果说短期记忆是工作台,那么长期记忆就是你身后那座档案馆。

【它是什么?】

长期记忆负责存储那些跨会话、跨任务、需要永久或半永久保存的信息。它保证了 Agent 在今天和你聊完后,明天、下周、甚至明年再见到你时,它依然认识你,记得你们之间的故事。

这里存储的内容包罗万象:

  • 用户偏好:你喜欢什么样的沟通风格?你的职位是什么?你的主要目标是什么?
  • 历史项目记录:你之前用这个 Agent 完成了哪些项目?结果如何?
  • 核心业务知识:公司的组织架构、产品的技术文档、行业的黑话术语。
  • 重要决策和事实:“在上次会议中,CEO 确认了 Q4 的战略重点是用户增长。”

  

【如何实现?】

这里就是向量数据库这类技术发挥作用的地方了。常见的实现方式包括:

  • 向量数据库 (Vector DB):最主流的方式。通过将文本信息转换成 “语义向量” 来存储,非常适合进行模糊的、基于意义的检索。
  • 知识图谱 (Knowledge Graph):更进一步,它不仅存储信息,还存储信息之间的关系,形成一张巨大的知识网络。
  • 传统数据库 (SQL/NoSQL):对于那些结构化非常强的信息(比如用户档案),传统数据库依然是很好的选择。

但如果想在面试中或实际设计中更上一层楼,你需要展示对长期记忆更精细的理解。我们可以模仿人脑的记忆分类,把长期记忆也拆解成三类。这个设计思路,会让你的 Agent 更高级。

  

3.1 三种长期记忆

🔹3.1.1 语义记忆(百科全书)

  • 是什么:存储客观事实、通用知识和规则。这些信息与具体的时间、地点、人物无关。
  • 类比:百科全书,你知道 “地球是圆的”,“公司的报销上限是 2000 元”,“Python 是一门编程语言”。
  • 在 Agent 中:
    • 公司的规章制度
    • 产品的技术文档
    • 行业知识库
    • API 接口的使用说明
  • 价值:让 Agent 成为一个真正的领域专家,而不是一个只会聊天的空壳。

  

🔹3.1.2 情景记忆(日记本)

  • 是什么:存储具体发生过的、带有时间戳和个人体验的事件。它是关于 “什么时间、什么地点、发生了什么事” 的记忆。
  • 类比:日记本,你记得 “上周五下午,我和朋友在海边吃了烧烤”。
  • 在 Agent 中:
    • “2023 年 10 月 26 日,用户 ‘ 张三 ‘ 提交了年度预算审批,状态:待处理。”
    • “上一次对话中,用户对 AI 生成的报告格式提出了不满,认为太啰嗦。”
    • “项目 A 在启动时,CEO 曾强调安全是第一优先级。”
  • 价值:让 Agent 拥有历史感,能够理解上下文的演变,并根据过去的具体事件来调整当下的行为。这是实现真正个性化和人情味的关键。

  

🔹3.1.3 程序记忆(操作手册)

  • 是什么:存储如何做某件事的流程和技能。这是一种关于 “How-to” 的肌肉记忆。
  • 类比:操作手册 / 食谱。你学会了如何骑自行车,如何开车,如何做一道番茄炒蛋。你不需要思考每一步,而是自然而然地完成。
  • 在 Agent 中:
    • “一个标准的报销流程是:提交申请 → 部门主管审批 → 财务审批 → 打款。”
    • “修复一个线上 bug 的最佳实践是:创建 hotfix 分支 → 编写单元测试复现 bug → 修复代码 → 提交 PR → 观察部署。”
    • “与新客户沟通的标准 SOP(标准作业程序)。”
  • 价值:让 Agent 能够高效、稳定地执行复杂的多步任务,并沉淀和复用最佳实践。

通过这样三位一体的设计,你的长期记忆系统就不再是一个混沌的信息垃圾堆,而是变得结构清晰、功能明确了。

  

四、记忆管理:如何设计一个健康的记忆系统?🔖


现在你的 Agent 拥有了短期记忆、压缩记忆和长期记忆,是不是够用了?当然不了,一个更大的问题出现了:记忆爆炸!

想象一下,如果你的大脑无法忘记任何事情,你记得你吃过的每一顿饭、看过的每一片云、听过的每一句废话…… 你会被海量的、无关的记忆淹没,最终无法正常思考和生活。

一个健康的记忆系统,管理记忆的能力,远比存储记忆的能力更重要。它必须具备一套完整的 “增删改查” 和 “遗忘” 机制。

🔹1. 写入 (Write):当好守门员

不是所有信息都值得被记入长期记忆。你需要一个守门员来判断:

  • 什么时候存?是在对话结束后,还是在用户明确说 “记住这个” 时?
  • 存什么?是存用户的偏好,还是一个重要的决策,或是一个成功的解决方案?
  • 怎么存?是直接存原文,还是先进行总结和打标签?

💡 最近的研究趋势是,让一个元认知 AI 来扮演这个守门员,它专门负责评估一段信息是否有长期保存的价值。

  

🔹2. 召回 (Recall):当好图书管理员

当 Agent 需要从长期记忆中获取信息时,如何保证它能在正确的时间,找到正确的信息?

  • 相关性 (Relevance):这是最基本的。通过向量检索等方式,找到与当前任务最相关的内容。
  • 时效性 (Recency):最近的记忆通常比陈旧的记忆更重要。
  • 重要性 (Importance):有些记忆虽然很久远,但极其重要(比如 CEO 的战略指示)。在存储时,可以为记忆打上 “重要性” 权重。

💡 一个好的召回系统,会综合考虑这几个因素,给出一个加权排序,确保最有价值的信息被优先提供给 Agent。

  

🔹3. 更新 (Update):当好编辑

信息是会过期的。用户的偏好会变,公司的政策会改。

  • 当 Agent 发现新的信息与长期记忆中的旧信息冲突时,它应该有能力去更新甚至替换旧的记忆。例如,用户说:“我现在不喜欢简洁的报告了,我喜欢详细的”,Agent 就应该去更新长期记忆里的 “用户偏好” 条目。

  

🔹4. 遗忘 (Forgetting):当好清洁工

这是最反直觉,但也是最高级的功能。主动遗忘,是一种保护机制

  • 遗忘过期信息:比如一个三个月前的项目临时密码,早就没用了,留着反而有安全风险。
  • 遗忘无关噪音:大量的闲聊、情绪化的表达,长期来看价值不大,会污染记忆库。
  • 遗忘失败路径:除非是为了吸取教训,否则很多失败的尝试路径可以被遗忘,以保持程序记忆的清晰。

设计一个遗忘算法,比如基于记忆的访问频率、年龄和重要性来决定是否淘汰一条记忆,是顶级 Agent 记忆系统设计的标志。

  

五、面试怎么回答这类问题?🔖


现在,让我们回到最初的那个面试问题。当你对记忆系统有了如此深刻的理解后,你的回答将是摧枯拉朽:

  • “面试官您好,关于 Agent 记忆机制的设计,我认为不能简单地用一个向量数据库来概括。一个健壮的记忆系统,核心是解决上下文窗口有限与任务周期无限的矛盾,因此通常需要采用分层设计。”
  • “首先,是短期记忆,也叫工作记忆。它直接存在于上下文中,负责保存当前任务最直接相关的信息,保证推理的即时性,就像电脑的内存。”
  • “其次,是记忆压缩机制。当短期记忆过长时,我们需要用 AI 来自动总结和提炼核心信息,形成结构化的摘要,这既能节省成本,又能保持任务状态,是短期和长期记忆之间的桥梁。”
  • “最核心的是长期记忆。它负责跨会话的知识沉淀。为了实现更精细的管理,我们可以将其分为三类:语义记忆,像教科书,存储客观知识;情景记忆,像日记,记录具体事件;程序记忆,像操作手册,存储工作流程。这样的设计更接近人脑,能让 Agent 更懂你。”
  • “最后,也是最关键的,是配套的记忆管理系统。仅仅有存储是不够的。我们必须设计精巧的写入、召回、更新和遗忘机制。特别是遗忘机制,它能主动清理过期和无关的记忆,避免记忆污染,这对于维持 Agent 长期运行的健康至关重要。”
  • “总而言之,我认为真正优秀的 Agent,其核心竞争力已经不只是模型本身的能力,更是其背后那套分层、分类、可管理的记忆系统的设计能力。”