PromptQuorumPromptQuorum
主页/提示词工程/上下文窗口解释:为什么AI会忘记(以及如何处理)
Fundamentals

上下文窗口解释:为什么AI会忘记(以及如何处理)

·11分钟阅读·Hans Kuepper 作者 · PromptQuorum创始人,多模型AI调度工具 · PromptQuorum

LLM没有长期记忆——它们只能"看到"最近令牌的滑动窗口。了解AI为什么会忘记上下文,如何结构化提示以保持在限制内,以及如何在云和本地模型之间管理上下文窗口。

上下文窗口解释:为什么AI会忘记

LLM没有长期记忆——它们只能"看到"最近令牌的滑动窗口,此窗口外的任何内容都会被遗忘或压缩。 本文解释了这对你的提示意味着什么,以及如何在这些限制内(和外)工作。

关键要点

  • 上下文窗口 = 模型一次可以处理的最大令牌数;超过后,较旧的内容会被截断或总结
  • 令牌≈4个字符(平均);4k上下文窗口≈3,000个普通文本单词
  • 模型不会"记住"以前的聊天——每次交互在其上下文窗口内重新开始
  • 上下文过载增加幻觉,因为当原始细节超出视野时,模型会用似是而非的猜测来填补空白
  • 提示结构比运气更重要: 将关键指导放在前面,避免重复,在继续之前总结长交换
  • 对于本地LLM,更大的上下文窗口需要更多VRAM——7B参数模型上的128k上下文模型可能需要32GB+的内存

什么是上下文窗口?

上下文窗口是LLM在生成其下一个输出时可以考虑的最大文本量(以令牌衡量)。

将其视为模型在任何给定时刻的"可见文本"。当你向GPT-4o发送一条有128k令牌上下文窗口的消息时,该模型可以"看到"对话的最后128,000个令牌——大约96,000个单词。在此之前的任何内容对模型不可见,不会影响其回复。

令牌与单词:令牌不是单词。平均而言,一个令牌≈4个字符或约0.75个单词。4,000令牌的上下文窗口≈3,000个普通英文文本单词。对于密集代码或日语等语言,比率是不同的——日文文本由于字符编码,每个单词需要大约2个令牌。

**上下文窗口大小在模型中差异很大:

所有模型的原则都是相同的:窗口外的任何内容都是不可见的。

AI为什么会"忘记"

当对话中的总令牌数(系统提示+聊天记录+用户输入+工具+预期输出)超过上下文窗口时,较旧的部分会被截断、总结或完全删除。

这不像人类遗忘那样的记忆丧失。模型不是"思考然后忘记"。它根本看不到截断的文本——它不再存在于模型的输入空间中。

**达到上下文限制时的常见症状:

  • AI忽视或矛盾了你30条消息前给出的指导
  • 在长创意故事中,模型会忘记你之前建立的角色名称、细节或约束
  • 在跨越多个轮次的研究聊天中,事实会混淆,或模型会重新发明信息
  • AI突然改变语气或违反你的原始约束,没有解释

实际发生的情况

大多数聊天界面使用以下策略之一:

  1. 1删除最旧的消息 ——最近的N条消息适合窗口;较旧的消息被完全丢弃
  2. 2总结较早的对话 ——系统将早期消息压缩为简短摘要("之前,你讨论过X、Y、Z……")以保留上下文
  3. 3固定系统/开发人员提示 ——系统消息保持固定,而用户消息进行轮换

所有这些都保留了"要点",但丢失了具体细节。当模型不再看到原始指导时,它无法遵循。

上下文窗口和幻觉

上下文过载会增加幻觉,因为当原始信息不再可见时,模型会用似是而非的猜测来填补空白。

以下是模式:你要求AI回到你50条消息前提到的东西。但该消息已从上下文窗口轮换出去。模型无法访问实际事实,因此它根据从当前上下文推断的内容生成听起来似是而非的答案。结果:捏造。

这就是为什么高上下文、长对话聊天通常会产生比集中的短交换更多的幻觉。模型没有失去推理能力——它正在处理不完整的信息。

相互作用是直接的: 减少上下文→缺乏锚定→增加幻觉风险。

这种效应与更高的温度和top-p设置相复合,这已经增加了随机性。请参阅Temperature and Top-P: Control AI Creativity以了解参数调整如何与幻觉相互作用。

提示设计如何帮助你保持在窗口内

战略性地构建提示可以让你在固定的上下文预算内完成更多工作。

将关键指导放在前面。 在系统提示或第一条用户消息中放置最重要的约束、规则和定义。这些不太可能像20个轮次后埋没的指导那样超出上下文。

