上下文窗口
上下文窗口规定模型一次处理能容纳多少信息;它限制当下可见的内容,并不等于系统的长期记忆容量。
理解与应用
上下文窗口是模型一次处理时能够使用的序列容量,通常以 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 原创讲解与教学示例。参考资料用于核对技术定义;核验日不代表资料的发布日期。
- Lost in the Middle: How Language Models Use Long Contexts ↗
核对作者论文中信息位置影响的实验;不把所测模型规律当作所有未来模型的定律。 · 核验:2026-10-10
- Anthropic:Effective context engineering for AI agents ↗
核对上下文选择、按需加载和长期任务管理的工程讨论;Context Builder 不是文中确立的统一协议。 · 核验:2026-10-10