第 10 课,共 28 课 · 语言模型与聊天助手
什么是上下文窗口?
上下文窗口是语言模型一次能够处理的最大文本量,以 Token 计。它装着你的指令、此前的对话、你附上的文件,以及模型自己的回复。窗口之外的内容,模型完全看不到,这也是超长对话会“忘记”前面细节的原因。
把它想象成模型的书桌
想象一张只能摆下固定页数的书桌:桌上的任何内容模型都能读到,不在桌上的就看不到。桌子摆满后,必须先拿走一些,才能放上新的。上下文窗口的道理一样,只不过这里的“页”是 Token。
关键在于,模型对你们的对话没有任何其他记忆。你每发送一条消息,应用都会把整段对话连同新消息重新摆回桌上,模型再从头到尾读一遍。
上下文窗口里装着什么
一次请求中的所有内容,共用同一份额度:
- 系统提示词:设定助手角色和规则的隐藏指令。
- 对话记录:你之前的消息和模型之前的回复。
- 附加材料:粘贴的文本、上传的文件、搜索结果和工具返回的内容。
- 回复本身:模型写出的 Token 同样计入上限。
窗口装满后会怎样
当对话或文档装不下时,应用只能做出取舍:丢弃最早的消息、用简短摘要代替它们、拒绝请求,或者请你开启新对话。这就是长对话会“忘记”你一开始给的指令的原因。
上下文窗口已随时间显著扩大,使得在一次请求中处理整份报告或整个代码库成为可能。但窗口大并不等于注意力完美:2023 年的研究《Lost in the Middle》(Liu 等人)发现,模型可能会遗漏长输入中间位置的信息。
上下文窗口不是什么
它不是长期记忆:对话一结束,其中的内容就从模型的视野里消失了。有些应用提供“记忆”功能,把笔记保存下来,在之后的对话中再悄悄放进窗口,但这是应用在起作用,而不是模型学会了什么。它也不是训练:把文档粘贴进去,并不会让模型永久学到任何东西。
窗口也不是越大越好。在 API 计价方式下,窗口里的每个 Token 在每次请求时都按输入计费,塞进更多上下文就要花更多钱,回复也可能更慢。只检索相关段落的检索增强生成(RAG),往往比把所有内容都发过去更省钱。
选工具时为什么要看它
如果你经常处理长合同、研究论文、会议转录稿或大型代码库,就要查看产品支持多大的上下文,以及超出时如何处理。对于日常的简短任务,几乎任何现代助手的窗口都够用。Mindber 的 LLM 成本计算器能展示输入量如何影响成本,Arena 排行榜则可以帮你比较各个模型。
示例
算一算上下文窗口的“预算”
演示示例上下文窗口:8,000 个 Token(为便于演示,故意设得很小) 系统提示词 500 此前的对话 5,000 粘贴的文档 2,000 ───────────────────────── 已占用 7,500 留给回复 500 → 回答可能被截断,或者应用会丢弃最早的消息来腾出空间
真实的上下文窗口通常大得多,但算法一样:指令、对话记录、附件和回复,都从同一份额度里扣除。
要点
- 上下文窗口是模型一次能处理的 Token 数量。
- 指令、对话记录、文件和回复共用同一个窗口。
- 窗口之外的内容,模型完全看不到。
- 窗口越大,能处理的文档越长,但每次请求的成本也越高。
- 即使窗口很大,模型仍可能遗漏长输入中间的细节。
在 Mindber 上试试
相关术语
相关主题
常见问题
上下文窗口越大,模型就越聪明吗?
不会。更大的窗口让模型一次能看到更多文本,但并不能提升它的推理能力。Liu 等人 2023 年的研究《Lost in the Middle》等发现,模型可能会忽略长输入中间的信息。清晰、聚焦的上下文,往往比一味堆砌更多内容效果更好。
AI 聊天机器人为什么会忘记我前面说过的话?
通常是因为对话长度超过了上下文窗口,应用丢弃或压缩了最早的消息。开启新对话并附上关键信息的简短摘要,或者重复重要的指令,都能帮助模型把它们留在视野之内。
上下文窗口就是模型的记忆吗?
不完全是。上下文窗口是临时的,只装着当前这次请求。有些应用提供“记忆”功能,会保存关于你的笔记,并在之后的对话中把它们放进窗口,但底层模型本身并不会记住过去的对话。
来源
- Lost in the Middle: How Language Models Use Long Contexts. Liu et al., arXiv, 2023年7月
- Language Models are Few-Shot Learners. Brown et al., arXiv, 2020年5月
最后更新