避免重复。 如果你已经解释过一次,不要再粘贴一遍。相反,参考它:"正如我们在上面的摘要中讨论的……"这可以节省令牌。

明确总结。 要求模型总结迄今为止的关键决定、约束或事实。然后从该摘要构建下一个响应,而不是依赖分散的早期上下文。

保持转数集中。 单个多主题独白会低效地使用上下文。将其分解为单独的、范围狭窄的交换。

处理长文档

将整本书或数百页的PDF粘贴到单个上下文窗口中是低效的,即使对于Claude Opus的1M令牌窗口,因为模型无法同时有效地关注多个不同的部分。

一本1,000页的书≈250,000令牌。从技术上讲,Claude Opus可以摄取它。实际上,当被要求跨大部分不同的部分回答问题时,模型的推理会降低——就像要求一个人在一个坐位读完整部小说,然后回忆第50、200和400页的特定细节一样。回忆变得模糊。

**处理长文档的更好方法:

  1. 1顺序处理部分。 一次提取和分析一个章节或部分。提出关注的问题:第3部分的主要结论是什么?"然后进行下一部分。
  2. 2分层总结。 从第1-10页中提取要点,然后从第11-20页,将这些摘要合并为章节级别的摘要。然后将章节合并为文档级别的摘要。这将文档简化为其基本事实,同时保留关系。
  3. 3结构化提取。 在提出更高层次的问题*之前*,将文档转换为表格、JSON或项目符号列表。这压缩信息:不是粘贴50页的产品规格,而是将规格提取到结构化表格中,然后询问关于表格的问题。
  4. 4使用RAG(检索增强生成)。 对于真正大型的文档集(100+页),基于检索的系统效果更好。请参阅RAG Explained: How to Ground AI Answers in Real Data了解如何检索相关部分,而不是一次性加载所有内容。

PromptQuorum如何帮助你管理上下文

根据我构建PromptQuorum的经验,我发现在上下文限制附近工作很困难,因为每个模型都有不同的限制、截断行为、定价,以及(对于本地LLM)VRAM要求。PromptQuorum帮助你使这变得透明和有意。

本地LLM的上下文窗口调整

在LM Studio或Ollama中运行模型时,可以配置上下文窗口大小。默认情况下,工具通常将其设置为模型的最大值(例如,7B模型为32k)。但这很少是你需要的。

PromptQuorum与LM Studio集成,允许你按任务调整上下文窗口:为轻量级快速问答选择4k;为深度文档分析选择32k;为长对话选择64k。这使权衡明确,而不是隐藏在配置文件中。

自动上下文溢出检查

PromptQuorum在*你发送之前*检查:给定系统提示+当前对话历史+你的新输入+预期输出长度,这是否适合为每个模型配置的上下文窗口?

如果溢出可能,PromptQuorum会警告你或提示你在发送之前修剪/总结对话。不再有意外截断。不再猜测AI为什么"忘记了"。

上下文窗口 ↔ VRAM权衡

对于本地模型,更大的上下文窗口需要指数级更多的VRAM。具有4k上下文窗口的7B参数模型需要约14GB VRAM。相同模型的128k上下文窗口需要32GB+。进一步推进,GPU会耗尽内存、崩溃或回退到CPU推理(慢10–100倍)。

PromptQuorum向你显示这种关系:"这个上下文窗口大小将在你的硬件上使用约28GB VRAM。你有16GB可用。"然后你可以为你的任务和硬件恰当地调整上下文窗口,而不是在推理中途发现崩溃。

多模型意识

当你将一个提示发送到GPT-4o(128k窗口)、Claude(200k窗口)和本地7B模型(你选择的32k窗口)时,PromptQuorum会自动将你的提示保持在所有三个边界内。一个提示,多个模型,无需手动重写。

上下文管理的实用配方

配方1:关于一个项目的长聊天

目标: 维持关于单个项目的多轮对话,不失去早期决定。

  1. 1在系统提示中,嵌入项目的关键约束(范围、受众、语气、技术限制)一次。不要重复。
  2. 2每10-15次交换后,要求模型总结当前状态:"迄今为止我们做出的5个最重要的决定是什么?"
  3. 3使用该摘要作为你的下一个轮次的上下文,而不是依赖分散的早期消息。
  4. 4在PromptQuorum中,设置32k-64k的上下文窗口并启用溢出警告,以便你知道何时总结。

配方2:分析长报告

