首页/AI/RAG 与向量库速查/上下文组装与 Token 预算

上下文组装与 Token 预算

把重排后的片段按 token 预算拼进提示词:总预算 = 上下文窗口 − 提示词模板 − 输出预留;片段超长要截断或压缩,同时保留引用信息。

RAG 与向量库速查AI更新于 2026-10-13

上下文预算是什么

上下文组装是把重排后的片段按 token 预算拼进提示词的过程。总预算等于模型上下文窗口减去提示词模板、对话历史与输出预留。片段超长时要截断或压缩,同时保留引用信息。这一步做不好,要么关键条款被切掉,要么把成本堆高到无法接受。

基本信息

预算公式模型窗口 − 模板 − 历史 − 输出预留 = 可用片段预算
计数方式用实际分词器计数,不按字数估算
片段排序按重排分数,兼顾首尾位置优势
超预算处理截断、压缩或直接丢弃低分片段

预算项

预算项示例(128K 窗口模型)
模型上下文窗口128K tokens
系统与指令提示词约 500 tokens
对话历史约 1000 tokens
检索片段如 3000-6000 tokens
输出预留如 1000-2000 tokens

按预算组装

按预算组装
budget = 6000
total = 0
parts = []
for hit in hits:                        # 已按重排分数排序
    t = count_tokens(hit.text)          # 用实际分词器计数
    if total + t > budget:
        break
    parts.append((hit.text, hit.meta))
    total += t
context = "\n\n".join(f"[{i+1}] {t}" for i, (t, m) in enumerate(parts))

组装策略

  • 给每条片段编号并保留来源字段,生成端才能标注引用
  • 按分数从高到低依次填入,预算用尽即停止,避免拼接时再做二次筛选
  • 同一文档的相邻片段可合并后再计数,减少重复内容占用的预算
  • 长条款截断时优先保留首段与尾段,中间的举例性描述可以省略
  • 把最终拼好的上下文字符数与 token 数一起记入日志,便于事后复盘

片段放置与顺序

策略做法代价
分数降序最相关的放最前中后段内容利用率可能下降
首尾优先强相关放两端、弱相关居中需要按模型实测验证增益
按文档聚合同文档片段相邻放置上下文更连贯,可能牺牲绝对排序
不同模型的 token 计数不同(分词器各异);预算要按实际使用的模型计算,不要按汉字或字符数粗略估算。
静默截断是最危险的失败模式:上下文被砍掉一半但流程正常返回,答案看起来合理却遗漏关键条款,必须把截断事件记入日志并告警。

易错点

  • 片段只按分数拼接不考虑顺序,高相关内容被埋在中间,模型利用率下降
  • 不做去重直接拼接,同一内容的多份改写挤占预算
  • 按字符数估算 token,中文场景误差明显,实际输入超出窗口被截断
  • 截断行为没有日志与告警,答案缺条款时无法判断是检索没召回还是被砍掉

数据来源与参考

  • OpenAI 官方文档(Token 与上下文窗口)
  • tiktoken 项目 README(github.com/openai/tiktoken)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