标称窗口不等于可用长度
标称上下文是接口能接受的最大 token 数,有效上下文是信息真的还能被用上的长度。两者差距来自位置效应与干扰:目标信息放在开头或中间时召回率往往低于放在末尾,同长度下干扰文档越多、跨段推理要求越高,表现越差。所以验证方法很直接——固定问题,只变长度与位置,测召回与正确率随长度的变化曲线。
基本信息
| 验证对象 | 模型本身、网关截断策略、RAG 拼接模板、Agent 记忆组件 |
|---|---|
| 控制变量 | 总长度、目标信息位置、干扰密度、问题位置 |
| 观测指标 | 定位准确率、完整回答率、无据添加率、延迟与单位成本 |
| 关键做法 | 同长度至少两个位置对比,避免把位置效应误判为长度效应 |
| 结论形式 | 给出「可信区间」而不是一个数字上限 |
| 时效性 | 模型更新、分词器变化、拼接模板改版后需重测 |
典型使用场景
- 选型:在多个候选间比较同样长度下的定位成功率与成本
- 长文档审核与摘要:确定单次送入的安全长度与分段策略
- RAG 拼接预算:判断召回多少片段后收益开始下降
- 网关与框架:为截断、滑窗、重排策略提供依据
- 成本折算:用实测可用长度换算出每千次请求的实际 token 用量
- SLA 评估:把长输入的延迟上升量化为可承诺的指标区间
变量与观察重点
| 变量 | 设置方式 | 观察重点 |
|---|---|---|
| 总长度 | 从短到长取 4~6 个档位 | 正确率开始明显下滑的拐点 |
| 目标位置 | 开头、中段、结尾至少各一次 | 中段是否显著低于两头 |
| 干扰密度 | 同长度下放置无关段落 | 干扰增加时的错误类型变化 |
| 问题位置 | 放在上下文前与后各一次 | 关注是否出现末位偏好 |
| 问题形式 | 事实定位与跨段归纳各一类 | 跨段任务通常更早失效 |
| 输出要求 | 短答与结构化抽取各一类 | 长输出的退化往往更早出现 |
最小实验矩阵
最小实验矩阵
# 只做必要组合,先定位拐点再加密
lengths: [2k, 8k, 32k, 64k] # 以实际 token 计,不用字数
positions: [head, middle, tail] # 目标信息的所在位置
distractors: [0, 5, 20] # 同长度不同干扰段落数
question_styles: [locate, aggregate]
metrics:
locate_acc: 目标定位准确率
complete_acc: 结论完整率
unsupported_rate: 无据添加率 # 长上下文最容易出的错误
p95_latency_ms: 端到端延迟
record: 分词器版本与提示词版本必须一起记录常见的经验规律是「两头强、中间弱」,但它随模型与任务变化很大,不要当成普遍定律。位置效应的意义在于提醒你:把关键指令同时放在开头与结尾,比只放一次更稳。
有效长度还受输出影响:要求长输出、结构化输出或引用原文时,可用长度通常明显低于纯定位问答。因此验证必须用真实任务的输出形态,不能用「找出一句话」的实验替代。
不要把标称窗口写进容量规划。按实测可用长度留出余量,并对超长输入设计分段、重排或检索方案,否则线上会以静默丢信息的方式失败,问题很难复现。