想象你正在跟一个聊天机器人做功课。你解释过自己在学水循环,说了老师要求用文字描述图表,前后问了三个问题——每个问题都自然地接着上一个。然后你打出第四个问题,机器人的回答像是第一次听说"水循环"这三个字。
如果这种情况发生过,你刚好撞上了 AI 工作原理里最出人意料的一件事:图书馆员根本没有任何记忆。一个字都没有,一张之前的纸条都不记得。
这篇文章要说清楚那个掩盖这件事的把戏——以及这个把戏失效的时刻。
图书馆员唯一诚实的局限
我们在本系列前两篇文章里认识了图书馆员(大语言模型,英文叫 LLM,也就是 AI 聊天背后的核心)。快速回顾一下:图书馆员读遍了所有的书,坐在一堵墙后面,墙上只有一个信箱口(mail slot)。你只能把纸条(也就是 prompt,提示词)塞进去,等着一张回复纸条滑出来。图书馆员能做的事只有一件——续写你纸条上的内容。
这就是全部工作了。没有电话,不看昨天的邮件,对任何之前的纸条完全没有记忆。你的回复纸条一滑出来,图书馆员就彻底忘了你——不是因为他无礼,而是因为他在物理上根本无法在两张纸条之间保留任何东西。对他来说,每一张纸条都是他读到的第一张纸条。
这不是下次更新会修掉的小 bug,而是大语言模型(LLM)的底层设计方式。每一次回复,都是单独从那张纸条的内容里生成的,没有别的来源。
那为什么聊天机器人看起来记得你?
这里有个把戏。一旦你看穿了,就再也看不回去了。
当你在一段对话里打出第四条消息时,应用程序并不是只把那一条消息递给图书馆员。它把你们到目前为止的整段对话——你说的每一句话、机器人的每一条回复——全都钉在你新消息的前面,把这一大叠东西合成一张很长的纸条,一起塞进信箱口。
图书馆员从头读这张长纸条,看到了之前的背景,读到最后你的新问题,然后回复。看起来和记忆一模一样。但那不是记忆——那只是一张很长的纸条。
这段钉在前面的背景——之前所有的对话拼接在你新消息前面——就是工程师说的上下文(context,有时也叫 context window,上下文窗口)。那一叠你不断重新钉上去的历史纸条,就是人们所说的 AI 的记忆(memory)。
聊天应用在背后悄悄完成这个钉纸条的动作,你根本看不见它发生。这就是全部的把戏。
厨房餐桌版解释
想象你在跟楼上的朋友通过地板上的信箱互通纸条。你的朋友头脑超厉害——科学、历史、烹饪、地理,无所不知——但有一个问题:他每次回复完就立刻忘掉整个对话,彻底清零。
你们想讨论一道菜谱,要来回写好几张纸条。于是在你的第二张纸条上,你先把第一张纸条和朋友的第一条回复抄在最上面,再写你的新问题。第三张纸条,你把前两轮都抄一遍。朋友每次都把一切重新读一遍,因为他看到了完整的来龙去脉,回复起来就像从头到尾都在跟踪这段对话。
这就是聊天机器人维持对话的完整机制。你不是在和一个记得你的东西说话——你是在和一个每次都被塞入完整对话记录的东西说话。
问题来了:纸条不可能无限长
这个把戏效果很好——直到对话变得很长。
问题是:图书馆员一次能读的文字有上限。工程师把这个上限叫做上下文窗口(context window)——一张纸条的最大长度。现在的 AI 助手能处理相当多的文字(很多都能读几万个单词,而且还在不断增长),但上限始终存在。
当你的对话超过这个上限,就必须有东西被放弃。应用程序没办法再把整段历史都钉上去,只能省略一部分。通常先省略最早的消息,因为最近的消息对你当前的问题更有用。也就是说,图书馆员根本看不到你四十条消息之前提到的水循环——因为那部分已经被留在信箱口外面了。
这就是为什么一段很长的对话最终会开始"漂移"。AI 没有变糊涂,也没有累了——它只是没收到对话记录的早期部分,因为那张纸条已经超长了。
把历史压缩一下:总结
这里有一个很巧妙的应对办法,你自己也可以用。
当对话历史越来越长时,你(或者应用程序自动)可以请图书馆员先把旧的部分总结一遍,再消失掉。总结比完整记录短得多,可以钉在下一张纸条上,不会把你的新问题挤掉空间。图书馆员留住了要点,但不用保留每一个字。
工程师把这叫做压缩(compression)。这是个好办法,但有代价:总结会损失细节。如果你在十条消息之前说过什么精确具体的事情,总结可能把它变成一个模糊的短语。图书馆员还保有对话的大致走向,但细节粒度消失了。
专业的 AI 工具会尝试自动处理这件事——压缩较早的消息,保留最近的逐字内容——让你感觉不到接缝。大多数时候都能奏效,失效的时候你就会注意到漂移。
图书馆员忘记了,怎么办
现在你知道了把戏,解决办法就显而易见了。如果一段长对话开始跑偏——AI 忘了你的名字、你的科目、你的限制条件——不要慌,直接在下一条消息的最前面重新说一遍就好。
比如:"提醒一下:我在写水循环,八年级水平,不需要图表描述。"这句话直接写在纸条里,图书馆员重新看到了,哪怕之前的上下文都被裁掉了。你是手动把最重要的部分重新钉上去了。
如果你想要一个干净的新开始,关掉对话,开一个新窗口就好。白板本来就是空的,你只是移走了被截断的历史留下的混乱。
两个词,带走就够了
上下文(context):你在纸条里附上的背景信息,让图书馆员能给出有用的回复。在对话里,上下文就是钉在前面的历史消息。但上下文也可以包含其他东西——应用程序额外加进去的说明、你上传的文件里的内容、搜索结果。总之,在你的问题之前出现在纸条上的所有东西,都是上下文。
记忆(memory):在 AI 对话里,记忆就是每次被重新附上的历史记录。这不是人类意义上的记忆——没有存储,没有回想,没有经历。这是一次复制粘贴,在每次发送前,悄悄完成,每一次都是。
弄清楚这件事,会改变你使用 AI 工具的方式。你想让机器人知道什么,就把它写进纸条里。机器人看起来忘了什么,那它几乎一定确实忘了——因为纸条太长,那部分被留下了。
接下来去哪里
靠重新钉历史记录来伪造记忆是个聪明的变通方法,但它有局限。一旦你需要 AI 跨越多段对话记住某些东西——或者主动去找到相关信息,而不是等你把信息塞进纸条——单靠一张更长的纸条就不够了。
这时候,故事里出现了一个全新的角色。下一篇文章我们会认识跑腿的(agent,智能体):一个专门做图书馆员干不了的腿脚工作的助手,帮你把对的信息送进纸条,让每一张纸条都精准有效。
下一篇在这里:什么是 AI 智能体(Agent)?
回到AI 大白话系列。从头开始读:AI 是一台猜词机器,或者直接去 aitutors.me 主页。