1. 背景
为了让 LLM 不只是一次性对话,而是能自主执行任务、与外部工具交互、保持上下文状态,人们提出了 LLM Agent 概念。
真实世界任务往往不是一次性完成,需要多轮交互、跨会话处理,甚至长时间跟踪任务进度。
为什么单纯的 LLM 不够
- 原生的 LLM 通常只有短期上下文窗口(context window),在会话结束后不会记住用户信息。
- 对于复杂任务,如个人助理、项目管理、游戏 NPC,需要长期记忆和个性化状态。
- 这就催生了 记忆模块(Memory Module) 的研究与实践。
早期探索
- 在对话系统(如早期的聊天机器人)中,记忆功能很早就存在,例如保存用户偏好、历史记录。
- 传统方法:将状态保存在数据库中,通过规则调用。
LLM Agent 时代
- 随着 LLM 能力增强,开发者开始用 向量数据库 + 检索增强生成(RAG) 的方式存储和调用记忆。
- 代表性开源框架:LangChain、LlamaIndex、Haystack 等,都提供 Memory 类或模块。
- 商业产品(如 ChatGPT 的“自定义指令”和“长期记忆”功能)也在实验如何安全地存储用户信息。
2. 概念
2.1. 存在意义
保持上下文连续性
- 没有记忆,Agent 每次响应都是“重新开始”,无法延续之前的对话逻辑。
- 有记忆后,可以让 Agent 知道之前做了什么、说过什么。
个性化与定制化
- 长期记忆可以存储用户的偏好、习惯,让交互更贴近用户需求。
处理复杂任务
- 多步骤任务需要记住中间结果,否则无法正确推进。
- 例如:旅行规划、代码开发、长期项目管理。
提高效率
- 避免重复获取或询问同一信息。
- 减少上下文窗口的占用,把长期信息放在外部存储,需要时再检索。
模拟类人智能
- 人类的智能依赖于记忆系统(短期、长期),Agent 模拟这种能力更自然。
2.2. 核心功能
存储(Store)
- 接收来自 LLM 的重要信息(用户输入、事件、推理结果)。
- 转换为嵌入向量或结构化数据存储。
更新(Update)
- 当有新信息时,更新已有记录(例如用户地址变化)。
- 需要考虑冲突解决和版本管理。
检索(Retrieve)
- 根据当前任务语境,从记忆库中找到相关信息。
- 检索结果会被注入到 prompt 中,让 LLM “回忆”相关内容。
遗忘(Forget / Prune)
- 长期运行的 Agent 需要定期清理无关或过时信息,减少存储压力。
3. 时间维度划分
按时间维度划分的记忆类型,通常可以分为:
- 短期记忆(Short-term Memory)
- 长期记忆(Long-term Memory)
3
下面我们逐一详细介绍。
3.1. 短期记忆
定义
短期记忆保存的是当前会话或任务的最近上下文信息,用于维持对话或任务的连贯性。
类似人类的“工作记忆”,只在短时间内有效。
特点
- 生命周期短(通常是当前会话内)
- 容量受 LLM 上下文窗口限制(例如 GPT-4 可能是 8K~128K tokens)
- 信息量小,但相关性强
- 当信息超出窗口时需要压缩或丢弃
常见实现方式
滑动窗口(Sliding Window)
- 保留最近 N 条消息
- 旧消息被移出上下文
对话摘要(Summarization)
- 将旧内容压缩成简短摘要
- 节省 token,同时保留关键信息
缓存变量
- 在内存中直接存储最近的对话状态
实际场景示例
在线客服 Agent
- 用户连续提问:“我昨天订了酒店,但是没收到确认邮件” → “是的,我用信用卡支付的”
- 短期记忆保留这两轮对话,使 Agent 知道“信用卡支付”是针对酒店预订的。
编程助手
- 用户在当前会话中逐步构建代码,短期记忆保留当前代码版本,以便下一步修改时知道上下文。
3.2. 长期记忆
定义
长期记忆保存的是重要的历史信息,可以跨会话调用,不会因为上下文窗口限制而丢失。
类似人类的“长期记忆”,可以记住过去的经历、知识、用户偏好等。
特点
- 生命周期长(跨会话甚至永久)
- 容量大,可持久化存储(数据库、文件系统)
- 需要检索机制(RAG:检索增强生成)才能在推理时使用
- 存储的是经过筛选的重要信息,而不是所有原始数据
常见实现方式
向量数据库(Vector Store)
- 将文本转成向量(Embedding)
- 存入 FAISS、Milvus、Pinecone 等
- 检索时按语义相似度匹配
事件日志(Event Log)
- 按时间和主题记录关键事件
用户画像(User Profile)
- 存储用户兴趣、习惯、偏好等信息
实际场景示例
个人助理 Agent
- 记住用户喜欢的餐厅类型、常去的旅行目的地
- 新对话时主动推荐符合偏好的选项
企业知识管理 Agent
- 保存过去项目的文档、会议纪要
- 新任务时自动检索相关历史案例
3.4. 总结
对比表
| 类型 | 生命周期 | 容量 | 存储方式 | 检索方式 | 场景示例 |
|---|---|---|---|---|---|
| 短期记忆 | 当前会话 | 小 | 内存缓存/摘要 | 直接拼接到Prompt | 在线客服、编程助手 |
| 长期记忆 | 跨会话长期或永久 | 大 | 向量数据库/用户画像 | 语义检索 | 个人助理、知识管理 |
在真实 LLM Agent 系统中,这几种时间维度的记忆往往是组合使用:
- 短期 + 长期
保持当前对话连贯,同时利用历史知识增强推理 - 短期 + 中期 + 长期
项目型任务中,短期用于当前讨论,中期保存项目阶段信息,长期保存最终成果
4. 示例:多轮对话
如果多轮对话不超限很好办,直接使用短期记忆,每轮对话将历史对话都拼接上。
但如果多轮对话会让上下文越来越长,超过模型的上下文窗口(context window)就会导致信息丢失或推理失败,就需要考虑其他记忆方案的实现。,
前面说真实 LLM Agent 系统中,这几种时间维度的记忆往往是组合使用。可以拿多轮对话的场景来看看。
4.1. 对话摘要
思路
把旧的对话内容用模型或算法压缩成摘要,保留关键信息,减少 token 占用。
方法
- 定期摘要:每隔 N 轮对话,把前面的内容总结成几句话
- 分层摘要:先对每段对话摘要,再将多个摘要合并成更短的摘要
优点
- 保留主要语义
- 节省大量 token
- 可结合长期记忆使用
缺点
- 摘要可能丢失细节
- 依赖摘要质量
实际场景示例
在线客服 Agent
客户咨询很长的订单问题,Agent 每 5 轮对话就生成一个摘要,如:“客户在 7 月 5 日下单酒店,支付方式为信用卡,未收到确认邮件,已联系航空公司确认航班正常。”
后续对话只保留摘要 + 最近几轮原文。
4.2. 滑动窗口
思路
只保留最近 N 条消息作为上下文,其余丢弃或存入长期记忆。
方法
- 固定窗口大小(如最近 10 轮)
- 动态窗口大小(根据 token 数计算,超出则移除旧内容)
优点
- 简单易实现
- 保证上下文新鲜度
缺点
- 旧信息丢失
- 对长任务不友好
实际场景示例
- 编程助手 Agent
只保留最近几轮代码修改的上下文,旧代码版本存到文件或数据库,避免 prompt 爆掉。
4.3. RAG
思路
旧对话不直接放进 prompt,而是存到向量数据库,需要时按语义检索相关内容,再拼接到 prompt。
方法
- 将对话分片(chunk)
- 对每个分片生成 embedding
- 存入向量数据库(FAISS, Milvus, Pinecone)
- 当前轮对话时检索相关分片
优点
- 只加载相关信息
- 上下文可无限扩展
缺点
- 检索质量影响回答
- 需要额外存储与检索服务
实际场景示例
- 法律咨询 Agent
将过去的法律问答存到向量库,用户再次问相关问题时,检索出相关历史对话拼到 prompt。
4.4. 分会话记忆
思路
把长对话分成多个“子会话”,每个子会话独立处理,必要时通过摘要或检索连接。
方法
- 按主题拆分(如“订单问题” vs “退款问题”)
- 按时间拆分(如每天一个会话)
优点
- 避免上下文混乱
- 方便管理和检索
缺点
- 主题切换时需要额外关联信息
实际场景示例
- 项目管理 Agent
将项目沟通按“需求讨论”、“技术实现”、“测试反馈”拆成独立会话,每个会话独立摘要和存储。
4.5. 混合策略
思路
结合多种方法,例如:
- 最近对话用滑动窗口保留
- 历史对话摘要存入长期记忆
- 需要细节时用 RAG 检索
实际场景示例
个人助理 Agent
- 最近 5 轮对话直接保留
- 更早的内容生成摘要并存到长期记忆
- 用户提到“上次的旅游计划”时,用 RAG 检索详细记录
方案对比表
| 方案 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 对话摘要 | 节省 token,保留语义 | 可能丢细节 | 客服、长任务 |
| 滑动窗口 | 简单,实时性好 | 旧信息丢失 | 编程助手、短任务 |
| RAG 检索 | 上下文无限扩展 | 依赖检索质量 | 知识问答、法律咨询 |
| 分会话记忆 | 管理方便 | 主题切换需额外处理 | 项目管理 |
| 混合策略 | 灵活适应 | 实现复杂 | 长期陪伴型 Agent |
总结建议
如果你的 Agent 是 任务型(短期),可以用 滑动窗口 + 摘要;
如果是 知识型或长期陪伴型,建议用 RAG + 关键信息提取 + 摘要 结合,这样既能节省 token,又能保证信息可追溯。
5. 发展与挑战
LLM Agent 的记忆模块是让智能体具备持续性、个性化和复杂任务处理能力的关键组件。它的设计涉及短期与长期记忆的结合、信息的存储与检索机制,以及隐私安全和性能优化等问题。
未来,随着 LLM 的应用场景扩展,记忆模块会越来越重要,甚至可能演化为支持多模态(文本、图像、音频)记忆的系统,进一步提升 Agent 的智能水平。
挑战与思考
隐私与安全
- 长期记忆可能包含敏感信息,需要加密、权限控制。
记忆质量
- 需要判断哪些信息值得记住,避免冗余。
检索准确性
- 检索结果相关性直接影响 LLM 回答质量。
遗忘机制
- 如何自动淘汰无用信息,防止记忆库膨胀。
成本控制
- 存储与检索会增加计算和存储成本。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。