一个有用的思维模型

可以把输出令牌同时看作答案的组成部分,以及生成答案时所经历的步骤。

文本模型并不是先在后台写出完整回复,再将其拆分为令牌。它是一次生成一个令牌,逐步构建回复。每生成一个令牌,增长后的序列就会成为选择下一个令牌时所使用信息的一部分。

这解释了为什么长答案比短答案需要更长的生成时间。每增加一个输出令牌,就需要多执行一次生成步骤。

输出令牌如何生成

模型处理完输入后,会为所有可能接在后面的令牌分别分配一个分数。生成设置决定如何从这些可能性中选择一个。选中的令牌会追加到序列中,然后模型重复这一过程。

process the input
        |
        v
score possible next tokens
        |
        v
choose one output token ----+
        |                   |
        v                   |
append it to the sequence --+
        |
        v
stop when a stopping condition is met

该循环可能因以下原因结束:

  • 模型自然结束;
  • 模型生成了配置的停止序列;
  • 模型达到输出令牌上限;
  • 模型切换到工具调用等操作;或
  • 服务应用了其他特定于模型或策略的停止条件。

确切的令牌数量取决于模型的分词器。较短的单词可能是一个令牌,而较长或不常见的单词可能由多个令牌组成。空格、标点、代码和非英语文本也可能以不同方式切分。因此,字符数和单词数可以估算输出长度,但无法精确确定输出令牌数。

什么算作输出令牌

对于普通文本响应,可见回复由生成的输出令牌构成。生成的 JSON 和工具调用参数也属于模型的输出,即使应用程序将它们呈现为界面操作,而不是显示原始文本。

提供商的用量分类增加了另一层含义。“输出令牌”既可能指可见的生成序列,也可能指计量的总量。这些总量并没有统一标准:

  • 一些 API 将生成的令牌称为完成令牌
  • 一些提供商会将隐藏的推理计入输出总量,并提供单独的明细。
  • 一些提供商会将可见的候选令牌和思考令牌作为不同字段分别报告。
  • 特殊输出类型可能有自己的详细规则或计费规则。

对于某个请求,最可靠的来源是该提供商和端点返回的用量数据。不要仅仅将可见响应复制到分词器中,就推断计费的输出量。当前 OpenAI、Anthropic 和 Google 的文档说明了其中的原因:它们使用的标签和明细各不相同。OpenAI, Anthropic, and Google documentation illustrates why: their labels and breakdowns differ.

一个实际示例

假设某个 API 请求的最大输出令牌数为 100。

模型生成了完整答案,并在 24 个令牌后停止。用量数据报告:

{
  "input_tokens": 18,
  "output_tokens": 24,
  "total_tokens": 42
}

输出令牌数为 24。100 个令牌的设置只是上限。它并没有强制模型生成 100 个令牌,也不意味着一定会按 100 个令牌计费。

现在假设模型持续生成,直到达到 100 个令牌的上限。该请求仍可能返回技术上成功的 API 响应,但答案可能在句子或结构中间结束。生产应用应检查响应的停止原因,而不是假定返回的文本是完整的。

还有一个需要注意的地方。推理模型可能会在可见答案之前生成内部推理。根据提供商的不同,用量可能会将这些隐藏令牌计入output_tokens,也可能在单独的思考字段中报告。因此,可见答案的令牌数可能与计量的输出令牌数不同。

为什么输出令牌很重要

成本

按令牌计价的服务通常会分别计量输入和输出,且两者的费率可能不同。因此,每个请求的成本取决于实际输出用量,而不仅仅是请求的上限。即使计费采用实际生成量,提供商特定的配额系统也可能根据上限暂时预留容量。

响应时间

输出令牌是按顺序生成的。输出越多,通常意味着生成步骤越多,等待完整响应的时间也越长。流式传输可以更快显示部分输出,但不会消除生成剩余令牌所需的工作。

完整性

输出上限有助于控制长度,但过低的上限可能截断散文、代码、JSON 或工具参数。完整性很重要时,请检查停止原因。

可用上下文

输入和输出都会占用模型上下文窗口中的空间。如果请求的大部分可用空间都被输入占用,留给生成的空间就会减少,但具体情况还取决于模型和端点的限制及计算规则。

常见误解

“输出令牌就是单词”

并不是。令牌可以是完整单词、单词的一部分、标点、空格或其他单位。同一个句子在不同分词器下可能对应不同的令牌数。

“最大输出设置就是预期输出量”

它只是上限。模型可能在达到上限前停止。提供商也可能应用更低的模型限制,或使用包含内部推理在内的共享预算。

“只要 API 返回了文本,答案就是完整的”

不一定。达到输出上限时,API 可能返回带有长度相关停止原因的部分文本。这对代码和结构化数据尤其重要,因为少一个闭合字符就可能使结果无法使用。

“可见响应等于计费输出”

通常如此,但并非始终如此。隐藏的推理、多个生成候选项或端点特定的计算方式,都可能使计量用量大于你看到的文本。对于该服务,应将返回的用量字段视为权威来源。

“输出长度由提示词固定决定”

提示词会影响长度,但生成仍然是条件性的。模型行为、采样设置、停止序列、工具使用和安全行为都可能改变输出结束的位置。

输出令牌在模型请求中的位置

请求从输入令牌开始。随后模型生成输出令牌。推理模型还可能使用内部推理令牌,而其报告方式和计费处理因提供商而异。

在“输入令牌 vs. 输出令牌 vs. 推理令牌”中并列比较时,最容易看清这种区别。如果你要衡量服务行为,输出生成也与每秒令牌数推理延迟直接相关。

实用规则很简单:设置合理的输出上限,读取实际用量,并在将响应视为完整之前检查停止原因。