AI学习笔记
首页 > 大模型笔记 > Token与上下文窗口:从token数量看懂模型的「记忆」边界
Token与上下文窗口:从token数量看懂模型的「记忆」边界

Token与上下文窗口:从token数量看懂模型的「记忆」边界

大模型笔记 · 2026-10-19 · AI学习笔记 整理
导读:学会用token数量衡量内容长度,理解上下文窗口的含义与限制,并掌握在有限窗口内高效使用大模型的方法。

为什么这件事值得你花10分钟

刚开始用大模型时,我最困惑的一个现象是:聊得好好的,突然模型就「忘了」最开头说的话;写长文档写到一半,后面的内容质量明显下滑;还有的时候直接报错提示长度超限。

当时我以为是模型不稳定,后来才明白,这一切都跟一个东西有关——token数量和它背后的上下文窗口。

搞懂这两个概念,你就能提前预判很多坑,而不是等模型「翻车」了才一头雾水。这篇文章就把它讲透。

先搞清楚:token到底在数什么

我们上一篇已经讲过token是模型处理文字的最小单位,这里快速回忆一个关键点:模型的一切长度限制,都是按token算的,不是按字数算的。

所以同一个意思,换种说法可能占用的token完全不同。这直接带来三个影响:

  • 你输入的内容(提示词、文档、代码)要算token
  • 模型输出的内容也要算token,而且输出和输入共用同一个空间
  • 中英文混排、代码、空格多的文本,token消耗速度不一样

一句话总结:token是模型世界里的「空间单位」,而上下文窗口就是这套房间的总面积。

上下文窗口:模型的「短期记忆」

上下文窗口(Context Window)指模型单次对话中能同时「看到」的最大token总量。你可以把它想象成一张固定大小的桌子:

概念含义类比
上下文窗口单次能处理的最大token总量桌子的总面积
输入token你发给模型的内容你摆在桌上的资料
输出token模型生成的内容模型在桌上写下的回复
剩余空间窗口减去输入和输出桌上还能放东西的地方

三个必须知道的推论

  1. 模型记不住窗口之外的内容。 超出窗口的部分,模型是真的看不见,不是「记性不好」。
  2. 窗口不是「无限记忆」,而是「滚动视野」。 很多模型会保留最近的对话,较早的内容可能被压缩或丢弃,这解释了为什么长对话后期模型会「忘事」。
  3. 不同模型的窗口大小差异很大,具体数值以各家官方文档为准。选模型时,窗口大小是一个和能力同等重要的指标。

动手估算:你的内容占多少token

在把长文档丢给模型之前,先估算一下token占用,是避免超限的最好习惯。

经验速算法(不需要工具)

内容类型粗略估算
英文约4个字符≈1个token
中文约1个汉字≈1到1.5个token
代码约3到4个字符≈1个token
空白与标点也会占用token

比如一篇8000字的中文稿件,按保守估计大概在8000到12000 token之间,再算上你的提示词和模型的回复空间,很可能已经吃掉相当一部分窗口了。

精确计数:用官方分词器数一数

想得到准确数字,可以用模型官方提供的分词工具。以OpenAI的tiktoken为例,安装后这样用:

import tiktoken

enc = tiktoken.get_encoding("cl100k_base")

text = "你好,这是我的大模型学习笔记。"
ids = enc.encode(text)

print("token数量:", len(ids))
print("前3个token:", ids[:3])
print("还原文本:", enc.decode(ids))

其他模型通常也提供类似的计数入口:

  • 官方API后台或Playground会显示当前请求的token用量
  • 部分模型的网页端会在长对话时提示占用比例
  • 社区里有各种在线token计数器,使用前建议对照官方工具验证一次

窗口「装不下」会发生什么

不同情况下的表现不一样,对症处理才有效:

现象原因应对
API直接报错,提示长度超限输入+输出超过了窗口删减内容或分段处理
回复中途戛然而止输出token把剩余空间用完了要求「继续」或减少输出要求
模型忘记开头的要求早期内容被挤出有效视野重述关键约束,或开新对话
长文后半段质量下降上下文过载,注意力被稀释分段提问,逐块处理

这里有个容易忽略的细节:输入和输出共用窗口。你把窗口塞得越满,留给模型输出的空间就越少。所以我一般会刻意留出余量,不把空间用到顶。

实战技巧:在有限窗口里塞下更多

第一步:先分类,再瘦身

把要处理的内容分成三类:

  1. 必须逐字保留的——比如合同条款、原始数据、代码逻辑
  2. 可以压缩的——比如背景介绍、次要说明,改成要点式表述
  3. 可以直接删掉的——客套话、重复内容、与任务无关的段落

删完之后你会发现,需要的token可能只有原来的三分之一。

第二步:长任务拆成分段流水线

处理长文档时,与其一次性全塞进去,不如分段处理:

  1. 把文档按主题或章节切成若干段
  2. 对每段用同一个提示模板提问或加工
  3. 汇总各段结果,再让模型做一次整合

这样每一步都在窗口的安全范围内,输出质量也更稳定。

第三步:让模型帮你做「前置整理」

如果你实在懒得手动瘦身,可以先让模型用一句话总结上一段结论,用这个精简结论作为后续对话的上下文,替代大段原文。这招在多轮改稿、长文档问答里特别好用。

一个可复制的日常检查流程

每次处理长内容前,我会快速过一遍这几个问题:

  1. 我的内容大概多少token?(用速算法估一下)
  2. 这个模型的窗口是多少?(查官方文档)
  3. 留给输出的空间够不够?(至少留出你期望的回复长度)
  4. 有没有可以删掉的冗余段落?
  5. 任务太长的话,要不要分段?

这五问花不了1分钟,但能避开绝大多数「模型失忆」和「内容被截断」的坑。

小结

把这一篇的核心浓缩成三句话:

  • token是模型计量内容的空间单位,上下文窗口是这个空间的上限
  • 输入和输出共用窗口,所以永远不要把空间用到顶
  • 估算、瘦身、分段,是在有限窗口内稳定输出的三个基本功

理解了token和窗口的关系,你对大模型的所有「奇怪表现」基本都能找到解释。下一篇我们继续聊大模型的其他实用知识,欢迎回来。

常见问题 FAQ

Q:上下文窗口是不是越大越好?
A:窗口大确实能装更多内容,但不是唯一标准。窗口大不等于注意力一定更集中,超长输入有时反而让模型抓不住重点。选模型时要结合任务类型:短对话任务不必追求超大窗口,长文档处理才更需要。具体能力以实际测试和官方说明为准。
Q:我的中文内容为什么感觉token消耗特别快?
A:中文在多数分词器中,一个汉字往往对应1个以上token,而英文约4个字符才合成1个token,所以同样字数下中文的token消耗通常更高。想节省空间,可以在不影响语义的前提下精简表达、去掉冗余修饰词。
Q:对话中途模型忘了前面的要求怎么办?
A:这通常是早期内容被挤出了有效上下文。最快的补救方法是在最新一条消息里重述关键约束(比如格式、字数、语气),并要求模型严格遵守。如果是超长任务,建议开新对话,把精简后的核心要求重新写一遍,比在旧对话里反复纠正更高效。

相关文章