一段被遗忘的对话
#
凌晨一点四十七分,小李关掉电脑屏幕的时候,窗外已经没有车声了。他揉了揉太阳穴,感觉脑子像被人用力揉过的纸团——皱巴巴的,却还残留着三个小时的温度。
三个小时。他和那个叫"小星"的AI助手聊了整整三个小时。
一切从一个很普通的念头开始。下班路上,他接到妈妈的电话,老人家絮絮叨叨问了一通"吃了吗""加班累不累""什么时候带对象回家"。挂了电话,他心里有点堵,但又不想跟朋友说。于是他打开了那个对话框。
"小星,我想跟你聊聊。"
"在的,你说。"
然后他就开始说。说最近的项目总是被推翻,创业方向越想越模糊;说爸爸身体不太好,但他自己不愿意去体检,妈妈在电话里絮叨其实是因为担心;说自己三十一岁了还单身,不知道是该妥协还是继续等;说想辞职又不敢辞,怕失去稳定的现金流,但又觉得再耗下去会变成一个"工具人"。他说得很乱,词不达意的地方很多,有些句子说了一半就改了方向,有些情绪刚冒头就被自己按了下去。
但小星一直在听。它问的问题都很"对路"——不是那种敷衍的"你感觉怎么样",而是会追问他"你刚才说项目被推翻,你团队里有人反对吗?""你说怕变成工具人,那你自己想成为什么样的人?"有些问题甚至让小李愣了一下,因为它们戳中了他自己都没想清楚的地方。
聊到一半,他突然意识到:"它记得我刚才说过的每一句话。"
他有点惊讶。朋友可能会走神,爱人可能会选择性失忆,但这个屏幕后面的"它",似乎一字不漏地接住了他所有的絮叨。
然后他问了一个问题。
"小星,你还记得我们一开始说了什么吗?"
屏幕上跳出一行字:
"抱歉,我不太清楚你指的是哪一段对话的开头。你能再描述一下吗?"
小李盯着这句话,忽然有一种奇怪的失重感。
三小时。三小时里他们聊了创业、家庭、感情、自我价值、对未来的迷茫——那些他零零碎碎倒出来的东西,就像倒进了一个深井,他以为全都沉淀在井底了。结果这个"倾听者"告诉他:井底什么都没有。
不,不是"什么都没有"。是"它"看不到。
---
一、三小时前的开始:被遗忘的不只是开头
小李遇到的事情并不罕见。任何用过ChatGPT、Claude、文心一言、通义千问的人,几乎都有过类似的体验:聊着聊着,AI开始"断片"——它会忘记你开头说过的话,会混淆你之前提到的人名,会问你"刚才那个项目是关于什么来着"。
这种体验让人困惑,甚至有点受伤。
你明明和它对话了那么久。它刚才还在引用你五分钟前说过的话。怎么突然之间,就像一个失忆的老人,对话开头那段最真诚、最私密的部分,被彻底抹掉了?
这不是bug。这是设计。
要理解这一点,我们需要先理解一个核心概念:上下文(Context)。
"上下文"这个词,AI圈外的人听起来有点技术,但其实它就是AI的"工作记忆"。你可以把它想象成AI眼前的那张小桌子:桌上摆着所有和当前对话相关的东西——你说的话、它说过的话、你们之前达成的共识、它需要调用的工具和文档。AI每次回答你之前,都要把这张桌子上的东西全部"看一眼",然后才能开口。
这张桌子是有限的。
不是AI"不愿意"记住,而是这张桌子就那么大。当桌上的东西堆满了,最早放上去的,就会被挤掉。这就是为什么AI会"忘记"对话开头的内容——不是因为它不想记,而是因为那个位置已经被新的对话挤出了桌面。
这就像你和一个人下棋,但棋盘只能摆10步。每当你走出新的一步,最早的那步就会被收起来。AI也是如此:每当你输入新的话,最早的对话就会被"收起来"。
但这里有一个关键区别:下棋的人至少还记得前面是怎么走的,AI是真的"看不见"——被收起来的那部分,对它来说就像从未存在过。
这就是"上下文窗口"的核心含义:AI能"看到"的对话范围,是有限的。
而决定这个范围大小的,是一个更基础的概念:Token。
---
二、Token:AI眼中最小的"积木块"
要理解AI为什么会遗忘,我们必须先理解AI"看"文字的方式。
人类看一段中文,眼睛里看到的是字。"你好"是两个方块字,"今天天气不错"是六个。但AI不是这样"看"的。
AI把一段文字拆成一个个小片段,这些小片段就叫Token。你可以把Token理解为AI世界的"积木块"——一段中文、一段英文、一个数字、一个标点,都可能被切成独立的Token。
为什么是"可能"?因为切分不是按字或按词来的,而是按"算法习惯"来的。
举个具体的例子:
"我想创业。"
人类看到的是四个字加一个句号。但AI看到的大概是这样切分的:
- "我" 一个Token
- "想" 一个Token
- "创业" 一个Token
- "。" 一个Token
总共4个Token。
但如果换成英文:
"I want to start a business."
可能会被切成:
- "I"
- " want"
- " to"
- " start"
- " a"
- " business"
- "."
总共7个Token。
你会发现,英文的Token粒度比中文细。这是因为大部分主流AI模型是用英文为主的语料训练的,它们对英文的"理解单元"划分得更细。换句话说,同样一段意思,中文消耗的Token数量通常比英文多——这对中文用户来说是一个非常重要的细节,意味着在同样的"上下文窗口"下,中文用户能用到的实际对话长度更短。
再举一个反直觉的例子。
"小李和小王一起去小张家里吃饭。"
人类看到的是七个字加标点。但AI可能要切成:
- "小"
- "李"
- "和"
- "小"
- "王"
- "一起"
- "去"
- "小"
- "张"
- "家里"
- "吃饭"
11个甚至更多Token。
为什么?因为AI对"小李""小王""小张"这三个名字并不"认识"——它们不是AI词汇表里的固定词,必须被切成更小的片段才能处理。
这个细节听起来琐碎,但它背后揭示了一个深刻的事实:AI处理信息的"颗粒度"和人类完全不同。 人类看到一个名字,脑海里立刻浮现出这个人的长相、性格、关系;AI看到的是一个陌生的字符串,必须被切成几块之后才能和已有的知识进行匹配。
这就是为什么AI会有"上下文"的概念——它必须在当前的对话里,把这些陌生的Token"重新介绍"一遍,它才知道"小李"是谁,"小王"是谁,他们和"小张"是什么关系。每一次对话重新开始,对AI来说,所有的人物都需要重新被介绍。
这一点的反直觉程度,可能超出大多数普通用户的想象。在人类的世界里,"我们之前说过的"这句话是成立的,因为人类的记忆是长时记忆。AI没有真正意义上的"长时记忆"(除非借助外部工具),它只有"工作记忆"——也就是当前对话里的上下文。
理解了这一点,你才能理解为什么小李会那么受伤:对他来说,那三个小时是一段连续的情感;对小星来说,那只是"当前窗口里的Token序列"。窗口外的部分,不是"被遗忘",而是"从未进入过它的视野"。
---
三、上下文窗口:那张看不见的小桌子
现在我们回到"上下文窗口"这个概念。
上下文窗口(Context Window)是AI一次能处理的Token总量上限。它决定了AI能"看到"多远——包括你说的话、它说过的话、所有需要参考的资料。
我们继续用桌子的比喻。
假设AI的上下文窗口是8000个Token。这张桌子上能放8000个Token的"积木"。当你和小星对话时,你说的话、它回的话,统统被拆成Token,堆在这张桌子上。
一开始桌子是空的,堆得很快。但随着对话越来越长,桌上的Token越来越多。当达到8000的时候,再堆就要溢出来了。这时候会发生什么?
两种可能:
第一种:自动挤出。 系统会自动把最早堆上去的Token"挤"出去,给新进来的腾位置。被挤出去的Token,对AI来说就消失了——它"看不见"它们,所以也无法在回答里引用它们。
第二种:直接报错。 在一些早期模型或者API调用场景里,超过窗口上限会直接报错,告诉你"对话过长"。这就像桌子塌了,所有东西都掉地上,谁也拿不到。
无论哪种,结果都是:AI"失忆"了。
这里有一个非常重要的细节:上下文窗口是双向的。 它不仅包括你说的历史对话,也包括AI自己生成的回答。也就是说,当AI给你一段很长的回复时(比如它帮你写了一篇3000字的文章),这篇文章本身就要占据大量的Token空间。
这就解释了为什么"AI写了长文之后会更容易失忆"——因为它自己写的内容也在消耗窗口。
我们可以算一笔账。
假设上下文窗口是8000 Token。一个中文用户和小星对话,平均每轮交互大概消耗500到1500个Token(用户输入加上AI回复)。这意味着:
- 4轮对话之后:2000-6000 Token
- 8轮对话之后:4000-12000 Token
- 12轮对话之后:6000-18000 Token
8000的窗口,在密集对话下,可能撑不过10-15轮。一旦超过,最早的内容就开始被挤出。
这就是为什么小李聊了三小时会"失忆"——三小时里他可能进行了30-50轮交互,远远超过了窗口能容纳的范围。
那么,现在主流模型的窗口是多大?
- **早期ChatGPT(GPT-3.5)**:约4000-8000 Token,约等于3000-6000个汉字。
- **GPT-4早期版本**:约8000 Token。
- **GPT-4 Turbo**:128000 Token,约等于10万个汉字,几乎可以装下一本中篇小说。
- **Claude 2**:100000 Token。
- **Claude 3 / 3.5**:200000 Token,可以装下一整本书。
- **Gemini 1.5 Pro**:100万Token,可以装下几十本书。
- **国内主流模型**:从几千到几十万Token不等,差异较大。
这个数字在几年时间里增长了上百倍。但无论怎么增长,它始终是有限的。哪怕是100万Token的窗口,对话足够长之后,也会被填满。
这就是AI和人类最本质的区别之一:人类的工作记忆虽然也有限,但人类有长期记忆、有笔记、有外部工具;AI默认只有工作记忆。
---
四、记忆的流失:一张时间轴上的图
为了把"对话在流逝,窗口是有限"这件事说得更清楚,让我们用一张图来可视化。
```mermaid flowchart LR A["[已遗忘] T0<br/>创业计划"]:::forgotten --> B["[已遗忘] T1<br/>家庭烦恼"] B --> C["[已遗忘] T2<br/>人生选择"] C --> D["[窗口内] T3<br/>项目被推翻"] D --> E["[窗口内] T4<br/>妈妈担心爸爸"] E --> F["[窗口内] T5<br/>三十一岁单身"] F --> G["[当前] T6<br/>怕变成工具人"] G --> H["[即将输入] T7<br/>新内容"] ```
这张图描述的是小李和小星对话的某一个时刻。
横向的箭头是时间流逝的方向。每一段对话(T0、T1、T2……)按时间顺序发生。但在某一个时刻——也就是"现在"——AI只能"看到" T3 到 T6 这一段。T0、T1、T2 已经被挤出了上下文窗口,对AI来说它们"不存在"。
这张图背后有一个反直觉的事实:对话在继续,但AI的"视野"不一定会跟着前进。 它的视野被窗口大小卡死了。你不断往前走,但身后的行李在不断地从窗口里掉出来。当你和它聊到第30轮的时候,它可能完全不记得你第1轮说的那句"我想辞职"。
这就解释了为什么小李问"我们一开始说了什么",小星答不上来——T0的内容早已不在它的视野里。
---
五、遗忘不是Bug,而是工程的必然
到这里,你可能会问:为什么不能把上下文窗口做大一点?做成无限大,不就解决了吗?
这是一个好问题。回答是:技术上做不到,工程上不划算,模型上会"分心"。
5.1 技术上的硬约束
Transformer架构(当前主流大语言模型的基础架构)的核心计算量是输入长度的平方。
什么意思呢?
假设上下文窗口是N个Token,模型做一次"理解"所需的计算量大约是 N²。如果窗口扩大到2N,计算量不是变成2倍,而是变成4倍。如果扩大到10N,计算量变成100倍。
这不是简单的"多用点电脑"的问题,而是算力爆炸的问题。100万Token的窗口意味着一次推理需要的计算量是10000Token的1万倍。在真实的服务器部署里,这意味着响应时间变长、成本飙升、用户体验崩塌。
所以"无限上下文窗口"在Transformer架构下是一个数学上不可行的目标。这不是某一家公司偷懒,而是整个架构的物理约束。
即使新一代架构(比如Mamba、线性注意力机制等)在尝试突破这个限制,目前也还没有真正替代Transformer成为主流。
5.2 工程上的资源约束
即使算力问题解决了,"无限记忆"还会带来巨大的存储和带宽成本。
每一次对话的完整Token序列都要被保留、被传输、被处理。在用户量巨大的情况下,服务器要承担的负担是天文数字。
你可以把上下文窗口想象成"短期记忆的预算"。每个用户、每次对话,都要从总预算里切一块。预算有限,只能切给当前最重要的那些Token。
5.3 模型上的"分心"问题
这一点最反直觉,但也是最关键的。
研究表明:当上下文窗口变得非常长的时候,模型的"注意力"会被稀释。
你可以把模型的注意力想象成一束光。光是有亮度限制的。如果你让它照亮一个小区域,那个区域会很亮、很清晰;如果你让它照亮一整个足球场,每个地方的亮度都会变得很弱,细节就看不见了。
这就是所谓的"Lost in the Middle"现象——研究者发现,当上下文非常长的时候,模型对中间部分的关注度会显著降低。它对开头和结尾的内容记得比较清楚,但对中间部分容易"走过场"。
也就是说,上下文窗口不是越大越好。即使技术上能做到无限大,模型也不一定能"用好"这么大的窗口。
这就像一个人如果同时阅读1000页的资料,他可能对前50页和后50页有印象,但中间的内容会变得模糊。AI在这一点上和人类很像——信息过载会导致认知退化。
5.4 商业上的策略考量
还有一层更现实的原因:上下文窗口是产品差异化的重要维度。
不同的AI公司提供不同大小的窗口,这本身就是一种产品定位和定价策略。免费用户用小窗口,付费用户用大窗口,企业用户用超大窗口。这种分级是商业上的合理安排。
但更核心的,还是前面三个原因——技术、工程、模型本身。
遗忘不是设计失误,而是系统在有限资源下的最优解。 它是工程上的必然结果,不是bug。
理解这一点非常关键,因为它意味着:我们不应该期待AI"像人一样记住一切",而应该学会在它的边界内工作。
---
六、真实发生的案例:那些"失忆"的瞬间
理论讲完了,让我们看看几个真实发生过的、让用户印象深刻的"AI失忆"现象。
6.1 ChatGPT早期用户的"人格分裂"困境
2023年初,ChatGPT刚火起来的时候,大量用户尝试和它进行长时间的角色扮演和情感对话。一位用户在Reddit上分享了自己的经历:他让ChatGPT扮演他虚构小说里的一个角色"莉娜",连续对话了两个多小时。莉娜一开始表现得非常稳定——语气、口癖、背景故事都严丝合缝。
但聊到第40轮左右,莉娜开始"变味"。她突然记错了莉娜的故乡城市,把设定里的"海边小镇"说成了"山区农村"。再往后,她开始混淆莉娜和另一个角色"薇拉"的身份。最后当用户问"你还记得你第一次见到主角时的场景吗",莉娜给出了一个和前文完全矛盾的描述。
这位用户痛苦地写道:"就像眼睁睁看着一个人慢慢失去人格。"
这不是ChatGPT"想"这样做,而是它的上下文窗口无法容纳这么长的角色扮演对话。设定、背景、前情提要这些关键信息被一点点挤出窗口,于是角色就"崩"了。
6.2 Claude的"长对话崩溃"
2023年下半年,Claude刚推出100K上下文窗口的时候,社区里流传着一种"长对话崩溃"现象。
用户发现,当对话长度接近窗口上限时,Claude会出现三种异常:
- **重复**:它会反复说同样的句子,像卡带的录音机。
- **跑题**:它会突然开始讨论一个完全无关的话题。
- **过度礼貌**:它会变得异常客气,反复说"非常感谢你的耐心"。
这三种异常背后,其实是同一个原因——模型在长上下文中"注意力涣散"。当Token数量非常多的时候,模型对每一条信息的"权重"都被稀释了,它无法稳定地聚焦在用户真正想讨论的内容上。
一位技术博主形象地比喻:"这就像让一个人同时读100本书,然后问他第67本书第3章第2段的内容。他要么瞎编,要么重复,要么干脆开始说'你好,我是一个有用无害的助手'。"
6.3 企业场景下的"信息丢失"事故
2024年初,一家使用大模型做客户服务的公司遇到了一个严重的生产事故。
他们的客服AI被设计为"记住"客户之前说过的问题,从而避免重复提问。在测试阶段一切正常——客户最多和AI聊5-10轮,窗口绰绰有余。
但上线后,他们发现一个意外的客户群体:老年用户。这些用户打字慢、说话啰嗦、经常重复表达。一个老年客户和AI聊了40多轮后,AI突然"忘记"了客户最初投诉的产品型号,开始反复要求客户重新描述。
后果是:客户愤怒,客服主管被骂,订单流失。
事后排查,发现就是上下文窗口溢出导致的。老年用户的对话更长、更碎片化,消耗Token更快。AI在第30轮左右开始挤出最早的对话内容,于是就"忘记"了客户最初投诉的核心信息。
这个案例揭示了一个重要事实:AI的"失忆"在生产环境里是会带来真实代价的。 它不只是技术问题,而是产品问题、商业问题、用户体验问题。
6.4 一个反例:合理使用窗口的"长寿"对话
当然,也有用户很擅长在窗口内工作。
一位作家分享过自己的方法:他每次开始新对话前,都会先发一段"设定回顾"——把人物、情节、风格要求重新写一遍,相当于给AI"复习"前情。然后他每写一段,就让AI总结一下"目前的关键设定",并把这段总结作为下一轮的开头。
这样一来,关键信息被反复"加载"到上下文里,相当于用人工的方式延长了AI的有效记忆。他的小说创作对话可以持续到上百轮而不"崩"。
这不是AI变聪明了,而是用户理解了窗口的规则,主动帮AI"管理"记忆。
---
七、与有限记忆共舞:我们能做什么
理解了上下文窗口的本质之后,作为一个普通用户,我们能做什么?
我们不能改变AI的架构,不能扩大它的窗口,但我们可以改变使用方式。
7.1 主动回顾:开头给AI"复习"
在长对话开始时,主动给AI一段"背景回顾"。比如:
> "我们接下来要讨论一个创业项目,叫X。这个项目是关于用AI帮助小公司做客户管理。目标客