Ultralytics YOLO27: 加入候补名单。
获取 YOLO 许可
返回 Ultralytics 术语表

Context Window

上下文窗口是模型在单次请求中能够关注的最大 token 数量,由提示、历史记录、文档和回复共同占用。

上下文窗口是模型在单次请求中能够纳入考量的最大词元数量。对于大语言模型(LLM),模型读取和生成的所有内容都会占用这部分预算:系统提示、工具定义、对话历史、检索到的文档、用户问题以及模型生成的回复。窗口之外的文本不会传给模型,因此当较早的对话轮次被裁掉后,聊天机器人就会忘记超长对话的开头。上下文窗口从 GPT-3 的 2,048 个词元,扩展到了 2023 年末 GPT-4 Turbo 的 128K 个词元,以及 Google Gemini 1.5 Pro 在 2024 年达到的 100 万个词元;Meta 的 Llama 4 Scout 则宣称支持 1,000 万个词元。

上下文窗口包含什么#

词元化会将文本拆分为子词片段;平均而言,每个英语词元约有四个字符,因此 128K 词元的窗口大致相当于 300 页文本。视觉语言模型(VLM)还会将词元用于图像,通常每张图像就需要数百个图像块词元,因此长视频会比其文字转录更快占满窗口。生成的词元也计入同一上限,服务提供商还会单独限制窗口内的输出长度。因此,运行长对话或AI 智能体的应用需要在每轮对话时重新组装提示,并决定保留哪些内容:

上下文窗口为何有限#

长度增加会带来两项成本。自注意力会比较每个词元与其他所有词元,因此注意力计算量会随着词元数量呈二次方增长。在文本生成期间,KV 缓存会保存所有先前词元的键和值:Llama 3.1 8B 有 32 层,每层有 8 个键值头,每个头的维度为 128;在 16 位精度下,每个词元需要存储 128 KiB,满 131,072 词元窗口时则需 16 GiB,超过其权重占用的 16 GB。

上下文窗口也受训练影响。使用 8K 词元序列训练的模型从未见过这些位置之外的内容,因此要扩展窗口,就需要使用 YaRN 等方法重新缩放旋转位置嵌入(RoPE),并通过较短时间的长文本微调来适应更长上下文。服务长上下文时依赖节省内存的技术:闪存注意力无需存储完整的分数矩阵即可精确计算注意力;分组查询注意力(GQA)可缩小 KV 缓存;滑动窗口注意力将每个词元的注意范围限制在附近位置;环形注意力则将一个序列拆分到多张 GPU 上处理。

标称上下文与有效上下文#

支持百万词元的模型并不一定能同样有效地利用所有词元。2023 年的研究 Lost in the Middle发现,当相关段落位于提示开头或结尾时,模型回答效果最好;位于中间时,效果最差。大海捞针(NIAH)测试会在不同深度和长度处插入事实,以测量模型能否回忆该事实;更难的 RULER 基准测试发现,17 个宣称支持 32K 词元或更多的模型中,只有一半在 32K 词元时表现令人满意。输入变长时性能逐渐下降的现象称为上下文退化;检索增强生成(RAG)和上下文工程会通过只将相关材料放入窗口来缓解这一问题。

  • 感受野:输入图像中会影响卷积神经网络(CNN)一个输出的区域。感受野由卷积核大小和网络深度决定,而上下文窗口则是词元预算。
  • 批量大小:同时处理的独立序列数量。上下文窗口限制每个序列的长度。
  • 记忆:智能体记忆(例如存储在向量数据库中的情景记忆)可以在窗口之外持久保存,并在相关时复制回窗口。

开放词汇检测中的上下文窗口#

视觉模型中的文本编码器也有上下文窗口。Ultralytics YOLOE和 YOLO-World会使用 CLIP 系列文本编码器为每个类别提示编码;这类编码器的上下文窗口为 77 个词元。Ultralytics 文本编码器默认会截断较长的提示。相同的 CLIP 分词器可以显示被截掉的内容:

