生成式 AI 三十讲第 04 讲 / 共 30 讲它为什么会写字

Token:机器眼里的文字不是字

模型先按 token 处理文字,因此字符计数未必稳定;上下文容量和许多 API 账单也按 token 计算。

问聊天模型“strawberry 里有几个 r”,有些模型曾经会答错;换一种问法,让它逐个标出字母,又可能答对。不是因为它连小学拼写都没学会,而是因为模型接收文字之前,程序先把字符串切成了另一种单位。你在屏幕上看见字,模型入口处看见的是一串编号。

先给答案

模型读写文字的基本单位是 Token,不是严格的“一个字”或“一个单词”。也就是说,token 可以是一个字符、一个词或更小的片段。切法由具体模型的词表决定;上下文容量和生成速度受 token 数影响,许多模型服务的 API 账单也按 token 计算,具体规则要看供应商文档。

一段文字怎样变成编号

一段输入会先被切成若干片段,每个片段在词表中对应一个整数编号。片段可能是一个汉字、几个汉字、一个英文单词、半个单词、标点,甚至某些字节组合。

把文字切成 token 的过程叫分词。也就是说,模型还没开始预测,分词器先把“请修改合同日期”转换成类似 [编号A, 编号B, 编号C……] 的序列。这里的编号只是说明结构,真实数字会因模型而异。

为什么不直接规定一个汉字就是一个 token、一个英文单词也是一个 token?因为语言里有生僻字、拼写变化、网址、代码和从未见过的新词。若把所有完整单词都收进词表,词表会很大,仍处理不了新造词;若永远按单个字符切,序列又会变长。常见分词器会在词表大小和序列长度之间折中:高频片段可能合在一起,少见内容拆得更细。

例如英文里的常见词可能是一个 token,较长或少见的词可能拆成词根与后缀。中文没有天然空格,常见词可能合并,也可能按单字切开。一个姓名、一串产品型号或一个罕见地名如果被拆成许多 token,模型处理它所占的容量就会比肉眼字数显示得多。

分词完成后,每个编号会被映射成一组可计算的数字,模型再处理这些数字之间的关系。生成时过程反过来:模型选出下一个 token 编号,分词器把它还原成可显示的文字。由于 token 可以只是半个词,流式输出有时会等凑齐可显示字符后才呈现。

为什么数几个字母也可能出错

如果 strawberry 在某个分词器中被切成较大的片段,模型做预测时并没有天然收到一个由 10 个独立字母格组成的数组。要求它数 r,相当于让擅长处理 token 关系的系统间接推断片段内部字符。某些模型会答错,某些会通过逐字重写、内部推理或工具得到正确结果,不能把这个单词当作永久有效的考试题。

大小写、前导空格和标点也可能改变切法。“apple”“ Apple”和“APPLE”在具体词表中未必对应同一组 token;代码里的缩进、括号和长变量名都会占位置。两份肉眼长度相近的 1000 字文本,token 数可能不同,尤其当一份是常用中文,另一份混有网址、乱码、表格和代码。

这并不表示模型完全看不见字符。训练中有大量拼写、逐字列举和代码样本,较新的系统还可能在回答时调用计算工具,因此字符任务可以做对。准确说法是:字符不是所有语言模型都天然操作的基本单位,字符级任务可能需要额外步骤。若业务必须验证 18 位编号、校验码或固定格式,直接用字符串函数逐位检查,比期待模型稳定心算更合适。

Token 为什么会影响容量、速度和钱

模型一次可处理的 token 数量有上限,这叫上下文窗口。也就是说,你的问题、附带资料、对话历史和模型准备生成的回答,要一起占用有限容量。假设某个系统允许的总量是 8000 token,输入已经用了 7000,留给回答和系统说明的位置就会变少;具体计算规则要以所用服务的当前文档为准。

许多 API 服务会把输入 token 和输出 token 分开计量。API 是应用程序调用模型服务的接口。你上传一份 30 页 PDF,并不只是“传了一个文件”;文件解析后的文字可能形成大量输入 token。让模型生成 10 份几乎相同的长报告,输出 token 会重复累计。价格和计量细节经常调整,做预算时应拿实际样本调用并读取返回的用量字段,不要用“一个汉字约等于一个 token”直接拍板。

Token 还影响响应时间。自回归模型逐个生成输出 token,要求 2000 token 的回答通常比要求 100 token 的摘要等待更久。输入处理可以较多地并行,但超长材料依然会增加计算量。于是,一个清楚的 300 字问题不只方便阅读,也可能比粘贴整份无关聊天记录更省容量。

不同模型使用的分词器不一定相同。同一句“订单号 XQ-2026-0827”在甲模型里可能切成一组片段,在乙模型里可能更碎。迁移模型时,不能假设原来的 token 数、截断位置和费用估算完全不变。官方提供 token 计数器或 tokenizer 工具时,应以目标模型对应工具为准。

在系统设计里,token 不是内容质量指标。把提示词从 800 token 压到 400,并不自动让答案更好;删掉关键定义和两条验收规则,省下容量却可能增加返工。该优化的是无关重复、过长模板和重复提交的历史,而不是机械追求最短。

自己试一下

在同一聊天框依次测试三项:一是“直接回答 strawberry 有几个 r”;二是“把 strawberry 写成 s-t-r… 的形式,再数 r”;三是“写一段程序逐字符统计 strawberry 中 r 的数量,并给出运行结果”。记录三次答案和过程是否不同。

如果三次都答对,也不要强行寻找错误;观察重点是后两种方法是否把任务改成显式字符操作或确定计算。本文编辑于 2026-08-27,并用当前会话模型检查了三种提示词;当前模型均能答对,程序法的依据最容易复核。你试的时候结果可能不同,重点是看它的行为模式。

常见误解

误解一:中文永远一个字等于一个 token。 这只能作很粗的口头估算。词表、常用程度、标点和混合字符都会改变切分,正式预算必须用目标模型的计数方法。

误解二:数对字母就证明模型按字符思考。 模型可能从训练样本记得答案,也可能通过逐字展开或工具计算。一次答对只能说明这次任务完成,不能反推出内部单位已经变成字母。

三句话总结

  1. 模型先把文字切成 token 并转成编号,token 不严格等于字、词或字母。
  2. 字符计数可能需要显式拆分或程序工具,不能只靠语言接续保证正确。
  3. 上下文容量、生成时长和 API 用量都受 token 数影响,估算应针对具体模型。

如果你要做决定

要求供应商拿你的真实合同、表格和代码样本报告 token 用量,而不是只给汉字数换算公式。涉及编号、金额格式和校验码时,确认系统是否使用确定程序复核。