在 RAG 系统中,大语言模型并不是直接面对整个知识库,而是通过提示词一次“看到”一小部分内容。模型能一次性处理的最大文本量,由上下文窗口(context window)决定,通常以 Token 为计量单位。一次完整的调用,包含系统指令、检索到的文档片段、用户问题、历史对话,以及模型的输出,都必须容纳在这个窗口内。因此,如何高效地分配有限的 Token,直接决定了回答的质量与成本。
1. 上下文窗口不是“越大越好用”
即便是支持 128K 甚至更长窗口的模型,实际使用中也面临真实约束:
- 注意力稀释:窗口过长时,模型对中间部分信息的关注度会下降,可能遗漏关键事实。
- 成本与延迟:输入 Token 越多,单次调用的费用和生成首字延迟越高。
- 生成空间被压缩:窗口被输入占满,留给回答的生成空间就很少,可能导致回答被中途截断。
因此,窗口管理的关键不是把所有检索结果都“塞进去”,而是为最重要的信息腾出最宝贵的空间。
2. Token 预算划分:先做减法
一个实用的做法是预先为不同组件分配 Token 额度,像做月度预算一样:
- 系统提示(固定开销):角色设定、输出格式要求、引用规则等。通常预留 200~500 Token。
- 对话历史(如有多轮):保留最近几轮问答,让模型理解上下文。可设置上限,如总计不超过 1000 Token。
- 用户问题:本身占用的 Token 数一般很少。
- 检索文档片段:这是核心变量,也是我们需要精细控制的部分。
- 预留生成空间:确保模型能输出足够长的答案,一般至少预留 1000 Token。
假设模型窗口为 8000 Token,可粗略划分如下:系统提示 300,历史 800,问题 50,预留生成 1500,则留给检索片段的空间约为 5000 Token。这就是检索后拼接时需要遵守的“硬限制”。
3. 如何把检索结果“塞”进预算
检索通常会返回 top‑k 个片段(如 5 或 10 个),每个片段可能长达 500~1000 Token,全部拼接很容易超限。常用管理策略:
- 按相关度截断:按检索分数从高到低拼接,达到 Token 上限后直接丢弃更远的片段。这利用了一个经验假设——排名靠后的内容边际价值有限。
- 片段本身截断:对于过长的单个片段,可以只保留与问题最相关的段落,或取开头和结尾各一段(因为关键信息常位于首尾)。
- 内容去重:如果多个片段内容高度重复,仅保留一个,既省 Token 又避免模型被冗余信息干扰。
- 使用更紧凑的格式:在拼接时省略无关的元数据(如完整文件路径),保留必要的摘要和引用标识。
真实操作中,常会在检索后增加一个“精排”步骤:用一个更轻量、更便宜的模型或规则,快速选出最终送入生成的片段及其顺序,达到更好的 Token 利用率。
4. 总 Token 不够时:安全回退与降级
无论预算多精细,仍可能遇到问题过于复杂、需要大量背景信息的情况。此时必须避免将残缺的内容塞给模型,导致回答质量断崖式下降:
- 提示信息不足,请用户具体描述:模型可以回应“您的问题需要更多上下文,能否提供更详细的背景或缩小范围?”
- 优先级更迭:当对话历史占用过多时,自动压缩历史(使用摘要模型或只保留核心要点),释放空间给新鲜证据。
- 分步处理:对于需要综合多份长文档的问题,可以先用一次模型调用进行信息提取或总结,再将摘要作为上下文,避免一次性传递全文。
5. 实际调试中的量化建议
- 先测量,再分配:在正式上线前,记录典型问题的检索片段平均长度、最长长度,据此设定截断阈值。
- 监控 Token 利用率:在日志中观察每次请求实际使用的输入 Token 数,如果经常接近窗口上限,说明需要收紧分配或重构切块策略。
- 生成空间不要压得太紧:很多模型的生成质量在输出长度接近窗口限制时明显下滑,预留 20%~30% 的窗口给生成部分比较稳妥。
- 长上下文模型的策略:即使是 128K 窗口,也建议将检索片段控制在 20K~30K 以内,把注意力集中在高质量内容上,同时控制成本。
6. 一个简化的例子
你所在团队的系统上下文窗口为 4096 Token。按以下原则分配:
- 系统提示:300 Token
- 最近 3 轮历史:总计 800 Token
- 预留生成:1200 Token
- 剩余给检索片段:约 1800 Token
检索返回 5 个片段,长度分别为 400、600、500、900、300 Token。按相关度排序后,依次累加:400+600=1000,再加 500=1500,仍有余量;加 900 会超出预算,则只保留前三个片段,共 1500 Token。最终提示总输入约 2600 Token,加上 1200 生成的输出,总消耗 3800 Token,在安全范围内。结果既保证了关键信息不遗漏,又给模型留足了表达空间。
上下文窗口分配与 Token 管理,不是在限制 RAG 的能力,而是通过精细的“材料取舍”让模型在有限资源下发挥最优效果。掌握好这门平衡术,就能在信息完整度、回答质量和成本之间,找到符合业务要求的最优配置。