上下文窗口

上下文窗口规定模型一次处理能容纳多少信息;它限制当下可见的内容,并不等于系统的长期记忆容量。

返回概念图谱 →

理解与应用

上下文窗口是模型一次处理时能够使用的序列容量,通常以 token 计量。系统指令、用户问题、对话历史、工具描述与返回内容都会占据输入空间,输出预算如何与窗口相计则取决于具体模型和接口。token 也不是固定字数:中文、英文、代码以及图像等输入各有计数方式。

一位报销助手可能已经聊了几十轮,但本次真正需要的是报销单编号、退回原因、更正发票和当前用户要求。如果把每轮闲聊、所有工具返回值都原样带上,不仅可能装不下,也会增加当前问题与无关内容竞争的机会。长窗口让系统有可能同时看到更多资料,并不保证它会用对藏在中间的关键条款。

预算紧张时,可以删去无关历史、压缩旧对话,或只检索当前所需的文档片段。困难在于删掉什么:摘要如果只留下“可以报销”,却漏掉“仅限 10 月 1 日后出差”,就改变了原结论。保留约束、来源位置与原始材料的可取回入口,比简单保留最后若干字符更有用。把较旧经历保存到外部存储、需要时再取回,属于记忆与检索系统的职责;它不能由一个更大的上下文窗口自动完成。

关系速览
上下文窗口约束 →上下文压缩

模型窗口与响应预算约束压缩后可保留的上下文大小;压缩结果仍须为响应和工具结果预留空间。

动手试一试:在预算内保留条款及其条件

这里用人工指定的单位演示一个输入、输出共享预算的简化设定,不代表真实 tokenizer。按顺序装入只是最小策略;实际系统还需要让正文与改变其含义的条件一同保留,不能只考虑长度。

将代码保存为 example.py,使用 Python 3.10+ 运行 python3 example.py。仅使用标准库,无需密钥,不会调用外部模型。

Python 代码

window, output_reserve, fixed = 100, 25, 30
available = window - output_reserve - fixed
blocks = [("住宿限额条款", 25), ("无关旧对话", 30), ("生效日期脚注", 10)]
chosen = []
for name, cost in blocks:
    if cost <= available:
        chosen.append(name)
        available -= cost
print("选入内容:", chosen)
print("剩余预算:", available)

运行结果

选入内容: ['住宿限额条款', '生效日期脚注']
剩余预算: 10

常见误区

  • “能装进窗口”只说明容量允许,不能证明关键内容会被准确使用。
  • 把旧对话截断或摘要化,可能同时删掉金额、日期和授权范围等限制。
  • 窗口大小、输出上限和长期记忆是不同概念,具体数值需看所用接口。

前置与延伸

建议先读

相关概念

参考与版本

Apollo 原创讲解与教学示例。参考资料用于核对技术定义;核验日不代表资料的发布日期。