Token 是什么?为什么说上下文窗口是大模型应用的第一约束?
谁在问:一面热身必问(各类公司通用)
口语化问法
- 先热个身——你跟我讲讲 token 是什么?为什么大家老说上下文窗口不够用?
- 现在模型都上百万上下文了,你为什么还要费劲做检索和压缩?
- 你们那个服务一个月消耗多少 token?这个数你是怎么估出来的?
考察意图
一面的第一道题,考的不是定义,是三件事:
- 你是否把 token 当成计量单位,而不是「字」;
- 你有没有真的为一个线上服务估算过成本;
- 你会不会把「窗口大小」和「有效可用长度」混为一谈。
第三点尤其关键——它直接预示后面 RAG、上下文压缩、成本治理三个方向还能不能聊下去。
参考答案
60 分答案(及格线)
Token 是模型处理文本的最小单位,由分词器把文本切成一串 token 再送进模型。上下文窗口是一次请求里模型能同时看到的 token 上限,输入和输出共享这个预算。
说它是第一约束,是因为它同时卡三件事:一次能塞进去多少信息、一次调用多少钱、多轮对话能撑多久。另外中文通常比同等信息量的英文更费 token。
90 分答案(有生产经验的回答)
在上面基础上补三层:
第一,token 数不是文本的属性,是「文本 × 分词器」的函数。 所以换模型必须重跑 token 基线——截至 2026-08,Claude Sonnet 5 换了新分词器,同样文本大约多产生 30% 的 token。这一下会同时打到账单、截断阈值、窗口占用三处。我们踩过一次:只跑了效果回归、没跑长度分布,结果上线后账单涨三成,长文档触发截断,截掉的内容又被模型「补」了出来,变成幻觉投诉。
第二,约束来自三层,不是一层。
- 显存:KV Cache 随序列长度线性增长,还要乘并发数;
- 计费:多轮对话每轮把历史重发,成本是累加不是常数;
- 有效性:官方口径是把上下文当「注意力预算」——token 越多,从中准确召回信息的能力越低,所有模型都有这个特性,只是衰减快慢不同。这就是 context rot。
第三,所以「百万窗口取代 RAG」是个伪命题。 它替代掉的只是「塞不下」这一个约束,替代不了「塞进去也会变笨」和「塞进去很贵」这两个。我们的做法是把窗口预算显式建模:固定开销(system + 工具定义)/ 检索预算 / 历史预算 / 输出预留,四块分开设上限,谁超了谁先降级。
追问链
从「token 怎么数」挖到「没发版怎么会超窗口」
中文和英文,哪个更费 token?为什么?
期望主流分词器多是 BPE 类、在英文为主的语料上训练,英文常见词往往一个 token,中文被切成更小片段;同等语义下中文 token 数通常更高,但差距取决于分词器,不是固定倍数;生僻字、罕见人名、中英代码混排更吃亏信号说「取决于分词器,得实测」→ 做过的;张口一个固定倍数(「中文永远是英文 2 倍」)又说不出来源 → 背的现在模型都百万上下文了,为什么还要 RAG 和压缩?
期望三条:贵(成本随输入线性涨)、慢(prefill 算力随长度增长,首 token 延迟变差)、笨(有效性衰减即context rot,所有模型的共性,只是衰减快慢不同)信号只答「太贵」→ 半懂;三条都说出、并指出第三条是研究结论不是直觉 → 读过一手材料输入和输出共享窗口吗?
max_tokens和上下文窗口什么关系?期望共享同一个预算。max_tokens是本次输出的硬上限,不是窗口本身;思考型模型的思考 token 计在输出侧,会挤占max_tokens,设小了把答案截断在半路信号知道「思考 token 也吃输出预算」→ 基本可以确定真接过推理模型开了 prompt 缓存,被缓存的那部分还占窗口吗?
期望占。缓存改变的是这部分 token 的计费和延迟,不改变它在上下文窗口里的占用;想省窗口只能靠清理、压缩或少检索一点信号答「缓存了就不占了」→ 把成本优化和容量优化搅成一件事,这一条筛掉相当多只看过教程的人跑了三个月的服务零星报「超出上下文窗口」,用户量没变、prompt 没改、没发版,怎么查?
期望① 按输入 token 数分桶看分布,不看均值 —— 零星报错在均值上看不出来;② 按「谁在增长」排除:同名模型的小版本或分词器变更、多轮历史累积与压缩失效、检索结果变长或 top-k / chunk 配置被人改、附件图片、思考预算或 effort 被调高;③ 兜底先于根因:请求前加 token 预检与分级降级,降 top-k → 触发压缩 → 明确拒绝信号第一句是「先看分布不看均值」、并承认「没发版不等于没变化」→ 排过障;直接跳「换个窗口更大的模型」→ 差
一句「先看 token 分布,不看均值」就把排过障的人挑出来了。前四层考的是概念边界(共享预算、缓存省钱不省窗口),第 5 层考「没发版也会变」的排查顺序。
评分要点
- 把 token 定义为模型的最小处理单位,而非「字」或「词」
- 明确 token 数取决于分词器,换模型要重跑基线
- 说清输入与输出共享同一个窗口预算
- 至少说出两层约束(成本 / 显存 / 有效性)
- 提到长窗口不等于有效窗口(context rot 或等价表述)
- 能给出自己项目的实际数字,或说得出估算方法
- 知道 prompt 缓存省的是钱不是窗口
- 排障时先看分布、先分级降级,再治根因
常见错误
把 token 等同于汉字或单词,全程不提分词器的存在。
只会说「上下文窗口就是模型的记忆」——把工程约束讲成了拟人化比喻。
声称「现在都百万窗口了,RAG 已经没必要」,且说不出成本与衰减这两条。
谈成本只说「按 token 收费」,答不出多轮对话为什么成本是累加的。
全程没有任何数字:既报不出自己业务的平均输入长度,也说不出怎么估。
含糊标志词:「差不多就是」「应该是按字算的吧」「这个一般框架会处理」。