Token 是什么?为什么说上下文窗口是大模型应用的第一约束?

Q1-01Token与上下文窗口高频Token分词器上下文窗口context rot成本估算

谁在问:一面热身必问(各类公司通用)

口语化问法

  • 先热个身——你跟我讲讲 token 是什么?为什么大家老说上下文窗口不够用?
  • 现在模型都上百万上下文了,你为什么还要费劲做检索和压缩?
  • 你们那个服务一个月消耗多少 token?这个数你是怎么估出来的?

考察意图

一面的第一道题,考的不是定义,是三件事:

  1. 你是否把 token 当成计量单位,而不是「字」;
  2. 你有没有真的为一个线上服务估算过成本
  3. 你会不会把「窗口大小」和「有效可用长度」混为一谈。

第三点尤其关键——它直接预示后面 RAG、上下文压缩、成本治理三个方向还能不能聊下去。

参考答案

图 2 · 60 分与 90 分差在哪:代价、演进、怎么验证

60

60 分答案(及格线)

Token 是模型处理文本的最小单位,由分词器把文本切成一串 token 再送进模型。上下文窗口是一次请求里模型能同时看到的 token 上限,输入和输出共享这个预算。

说它是第一约束,是因为它同时卡三件事:一次能塞进去多少信息、一次调用多少钱、多轮对话能撑多久。另外中文通常比同等信息量的英文更费 token。

90

90 分答案(有生产经验的回答)

在上面基础上补三层:

第一,token 数不是文本的属性,是「文本 × 分词器」的函数。 所以换模型必须重跑 token 基线——截至 2026-08,Claude Sonnet 5 换了新分词器,同样文本大约多产生 30% 的 token。这一下会同时打到账单、截断阈值、窗口占用三处。我们踩过一次:只跑了效果回归、没跑长度分布,结果上线后账单涨三成,长文档触发截断,截掉的内容又被模型「补」了出来,变成幻觉投诉。

第二,约束来自三层,不是一层。

  • 显存:KV Cache 随序列长度线性增长,还要乘并发数;
  • 计费:多轮对话每轮把历史重发,成本是累加不是常数;
  • 有效性:官方口径是把上下文当「注意力预算」——token 越多,从中准确召回信息的能力越低,所有模型都有这个特性,只是衰减快慢不同。这就是 context rot。

第三,所以「百万窗口取代 RAG」是个伪命题。 它替代掉的只是「塞不下」这一个约束,替代不了「塞进去也会变笨」和「塞进去很贵」这两个。我们的做法是把窗口预算显式建模:固定开销(system + 工具定义)/ 检索预算 / 历史预算 / 输出预留,四块分开设上限,谁超了谁先降级。

追问链

图 1 · 五层追问树:面试官会往哪儿挖
从「token 怎么数」挖到「没发版怎么会超窗口」

  1. 中文和英文,哪个更费 token?为什么?

    期望主流分词器多是 BPE 类、在英文为主的语料上训练,英文常见词往往一个 token,中文被切成更小片段;同等语义下中文 token 数通常更高,但差距取决于分词器,不是固定倍数;生僻字、罕见人名、中英代码混排更吃亏
    信号说「取决于分词器,得实测」→ 做过的;张口一个固定倍数(「中文永远是英文 2 倍」)又说不出来源 → 背的
  2. 现在模型都百万上下文了,为什么还要 RAG 和压缩?

    期望三条:(成本随输入线性涨)、(prefill 算力随长度增长,首 token 延迟变差)、(有效性衰减即 context rot,所有模型的共性,只是衰减快慢不同)
    信号只答「太贵」→ 半懂;三条都说出、并指出第三条是研究结论不是直觉 → 读过一手材料
  3. 输入和输出共享窗口吗?max_tokens 和上下文窗口什么关系?

    期望共享同一个预算。max_tokens 是本次输出的硬上限,不是窗口本身;思考型模型的思考 token 计在输出侧,会挤占 max_tokens,设小了把答案截断在半路
    信号知道「思考 token 也吃输出预算」→ 基本可以确定真接过推理模型
  4. 开了 prompt 缓存,被缓存的那部分还占窗口吗?

    期望。缓存改变的是这部分 token 的计费和延迟,不改变它在上下文窗口里的占用;想省窗口只能靠清理、压缩或少检索一点
    信号答「缓存了就不占了」→ 把成本优化和容量优化搅成一件事,这一条筛掉相当多只看过教程的人
  5. 跑了三个月的服务零星报「超出上下文窗口」,用户量没变、prompt 没改、没发版,怎么查?

    期望按输入 token 数分桶看分布,不看均值 —— 零星报错在均值上看不出来;② 按「谁在增长」排除:同名模型的小版本或分词器变更、多轮历史累积与压缩失效、检索结果变长或 top-k / chunk 配置被人改、附件图片、思考预算或 effort 被调高;③ 兜底先于根因:请求前加 token 预检与分级降级,降 top-k → 触发压缩 → 明确拒绝
    信号第一句是「先看分布不看均值」、并承认「没发版不等于没变化」→ 排过障;直接跳「换个窗口更大的模型」→ 差
一句「先看 token 分布,不看均值」就把排过障的人挑出来了。前四层考的是概念边界(共享预算、缓存省钱不省窗口),第 5 层考「没发版也会变」的排查顺序。

评分要点

  1. 把 token 定义为模型的最小处理单位,而非「字」或「词」
  2. 明确 token 数取决于分词器,换模型要重跑基线
  3. 说清输入与输出共享同一个窗口预算
  4. 至少说出两层约束(成本 / 显存 / 有效性)
  5. 提到长窗口不等于有效窗口(context rot 或等价表述)
  6. 能给出自己项目的实际数字,或说得出估算方法
  7. 知道 prompt 缓存省的是钱不是窗口
  8. 排障时先看分布、先分级降级,再治根因

常见错误

把 token 等同于汉字或单词,全程不提分词器的存在。
只会说「上下文窗口就是模型的记忆」——把工程约束讲成了拟人化比喻。
声称「现在都百万窗口了,RAG 已经没必要」,且说不出成本与衰减这两条。
谈成本只说「按 token 收费」,答不出多轮对话为什么成本是累加的。
全程没有任何数字:既报不出自己业务的平均输入长度,也说不出怎么估。
含糊标志词:「差不多就是」「应该是按字算的吧」「这个一般框架会处理」。

关联学习