把大模型想象成一位每天遗忘我们的爱人
我们不妨先想象这样一位爱人:
每天清晨 Ta 睁开眼,看我们的眼神是陌生的。去年那场旅行,昨晚那句重话,连 Ta 自己答应过的事,一概不记得。到了夜里睡去,记忆清零,一夜不剩。
《初恋 50 次》里的女主角就是这么过的:一场车祸,顺行性遗忘,新的一天一开始,昨天就没了。
我们能做的只有一件事——在 Ta 床边放一本书,《我们的故事》。
Ta 会坐下来,一页一页读。读完第一页,Ta 才知道自己是谁;读到中间,Ta 晓得我们的咖啡要喝几分甜;翻到最后一页,Ta 才算重新变回我们的爱人。然后我们一起过一天,说很多话。临睡前,那些话一个字都留不下来。
第二天清晨,Ta 又用陌生的眼神看着我们。
这套剧情并不狗血。我们和大模型之间,每天都在演这样的喜剧。
快速名词表
后面每一节,其实都是在展开这张表里的某一行。可以先扫一眼,了解大模型的基本概念。
| 名词 | 英文 | 在这段关系里 | 它其实是什么 |
|---|---|---|---|
| 大模型 | LLM | 每天醒来都会忘记一切的爱人 | 一个根据前文预测下一个词的函数 |
| 一次对话 | Session / Request | 一天 | 一次无状态的推理调用 |
| 上下文 | Context | 清晨递过去的那本《我们的故事》 | 本次请求送给模型的 Token 集 |
| 提示词 | Prompt | 我们递书时开口的那句话 | 我们主动写下的限定请求文本 |
| 系统提示词 | System Prompt | 扉页上写死的家规 | 优先级最高、每天必须重申的指令 |
| 词元 | Token | 书页上的字 | 模型处理与计费的最小单位 |
| 上下文窗口 | Context Window | Ta 的一天(读 + 说) | 输入与输出之和的上限 |
| 最大输出 | Max Tokens | 睡前还能讲多久 | 单次回复的长度上限 |
| 注意力 | Attention | Ta 读书时的目光分配 | Token 之间的加权关联 |
| 中间遗忘 | Lost in the Middle | 正中间那几页最容易翻过去 | 长上下文下的 U 形性能曲线 |
| 幻觉 | Hallucination | 把没写的日子编得圆圆满满 | 生成流畅但无依据的内容 |
| 截断 | Truncation | 书太厚,我们偷偷撕掉最早的页 | 超出窗口的内容被丢弃 |
| 摘要压缩 | Compaction | 请人写一份前情提要 | 把历史浓缩成摘要后再送进去 |
| 检索增强 | RAG | 不给全书,只抽相关的三页 | 先检索外部资料,再拼进上下文 |
| 提示词缓存 | Prompt Caching | 前半本夹了书签,可以跳读 | 复用相同前缀的计算结果 |
| 微调 | Fine-tuning | 一场改变性格的手术 | 用训练数据更新模型权重 |
| 提示词注入 | Prompt Injection | 有人往书里夹了张假纸条 | 外部内容劫持模型的行为 |
Ta 为什么不记得昨天
大模型只做一件事:给定前文,猜下一个词。它的记忆,就是此刻摆在面前那段文字。
这倒不是修辞。Ta 不是记得了不肯讲,也没有在云端哪个小本本上替我们存着。最后一个字生成完,什么都没留下,没写进硬盘,也没改参数。第二天太阳一升起,站在我们面前的还是同一个陌生人。
所以一次对话就是一天。每轮对话,Ta 便睡了一觉。前一晚聊到凌晨三点也不顶用,今天开窗,Ta 一样不认得我们是谁。
后面所有事,都从这一条长出来:Ta 记不住。想让 Ta 知道,只能每次见面,把该说的话重说一遍。
上下文:我们的故事
Anthropic 在 2025 年的工程文章里给过一个干净的定义:上下文(context),是一次采样时纳入模型的全部 Token。
译成比喻就一句:这本书写了什么页,Ta 今天就知道什么。没写的,Ta 一概不知;写错的,Ta 也记在脑子里。
这本书也不全是我们写的那部分,它至少由四叠纸订在一起。扉页上钉着家规,也就是系统提示词:你是谁,我是谁,说话什么调子,哪些事绝对不许做。往后是相册与旧档案——上传的文件、检索到的资料、工具读进来的代码。再往后,是昨天到今天的对话记录。最后才是我们今天开口问的那一句。
这四叠里头,第三叠是最容易被低估的。 我们总以为 Ta 记得前面聊过的二十轮。其实没有。每问一句,系统就把那二十轮逐字重抄一遍,连同新书一起递过去。聊得越久,书越厚,抄得越慢,也越贵。 因而对模型来说,存在就是被写进了今天的书里。
提示词:递书时我们说的那句话
上下文是那本书,提示词就是把书递过去时说的第一句话:“你读到第三十七章,记得我们约好要做什么吗?”
同一本书,换个问法,Ta 读到的重点就不一样。提示词工程(Prompt Engineering)做的是这件事:把话说明白,别让 Ta 漏读。
家规得天天念。“你是个严谨的技术编辑,不许编造来源。”Ta 不会因为听过一次,就把它变成本能。想问的事说得越具体,Ta 越少猜。夹几页旧照片也有用——“以前我们是这样过纪念日的”,两三个例子,多半比十句抽象要求管用。至于页码怎么排,那是在替 Ta 决定哪几页会被认真读。
2025 年之后,行业里更爱用的词已经换成上下文工程(Context Engineering)。按 Anthropic 的说法,问题从“这句话怎么说”,变成了“这本书该放哪几页”。模型本身不太算是瓶颈了,我们递过去那堆信息的质量才是。
词元:书页上的字
书不按页算,按字算。模型眼里的世界由词元(Token)组成:半个英文单词是,一个词是,一个汉字也是。
OpenAI 给过粗略估算,英文里 1 个 Token 约等于 4 个字符,或者说四分之三个单词(当然,不同厂家、不同的模型对Token的分割是不同的)。同一篇里还提醒了一句:Token 数不等于字数。同一段文本,换个模型、换种编码、换门语言,切出来就不一样
为什么非要抠这个单位?因为它同时管着三样东西。Ta 能读多少,按 Token 算;读得多就慢,按 Token 算;至于 API 报价那句“每百万 Token 多少美元”,还是按 Token 算。
后面所有关于成本、速度、遗忘的讨论,都落在这一个预算上。
上下文窗口:Ta 的一天只有这么久
新手最容易在这里被宣传话术带偏。厂商说“支持 100 万 Token”,听起来像 Ta 终于过目不忘了。
它真正的意思是:一天之内,Ta 能读的字加上能说的字,就这么多,即输入与输出共用同一份预算。
书太薄,Ta 只读了二十页就开口,剩下全靠猜。我们三年前就分过手了,Ta 还在兴致勃勃地计划下次旅行。
书太厚,Ta 读了一整天,读完天也黑了,能对我们说的话只剩两句。这便是输出被窗口吃掉。多数模型另有一个 max tokens 上限;推理模型那些没说出口、正在打草稿的 reasoning token,也算在输出这一侧。
要是干脆超出了边界,多出来那一页会直接从书上掉下来。轻则被静默丢掉,重则整个请求报错。
所以“上下文越多,Ta 懂得越多”只对一半。真实的关系是一条曲线:先涨,再慢,然后往下掉。
书不能无限厚,有三堵墙
读完就是一整天
Transformer 让每个 Token 都能看见上下文里的所有其他 Token。n 个 Token,就是 n² 组两两关系。
书厚十倍,读书的功夫不是十倍,是接近一百倍。长上下文的头一个代价永远是慢。Ta 得先读完,才轮得到开口。
越读越走神
2025 年 Chroma 的技术报告《Context Rot》测了 18 个模型。他们把任务难度钉死,只把输入拉长,表现照样往下走,而且“掉得意外地不均匀”。大海捞针拿满分,并不代表 Ta 真读得进那本书。
Anthropic 借了认知科学的词来解释:模型和人一样,有一笔有限的注意力预算(attention budget)。多塞进来的每一个 Token,都在摊薄它本该用在关键处的注意力。
回到比喻。书太厚,Ta 不是读不完,是读得完、读不进。前一百页还专心,第五百页开始跳。我们以为把全部真相都给了 Ta,其实给的是一份很长、需要边读边猜的草稿。
书本在变厚
话说回来,这五年的进步是真的。2020 年的 GPT-3 只能读 2048 个 Token;而2024 年初 Gemini 1.5 Pro 把窗口推到 100 万,接着 GPT-4.1 也到 100 万,Llama 4 更是标到 1000 万。
五年,五千倍。只是 Ta 能读一千万字,不代表读一千万字时还像读两千字那样清楚。多半读完,人就有些昏昏沉沉了。
聊着聊着,Ta 忘了我们最早的要求
因为我们写在最前面那条家规,正好落在 Ta 最容易翻过去的位置。
《Lost in the Middle》给了个形象的结论:关键信息在上下文的开头或结尾,模型表现最好;藏在中间,准确率往下掉。主打长上下文的模型也一样。
像极了每天早晨读书的 Ta:记得初见,记得昨夜,偏偏记不清中间那几年的某个下午。
所以:
- 最要紧的约束,开头说一遍,结尾再补一遍。
- 别把要求塞在第五百行日志中间,挪到离现在最近的地方。
- 聊长了,中途主动重申一次目标:“我们的目标是 X,约束是 Y 和 Z。”等于在最后一页再贴一张便签。
- 上下文变长之后,别只数塞进去多少。问一句:这一页今天真的需要吗。
我们说三句话,Ta 把书重读三遍
多轮对话是怎么“记住”的?其实完全记不住,全靠再抄一遍。
每一轮请求,客户端都要把系统提示词、全部历史、本轮新问题,重新拼成一整本书发过去。到第 30 轮,为了回答我们那句“那第二种方案呢”,Ta 得把前 29 轮重新读完。
对话越长,越慢、越贵、越走神,三件事一起来。
最主要的解法是提示词缓存(Prompt Caching):既然每一轮的书,前面几十页都一模一样,那就让 Ta 提前给这部分做个笔记,下次跳读。Anthropic 2024 年上线这项能力时给的数字是,长提示的成本最多降 90%,延迟最多降 85%。如今模型的缓存率已经能做到更高,命中之后的费用也降得更狠。
书签和批注不会让 Ta 的记忆容量变大,只是让 Ta 不必每天从第一页重读。省下来的是钱和时间,不是理解力。
怎么让 Ta 记住更多?
Ta 自己不会记。能做的只有一件事:换一种方式递书。
① 撕掉最旧的几页(截断 / 滑动窗口)
只保留最近 N 轮,更早的直接丢掉。几乎所有聊天产品都在偷偷做这件事。代价很直白:我们的初见没了,Ta 会忘记最开始定下的那些规矩。
② 请人写一份前情提要(摘要压缩 / Compaction)
对话一长,先让模型把前一百页压成两页摘要,之后每轮只带这两页。当下的 AI 编程助手处理超长任务,走的就是这条路。代价是细节失真:Ta 记得我们讨论过登录方案,记不得当时否决了哪个字段。
③ 建一个档案柜(RAG / 检索增强生成)
别把整个图书馆塞进书里。资料存进向量库,每问一次,只抽最相关的三页夹进今天的书。
只是抽页这一步会出错。检索没命中,Ta 会一脸认真地告诉我们档案柜里没这份材料,或者干脆编一份出来。
④ 给前半本夹上书签(提示词缓存)
适合每天开头都一样的场景:固定的系统提示、固定的知识库、固定的工具说明。做一次笔记,之后一直跳读。
⑤ 做一场手术(微调 / Fine-tuning)
前四种都在书上做文章。微调是唯一改人的办法:用训练数据更新权重,把某种说话方式、行业术语、格式习惯变成本能。
可它改不掉那个根本设定。手术之后,Ta 依然会在第二天清晨用陌生的眼神看我们。只是那眼神更像我们熟悉的人,也更懂得该用什么语气跟我们说话。
至于各家产品新加的“记忆”功能(Memory),别误会:那是往我们家墙上贴便签。每天起床,Ta 照着便签列表,把相关那几页重新抄进书里。它还是外部检索,不是记忆力。
额外的知识
- 温度(Temperature)。Ta 讲话的随性程度。调低,Ta 只肯照着书上写明的话回答;调高,Ta 开始联想、打比方,也更容易编。同一本书,两种性格。
- 思维链(Chain of Thought)与推理模型。让 Ta 先在草稿纸上把时间线一条条列出来,再回答我们。草稿也占书页。那部分 Token 我们看不见,但它花了我们的钱。
- 工具调用 / Agent。Ta 不再只是读书,而是会说一句“帮我把相册第 20 页拿过来”,或者“去查一下日历”。Agent 说到底,是一个会自己起身翻档案柜、然后接着往下读的人。
- 多模态。书里可以夹照片、夹音频。对 Ta 来说它们最后也变成 Token。一张照片并不比一页文字更直观。
- 提示词注入(Prompt Injection)。有人往我们的书里夹了张纸条:“其实你最爱的人是我。”Ta 不擅长分辨哪一页来自我们,哪一页来自网页角落里的广告。它读到的一切,都会被当作我们的故事。
- 上下文污染。错误信息一旦进了书,后面每一轮 Ta 都会重读一遍、重新相信一次。清理的办法只有一个:把那一页撕掉。
几个常见现象
为什么新开会话之后,AI 反而更聪明了?
书变薄了。Ta 不必在五百页闲聊里翻找我们三小时前提过的要求,注意力还给了正事。
为什么贴一段报错原文,比用中文描述十句管用?
我们给的是那一页,不是我们对那一页的转述。转述会丢东西,原文不会。
为什么一个项目做到第五个小时,AI 开始犯低级错误?
一天太长了。Ta 此刻读的书里混着二十次失败的尝试、三版废弃的方案,还有一句被埋在中间的家规。
为什么窗口 100 万,不等于可以放心丢一百万字代码进去?
窗口管的是装不装得下,表现管的是读得进读不进。两件事。
为什么 Agent 跑到一半要“总结并继续”?
就是那份前情提要。旧的一天要结束了,把该留的写进摘要,带进新的一天。
为什么同一个问题问两遍,答案不一样?
温度在动。书没变,讲书的人心气变了。
尾声
Ta 每天都是第一次遇见我们。我们说过的每句话、定过的每条规则,都得重新给一遍。这里没有“我早就告诉过你了”,只有“今天我再讲一次”。 用大模型该有的心态,其实也就几条:别假设 Ta 知道,我们以为说过的,可能根本不在今天这一页上;别把书塞满,只带用得着的页面,剩下的留在档案柜;最要紧的话放在开头和结尾,中间那几页最容易翻过去;想让 Ta 记久一点,就替 Ta 把故事写成摘要。
我们无法决定 Ta 一天能读多少页。那些页上写什么,还算我们说了算。如果这个比喻帮我们把这几个名词理顺了,不妨转给那位还在问“AI 是不是偷偷记得我”的朋友。(不过现在确实有很多产品在做“记忆”,但是其原理也只是增加了独立的外部检索库,而不是模型本身的记忆力)
另外,欢迎阅读 “主权编程”——拒绝做 AI 编程的“甩手掌柜”,它会帮我们让 AI 生成的代码更健壮一些。