Agent 记忆系统知识库(面试八股文版)
前言
在 Agent(智能体)架构中,记忆系统(Memory System)是赋予 Agent"状态"和"连续性"的核心组件。
1. 记忆系统的分类
1.1 定义与原理
Agent 的记忆系统通常借鉴人类认知心理学,分为三类:
| 记忆类型 | 定义 | 存储介质 | 生命周期 | 典型应用场景 |
|---|---|---|---|---|
| 短期记忆 | 当前对话的上下文窗口 | LLM Context Window | 会话期间 | 多轮对话连贯性、指代消解 |
| 长期记忆 | 持久化存储的历史信息 | 向量库、关系型数据库 | 永久 | 用户偏好、历史知识库、任务状态 |
| 工作记忆 | 当前推理过程中的临时"草稿纸" | 内存变量、Scratchpad | 单次任务执行期间 | ReAct框架中的Thought/Observation |
1.2 核心原理图
[用户输入] --> [工作记忆(推理中)] --> [LLM]
^ |
| v
[短期记忆(最近N轮)] <--> [上下文组装]
^
| (定期归档)
v
[长期记忆(向量/SQL)] <--> [检索/写入]2. 记忆存储技术
2.1 技术选型对比
| 存储技术 | 代表产品 | 优势 | 劣势 | 适用记忆类型 |
|---|---|---|---|---|
| 向量数据库 | Milvus, Pinecone, Chroma, Weaviate | 支持语义相似度检索 | 不支持复杂关系查询 | 长期记忆(非结构化文本) |
| 关系型数据库 | PostgreSQL, MySQL, SQLite | 支持复杂查询、事务 | 无法直接进行语义检索 | 长期记忆(用户画像、任务状态) |
| 文件系统/键值对 | JSON, Redis, Pickle | 读写速度极快 | 难以扩展,无查询能力 | 短期记忆、缓存、配置 |
3. 记忆检索机制
3.1 检索方式分类
- 语义检索:基于向量相似度,能理解同义关联
- 关键词检索:基于BM25算法,精确匹配专有名词
- 混合检索:语义+关键词加权,生产环境主流方案
- RAG:检索增强生成,将检索到的记忆作为Context注入Prompt
3.2 解决"检索不到"的方法
- Query改写:使用LLM将用户口语化问题改写为适合检索的陈述句
- 多路召回:同时使用向量检索和关键词检索,然后Rerank
- 元数据过滤:先通过时间、用户ID等元数据过滤
4. 记忆管理策略
4.1 核心策略
- 压缩摘要:定期将旧的对话记录发送给LLM,生成摘要替换原始对话
- 遗忘机制:TTL超时删除、LRU淘汰
- 优先级管理:让LLM对每条记忆打分,高分记忆永久保留
- 记忆更新:当新事实与旧记忆冲突时,触发更新而非追加
5. 面试常见问题 (Q&A)
Q1: Agent 的短期记忆和长期记忆有什么区别?
- 短期记忆存储在LLM的Context Window中,读取速度极快
- 长期记忆存储在外存,需要检索IO,用于跨会话的知识保留
- 不能只用长期记忆:成本与延迟、上下文限制、噪声干扰
Q2: 向量数据库检索不准怎么办?
- 数据层:清洗数据、优化Chunking策略
- 检索层:混合检索、Rerank模型、Query改写
- 应用层:在Prompt中指示LLM"如果检索内容无关,请回答不知道"
Q3: 如何设计一个支持"用户偏好记忆"的Agent?
- 提取:识别用户偏好
- 存储:存入关系型数据库的User_Preferences表
- 检索:系统Prompt中自动注入用户偏好
- 更新:触发记忆更新机制
Q4: 解释一下Generative Agents中的记忆流?
- 包含所有Agent观察、思考和计划的完整自然语言记录列表
- 检索机制:基于最近性、重要性和相关性三个分数加权检索
- 反思:Agent定期暂停,从记忆流中抽取高分记忆生成抽象总结
Q5: 上下文窗口越来越大,记忆系统还重要吗?
- 依然重要:全量输入会导致注意力分散
- 成本问题:处理100K Token的推理成本远高于精准检索
- 无限历史:用户与Agent的交互历史理论上是无限的
总结口诀
- 分类:短长工,短对话,长持久,工推理
- 存储:向量语义,关系结构,文件缓存
- 检索:语义关键词,混合加Rerank,RAG是框架
- 管理:摘要压缩,过期遗忘,重要打分