import clip
from clip.simple_tokenizer import SimpleTokenizer

prompt = (
    "a warehouse worker wearing a yellow high-visibility vest, a white hard hat, blue gloves and clear safety "
    "glasses, standing beside a red forklift that carries wooden pallets stacked with brown cardboard boxes, "
    "under bright ceiling lights in a narrow aisle between tall metal shelves, next to a fire extinguisher "
    "mounted on the wall, a green emergency exit sign, an open loading dock door and a black dog"
)

# CLIP's BPE tokenizer wraps the text in start and end tokens
tokenizer = SimpleTokenizer()
print(f"Prompt length: {len(tokenizer.encode(prompt)) + 2} tokens")

# The text encoder reads a fixed 77-token window, so truncation drops the tail
tokens = clip.tokenize(prompt, truncate=True)[0]
kept = tokenizer.decode(tokens[1:-1].tolist())
print(f"Window: {len(tokens)} tokens ending in '{' '.join(kept.split()[-4:])}'")
print(f"'black dog' kept: {'black dog' in kept}")

该提示有 80 个词元,因此窗口会保留前 75 个文本词元以及起始和结束标记,内容止于“loading dock door and”,并在编码器看到“a black dog”之前将其截掉。

探索解决方案

体育领域的计算机视觉

体育领域的计算机视觉

了解 Ultralytics YOLO 如何通过球员和球追踪、表现分析、教练洞察及运动员康复,推动体育视觉技术的发展。
了解详情
航空影像计算机视觉

航空影像计算机视觉

使用 Ultralytics YOLO 将无人机和航空影像转化为农业、水产养殖、保护工作和地理空间分析的实时洞察。
了解详情
航空航天中的计算机视觉

航空航天中的计算机视觉

使用 Ultralytics YOLO 将计算机视觉应用于航空航天领域,包括飞机检查、跑道 FOD 检测、机场地面作业和复合材料缺陷检测。
了解详情
安防领域的计算机视觉

安防领域的计算机视觉

使用 Ultralytics YOLO 模型守护每个场所。视觉 AI 可用于周界监控、威胁检测、车牌识别和工作场所安全。
了解详情
机器人领域的计算机视觉

机器人领域的计算机视觉

使用 Ultralytics YOLO 模型提升智能机器的能力。机器人领域的视觉 AI 可用于自主导航、感知、目标跟踪和实时控制。
了解详情
物流中的计算机视觉

物流中的计算机视觉

借助 Ultralytics YOLO 模型优化物流流程。视觉 AI 可用于包裹检查、分拣、车辆跟踪和仓库安全实时监控。
了解详情
零售中的计算机视觉

零售中的计算机视觉

借助 Ultralytics YOLO 模型重新构想零售。视觉 AI 可用于库存跟踪、货架监控、排队管理和更深入的客户洞察。
了解详情
医疗领域的计算机视觉

医疗领域的计算机视觉

借助 Ultralytics YOLO 模型构建医疗解决方案。医疗领域的视觉 AI 可加快医学影像处理、优化诊断并监测患者。
了解详情
制造业中的计算机视觉

制造业中的计算机视觉

利用 Ultralytics YOLO 模型优化制造流程。视觉 AI 可用于质量控制、缺陷检测、个人防护装备合规检查和装配线自动化。
了解详情
汽车领域的计算机视觉

汽车领域的计算机视觉

利用 Ultralytics YOLO 模型在汽车领域应用计算机视觉。视觉 AI 可提升道路安全、驾驶辅助和车辆自动化水平,让道路更智能。
了解详情
农业中的计算机视觉

农业中的计算机视觉

借助 Ultralytics YOLO 模型,将视觉 AI 引入智慧农业。为作物监测、牲畜追踪和精准农业提供支持,从而提高产量并实现更智能的生产。
了解详情

让我们携手构建 AI 的未来!

开启你的旅程,迎接机器学习的未来