上下文窗口写着 128K,为什么装不下 128K 字?

3 个讲解板块 · 关联 2 款站内工具 · 内容最后核对 2026-10-08

窗口的单位是 token 不是字,而且输入和输出共用同一个额度。

直接答案

两个原因。第一,窗口的单位是 token,不是字。token 是分词器切出来的片段,一个汉字可能占 0.6 个也可能占 1.5 个,跟模型训练用的语料有关,所以 131 072 个 token 换算成汉字是一个区间,而不是一个确切的数。

第二,也是更常被忽略的一点:输入和输出共用同一个窗口。你贴进去的长文档、模型生成的长回答、系统提示词、以及之前所有的对话历史,全都算在同一个额度里。所以「能装 128K」从来不等于「你能贴 128K 字」。

「上下文窗口 128K」这句话看着很明确,实际用起来总有落差:文档明明没到那个字数,还是提示超长;或者聊着聊着,模型忽然忘了前面说过什么。

落差来自两层换算。第一层是单位:窗口计的是 token,不是字,而 token 和汉字之间没有固定汇率。第二层是口径:窗口是所有内容共享的一个总预算,而不是「你能单独输入的额度」。把这两层分开看,很多现象就都对上了。

1token 是什么,为什么和字对不上

它既不是字也不是词,而是分词器切出的最小片段。

内容大致换算说明
英文单词1 个约等于 1.3 个 token长词和生僻词会被拆成多个片段
英文文本1 个 token 约等于 4 个字符常用于估算纯英文长度
中文汉字1 个字约等于 0.6 到 1.5 个 token取决于分词器与训练语料
标点与空白通常各占若干 token代码和大段符号往往比正文更费额度

所以「128K 大约等于 16 万字」只是一个数量级的说法。真要估算成本或余量,用工具按实际文本数一遍才准。

2同一个窗口,装的不只是你的输入

列出到底有哪些内容在争同一份额度,就能理解为什么可用量比标称值小。

系统提示词与规则
每次请求都会带上,是一份固定的开销。
工具与函数定义
如果开启了工具调用,它们的描述也计入门限。
历史对话
多轮对话的每一轮都在累积,聊得越久占用越多。
本轮输入
你粘贴的文档、上传的文本内容。
模型输出
生成的回答同样占额度,而且是在生成过程中逐步占用。
多模态内容
图片、音频等会被换算成对应的 token 数量,往往比同等信息量的纯文本更贵。

「模型失忆」多半不是故障,而是窗口满了之后较早的内容被截断或压缩。理解了这一点,就知道该整理对话而不是重开一轮。

3怎么估、怎么省

两个动作就够用了:先估准,再按估出来的结果决定怎么切。

  1. 用工具把待处理的文本数一遍 token 数,不要用字数除以某个固定系数去猜。
  2. 把系统提示、工具定义、历史对话的占用也估算进去,得到真实的剩余额度。
  3. 为输出预留额度:希望模型给出较长回答时,输入部分就要留出空间,否则会提前触发截断。
  4. 长文档先做结构化再喂:分块之后只把与当前问题相关的块放进窗口。
  5. 长对话及时总结:把早期内容压缩成一段摘要替换掉原文,比让模型硬扛更稳定。
  6. 记录一次实测数据:同一段文本数出来的 token 数,可以作为后续估值的锚点。

相关疑问

为什么同样一段中文,在不同模型上 token 数不同?

因为分词器不同。词表更大、中文语料更多的分词器,能把更多常用汉字组合合并成单个 token,中文效率就更高;以英文为主的词表,中文往往会被拆得更碎。

窗口越大,回答质量就越好吗?

不一定。窗口大意味着能一次性塞进更多材料,但注意力被摊薄、成本上升也是代价。对多数任务,精准检索出相关片段比把整本书塞进去效果更好。

超长文档必须切成小块吗?

多数情况下是。切块时要考虑每块自身是否语义完整,以及相邻块之间是否需要重叠,这两点直接影响后续检索能不能命中。

按 token 计费和窗口超限是同一个问题吗?

不是。计费关心总共用了多少 token,窗口关心一次请求能装多少。前者决定花多少钱,后者决定这次任务能不能完成。

内容标识:本页内容由人工智能辅助生成,并经人工核对与编辑。详见 人工智能生成内容标识说明。
内容说明:本页针对具体使用问题作答,方法步骤与数值由本站自行整理与复算,事实性内容以对应官方规范与文档为准。内容最后核对日期:2026-10-08。若发现错误,欢迎通过页脚反馈入口告知。