大家好,我是邵奈一,一个爱折腾的程序猿、斜杠青年。
文章对你有帮助是我的荣幸,欢迎评论区交流。
0x00 本文导读
你有没有过这种经历:明明是同一个 AI、同一个对话框,聊着聊着它就把你前面说过的话忘了;或者你昨天跟它交代好的背景,今天开个新对话它又一问三不知。
这篇就把“AI 为什么记不住你”这件事一次讲透。结论先放在这里:大模型本身没有“会跨请求记住你”的记忆器官。 参数记忆(训练时烧进权重的知识)另算,但它不会跨对话保留你聊过的具体内容。你以为它在“想起来”,其实是产品在每次对话开始时把历史记录重新塞进它的“工作台”。一旦超出这个工作台的范围,它就真的忘了。
这里先点破一个最容易被误解的点:“聊天记录还在”不等于“模型记得你”。 你关掉浏览器三天后再打开,昨天的对话一条不少地躺在列表里——那是产品的数据库在替你存,不是模型的脑子在记。模型每次回答你,都是把那份记录重新读一遍。记录归产品,理解归模型,两件事。
文章分四步推进:
- 先讲清 AI 每次回复到底在“读”什么;
- 拆解挡在 AI 记忆面前的三道墙:无状态、上下文窗口上限、长期记忆靠外挂;
- 用一张表区分“参数记忆 / 上下文记忆 / 外部记忆”三类;
- 落到实用建议:普通用户怎么和“记性差的 AI”打交道。
0x01 AI 不是“想起来”,而是“每次重读”
一个常见的误解是:AI 像人一样,聊过的事会留在脑子里,下次自然想起。
事实相反。主流大语言模型在每次生成回复前,都要把完整的对话历史重新作为上下文读一遍。它不“回忆”,它“重读”。
1. 上下文窗口是唯一的工作台
模型能同时处理的信息量,受一个硬上限约束,叫上下文窗口(Context Window)。你看到的“记忆”,严格说只是这个窗口里临时摆放的材料——一旦这些材料没被带进下一次请求(比如你开了个新对话),模型就看不见它们了。
这不是某家产品的 bug,而是 Transformer 架构的固有特性:模型本身无状态(stateless),每次请求都是独立的,它不保存任何跨请求的私有状态。
2. 上下文窗口这些年涨了约一千倍
窗口大小不是一成不变的,它是随模型迭代一路涨上来的。把时间线拉直看,能更直观理解“为什么现在能聊这么长”:
注:token 不等于字。英文里 1 token 大致对应 3-4 个字符、约 0.75 个单词;中文里 1 个汉字通常要吃掉约 1.5-2 个 token(不同模型的分词器差异不小)。按这个比例,128K tokens 大约装得下 6-8 万中文字,或 9.6 万英文词、约 300 页英文书。窗口从 GPT-2 的 1K 涨到 1M 约为千倍,而开源侧 Llama 4 Scout 把标称上限推到了 10M,扩张比表里看到的更猛——但“标称”和“能用”是两回事,下文 0x03 会专门讲这个坑。
再往后,1M 已是旗舰常见档位:国产侧 DeepSeek-V4(2026-04-24 发布,Pro 与 Flash 全系 1M)、阿里 Qwen 2.5-1M(2025-01,首个国产开源 1M)都已落地;海外侧 Gemini 3 Pro 为 1M、Gemini 3.1 Pro 扩到 2M,开源侧 Llama 4 Scout 标称 10M。这类“当下旗舰”的数字三个月就可能变,请以各厂商官方最新公告为准。
但窗口再大也是“临时工作台”,不是“长期硬盘”:它会满、会截断或压缩(第二道墙),而真正让你觉得“它记得我”的,是产品在外面搭的那套存储(第三道墙)。下面逐一说明。
图:大模型记忆的三层结构——参数记忆(烧在权重里)、上下文窗口(临时工作台)、外部记忆(产品外挂的数据库 / 向量库 / 记忆文件)。后文逐一展开。
0x02 第一道墙:无状态,不塞进来就等于没说过
第一道墙最反直觉,也最常被忽略。
1. 新开一个对话,模型对你是“初见”
因为模型无状态,你在 A 对话里告诉它的偏好、背景、结论,只要不写进当前这次请求的上下文,它就完全不知道。开启“新对话”那一刻,对新会话而言,之前的交谈等于从未发生过——除非产品把记忆带了过来。
这也是为什么很多产品会单独做一个“记忆”功能来补这道墙。以 ChatGPT 为例,它在 2024 年 2 月(OpenAI 官方发布说明)开始测试 Memory 能力,让模型能跨对话保留你主动让它记住、或从交互中提炼的偏好;到 2024 年下半年逐步开放给免费、Plus、Team、Enterprise 用户,后来又演进为“你显式保存的记忆”与“从对话中自动提炼的偏好”两层。
但请记住:这是产品层的补丁,不是模型的能力。 关掉记忆开关,模型立刻回到“每次初见”的状态。
2. 对开发者的启示
做 Agent、做智能客服时,不能假设模型“记得”上一轮。要么把关键状态写进提示词,要么用数据库持久化——这也是各家云厂商在 Agent 记忆最佳实践里反复强调的第一条。核心思路只有一句:把状态存在模型外面,每次请求时再组装进去。
3. 会话超时,到底丢了什么?
聊到这里,有个绕不开的疑问:你明明没关窗口,只是去吃了个饭,回来它怎么就该“忘”了?而且很多时候它明明还记得啊?
答案是有三种完全不同的东西被混为一谈了,得分开看(注意别和 0x05 的“记忆分三层”搞混,那是另一组分法):
第三种(KV Cache)最容易被误当成“失忆”,值得单独讲。
模型读你的对话历史要做一次很重的预计算(prefill),算完的中间结果可以缓存起来复用,下次就不用重算。但这块缓存有有效期——各家策略不同(Anthropic 默认 5 分钟、可选 1 小时;OpenAI 约 5~10 分钟空闲后失效;DeepSeek 走硬盘缓存,不承诺固定时长),空闲太久就被清掉。
关键在于:缓存清掉只意味着“下次要重新算一遍”,不意味着“它忘了你说过什么”。 历史还躺在数据库里,产品重新读一遍塞进上下文就行。你作为用户基本感知不到,顶多觉得这次响应慢了一点。
所以“某个工具超时了,但它明明还记得之前说过的话”——这不是错觉,记录一直在,是产品每次都帮你重读了一遍。
真正会让你感觉“失忆”的是第二层。部分产品(尤其是企业客服机器人、以及一些把会话状态放内存或带 TTL 缓存的编码助手)确实会在超时后结束整轮会话,下次进来就是全新的流程。但这取决于产品自己的工程策略,不是模型的特性——同类工具之间差异很大,有的会把对话落盘到 SQLite,有的还额外提供项目级记忆文件,不能一概而论。
绕回来,这里的关键始终没变:模型本身无所谓“忘了”,因为它本来就无状态、不从会话里学习。 你感受到的“它记得刚才聊到哪”,全靠产品在每次请求时把历史重新塞进上下文。产品不塞,模型就什么都不知道。
一句话收尾:会不会丢,是产品工程决定的;丢的是哪一层,取决于它把什么放进了带 TTL 的缓存。
0x03 第二道墙:窗口有上限,而且标称值不等于可用值
就算你一直待在同一个对话里,不切换、不开新窗口,AI 照样可能忘——因为窗口会满。
1. 满了要腾地方:截断,或者压缩
当对话历史逼近窗口上限,产品得腾地方,常见两种做法:
- 截断:直接把最早的内容挤出去。模型能“看到”的,永远只是窗口里最后那一段。
- 压缩:把前面的对话先摘要成一段更短的话,再塞回去继续聊。很多编码助手(如 Claude Code)就是这么做的。
无论哪种,代价都一样:细节会丢。 你一个月前交代的背景,要么被挤没了,要么被压缩成一句概括,当初的措辞、约束、例外条件全都不见了。
2. 更隐蔽的坑:丢在中间
即便内容都还在窗口内,也不是“塞得越多越记得牢”。2023 年的研究(Liu 等人,Lost in the Middle)发现了一个 U 型曲线:模型对开头(首因效应)和结尾(近因效应)的内容召回最好,埋在中段的明显变差。
需要说明的是,这个结论主要针对当时的模型,而且任务类型影响很大:纯检索类任务(在一堆文本里找某句话)上,新模型的表现已经比当年好得多,部分旗舰模型在百万级上下文的“大海捞针”测试里能做到接近满分;但跨全文的综合推理类任务(要把散落各处的信息汇总起来推理),至今仍会随上下文变长而明显退化。
3. 标称窗口 ≠ 有效窗口
这是买“大窗口”前最该知道的一件事。
厂商宣传的窗口大小,说的是这个模型最多能接受多少 token,不代表它在这么长的时候还能好好思考。这两个数字差得很远。
举个典型例子:Llama 4 Scout 标称 10M 窗口,但它是先在 256K 长度上训练、再靠位置编码外推扩到 10M 的。在需要理解语义(而不只是匹配字面)的检索基准 NoLiMa 上,它的有效上下文表现远低于标称值——32K 长度时性能就出现明显下滑。反过来看,另一类评测认为它在“找具体条款”这类检索任务上仍可在很长上下文里工作。
结论很实际:同一个模型,做检索和做综合推理,能撑的长度完全不是一回事。 业界的经验法则是,把标称值的 60%~70% 当作规划上限,而且掉性能往往不是渐变,是到了某个点突然塌。
所以那句反直觉的结论依然成立:把 100 万 token 的窗口塞满低相关文档,效果往往不如精准检索出最相关的几段。 窗口大是好事,但“大”不等于“会用”。
0x04 第三道墙:长期记忆不是白来的,得靠外挂工程
前两道是模型改不了的限制。这第三道性质不太一样——严格说它不是“限制”,而是绕开前两道限制所必须付出的工程代价:模型自己记不住,产品就得在外面替它搭一整套。
既然模型既无状态、窗口又有限,那 ChatGPT、Claude 这些产品表现出来的“长期记忆”是哪来的?
答案:是产品自己在模型外面搭了一套存储与检索系统,每次对话时把相关片段喂回模型。 模型本身并不知道“你上周说过什么”,它只知道“这次请求里被塞进了什么”。
1. 三种外挂思路
业界的常见做法可以归为三类,各有取舍:
- 注入式(以 ChatGPT 的 Memory 为代表):提前把提炼好的若干条事实摘要 + 近期对话摘要,在每次对话开始时直接写进提示词。模型无需主动检索,记忆“天然”就在上下文里。代价是固定占用窗口、容量有限。
- 检索式(以 Claude 为代表):模型需要时,通过工具调用(如语义搜索历史、拉取近期对话列表)按需取回。更省上下文,但依赖模型自己判断“什么时候该去查”。
- 文件式(Agent 类产品常用):把记忆写成项目里的一个文本文件(如
CLAUDE.md、各类MEMORY.md),每次会话开始时自动读进来。好处是人能直接看、能直接改——记忆不再是黑盒,你可以打开这个文件删掉某条、补上某条。代价是它仍然占用窗口,且需要产品支持自动加载。
第三条路这两年在编码助手里特别流行,因为它把“记忆”从不可见的产品功能,变成了你能亲手编辑的一个文件。
2. 外部记忆的常见载体
无论哪种思路,底层都靠这些存储:
这套组合,加上检索增强生成(RAG),就是今天 Agent “长期记忆”的工程真相——记忆不在模型脑子里,在产品的数据库里。
图:三种记忆架构对比——注入式、检索式、文件式。同一目标:让模型在窗口里“看到”该看到的东西,但实现路径不同。
0x05 三类记忆一张表看懂
把前面的内容收拢,AI 的“记忆”其实分三层,性质完全不同:
注:外部记忆最终也要落到窗口里才能被模型读到——它只是存在产品那边的“原件”。所以严格说,外部记忆不是第三种存储介质,而是“每次会话开始时,被重新搬进窗口的那批内容”。这也解释了为什么外部记忆同样受窗口容量约束:注入的记忆越多,留给本次对话的空间越少。
一句话区分:参数记忆是“出厂设置”,上下文记忆是“临时便签”,外部记忆才是“真正的长期记忆”。 普通人感知到的“AI 记得我”,几乎全靠第三类。
0x06 这对你意味着什么
落到实操,几条可执行的建议:
1. 把 AI 当“金鱼”,重要的事主动交代
不要假设它记得你上周的设定。开新对话时,把关键背景、偏好、约束一次性写清楚;或者善用产品自带的“记忆 / 自定义指令”功能,让产品层帮你持久化。
2. 长任务别压在一个超长对话里硬扛
对话越长,越容易触发截断 / 压缩和“迷失在中间”,也越接近那个“性能突然塌掉”的临界点。按标称窗口的 60%~70% 来规划就比较稳。复杂项目建议分阶段:每段给足背景,关键结论用文档 / 数据库沉淀,而不是指望模型在 10 万 token 里自己翻。
3. 需要“真正记住你”的场景,看产品是否支持外部记忆
如果你要的是跨会话个性化(客服、个人助理、代码助手),重点看它有没有记忆系统、能不能查看 / 删除记忆。没有这层,再大的窗口也只是临时便签。
4. 隐私上心:记忆是存在别人数据库里的
外部记忆意味着你的偏好被产品持久保存。养成习惯,定期查看并清理记忆,敏感信息别轻易让它“记住”。
5. 分清“它记得”和“记录还在”
不要被表象迷惑:你看到聊天记录还在,不代表模型记得——那只是产品每次帮你重读。反过来,也不要因为担心“超时就失忆”而不敢离开:多数产品会持久化记录,超时清掉的往往只是加速用的缓存。
需要判断的是你手上这个工具属于哪一类:它会不会把对话落盘?有没有项目级记忆文件?崩溃后能不能恢复? 这几个问题比“窗口有多大”重要得多。
无论答案如何,结论都一样:重要结论、关键中间产物,及时用文档 / 数据库沉淀,别只留在会话里。 窗口是工作台,不是保险柜。
0xFF 总结
回到开头的问题:AI 真的记得你吗?
严格说,模型不知道你是谁。 你感受到的“记忆”,是上下文窗口里的临时便签,加上产品在外面搭的长期数据库。模型本身无状态、窗口有上限(而且标称值不等于可用值)——这是两堵改不了的硬墙;跨会话的长期记忆,则必须靠产品在模型外面搭一整套外挂工程才换得来,也就是第三堵墙。
所谓 AI 的“记忆”,从来不是它天生具备的能力,而是一整套工程在替它“记”。下次再遇到 AI“忘事”,先分清是哪种情况:
邵奈一 三百篇原创沉淀,十万+读者同行。感谢你的阅读,咱们下篇接着聊。