【深入浅出】进阶Memory,一文讲透核心原理
深入浅出 进阶 Memory 一文讲透核心原理
大模型基础的上下文窗口存在短板,输入越长,越容易出现信息丢失 遗忘,上下文成本也会持续变高。Memory
记忆模块就是用来解决这个问题,让大模型拥有长期记忆,记住跨轮对话的信息,不再局限单次 prompt。
一 什么是大模型 Memory
简单来说 Memory 是给大模型外挂的记忆系统,用来存储 检索 沉淀对话历史和业务资料。原生大模型本身没有记忆能力,每一轮对话都是独立请求。原生仅靠上下文窗口临时保存内容,一旦超出窗口长度,信息直接丢失。Memory 组件把信息单独存储,需要的时候再检索出来拼入 prompt。
Memory 和 RAG 的区别 RAG 检索外部静态知识库,读取文档资料 Memory 记录动态对话历史,沉淀用户偏好 过往交互信息两者可以搭配使用 RAG 读外部资料 Memory 记住用户历史
二 Memory 三大核心分类
1 短期记忆 对话窗口记忆就是原始对话历史,直接拼进 prompt。优点实现最简单,缺点受上下文长度限制,长对话会超限,token 消耗持续上涨。适合短对话场景。
2 中期记忆 摘要记忆不再完整保存每一句话,定期对历史对话做摘要压缩,提炼关键信息,减少 token 占用。原理 每 N 轮对话后调用大模型总结历史,把摘要保存,后续不再携带原始长文本。优点 大幅节省 token,延长对话可承载时长。缺点 摘要会丢失细节,多次摘要叠加容易信息失真。
3 长期记忆 向量库记忆把对话关键信息向量化存入向量数据库。新提问到来,向量检索匹配相关记忆片段,把相关片段送入 prompt。优点 几乎没有容量上限,可以保存数万条历史,只召回相关内容,不把全部历史塞进上下文。缺点 检索存在召回不准,无关记忆混入。
三 Memory 完整工作流程
第一步 写入记忆 每一轮对话结束,抽取本轮关键信息,做向量化或者摘要,存入记忆存储。可以过滤无效闲聊,只保留核心内容。第二步 召回记忆 用户发起新问题,将用户 query 转为向量,在记忆库检索相似度高的历史记忆片段。第三步 记忆组装 把召回的历史记忆 用户当前提问,一起组装进 prompt 发送给大模型。第四步 模型输出 模型结合历史记忆回答用户。本轮交互结束,再次把新信息写入记忆,循环执行。
四 主流 Memory 实现方案
1 ConversationBufferMemory 缓存记忆最简单,直接保存全部对话消息,完整放进上下文。适合短对话,长对话 token 暴涨。
2 ConversationSummaryMemory 摘要记忆定期总结对话,存储摘要文本,减少 token。适合中等长度对话,缺点细节丢失。
3 ConversationSummaryBufferMemory 摘要缓冲记忆混合方案,设置阈值,对话短的时候保存原文,超过阈值自动做摘要。平衡细节和 token 开销,工程最常用。
4 VectorStoreMemory 向量记忆对话信息向量化存入向量库,根据问题相似度召回记忆。适合超长对话 用户画像长期存储。
5 EntityMemory 实体记忆专门抽取实体信息,比如用户姓名 偏好 业务参数,单独保存实体,后续直接读取实体。适合需要记住用户个人信息的场景。
五 进阶核心难点与坑点
1 记忆漂移 多次摘要压缩后,信息被错误改写,越往后偏差越大。解决 保留少量原始原文做校验,不要全部依赖摘要。 2 记忆污染 召回无关的错误记忆,模型被误导,产生幻觉。解决 优化向量检索阈值,增加重排 Rerank 过滤无关片段。 3 记忆膨胀 对话不断累积,记忆库越来越大,检索耗时上升。解决 设置记忆过期策略,自动归档老旧低优先级记忆。 4 记忆冲突 新信息和旧记忆矛盾,比如用户修改个人偏好。解决 记忆更新机制,识别冲突,覆盖或者标记旧记忆失效。 5 隐私问题 用户对话内容存入向量数据库,需要考虑数据脱敏,合规存储。
六 业务选型建议
简单聊天机器人,对话轮次不多 使用 ConversationBufferMemory。几十轮中等对话,希望控制 token 成本 选择 SummaryBufferMemory。企业智能助手,用户长期会话,跨天跨月对话 使用 VectorStoreMemory 加实体记忆。
七 一句话总结
大模型 Memory 本质是独立存储加检索系统,弥补原生大模型无长期记忆和上下文窗口不足。分为缓存 摘要 向量三类记忆。落地重点解决记忆丢失 幻觉召回 记忆膨胀问题。业务场景优先根据对话长度选择对应的记忆方案。
-
【深入浅出】进阶Memory,一文讲透核心原理深入浅出 进阶 Memory 一文讲透核心原理大模型基础的上下文窗口存在短板,输入越长,越容易出现信息丢失 遗忘,上下文成本也会持续变高。Memory 记忆模块就是用来解决这个问题,让大模型拥有长期记忆,记住跨轮对话的信息,不再局限单次 prompt。一 什么是大模型...
-
EXISTS手册详解:从理论到生产环境实践EXISTS 手册详解:从理论到生产环境实践 一、EXISTS 是什么EXISTS 是一个布尔运算符,用于判断子查询是否返回至少一行数据。返回 TRUE 或 FALSE,不关心子查询返回的具体列内容。核心特性:短路评估(short-circuit)——子查询找到第一行匹配数据就立即返回 TRUE,终止扫描...
-
Milvus怎么做常见问题排查手册Milvus 怎么做常见问题排查手册 一 排查前置准备 先收集基础信息再定位问题避免盲目操作确认 Milvus 部署模式单机 docker k8s 或物理机记录 Milvus 版本客户端 sdk 版本操作系统信息获取基础运行状态包含服务进程日志资源指标整理业务相关信息查询语句写入参数集合 sc...
-
【深入浅出】必看图数据库,一文讲透核心原理【深入浅出】必看图数据库,一文讲透核心原理一句话概括:图数据库不是存表格,而是存储「实体(节点 Node)+ 实体之间的关系(边 Edge)」,专门用来高效处理复杂关联查询,关系越多、关联越深,对比 MySQL 这类关系型数据库优势越明显。一、基础概念:节点、边、...
-
全面数据库安装教程:数据库高手进阶之路全面数据库安装教程:数据库高手进阶之路数据库安装不是“点下一步”这么简单。真正的高手,会把安装当成部署、安全、性能、可维护性四件事一起完成。下面以 MySQL 8.4 LTS / 8.0 LTS 和 PostgreSQL 16/17 为主线,覆盖 Windows、Linux、Docker 三大场景。一、安装前先选对数...
-
【干货】数据库设计优化技巧,性能提升10倍一、表结构设计:从源头减少性能隐患选对数据类型是成本最低、收益最高的优化。能用 TINYINT 就别用 INT,能用 VARCHAR(50) 就别用 VARCHAR(255),日期字段用 DATE/DATETIME 而非字符串存储。字段越短,索引越小,I/O 越少。主键优先用自增整数,避免 UUID 或长字符串做主键。...