AI也有记性吗:从聊天机器人说起
第 1 章 AI也有记性吗:从聊天机器人说起
请你回想一下这种感觉——你刚花了二十分钟和某个 AI 助手聊天,把自己的项目背景、目标、约束条件、个人偏好,零零碎碎全都告诉它了。你们聊得很顺畅,它的回答看起来也很"懂你"。然后你随口说了一句:"就按我们刚才说的那种方案去做吧。" 它却回了一句:"抱歉,我不太清楚您指的是什么方案,能再详细描述一下吗?"
那一刻你大概率会冒出两个想法:第一,这家伙刚才不是挺聪明的吗,怎么突然傻了?第二,它是不是把我前面说的话给忘了?可如果它真的会忘,那这二十分钟里它到底在"记"什么?
这两个问题,就是本章要正面回答的核心:AI 所谓的"记忆",到底是怎么一回事?它和人类记忆是同一种东西,还是仅仅是借用了同一个词?
为了把这件事讲清楚,我们会先从一次完整的对话出发,让你直观看到 AI 在对话过程中到底在做什么;然后我们会用"工作台面"这个比喻,把 AI 的工作方式彻底讲明白;接着我们会拆解 Token 这个 AI 世界的基本单位;最后我们会还原一次典型的"AI 失忆"现场,并给出几个在日常使用中识别 AI "快忘了"的实用信号。
读完之后,你将能够用自己的话向朋友解释清楚"什么是 AI 的上下文",也能在和 AI 协作的过程中,更早地察觉到它"快撑不住"的迹象。
---
1.1 从一次崩溃的对话说起
我们先把场景铺开,因为这次对话本身就是最好的教材。
假设你正在写一份年终总结,打算让 AI 帮你润色一下。你打开了聊天界面,输入了第一句话:
> "你好,我是做市场推广的,今年主要负责公司新产品的线上推广。"
AI 回复得很得体,问了你一些背景信息,比如产品类型、目标用户、推广渠道。你一一作答。它根据这些信息,给你列了一份年终总结的框架。
接着你开始和它来回修改这一稿:
- 第一轮,你说:"开头不要太正式,最好能有一些故事感。"
- AI 修改了开头,加了一个场景化的引子。
- 第二轮,你看完修改后的内容说:"这个故事不错,但和我们产品的关联度有点弱,能不能再具体一些?"
- AI 调整了故事细节,加入了产品相关的元素。
- 第三轮,你说:"数据部分能不能再丰富一点?我这里有一些具体的数字:投放费用 120 万,曝光量 8000 万,转化率 3.2%。"
- AI 把这些数字整合进了正文。
- 第四轮,你说:"结尾能不能更有力一些?我希望读到结尾的人能被激励到。"
- AI 重写了结尾,加入了一句更有冲击力的收束。
- 第五轮,你回过头来说:"能不能把第二段提到的那个'用户调研'案例再展开一下?当时我们做了 200 份问卷,发现 65% 的用户对新功能有强烈兴趣。"
到这里,对话已经进行了十几轮,总字数估计已经接近五六千字。一切看起来都很正常。
然后你说了这句话:
> "对,就是那个感觉。再按照我们最开始定的那个'故事化开头'的思路,把'用户调研'案例放到开头去,作为引子。"
AI 的回复让你愣住了:
> "抱歉,我不太清楚您说的'故事化开头'是什么意思,您希望开头有什么样的风格?另外,'用户调研'案例的具体内容是什么,能再描述一下吗?"
你盯着屏幕,可能会有点哭笑不得:这两件事,不是我们在前面几轮里反复讨论过的吗?
这就是本章要剖析的典型场景。它并不是 AI "故意"忘记,也不是 AI 偷懒,而是 AI 的工作机制本身决定了,它面前能够"摆下"的东西是有限的。当桌子摆满了,最先被挤下去的,往往是最早放上去的那些东西。
这一节先让你把这种"熟悉的崩溃"感受具象化。接下来的几节,我们一层一层地解释它为什么会发生。
---
1.2 人类记忆 vs AI"记忆":两种完全不同的东西
在讨论 AI 的"记忆"之前,我们有必要先看看人类自己的记忆是怎么运作的,因为这两者其实差异巨大,但日常表达里我们经常混为一谈。
1.2.1 人类记忆的基本结构
心理学上通常把人类记忆分成几个层次。最底层是感觉记忆(sensory memory),它保留外界刺激的原始印象,时间极短,大概只有几百毫秒到几秒。比如你眼睛扫过一串数字,虽然没刻意记,但接下来一两秒内你还能在脑海里"看到"它。
然后是短时记忆(short-term memory),也叫工作记忆(working memory)。它保留我们当前正在处理的信息,时间大约在十几秒到一分钟左右,容量也很有限,传统研究认为大概是 7±2 个组块。举个例子:你随便看一下一个陌生手机号,多半几秒钟后就会忘记前几位;但如果你把它分成三段(138-xxxx-xxxx),把它"组块化"了,能记住的时间就会长一些。
再往上是长时记忆(long-term memory)。它的容量几乎无限,理论上可以储存一个人一辈子的所有重要经验。长时记忆又可以细分成外显记忆(你知道的事情,比如"北京是中国的首都")和内隐记忆(你会的事情,比如"怎么骑自行车",你不一定能说出来,但身体会)。
这三层之间的关系大致是:感觉记忆 → 短时记忆 → 长时记忆。其中,短时记忆是"工作台",长时记忆是"仓库"。当你需要把某些东西长期保存时,大脑会通过反复复述、建立关联等方式,把它从短时记忆转移到长时记忆。
1.2.2 AI 没有这种分层结构
现在让我们看看 AI 这一边。
当你打开一个聊天机器人界面,输入一段文字,按下回车的那一刻,发生了什么?
简单地说,你输入的这段文字,连同之前所有的对话内容,会被一起打包,转换成一长串数字,送给一个巨大的数学模型(我们姑且叫它"大语言模型")。这个模型读完这串数字之后,会预测"下一个最合适的词是什么",然后一个字一个字地把回复"生成"出来。
注意几个关键词:
第一,"连同之前所有的对话内容"。AI 在生成回复的时候,并不是像人类一样"回忆"过去说过的话,而是把过去所有的对话文字,原封不动地塞进了它当前的"工作输入"里。
第二,"一长串数字"。AI 不认识中文字符,也不认识英文字母,更不认识你输入的语气和表情。它只认识数字。你的文字会先被拆成一个个小单元(后面我们会详细讲这个单元,叫 Token),然后每个 Token 会被转换成一个向量(你可以理解为"一串坐标"),AI 就是在这些向量之间做运算。
第三,"预测下一个词"。AI 的回复不是"想"出来的,而是基于当前的输入,"算"出来的下一个最可能的字或词,然后再算下一个,再下一个,串起来。
所以,AI 在每一次回复时,都在做同一件事:把过去所有的对话原文 + 你最新的问题,摆在它面前,作为"工作输入",然后基于这个输入生成回复。
1.2.3 关键差异:复述 vs 重读
人类记忆的本质是"复述"。比如你和一个朋友聊了一个小时,事后你能回忆起这段对话,是因为你脑海中保留了这段对话的某种"印象"。这个印象可能是模糊的、压缩的、经过你加工的,但你不需要把原话一个字一个字地重新读一遍,就能"想起"它。
AI 的"记忆"的本质却是"重读"。它没有"印象"这回事,也没有"压缩存储"。它有的,只是"在你发来新一条消息的时候,把前面所有对话的原文再喂给我一次"。换句话说,AI 的"记性"完全依赖你前面那些话依然"摆在桌面上"——只要桌面够大,它就能"看到"前面的话;只要桌面摆不下了,它就真的"看不到"了。
这也是为什么我们要把"AI 的记忆"打个引号。因为它根本不是记忆,而是一种重读机制。它和人类记忆的差异,并不是程度上的差异,而是本质上的差异。一个是有损压缩后的存储,一个是无损原文的重读。
理解了这一点,你就不会被"AI 怎么突然忘了"这种现象所困扰——它不是忘了,而是它面前的那张桌子上,根本就没摆着前面那些东西。
---
1.3 上下文:AI 面前的"工作台面"
既然 AI 是靠"重读"来"记住"对话的,那它每次生成回复时,面前到底摆着什么呢?
答案是:上下文(Context)。
这是一个在 AI 领域出现频率极高的词,但你不需要被它吓到。我们用一个比喻就能讲清楚。
1.3.1 "工作台面"这个比喻
想象一下,你是一个手艺人在工作台前干活。台面的大小是固定的,比如 1 米 × 2 米。你要做的每一件事,都需要先把工具和材料摆在台面上,然后才能动手。如果你今天要做三件事,每件事都需要一些工具和材料,那这些工具和材料就得同时摆在台面上,互相挤一挤。
如果某件事需要的工具特别多,台面不够用了,会发生什么?两种可能:要么你把暂时不用的工具收进抽屉(这叫"短期让位");要么你只能放弃一些工具,硬着头皮做下去(这叫"凑合着来")。
AI 的"上下文窗口(Context Window)"就相当于这个工作台面。它的大小是固定的,比如 8K Token、32K Token、128K Token、200K Token……这个数字我们后面会再具体讲。你现在只需要知道:不管这个数字多大,它都是一个固定的、有限的值。
每当 AI 要回复你的时候,它会把这几样东西摆在桌面上:
1. 系统提示(System Prompt):这是 AI 的"使用说明"和"角色设定",通常包括 AI 的身份、它应该遵循的规则、对话的基本要求等。这部分内容是开发者预先设定好的,每次对话都会摆上桌。 2. 历史对话(Conversation History):包括你自己输入的所有内容(User),以及 AI 之前所有的回复(Assistant)。这部分是随着对话轮次的增加而不断累积的。 3. 你最新一轮的输入(Latest User Message):也就是你刚刚发出去的那条消息。
这三样东西加在一起,就构成了 AI 这一轮回复时能"看到"的全部内容。一旦它们合起来的总大小超过了台面的尺寸,最早放上去的东西就会被挤掉。
1.3.2 上下文窗口是固定的吗
是的。每一个 AI 模型都有一个明确的"上下文窗口大小"。这个数字通常在模型发布的时候就会被公布,比如某模型是 8K Token,另一款是 128K Token。Token 这个单位我们下一节会详细解释,你现在只需要知道它是一个"文字块"的计量单位。
这个窗口大小是固定的,不会因为你开了更高级的会员或者更贵的套餐就变大——至少在同一个模型的版本内是这样。你买的是"模型版本",不是"加大的台面"。
不同模型的窗口大小差别非常大。早期的一些模型只能"看到"几千字的内容,相当于一张很小的桌面;现在主流的大模型已经能做到几十万甚至上百万 Token 的窗口,相当于一张会议桌那么大的台面。但无论如何,"更大"不等于"无限大"。只要是一个有限的数字,就总有被填满的那一刻。
1.3.3 上下文窗口被填满后会怎样
当对话历史太长,系统提示 + 历史对话 + 最新输入的总 Token 数超过了窗口大小,模型不会"报错"说"对不起,我放不下了",它会做一件非常"冷酷"的事情:静默地丢弃最早的那部分内容。
这种丢弃不是按"重要性"丢的,不是按"是不是关键信息"丢的,更不是按"是不是用户的偏好"丢的。它是按时间顺序丢的——最早的,最先被挤下去。
这就解释了为什么在前面那个年终总结的例子里,AI 会"忘记"故事化开头的设定。因为那是你在对话第 1 轮、第 2 轮就告诉它的信息,等对话进行到第 15 轮的时候,那些信息已经被挤出台面了。在 AI 看来,第 15 轮的你,就好像一个第一次和它聊天的用户一样——它对你的项目背景、写作偏好、之前讨论过的所有方向一无所知。
接下来,我们用一个流程图把整个过程展示出来:
```mermaid flowchart TD A[对话开始, 系统提示摆上台面] --> B[第1轮: 用户输入 + AI 回复上桌] B --> C[第2轮: 新增内容上桌, 总Token累加] C --> D[第3轮到第N轮: 内容持续累积] D --> E{累积Token数 是否 超过 窗口上限?} E -->|否| F[所有历史都还在台面上, AI正常回复] E -->|是| G[最早的内容被挤出, 台面只保留最新的部分] G --> H[AI基于残缺的信息生成回复] H --> I[用户感觉AI突然失忆] ```
这个流程图非常关键,它揭示了一个反直觉的事实:AI 并不是"忘了"过去,而是它"面前"根本就没有过去。 它的失忆,是物理意义上的失忆——东西被挤掉了,不见了,而不是被存在某个地方然后"想不起来"。
1.3.4 为什么有时候 AI "失忆"得没那么明显
你可能会问:那我有时候和 AI 聊了很久,它也没表现出"失忆"啊?是不是这种"失忆"并不一定会发生?
确实不一定。这里面有几个原因:
第一,对话本身可能还很短。如果你只是问几个简单问题,对话累积的 Token 数远没有达到窗口上限,那 AI 自然能"看到"所有的历史。
第二,关键的设定可能被放在了最新的轮次。如果某项关键信息你在最近几轮里又强调了一次,那这条信息就在台面上,自然能被 AI 看到。
第三,对话主题相对集中。如果整个对话都围绕同一个主题,AI 即使丢失了一些早期的对话,依然可以根据最新的对话"猜出"你想要什么。
第四,AI 的"脑补"能力很强。当前的大语言模型具备非常强的模式匹配能力,即使没有显式的信息,它也可能根据上下文推断出一些合理的内容。这种"脑补"有时候会让你误以为它"记得",但其实它是在"编"。
反过来,当 AI 的"脑补"也不管用的时候,你就会看到一个非常生硬的"我不知道您在说什么"。这就是典型的上下文窗口被填满后,AI 完全失去了关键线索的结果。
---
1.4 Token:AI 世界的"积木"
到目前为止,我们反复提到了 Token 这个词,但它到底是什么?为什么它在 AI 世界里如此重要?
1.4.1 Token 是什么
简单地说,Token 是 AI 处理文字的最小单位。
你可以把它想象成拼乐高积木。一段文字看起来是一整块,但实际上它是由一个个小小的积木拼起来的。AI 不直接看一整段文字,而是先把文字拆成一个个 Token,然后理解这些 Token 的含义,再决定输出哪些 Token。
中文和英文的"拆法"不太一样。我们来看几个例子:
- 英文 "Hello" → ["Hello"](1 个 Token)
- 英文 "I love you" → ["I", " love", " you"](3 个 Token)
- 中文 "你好" → ["你好"](1 个 Token)
- 中文 "我喜欢这本书" → ["我", "喜欢", "这", "本书"](4 个 Token)
- 中文 "人工智能" → ["人工", "智能"](2 个 Token)
可以看出来,英文中一个单词往往对应 1 个 Token,标点符号和空格也算 Token;中文中通常 1 到 2 个汉字对应 1 个 Token。这种差异是因为不同语言训练时采用的切分算法(通常叫 BPE,Byte Pair Encoding)不同。
1.4.2 为什么 Token 数量重要
由于 AI 的上下文窗口大小是用 Token 来衡量的,所以你需要大致知道:
1. 一段文字有多少 Token。 2. 距离窗口上限还剩多少 Token。
一些常见的换算参考:
- 一个英文字符 ≈ 0.25 个 Token(平均)
- 一个英文单词 ≈ 1.3 个 Token(平均)
- 一个中文字符 ≈ 1 到 2 个 Token(平均)
- 一页 A4 的纯文字 ≈ 500 到 800 个 Token
一个 32K Token 的窗口,大约能装下 2 万到 3 万个汉字。一个 128K Token 的窗口,能装下 8 万到 12 万个汉字。这个量其实不小,相当于一本中等厚度的书。但即便如此,它依然不是无限的。
1.4.3 不同模型的 Token 数量级
为了让你有一个直观的感觉,我们列出一些主流模型的窗口大小(注:以下数据基于公开发布的信息,具体版本可能有所不同):
- GPT-3.5 早期版本:4K Token(约 3000 个汉字)
- GPT-3.5 较新版本:16K Token(约 1.2 万个汉字)
- GPT-4 早期版本:8K / 32K Token
- GPT-4 Turbo:128K Token(约 10 万个汉字)
- Claude 2 / Claude 3:100K / 200K Token
- Gemini 1.5 Pro:1M Token(约 75 万个汉字)
- 国内主流大模型:8K / 32K / 128K / 200K Token 不等
从 4K 到 1M,差距是 250 倍。但即便是 1M Token 的窗口,放下一整本《红楼梦》还是有点紧张(一本《红楼梦》大概 73 万字,对应大约 100 多万 Token)。所以即使是"超大窗口",也是相对的,不是绝对的。
1.4.4 Token 视角下的"对话成本"
理解 Token 还有一个非常现实的意义:它直接影响你的使用成本。
几乎所有的 AI 服务都是按 Token 计费的——输入多少 Token,输出多少 Token,都有明确的价格。这意味着:
- 你的提示词越短,越省钱。
- AI 的回复越短,越省钱。
- 对话历史越长,下一轮的"输入成本"越高,因为你需要把整个历史重新喂给模型。
这也是为什么有些 AI 工具会提供"压缩上下文"的功能——它会自动把前面的对话"总结"成一段更短的文字,腾出空间。但这种压缩是有损的,总结后的信息可能丢失细节。这是另一个话题,我们后面章节会专门讨论。
---
1.5 AI"失忆"现场还原:上下文窗口被填满之后
现在我们把前面学到的所有概念放到一起,做一次完整的"事故还原"。这个案例是虚构的,但它所描述的现象,几乎每一个长期使用 AI 的人都会遇到。
1.5.1 案例背景
小王是一名产品经理,正在准备一份新产品发布会的演讲稿。他打开 AI 助手,开始撰写。整个对话持续了 20 轮,约 1.5 万字(对应大约 2 万到 3 万 Token)。他们使用的 AI 模型窗口大小是 32K Token。
1.5.2 对话关键节点
我们把对话的关键节点列出来(每个节点都简化成一句话,实际对话会更长):
- 第 1 轮:小王介绍产品定位、目标用户、发布会的核心信息。
- 第 2 轮:AI 给出演讲稿整体结构,分为开场、价值主张、产品演示、客户证言、结尾五个部分。
- 第 3 轮:小王提出开场不要太套路化,希望用一个真实客户的故事作为引子。
- 第 4 轮:AI 写了一个关于"某医院引入产品后工作效率提升 3 倍"的故事作为开场。
- 第 5 轮到第 8 轮:双方反复修改这个故事的具体细节,包括医院名称、医生姓名、数据呈现