What is 上下文窗口?

    语言模型在单次输入-输出序列中能够处理的最大token数量,决定了模型一次能「看到」多少文本。

    Definition

    上下文窗口(也称为上下文长度或序列长度)定义了语言模型在一次交互中能够处理的token总数上限——包括输入提示和生成的输出。拥有4,096 token上下文窗口的模型大约可以处理3,000个英文单词的输入和输出;拥有128,000 token窗口的模型可以处理相当于一本短篇小说的内容。

    上下文窗口是在预训练期间固化到模型中的架构约束。它由位置编码方案和注意力矩阵的大小决定。在标准自注意力机制中,内存和计算随序列长度呈二次增长(O(n²)),这就是为什么上下文窗口在历史上一直受到限制。旋转位置嵌入(RoPE)、滑动窗口注意力和FlashAttention等现代技术使上下文窗口从早期模型的2K-4K token增长到最近架构的128K-1M token,同时保持资源使用可控。

    对于微调来说,上下文窗口有实际的影响。每个训练样本必须能放入模型的上下文窗口——如果样本超出限制,它将被截断,可能丢失关键信息。训练上下文长度有时可以短于模型的最大值以节省内存(例如,在支持8,192的模型上用2,048 token训练),但代价是微调模型在超出训练长度的序列上可能表现不太可靠。

    Why It Matters

    上下文窗口决定了模型能实际执行哪些任务。摘要一份50页的文档需要足够大的上下文窗口来容纳整个文档加上摘要。多轮对话助手需要上下文来维护完整的对话历史。对于涉及长文档的企业应用——法律合同、医疗记录、代码库——上下文窗口长度通常是模型选择的决定性因素。此外,上下文窗口限制影响微调经济性:更长的训练样本每批次消耗更多GPU内存,增加训练成本。

    How It Works

    当文本提交给模型时,分词器将其转换为token ID序列。如果该序列超过上下文窗口,必须截断否则请求将失败。在处理过程中,注意力机制计算窗口内所有token之间的关系——每个token可以关注前面的每个token(在因果模型中)。位置嵌入编码每个token的位置,以便模型理解词序。在推理时,KV缓存存储之前生成token的注意力状态以避免冗余计算,但这个缓存随上下文长度线性增长,对于长序列可能占据GPU内存的主要部分。

    Example Use Case

    一家法律科技公司构建合同审查助手时发现,他们的平均合同长度为12,000 token。他们选择了拥有32K上下文窗口的基础模型,以轻松容纳完整合同加上系统提示和生成的分析。在微调期间,他们将最大序列长度设置为16,384 token(数据集中最长样本加上安全余量),以平衡训练内存使用和覆盖范围。在生产中,模型一次性处理整个合同,不会因截断而丢失关键条款。

    Key Takeaways

    • 上下文窗口限制了模型一次能处理的总token数(输入+输出)。
    • 现代模型范围从4K到1M token,8K-128K最为常见。
    • 注意力内存随序列长度呈二次增长,使长上下文成本高昂。
    • 训练样本必须能放入上下文窗口,否则将被截断。
    • 上下文窗口长度是文档密集型应用中模型选择的关键因素。

    How Ertas Helps

    Ertas Studio在其模型目录中显示每个基础模型的上下文窗口,帮助用户为其用例选择合适的模型。平台的数据验证步骤会标记超出配置上下文长度的训练样本,防止静默截断。用户可以在Studio的超参数面板中配置训练序列长度,Ertas提供关于平衡上下文长度与GPU内存以优化训练效率的指导。

    Related Resources

    Ship AI that runs on your users' devices.

    Early bird pricing starts at $14.50/mo — locked in for life. Plans for builders and agencies.