摘要
智能体的记忆系统常被当成应用层功能,实际瓶颈在张量层:写入、检索、淘汰都要与显存和算力争资源。本文拆解记忆张量的三层结构(原始张量、索引、摘要)、读写路径的延迟构成、淘汰与压缩策略,以及记忆管理与推理调度的协同设计。2026 奇点智能技术大会(11 月 20-21 日 · 北京万达文华酒店)的智能体与 AI Infra 专题会讨论这类交叉问题。
一、记忆不是数据库,是张量
把记忆当数据库做的团队,很快会遇到两个问题:检索延迟随规模上升,以及记忆与推理争抢显存。原因是记忆的载体并不是行记录,而是张量——嵌入、KV、激活都属于此类。
应用层:记忆条目(文本 + 元数据) 张量层:嵌入向量 / KV 片段 / 压缩表示 存储层:显存 / 主机内存 / 本地盘 / 远端三层各管一段:应用层决定记什么,张量层决定怎么存,存储层决定放哪里。混淆层次会导致优化方向错位。
二、三层结构与各自职责
| 层级 | 内容 | 主要操作 | 常见瓶颈 |
|---|---|---|---|
| 原始张量 | 嵌入、KV 片段 | 读写、压缩 | 显存带宽 |
| 索引 | 近似最近邻及其元信息 | 检索、过滤 | 检索延迟 |
| 摘要 | 压缩后的语义表示 | 生成、更新 | 生成成本 |
摘要层最容易被忽略:它决定"记忆能不能被压缩后仍然可用"。没有摘要层时,淘汰只能整条丢弃。
三、写入路径的三个成本
写入 = 编码(嵌入) + 落盘 + 建索引 + 可能的摘要生成 │ │ │ │ 可批量 可异步 可延迟 最贵,应抽样实用建议:摘要在后台抽样生成,不要跟着写入同步做。同步生成会让写入路径的延迟成倍上升,而摘要的价值只在淘汰与长程检索时才体现,不需要实时。
四、检索路径的延迟构成
- 候选生成:向量检索给出候选集,延迟与索引结构相关。
- 精排:对候选做更精确的相似度或交叉编码打分,成本最高。
- 拼接:把记忆与当前上下文组装,受限于上下文窗口。
- 回捞:命中分层存储时按层级恢复。
四段中最容易被低估的是拼接:记忆条目越多,上下文被挤占得越厉害,最终表现为"记了很多但用不上"。
五、淘汰与压缩策略
| 策略 | 依据 | 优点 | 风险 |
|---|---|---|---|
| 时间衰减 | 最后访问时间 | 实现简单 | 误删长期有效信息 |
| 访问频次 | 命中次数 | 保留热点 | 新信息无机会 |
| 重要性标注 | 显式标记 | 精准 | 依赖标注质量 |
| 摘要替换 | 压缩后保留 | 节省空间 | 有损,需可回溯 |
推荐组合是时间衰减 + 显式重要性:默认按时间衰减,被显式标记的信息不参与衰减。单用任何一种都容易走偏。
六、与推理调度的协同
记忆与推理共享显存,就必须共享预算。
显存预算分配: 活跃请求 KV ─────── 60% 记忆张量 ─────── 20% 权重与激活 ─────── 15% 安全余量 ─────── 5%比例不是固定的,但必须有明确划分。没有划分时,记忆增长会悄悄挤占请求缓存,表现为"并发莫名下降"。
七、几个常被问到的问题
问:记忆能不能只存在磁盘上?
答:可以,但检索延迟会成为体验瓶颈。可行的折中是热记忆放显存、冷记忆放磁盘,用访问模式驱动迁移。
问:记忆需要多长才能看出效果?
答:取决于任务。对话类任务几百条就有效果,跨项目知识积累类需要更长时间。判断标准不是条数,而是检索命中后是否真的改变了输出。
问:记忆冲突怎么办?
答:保留冲突并标注重量级,而不是强制合并。直接覆盖会让系统丢掉"信息曾经变化"这一事实,后续推理容易出错。
问:压缩会不会丢掉关键细节?
答:会,所以压缩必须可回溯——保留原始张量的指针,允许按需取回。不可回溯的压缩在有损场景下风险很高。
问:怎么衡量记忆系统是否有效?
答:看三个指标:检索命中率、命中后的任务成功率、以及记忆占用的资源成本。只看命中率会鼓励无差别多存。
八、写入要批量化与合并
记忆写入的延迟主要来自多次小写入。把同一会话的多条记忆合并成一次批量写入,能显著摊薄开销。
合并需要解决顺序问题:同一实体的多次更新应按时间顺序合并成最终状态,同时保留变更记录。只留最终状态会丢失过程信息,只留全部变更会让存储膨胀,折中做法是保留最终状态加一条变更摘要。
九、记忆的权限与隔离
记忆一旦跨用户共享,就会带来越权风险。工程上需要三层隔离:用户级(默认只能读自己的记忆)、会话级(同一用户的跨会话读取需要显式授权)、以及共享级(显式发布的公共记忆)。
权限检查必须发生在检索阶段而不是拼接阶段——先按权限过滤候选,再做相似度排序,避免无权访问的内容先命中再被过滤,造成信息泄漏。
十、冷启动:记忆从哪来
新用户的记忆为空,系统表现会明显低于老用户。可行的冷启动手段有三种:从显式资料导入(用户主动提交的背景信息)、从公共知识预热(行业常识类记忆)、以及从首次会话快速提炼(把前几轮对话压缩成少量初始记忆)。
三种手段的成本与收益不同,通常组合使用。关键是让冷启动的记忆可被用户查看与修改,否则错误记忆会长期影响输出。
十一、记忆系统的观测指标
需要长期采集四项:写入量与其构成的分布、检索命中率、命中后的任务成功率、以及记忆占用的资源。
其中第二与第三项必须成对观察:命中率高但任务成功率低,说明召回的记忆不相关,检索策略需要调整,而不是继续增加记忆量。
十二、记忆的分层写入
写入路径应按重要性分层:高重要性的记忆同步写入并立即建索引,普通记忆异步批量写入,低价值的交互记录只做采样保留。
同步写入的比例应控制在很小范围内,否则写入延迟会直接体现在响应时间上。分层的判据建议由规则给出,例如显式标记的内容、用户明确要求记住的内容,属于同步层。
十三、记忆的一致性
同一事实在记忆中存在多个版本时,需要明确的取舍规则。常见做法是按时间戳取最新,但这在事实本身反复变化时会丢失信息。
更稳妥的做法是保留多条并标注时间与来源,在检索阶段根据问题的时间指向选择。对于本来就有时效性的事实,保留多条比强行合并更符合实际。
十四、记忆与上下文的配比
记忆条数与上下文窗口是竞争关系。记忆塞得越多,留给当前对话与文档的空间越小。这个配比需要按任务设定,而不是全局固定。
一个可用的起点是给当前输入保留不低于一半的窗口,剩余部分按相关性分配给记忆。运行中观察"因上下文不足而被截断"的比例,据此调整配比。
十五、记忆的评测方式
记忆系统的评测不能只看检索指标。需要构造三类测试:跨会话召回(之前说过的事实能否被正确引用)、冲突处理(事实更新后是否采用新版本)、以及无干扰(无关记忆是否被误引入回答)。
三类测试都不通过复杂基础设施即可实现,但能有效区分"记忆存了"和"记忆有用"这两件常被混为一谈的事。
十六、再答几个问题
问:记忆会不会让模型变固执?
答:会,如果检索总是命中旧结论。缓解方式是让记忆带时间与来源,并在回答时区分事实与曾经的事实。系统需要能表达变化,而不只是表达当前状态。
问:记忆条目怎么定粒度?
答:以可独立检索为准。一条记忆应该表达一个可被单独使用的信息单元,过长会稀释相似度,过短会丢失上下文。实践中同一事实的不同侧面分开存,通常比合并成一条更好用。
问:要不要给用户看系统记住了什么?
答:建议可以查看。可见性是信任的前提,也是纠错的前提。用户能修正错误记忆时,系统会更快收敛到正确状态。
问:记忆规模增长带来的成本怎么控制?
答:靠淘汰与压缩两条路并行。淘汰解决数量,压缩解决体积。两条路都要有可观测指标,否则容易在某一侧堆积到不可控。
十七、补充说明
问:记忆系统的失败模式有哪些?
答:三类最常见:检索到不相关内容导致答非所问、记忆过时导致结论陈旧、以及记忆挤占上下文导致当前信息被截断。三类都需要独立指标才能及时发现。
问:要不要限制记忆总量?
答:建议设上限并做成可调参数。无上限的记忆增长会缓慢侵蚀性能,而这种侵蚀在早期很难被察觉,等到发现问题时往往已经积累了大量低价值内容。
问:记忆该不该跨设备同步?
答:建议同步,但只同步显式记忆与摘要,不同步原始会话张量。显式记忆体积小、语义清晰,跨设备价值高;原始张量体积大且依赖具体上下文,同步后反而容易引发不一致。
十八、衔接大会专题
11 月 20-21 日,北京万达文华酒店,2026 奇点智能技术大会的智能体应用创新与 AI Infra 专题会讨论记忆系统与资源调度;C++ 及系统软件技术大会则从内存布局、缓存策略角度给出系统实现视角。
带着"我们的记忆占了多少显存、挤掉了多少并发"这个问题去参会,答案通常比想象中更值得关注。
大会信息
2026 奇点智能技术大会 + C++ 及系统软件技术大会
时间:2026 年 11 月 20-21 日
地点:中国·北京万达文华酒店
大会报名:点击报名,领取大会PPT资料
立即报名,锁定 Lukasz Kaiser Keynote 与 70+ 场演讲完整资料!