引言:为什么AI会'失忆'?
第1章 引言:为什么AI会'失忆'?
小宇是一名高一学生,最近迷上了科幻小说创作。某个周末下午,他打开AI写作助手,输入了详细的角色设定:男主角叫"林远舟",女一号叫"苏晚",故事发生在2099年的火星殖民地。开篇很顺利——AI用诗意的语言铺陈了火星红色的天空,刻画了林远舟第一次走出空间站时的紧张与兴奋,笔触细腻得让小宇忍不住连声叫好。
但当小宇写完前三章、接近五千字的时候,问题出现了。他在第四章开头输入"林远舟抬头望向苏晚",AI却写道:"陈默看着李清雨的眼睛……"不仅主角名字全变了,连性别设定都错乱了。小宇回头翻阅,发现AI在第二章末尾就偷偷把"林远舟"改成了"陈默",把"苏晚"改成了"李清雨"。他对着屏幕发愣:刚才还好好的,怎么AI突然就"失忆"了?
这不是孤例。如果你用过任何一款对话AI,多半会撞上类似的情形:和客服AI聊到第十五轮,它突然否认三分钟前自己确认过的事情;让AI帮你总结一份50页的PDF报告,它给出的结论像是只读了开头两页;连续追问某个数学证明,AI在第五轮开始重复同样的错误,甚至给出与第二轮完全矛盾的答案。
这些现象背后有一个共同原因——大语言模型会在对话过程中"忘记"已经说过的话和已经发生的事。这并不是因为AI"笨",而是它的工作方式决定了它必须如此。本章要回答一个看似简单却至关重要的问题:大模型究竟为什么会"失忆"?而要回答它,我们必须先理解一个贯穿全书的核心概念——上下文工程(Context Engineering)。
1.1 那个让AI'忘记'主角名字的下午
让我们先把小宇的故事拆开看清楚。他做的事情,本质上是让AI完成一个长文本生成任务:给定一段前置内容(prompt),AI续写后续部分。这种"续写"能力是大语言模型最核心的功能之一,AI每写下一个字,都要"看一遍"之前所有的内容——包括小宇输入的角色设定、之前生成的所有段落,以及最新的对话指令。
这个"看一遍"的过程,在AI内部叫做自注意力计算(self-attention)。它的特点是:AI会同时关注所有前置内容,并判断哪些部分对生成下一个字最重要。但"同时关注所有前置内容"这八个字里藏着一个巨大的代价:每多一个字,AI要处理的"关系对"就急剧增加。
问题在于AI并不是把所有的前置内容都装进一个无限的"记忆池"里。它能看到的,有一个硬性上限,叫做上下文窗口(context window)。这个窗口就像一张固定大小的桌子,所有相关的资料都必须摊在这张桌子上才能被AI"看见"。一旦对话长度超过窗口大小,最早的内容就会被"挤"出桌面,再也无法参与计算。
小宇的故事里,他前三章的内容加上角色设定、对话历史,总token数可能已经达到了8000甚至更多。如果他使用的AI版本上下文窗口只有4096个token,那么第二章末尾以后的"林远舟"和"苏晚"就已经被挤出桌面了。AI看到的是一个不完整的、缺乏早期角色设定的上下文,于是它根据自己训练数据里的常见名字,"合理地"补全成了"陈默"和"李清雨"——这两个名字在中文小说语料里出现的频率远高于"林远舟"和"苏晚"。
这不是bug,这是大语言模型架构的基本约束。换句话说,AI的"健忘"不是设计失误,而是物理定律。
【小实验:亲手验证AI的"失忆"】
打开任意一款对话AI(比如ChatGPT、文心一言、通义千问或Kimi),做以下三步:
第一步,输入"我最喜欢的颜色是蓝色,请记住",让AI确认收到。 第二步,连续和AI聊20个不相关的话题——今天天气怎么样?请讲个笑话。23乘以47等于多少?介绍下《三体》的主旨…… 第三步,在第21轮突然问:"请问我之前告诉你,我最喜欢的颜色是什么?"
你会发现一个有趣的现象:有些AI还能答对,有些已经答错。即使答对的AI,也不是因为它"记得"你说过的话,而是因为"蓝色是我最喜欢的颜色"这句话恰好还在它的上下文窗口里,仍然可以被注意力机制检索到。如果你的对话足够长,或者使用了上下文窗口较小的模型,"蓝色"早就被挤出去了,AI只能"猜测"——通常会猜一个最常见的答案,比如红色或绿色。
这个实验揭示了一个反直觉的事实:AI没有真正的"记忆",它只有"还在桌面上"和"已经被挤出桌面"两种状态。而我们人类日常所说的"AI记得我",本质上是"那段信息还在它的上下文里"。
类似的"失忆"场景在AI应用中随处可见:让AI翻译一部长篇小说,第五章之后翻译质量明显下降;让AI扮演面试官模拟三轮对话,第四轮开始它会反复询问你已经回答过的问题;让AI分析一段一万行的代码,它给出的总结只覆盖了前几百行的逻辑。所有这些现象,都源于同一个根因——上下文窗口的有限性。
1.2 大脑的'三重记忆系统':人类是怎么记住的
要理解AI为什么会"失忆",最有效的方法是先理解人类自己是怎么记住的。1968年,心理学家里查德·阿特金森(Richard Atkinson)和理查德·希夫林(Richard Shiffrin)提出了一个影响深远的记忆模型,被称为阿特金森-希夫林记忆模型(Atkinson-Shiffrin Memory Model)。它把人类记忆分成三个层次:
第一层:感觉记忆(Sensory Memory)。当你的眼睛看到一个画面、耳朵听到一个声音,这些原始信息会在感觉器官里短暂停留大约250毫秒。如果你没有注意到它,它就像石子落入湖面一样消失得无影无踪。感觉记忆的特点是容量极大(基本上所有感官信息都会留下痕迹),但持续时间极短。电影之所以能让我们看到连续运动的画面,正是因为视觉暂留——每一帧画面都在感觉记忆里停留约1/24秒。
第二层:短时记忆(Short-Term Memory),也称工作记忆(Working Memory)。这是我们平时"思考"时使用的记忆。你在心里默念一个电话号码、计算一道数学题、用草稿纸推演一个想法——这些都是短时记忆在工作。经典的"魔术数字7±2"由心理学家乔治·米勒(George Miller)于1956年提出,指出短时记忆的容量大约只有5到9个组块(chunk)。所谓"组块",是把几个零散信息打包成一个有意义的单位。比如"18621790368"这个11位电话号码对短时记忆来说是11个项目,但如果你把它分成"186-2179-0368"三组,就是3个组块,更容易记住。这个容量虽然小,但它的好处是活跃、可操控、随时可以调用。
第三层:长时记忆(Long-Term Memory)。当我们反复使用某个信息、或者赋予它强烈的情感意义时,它会从短时记忆"转移"到长时记忆里。长时记忆的容量近乎无限,存储时间可以从几分钟到一辈子。但它的缺点是检索速度慢,且经常出错——你肯定有过"明明记得某件事,但就是想不起来"的经验,那种"舌尖现象"(Tip of the Tongue)就是长时记忆检索失败的典型表现。
这个三阶段模型有一个精妙的设计:信息不是一次性涌入大脑的,而是经过层层筛选、层层巩固。感觉记忆负责"捕获一切",短时记忆负责"当下思考",长时记忆负责"永久保存"。三者协同工作,让我们既能实时反应,又能在十年后回忆起童年夏天的味道。
更神奇的是,这个系统还有"遗忘"的智慧。我们的大脑并不是什么都要记住——大量无关信息会被主动丢弃,否则我们会被信息洪流淹没。这就是为什么你能记得十年前的初恋,却想不起昨天早餐吃了什么(如果那顿早餐没有特殊意义的话)。德国心理学家艾宾浩斯(Hermann Ebbinghaus)发现的"遗忘曲线"显示,新学习的知识在20分钟后就会遗忘42%,一天后会遗忘66%——除非我们主动复习,把它从短时记忆搬到长时记忆。
接下来是关键类比:AI的"工作方式"和人类记忆有一些惊人的相似,但也有根本性的不同。
| 维度 | 人类记忆系统 | AI上下文系统 | |------|-------------|-------------| | 工作记忆 | 短时记忆(容量7±2项) | 上下文窗口(如8K、128K、200K token) | | 永久知识 | 长时记忆(数十亿条事实) | 模型参数(如数百GB的权重文件) | | 信息写入 | 需要重复、编码、睡眠巩固 | 一次性写入,立即可用 | | 检索方式 | 联想、线索、触发 | 自注意力机制、向量相似度 | | 容量限制 | 工作记忆小,长时记忆大 | 上下文窗口硬性限制 | | 遗忘机制 | 自然衰减、干扰、前摄抑制 | 超出窗口即"完全消失" | | 跨会话 | 长时记忆可保留数年 | 每次新对话从零开始 |
这个表格揭示了一个关键事实:人类的工作记忆其实也很小,只有7±2项。我们之所以能完成复杂任务,是因为我们有数十年积累的长时记忆作为支撑,并且在不断把短时记忆中的重要内容"转存"到长时记忆里——这个转存过程主要发生在睡眠期间,科学家称之为"记忆巩固"(memory consolidation)。
而AI的处境则完全不同。它的"长时记忆"——也就是训练时学到的知识——是固定且不可更新的;它的"短时记忆"——也就是上下文窗口——虽然很大(比如200K token,相当于十几万汉字),但它没有任何机制把这些信息"转存"到长期知识里。每次新对话开始,AI的长时记忆和短时记忆都是从零开始的。这就是AI会"失忆"的根本原因:它没有跨对话的记忆迁移能力。
打个比方:人类像是一位资深图书管理员,他把每天处理的重要信息整理归档到图书馆(长时记忆),需要时再调出来。新员工AI则不同——它没有图书馆,每次上班都带着一张临时的工作台(上下文窗口),下班后工作台就被清空,第二天又是新的一张桌子。它甚至不知道自己昨天处理过什么。
1.3 AI的'工作台面':上下文窗口的本质
现在让我们把"上下文窗口"这个概念彻底讲清楚。
Token:AI眼中的"字"。AI不像人类一样阅读完整的汉字或英文单词,它处理的是token——一个介于"字"和"词"之间的单位。在中文里,一个汉字通常对应1到2个token;在英文里,一个单词通常对应1到多个token(取决于该词的常见程度)。一个简单的判断标准是:1000个token大约对应750个英文单词,或400到600个汉字。这意味着,当你用中文和AI交流时,"更费token"——同样是500字的中文短文,需要的token数大约是500字英文短文的两倍。
上下文窗口:AI的"工作台面"。想象你是一个图书管理员,你的任务是根据读者的问题,从书架上找资料回答他。但你有一个限制:你的办公桌只有这么大,所有你要看的书都必须摊开在这张桌子上。如果你要看的书太多,桌子放不下,最早摊开的那些书就不得不收起来,放回书架。一旦放回去,你就再也看不到它们了。
AI的上下文窗口就是这张"工作台面"。它的容量通常以token为单位衡量,比如:
- 早期GPT-3.5:4096 token(约3000汉字)
- GPT-4:8K / 32K / 128K
- Claude 3.5 Sonnet:200K(约15万汉字)
- Gemini 1.5 Pro:1M(约75万汉字)
- 最新开源模型(如Llama 3.1、Qwen 2.5):128K
看起来200K甚至1M已经很大了,对吗?但要注意两点:
第一,这些数字是"上限",不是"舒适区"。当上下文长度接近上限时,AI的响应速度会变慢、成本会变高,更重要的是——AI对上下文中不同位置的关注度并不均匀。2023年,斯坦福大学和Samaya AI的研究人员发表了一篇名为《Lost in the Middle》的论文,发现大语言模型对上下文开头和结尾的内容关注度高,对中间的内容关注度低。这意味着即使你的上下文是100K token,"中间"那部分也可能在AI的"视野盲区"里。
打个比方:如果上下文窗口是一条长长的工作台,AI的眼睛会自动聚焦在台面的左端和右端,台面中间的内容虽然摊开了,却容易被"看漏"。这就像你在书桌上摊开了10本书,但你的视线只在最左边和最右边那两本上反复扫视,中间那8本被"冷落"了。研究者用"U形关注曲线"形容这种现象——对开头和结尾的关注度像字母U的两端高高翘起,中间则塌陷下去。
第二,上下文窗口不仅装你的输入,还装AI自己的输出。在一次长对话中,每一轮AI的回答都会占用上下文空间。也就是说,每多聊一轮,可用空间就少一块。这是为什么"对话越长越容易失忆"的核心原因。想象那张工作台上不仅放着你的资料,还放着AI每回答一句就多出来的一张便签——聊得越多,便签堆得越多,直到把最早的资料挤出桌面。
【深入一点】为什么上下文窗口不能无限大?
这涉及到Transformer架构的核心限制。Transformer是当前所有主流大语言模型的基础架构,它最强大的特性是自注意力机制——每个token都要和其他所有token计算关联度。如果上下文有 $n$ 个token,那么要计算的关系对数量是 $n \times n$,也就是 $n^2$ 级别。
具体来说:
| 上下文长度 | 关系对数量 | |-----------|-----------| | 4K token | ~1700万 | | 32K token | ~10亿 | | 128K token | ~170亿 | | 1M token | ~1万亿 |
计算量的增长是平方级的,这意味着即使硬件按照摩尔定律发展,上下文窗口的扩大速度也是受限的。近年来,研究人员提出了各种优化方法(如FlashAttention的IO优化、滑动窗口注意力的稀疏化、状态空间模型SSM的线性化、Mamba架构等),试图把 $n^2$ 降为 $n \log n$ 甚至 $n$,但"无限大上下文窗口"在物理上仍是不可能的——它总会受限于显存容量、推理延迟和计算成本。100万token的上下文需要数十GB的显存来存放KV缓存(Key-Value Cache),这个开销对消费级硬件来说是巨大的。
所以,"工作台面"的比喻不仅是形象,更是物理真实的。
下面这张图直观地展示了人类记忆与AI上下文系统的对应关系:
```mermaid flowchart TB subgraph Human[人类记忆系统] H1[感觉记忆: 极大容量, 约250毫秒] H2[短时记忆: 容量7加减2项, 约30秒] H3[长时记忆: 近乎无限, 永久存储] H1 -->|注意筛选| H2 H2 -->|重复编码巩固| H3 H3 -.检索调用.-> H2 end
subgraph AI[AI上下文系统] A1[输入Token流] A2[上下文窗口: 8K到1M token] A3[自注意力计算] A4[输出生成] A5[模型参数: 训练时冻结的权重] A1 --> A2 A2 --> A3 A3 --> A4 A5 -.参数化知识.-> A3 end
H2 -.类比.-> A2 H3 -.类比.-> A5 ```
可以看到,短时记忆对应上下文窗口,长时记忆对应模型参数。但要注意:人类有从短时记忆到长时记忆的"巩固通道",而AI完全没有——它的"参数知识"在训练结束后就冻结了,上下文里发生的事永远不会被自动吸收进参数中。
1.4 上下文工程:让AI'记住'一切的科学与艺术
既然AI的上下文窗口是有限的,那我们能做什么?答案就是本书的核心主题:上下文工程(Context Engineering)。
定义:上下文工程是设计与优化输入给大语言模型的全部信息(包括指令、示例、检索到的知识、对话历史、工具调用结果等)的科学与艺术,其目标是在有限的上下文窗口中,最大化AI对相关信息的有效利用,从而提升输出质量、降低幻觉、增强可控性。
这句话有点长,让我们用一个比喻把它说清楚。
【图书馆员比喻】 想象你是一位图书馆员,每天要回答读者各种各样的问题。图书馆里有上百万本书,但你的工作台上只能摊开10本书。你怎么选?
- 如果你随机选10本
第 1 章《引言:为什么AI会'失忆'?》(续)
……如果你是图书馆员,每天要回答读者各种各样的问题。图书馆里有上百万本书,但你的工作台上只能摊开10本书。你怎么选?
- 如果你随机选10本,读者大概率得不到正确答案。
- 如果你根据经验挑选,把最可能相关的几本摊开,把次要的资料写成摘要放在旁边,把无关的资料干脆不拿——读者的答案质量就会大幅提升。
上下文工程,就是AI时代的"图书馆员手艺"。区别在于:图书馆员靠的是十年积累的经验直觉,而AI应用的开发者必须把这种直觉编码成算法——因为AI本身没有判断"哪10本书最相关"的自主能力,它只会一字不差地处理你递给它的所有内容。换句话说,AI的聪明程度,完全取决于你喂给它的上下文质量。这正是本书要教你的核心技能。
1.5 从'工作台面'到'仓库':一个更完整的比喻
光有"工作台面"还不够。让我再引入一个比喻——仓库。一个完整的AI应用,可以看成由三个部分组成:
1. 工作台面(上下文窗口)——AI当下能"看见"的内容。容量有限,但读取速度最快。
2. 仓库(外部知识库)——所有可能用得上的资料都存在这里。容量近乎无限(可以是整个互联网),但每次只能取一部分放到工作台面上。
3. 图书管理员(上下文工程系统)——决定"从仓库里拿什么放到工作台上"的算法。它可以是简单的关键词匹配,可以是向量检索,也可以是一个专门的大模型。
这三个部分协同工作的方式如下图:
```mermaid flowchart LR User[用户提问] --> Admin[图书管理员<br/>检索/筛选/压缩算法] Warehouse[(仓库<br/>外部知识库<br/>文档/历史/工具结果)] Admin -->|取出最相关资料| Desk[工作台面<br/>上下文窗口] Desk --> LLM[大语言模型<br/>生成回答] LLM -->|回答| User LLM -.->|新生成的内容| Desk ```
关键洞察:当用户提问时,"图书管理员"会从仓库中检索最相关的资料,放到工作台上;AI基于工作台上的全部内容生成回答;回答本身又回到工作台面上,等待下一个问题。这就是一个完整的AI应用闭环。
回到小宇的故事。如果他想让AI写出一万字都不"失忆"的小说,他需要的不只是一个"工作台面更大"的AI,他需要的是一个"图书管理员"——
- 在每章写作前,AI自动从仓库里取出最新的角色设定、人物关系图、最新情节摘要,放到工作