Token Lab搜索

← 全部教程
开发者教程 / 03

排查上下文超限:一个实用的 RAG 预算

拆解请求组成、预留生成空间,并优先处理导致上下文增长的最大来源。

从完整预算开始

请求不仅是最后一条用户消息。系统约束、历史对话、检索文档、用户文本,以及消息或工具的额外开销都应计入,并为生成输出预留空间。

下例在 8,192 的上限中分配了 8,096,只剩 96。再加入一份 500 Token 的文档,就会超出 404。这些是教学数值,不代表某个模型的真实上下文规格。

学习指南与本课目录LEARNING CONTRACT

理解 → 实现 → 研究

目标:解释本课机制、复现一个例子、测试一个失败案例。读完不自动代表掌握。

  • 理解层:写明假设、形状/单位和一个反例。
  • 实现层:复算数值例子并检查边界。
  • 研究层:在匹配预算下比较一个替代方法。

找到最大占用

在上下文预算工具中分别输入各段,查看占比。载入超限案例,可以看到超出提示以及占用较大的 RAG 部分。

独立编码适合分析来源,但不能逐字节重建最终请求。分隔符、消息模板、工具 schema 和媒体会影响实际用量。保留明确的开销预算,并与 API 实测 usage 对照。

context_limit = 8192
system        =  400
history       = 1800
retrieval     = 3600
user          =  120
extra         =  128  # estimate
output        = 2048  # reserve

allocated = 400 + 1800 + 3600 + 120 + 128 + 2048
remaining = 8192 - allocated  # 96 tokens
在工具中尝试 →

减小输入,但不要破坏任务

检索过多时,先去重和重排,再保留相关段落与来源。对话过长时,摘要较早轮次并保留关键决定,最近的对话尽量保持原文。

每次修改后重新计数,并运行具有代表性的回答质量测试。不要静默截断系统约束。还应检查模型独立的输出上限:上下文很大,并不意味着输出也可以同样大。

参考资料与实现

MATHEMATICAL REVIEW · 2026-10-26

假设、参考实现与验收

8192 中已分配 8096,剩 96;再加 500 超出 404。还要保留 256 安全余量需删 660;提供商模板开销须另计。

已复核共享代码、英文数学解释及多语言关键数值段落;不代表完成逐字翻译校对。

系统 + 历史 + 检索 + 用户 → 加模板估计及输出预留 → 总分配量与上限比较 → 保留安全余量并裁剪检索
机制图:从上到下跟踪每次变换。

运行前:预测一个边界情况

8192 中已分配 8096,剩 96;再加 500 超出 404。还要保留 256 安全余量需删 660;提供商模板开销须另计。

提示:隔离假设

固定基线输入,只改变一个参数或边界;同时比较数值与声明单位。单例通过仅验证该样例。

最小可运行算例

将算例及所链接模块保存在同一目录。使用 Node.js 22 或更高版本,然后运行 node context-budget-rag.mjs. 无需第三方运行依赖。

const allocated=400+1800+3600+120+128+2048;
console.log(allocated,8192-allocated,allocated+500-8192); // 8096 96 404
console.assert(allocated+500-660+256===8192);

测试与迁移

8192 中已分配 8096,剩 96;再加 500 超出 404。还要保留 256 安全余量需删 660;提供商模板开销须另计。

在下方笔记记录输入、代码版本、期望值和实测值;再构造违反上述假设的反例,解释原结论为何不再成立。

下载完整代码包(.tar.gz) · 完整参考代码与回归检查

预测、检验与证据记录

展开答案前先预测一个结果;练习后记录差异和迁移测试。记录仅存本地,在不同语言版本间共用。

打开记录/导出/清除 →

数学复核范围逐篇记录,不代表完成论文实证复现;可在笔记中记录疑似错误。 复核范围