目标: 从50-100页文档中提取见解。

  1. 1将文档分成3-5个部分(章节、部分)。
  2. 2对于每个部分,编写一个集中的提示:"将本部分的主要发现总结为5个项目。"
  3. 3从每个部分收集这5个摘要。
  4. 4在最后的轮次,问:"给定这些部分摘要,总体结论是什么?"
  5. 5你在上下文限制内保持良好,避免了"迷失在书中"的问题。

配方3:在上下文窗口边缘提示

目标: 不溢出地使用几乎完整的上下文窗口。

  1. 1计算你的预算:上下文窗口大小−系统提示令牌−预期输出令牌=可用于你的输入+历史的令牌。
  2. 2示例:128k窗口,200令牌系统提示,1k输出缓冲=126.8k可用令牌。
  3. 3发送之前,在PromptQuorum中检查:"此输入需要多少令牌?"
  4. 4如果接近限制,修剪最旧的轮次或在继续前总结它。
  5. 5这使你在意图上靠近限制运行,而不是随意击中它。

配方4:VRAM有限的本地LLM

目标: 有效运行本地模型,不崩溃。

  1. 1为你的模型VRAM开始一个保守的上下文窗口(8k-16k)。
  2. 2在PromptQuorum的设置中,在该窗口大小处注意VRAM要求。
  3. 3运行你的任务。如果你有溢出,总结对话并从摘要重新开始。
  4. 4如果你永远不会接近极限,缓慢增加上下文窗口并重新测试。
  5. 5为你的硬件和任务找到你的模型"合适尺寸的"上下文窗口。

上下文窗口的常见错误

  • "模型记住我所有以前的聊天。"它没有。每个新对话始于零历史,来自过去的聊天。即使在一个聊天中,一旦你的交换超过上下文窗口,它就消失了。
  • "我会在每个轮次粘贴相同的长上下文。"这浪费令牌并无帮助——模型仍然无法有效地推理超过300页。相反,总结并参考摘要。
  • "我会在一个长对话中混淆五个不同的项目。"每个项目竞争令牌。当上下文填满时,细节会被截断。使用每个项目的单独对话。
  • "AI擅长推理——必须是温度或top-p。"也许。但首先检查上下文窗口。如果模型不再看到原始约束,这不是参数问题;这是信息缺失。
  • "我会在我的本地LLM上最大化上下文窗口。"然后你耗尽VRAM,进程崩溃,推理回退到慢CPU模式。设置上下文以匹配你的硬件。
  • "应用警告我溢出,但我还是发送了。"相信警告。溢出导致无声截断、隐藏幻觉和浪费的令牌。首先总结。

常见问题

模型记住我以前的聊天吗?

不。每个新对话会话从零历史开始。模型只看到当前上下文窗口内的令牌。如果要参考以前的聊天,必须将相关部分复制到当前对话中。

为什么AI忽视了我20条消息前给出的指导?

该指导可能已从上下文窗口滑出。模型不再看到它,因此无法遵循它。解决方案:在系统提示中重复关键指导,或要求模型在对话中重新封闭和重新嵌入指导。

更大的上下文窗口总是更好吗?

不是。更大的窗口允许包含更多内容,但也增加成本(要处理的令牌更多)以及对于本地模型,VRAM使用。选择适合你任务的上下文窗口:4k用于简单问答,32k用于长对话,128k+用于文档分析。更大不是"更好"——*适当*是更好。

我如何知道何时达到上下文限制?

模型的响应改变语气,与早期指导矛盾,或丢失你之前设置的详细信息的跟踪。在发送前使用PromptQuorum的上下文溢出检查——如果你接近限制,它会警告你。

上下文窗口大小如何影响本地模型的VRAM?

更大的上下文窗口大约按比例使用更多VRAM:将上下文窗口加倍大约加倍VRAM使用。4k上下文的7B模型≈14GB VRAM;32k上下文≈28GB VRAM。检查PromptQuorum的VRAM计算器以了解硬件的上限。

PromptQuorum之类的工具可以防止上下文溢出吗?

可以。PromptQuorum检查你的提示的令牌数、你配置的上下文窗口和模型的实际限制,然后在溢出可能时在发送前警告你。然后你可以在继续之前修剪或总结。

不同的模型对长上下文的处理方式不同吗?

是的。Claude 3.5 Sonnet在200k令牌上保持焦点良好。GPT-4o在128k是扎实的。较小的模型(例如LLaMA 2 7B)有时在8k-16k之外失去推理一致性,即使他们的上下文窗口在技术上更大。最安全的方法:测试你的特定模型和任务。

相关阅读

来源

使用PromptQuorum将这些技术同时应用于25+个AI模型。

免费试用PromptQuorum →

← 返回提示词工程

上下文窗口解释:为什么AI会忘记(以及如何处理) | PromptQuorum