开场白:为什么 AI 会'健忘'?
开场白:为什么 AI 会"健忘"?
想象一下:你正在和一个 AI 助手聊天,你花了十分钟告诉它你喜欢的颜色、你养的那只叫"小雪"的猫、你今天数学考试没考好心情很差。然后你接着问它:"根据我刚才说的,你猜我现在最想要什么?"AI 居然回了一句:"抱歉,我不太了解你的情况,你可以再描述一下吗?"
你盯着屏幕,瞬间有种想摔手机的冲动。
这不是段子,这是几乎每个用过 AI 的人都经历过的真实场景。AI 给你写了一半的代码,忽然就忘了你之前定好的变量命名规则;你和它讨论了半小时的故事情节,它写到第三章就把第二章里出现过的关键人物给写丢了;你让它帮你修改一篇作文,改到第三段时,它突然开始用一种完全不同的语气,仿佛换了一个作者。
为什么会这样?AI 不是号称"超级智能"吗?怎么连几段对话都记不住?
答案藏在一个你可能听说过、但没真正理解的概念里——上下文。
这是这本书的第一个核心关键词,也是我们理解大语言模型(也就是 ChatGPT、文心一言、通义千问、Kimi、豆包这些"会说话"的 AI)如何"思考"的第一把钥匙。在接下来的十几章里,你会慢慢学会如何和 AI 打交道,如何让它的"记忆"在你需要的时候"复活",如何把 AI 变成一个真正懂你的助手。
但在那之前,我们必须先回答一个最基本的问题:AI 到底是怎么"读"信息的?它的"记忆"到底在哪里?
那个让人抓狂的瞬间
让我们把刚才那个场景再拉长一点。
周五晚上八点,你正在赶下周要交的英语演讲稿。你打开 AI 助手,输出了第一句话:
> "我下周要做一个关于'人工智能对教育的影响'的英语演讲,时长三分钟,观众是我的同学。"
AI 立刻回了一段流畅的英语开头,附带一些建议,比如可以用故事开头、要有数据支撑等等。你觉得它很懂行,于是继续:
> "我英语口语不太好,能不能写得简单一点?另外我最近很喜欢《哈利·波特》,能不能加点魔法元素?"
AI 又乖乖地改了一版,融入了霍格沃茨的元素。你很满意,开始进入细节:
> "我想用三个分论点:AI 帮你学语言、AI 帮你学数学、AI 帮你学艺术。每个分论点要有一个例子。"
AI 给你列了三个例子,思路清晰。你突然想起一件事:
> "对了,我刚才说我是高一学生,我的同学们大部分都没怎么接触过 AI 技术,所以科普性要强一点,不要用太专业的术语。"
到目前为止,一切顺利。AI 像是你的私人英语家教,认真负责,配合默契。
然后,到了第四个分论点的时候,你开始发问了:
> "你还记得我前面提过《哈利·波特》吗?我想加一个关于霍格沃茨'分院帽'的类比,你能把它放在第一个分论点的开头吗?"
AI 回复:
> "当然可以!分院帽是一个能把学生分到不同学院的神奇帽子……请问您希望我把它和 AI 教育的哪个方面进行类比呢?"
你盯着屏幕,愣住了。
它不是"忘记"了吗?它明明十分钟前就写过带有霍格沃茨元素的内容了!为什么现在还要问你分院帽和什么类比?
更让你抓狂的是,如果你这时候翻到对话的最开头,你会发现 AI 并没有说"我忘了"。它是真的、从骨子里、不记得你十分钟前说过什么了。
这种"突然失忆"的现象,恰恰是今天所有大语言模型(Large Language Model,简称 LLM)最根本的特征之一。要理解它,我们得先看看 AI 内部到底是怎么"读"一句话的。
黑板、便签和翻书:AI 是怎么"读"信息的?
如果你走进一所学校的教室,你会发现老师讲课的时候会用几种不同的工具来辅助记忆:
- **黑板**:老师在黑板上写公式、画图、列提纲。黑板的好处是大家都看得到,缺点是空间有限,写满了就要擦掉。
- **便签纸**:老师有时候会把重点写在便签上贴在黑板边缘,提醒自己下面要讲什么。便签很小,只能写几句话。
- **课本**:老师手里有一本厚厚的课本,里面有所有要教的内容。但课本不能同时摊开两个页面,老师讲到第六章的时候,第三章就被他"暂时放下了"。
这三种工具,恰好对应了大语言模型处理信息时使用的三种"硬件资源"。
第一种:黑板——工作内存(Context Window)
黑板就是 AI 此刻"眼前"能看到的所有信息。在 AI 看来,它每次回答你之前,都会先把 你和它说过的所有对话(再加上系统提示词、工具调用结果等等)放到一块巨大的"黑板"上。然后,它盯着这块黑板,一个字一个字地生成回答。
这块"黑板"有一个明确的大小限制。比如 GPT-4 早期的版本是 8K(大约 8000 个英文单词或者 4000 个汉字),GPT-4 Turbo 是 128K,目前最新的 Claude、Gemini 等模型可以做到 200K、500K,甚至 1M 以上的 token 容量。
token 是什么?它是 AI 处理文字的"颗粒度"。你可以把它想象成"半个汉字"或者"四分之一个英文单词"。比如"你好"是 2 个 token,"hello"是 1 个 token。一个完整的英文单词平均 1.3 个 token,一个汉字平均 1.5-2 个 token。
当黑板写满了,AI 就必须 擦掉最早写上去的内容 才能继续写新的。这就是为什么你和 AI 聊得太久,它会"忘记"一开始说过的话——不是它故意装的,是 黑板物理上就没有空间了,最早的内容被它自己擦掉了。
第二种:便签——隐藏状态(Hidden State)
便签对应的是 AI 在生成每一个字时,脑子里"瞬时"的计算结果。这个状态是连续的,AI 在写第二个字的时候会参考第一个字的状态,写第三个字的时候又会参考前两个字的状态,以此类推。
你可以把它想象成一根传递火炬的链条。第一个字被写出来时,它点燃了一支火炬,交给第二个字;第二个字接过火炬继续跑,又点燃下一支……整篇回答其实是这样一根"火炬链"。便签纸在每写一个字后就会被撕掉重写,所以它本质上是一种"短到不能再短"的记忆,只记住"刚才那一瞬间"。
第三种:课本——模型参数(Parameters)
课本是 AI 在训练阶段学到的"全部知识",存储在几百亿、上千亿个"参数"里。这些参数就像是大脑里的突触连接,决定了 AI 看到"猫"这个字会想到"喵喵叫的小动物",看到"霍格沃茨"会想到"魔法学校"。
课本的容量非常大,但是它是静态的、写死在你买它那天就定下来的。AI 不能在和你聊天的时候翻开课本去查新东西——它只能从你黑板上写的内容里找线索。
理解了这三种"硬件",我们就能回答一个关键问题:AI 是怎么生成一个回答的?
让我用一个流程图把这个过程画出来:
```mermaid flowchart TD A[你输入一段文字] --> B[文字被切成一个个 token] B --> C[所有 token 放进上下文窗口这块黑板] C --> D[AI 从左到右逐字阅读黑板上的内容] D --> E[AI 启动隐藏状态火炬链] E --> F[AI 预测下一个最可能出现的 token] F --> G{预测完成了吗?} G -->|没有| E G -->|是| H[把生成的内容展示给你] H --> I{黑板还有空间吗?} I -->|是| J[你的新消息进入黑板] I -->|否| K[擦掉最早的内容腾出空间] J --> D K --> D ```
这个流程图看上去不复杂,但里面有几个细节值得我们反复琢磨:
第一,AI 不是一次性写完整个回答的。它是一个 token 一个 token 地"挤"出来的,每挤一个都要回头看一遍黑板。这就像一个非常认真的抄写员,每写一个字都要回头核对一遍前文——只不过这个"抄写员"的速度快得离谱,一秒钟能写几十个字。
第二,黑板在 AI 眼里是平等的。它不会特别重视你最早说的话,也不会特别重视你最后说的话——所有内容都在它眼前,它随时可以看。但因为便签传递的"最近内容权重更大",所以客观上,离问题越近的内容,对回答的影响越大。
第三,如果黑板满了,最早的内容会被默默擦掉,AI 不会告诉你"我准备忘记你三分钟前说的话了哦"。它只是在你下次提问时,眼睛里没有那段内容了。你感觉它"翻脸不认人",本质上是黑板被擦干净了。
到这里,你应该已经明白了:AI 不会"主动忘记"任何东西,它只是"看不到"那些不在黑板上的内容。
"上下文"到底是什么?
现在我们可以正式给"上下文"下个定义了。
上下文(Context) 在大语言模型的语境下,指的是 AI 在生成下一个回答时,所能"看到"的全部输入信息的总和。
听起来很抽象,对吧?让我把它拆成几块:
第一层:系统提示词(System Prompt)
这是写在最前面的、用户看不到但 AI 必须遵守的"内部指令"。比如开发者会写:"你是一个友善的英语老师,回答要简洁、要有耐心、要用初中生能理解的语言。"系统提示词就像剧本最前面的"舞台说明",决定了整场戏的基调。
第二层:用户输入(User Input)
这就是你在对话框里打出来的那些字。
第三层:AI 之前的回答(Assistant Output)
AI 自己之前说过的话,也属于上下文的一部分。这是因为 AI 在回答你第三个问题的时候,它需要"回忆"自己回答前两个问题时说了什么——否则它可能自相矛盾。
第四层:工具调用结果(Tool Outputs)
如果 AI 调用了搜索、计算器、代码执行器等外部工具,这些工具返回的结果也会被塞进上下文。比如你说"帮我查一下今天北京天气怎么样",AI 调了天气 API,那段返回的 JSON 数据就会进黑板。
第五层:其他附加信息
有些 AI 还会把时间戳、用户偏好、历史会话摘要(如果有的话)放进上下文。
把这五层加在一起,就是完整的上下文。
上下文是 AI 唯一的"工作材料"。它没有别的信息来源(除了模型参数里固化的知识,但那些是"刻在课本里"的,写回答时只能用,不能改)。所以:
- 你想让 AI 知道某件事 → 把它写进上下文
- 你不想让 AI 知道某件事 → 把它从上下文里移走
- 你想让 AI 表现得更好 → 优化上下文的内容和结构
这就是"上下文工程"(Context Engineering)的核心思想。
但是这里有一个问题:黑板是有边界的。
为什么白板会有边界?
你可能会想:既然黑板这么重要,为什么不让它无限大呢?让 AI 看到人类有史以来的所有文字、所有对话、所有代码,那多爽!
听起来很美好,但现实里至少有三个拦路虎。
第一个拦路虎:算力(Compute)
这里要用到一个关键的数学概念——自注意力机制(Self-Attention)。
在 Transformer 架构(也就是今天几乎所有大语言模型的"骨架")里,AI 要理解一句话里每个字和其他字的关系。比如句子"小明借给小华一本书,他说下周还",AI 必须搞清楚"他"指的是小明还是小华。这种"两两配对"的计算量,随着句子长度的增加,是平方级别增长的。
具体来说,如果黑板上有 $N$ 个 token,AI 要做大约 $N^2$ 次配对计算。
- 当 $N = 1000$,计算量是 $10^6$,还行。
- 当 $N = 10000$,计算量是 $10^8$,就有点吃力了。
- 当 $N = 100000$,计算量是 $10^{10}$,需要上千块 GPU 同时工作。
- 当 $N = 1000000$,计算量是 $10^{12}$,可能需要一整个数据中心。
这就是为什么上下文窗口越大,AI 响应越慢、成本越高的根本原因。
第二个拦路虎:成本(Cost)
每次你和 AI 对话,AI 提供服务方(比如 OpenAI、Anthropic、阿里、字节、深度求索这些公司)都要支付电费、GPU 租用费、机房维护费。这些费用是按 token 数量 收取的。
举个例子(数据为 2024 年公开 API 价格的大致范围,会随时间变化):
- 输入 1K token:可能只要 0.001-0.01 元
- 输入 100K token:就要 0.1-1 元
- 输入 1M token:可能要 1-10 元
而一次对话往往来回好几轮。如果每次都把一整本小说(比如《哈利·波特与魔法石》全文约 7 万字 ≈ 10 万 token)塞进去,光一次对话就要花几块钱。如果是企业级应用,每天几百万次调用,那成本就是天文数字了。
所以,上下文窗口大小是一个经济问题,也是一个工程权衡。提供方必须给用户"够用"的大小,同时不让自己破产。
第三个拦路虎:技术约束(Technical Limits)
即使你不计成本,黑板也不能无限大。
- **位置偏差(Position Bias)**:研究表明,AI 对上下文 **开头** 和 **结尾** 的内容记忆得最清楚,中间部分容易"走神"。这种现象叫做"Lost in the Middle"(迷失在中间)。当上下文特别长的时候,这个现象会更明显。
- **注意力稀释(Attention Dilution)**:上下文越长,AI 分配给每个 token 的"注意力"就越少。换句话说,同样一句话"我喜欢蓝色",如果周围有 1000 个 token,它会记得很清楚;如果周围有 100 万个 token,它可能被淹没在信息海里。
- **训练数据偏差**:AI 训练时见过的对话样本大多比较短(几百到几千 token),突然给它 100 万 token 的超长输入,它有点"没见过世面",表现可能反而不稳定。
那么,2024 年最先进的大语言模型能做到多少?
来看一组大致的数据(不同来源略有差异,仅供直观理解):
- GPT-3.5:4K-16K token
- GPT-4:8K-32K
- GPT-4 Turbo:128K
- Claude 3.5 Sonnet:200K
- Gemini 1.5 Pro:1M-2M
- Kimi 智能助手:200K-2M
- 通义千问:最高 1M
看起来上下文窗口在快速增长,但这并不意味着 AI 的"记忆力"也跟着线性增长。研究表明,当上下文超过 64K-128K 之后,AI 检索和推理能力都会出现明显下降。
所以,"上下文越大越好"是一个美丽的误解。真正的高手,是用有限的白板,写出无限的可能。
短期记忆 vs 长期记忆:AI 和人类的根本区别
理解了上下文窗口,我们再来看一个更深层的问题:AI 的"记忆"和人类的记忆,到底有什么不同?
人类的大脑有非常复杂的记忆系统:
- **感觉记忆(Sensory Memory)**:眼睛看到的、耳朵听到的,瞬间保留不到 1 秒。
- **短期记忆(Short-term Memory)**:比如你查一个手机号,默念几遍,能记 15-30 秒。容量大约 7±2 个组块。
- **长期记忆(Long-term Memory)**:可以存储一辈子。容量几乎无限,但提取速度比短期记忆慢。
更神奇的是,人类的大脑会主动重构记忆。每次你回忆一件事,你的大脑都会"重新播放"那个场景,但每次播放都会做微小的修改。所以心理学家说:"人类不是记住过去,而是重建过去。"
AI 呢?AI 没有真正意义上的"长期记忆"。
它只有两种"记忆":
1. 模型参数里的"内化知识":这是 AI 在训练阶段(学习几万亿字的人类文本)"刻进脑子"的知识。训练完成后,这些知识是固定的,AI 不能在和你对话时"学习"新东西——除非你把新内容写进上下文。
2. 上下文窗口里的"工作记忆":这就是我们一直在讨论的"黑板"。它的容量有限,且每次新对话开始时都会被清空(除非开发者专门做了"记忆存档"功能)。
所以,AI 的"记忆"更像是"工作记忆",而人类的"记忆"既有工作记忆,又有长期记忆。
这带来一个很重要的推论:
> 如果你想让 AI 知道某件事,你必须在每次对话时主动告诉它。
比如你上次让它帮你写了一份自我介绍,下次再开新对话时,它不会记得你是谁。你必须重新把背景信息粘进去。
这听起来很麻烦,对不对?确实麻烦。
但这也正是机会所在。如果 AI 不会"主动学习",那么"如何把信息塞进上下文"就变成了一门手艺。这门手艺,就是我们这本书的核心主题——上下文工程。
【实验时间】让 AI 当一回家庭教师
理论讲了这么多,我们来做个实验,亲手验证一下"上下文"对 AI 表现的影响。
请你打开任何一个 AI 对话工具(ChatGPT、文心一言、Kimi、豆包、通义千问都行),按照下面的步骤操作。
实验准备:
- 一个支持长上下文的 AI 工具
- 一支笔和一张纸
- 20 分钟时间
第一步:零上下文提问
直接问 AI:
> "我是一名高一学生,我数学考试没考好,心情很低落。请你安慰我,并给我一些数学学习建议。"
把 AI 的回答完整记录下来。注意 AI 用了什么语气、举了什么例子、给了什么建议。
第二步:丰富上下文提问
开一个新的对话(一定要新对话,确保 AI 没有任何历史记忆),然后输入:
> "我是一名高一学生。我从小喜欢看《哈利·波特》,尤其是赫敏这个角色,因为她聪明、爱学习。最近一次数学考试我只得了 62 分(满分 100),是初中以来最低分。我妈知道后说我'不用功',我心里很委屈,因为我其实每天都在认真做题,只是这次试卷的二次函数那部分超出了我的预期。我现在有点害怕下次数学考试。"
接着问:
> "请你扮演我的家庭教师,安慰我,并给我一些数学学习建议。"
同样把 AI 的回答完整记录下来。
第三步:对比分析
拿出你的笔记,对比两个回答:
| 对比维度 | 实验一(零上下文) | 实验二(丰富上下文) | |---|---|---| | AI 称呼你用什么 | ? | ? | | 安慰的语气 | ? | ? | | 举的例子 | ? | ? | | 数学建议的针对性 | ? | ? | | 有没有回应你的"委屈"情绪 | ? | ? | | 回答长度 | ? | ? |
我敢打赌,你会发现实验二的回答 远远好于 实验一。AI 可能会这样回复你:
> "我完全理解你的感受。首先,62 分并不代表你不努力,每个学霸都有失手的时候。让我像赫敏一样给你分析一下……" > > "二次函数这部分确实难,但它是高一数学的'分院帽',把'会的人'和'不会的人'分到不同的学院……" > > "你可以试试这个三步复习法:第一……第二……第三……"
AI 把你给的"信息碎片"(喜欢《哈利·波特》、数学考砸了、妈妈批评你、害怕下次考试