一、什么是 Token?为什么不是字数或单词?

当我们与大模型(如GPT、文心一言)对话时,输入的文本和输出的文本并不是以我们熟悉的“字”或“词”为单位进行处理的,而是被切分成更小的单元——Token。Token 是模型理解和生成文本的最小语义单元。它可以是一个完整的单词(如 hello),也可以是一个单词的一部分(如 un 和 happy 两个token组成 unhappy),甚至是一个标点符号或空格。

模型使用 Token 而非简单的字数,主要出于两个原因:处理效率和语言通用性。使用一种标准化的、基于子词(Subword)的分词方法(如 Byte Pair Encoding, BPE),可以高效地处理海量语料,平衡词表大小与未登录词(Out-of-Vocabulary)的问题。更重要的是,它能以近乎相同的方式处理中文、英文、代码等不同“语言”,为模型提供了统一的输入接口。

二、Token 的“价格标签”:理解计费原理

几乎所有大模型API的定价都直接与消耗的Token数量挂钩,通常分为输入(Prompt)Token 和 输出(Completion)Token 两部分计费,且输出Token的价格通常是输入的数倍。这是因为生成文本需要模型进行更复杂的、逐Token的推理计算,计算资源消耗更大。

计费的核心公式很简单:总费用 = (输入Token数 × 输入单价) + (输出Token数 × 输出单价)。单价通常以“每千个Token”为单位(如 $0.002 / 1K tokens)。因此,理解并估算你的请求会消耗多少Token,是控制API使用成本的关键。你可以把Token想象成一种“算力货币”。

三、如何知道一个文本有多少个Token?

不同的模型提供商(如OpenAI、百度、阿里)都有其对应的分词器,同一个句子在不同模型下可能会被分成不同数量的Token。不过,我们可以用代码来直观感受。以OpenAI的cl100k_base编码(GPT-3.5/4系列使用)为例:

import tiktoken

# 初始化针对“gpt-3.5-turbo”的分词器
encoder = tiktoken.get_encoding("cl100k_base")

# 中文、英文、标点混合的句子
text = "你好!这是GPT-4,一个厉害的AI。Hello!"

# 对文本进行编码,得到Token的整数ID列表
token_ids = encoder.encode(text)
print(f"Token IDs: {token_ids}")
print(f"Token数量: {len(token_ids)}")

# 还原看看每个Token对应什么
tokens = [encoder.decode([token_id]) for token_id in token_ids]
print(f"Tokens: {tokens}")

输出可能类似于:

Token IDs: [57668, 104904, 48548, 53901, 6510, 48004, 1231, 60210, 29340, 10752, 59385, 13]
Token数量: 12
Tokens: ['你好', '!', '这是', 'GPT', '-', '4', ',', '一个厉害的AI', '。', 'Hello', '!']

从这个例子可以看到:

四、影响 Token 数量与成本的关键因素

在实际使用中,以下因素会显著影响你消耗的Token数量和成本:

  1. 提示词(Prompt)的长度与结构:这是最主要的因素。冗长、重复、包含大量无关背景说明的提示词会直接推高输入Token成本。精炼、结构化(如使用Markdown列表、XML标签)的提示词更经济有效。
  2. 上下文长度:在多轮对话中,每次请求通常需要把历史对话记录一起发送,以保证模型有“记忆”。历史记录会累积成巨大的输入Token开销,这是对话式应用的主要成本项。
  3. 期望的输出长度与格式:如果你要求模型“写一篇5000字的文章”,输出Token数必然很高。通过指令限制输出长度或格式(如“用一个表格列出要点”、“用三句话总结”),可以直接控制输出成本。
提示:在设计应用时,务必考虑“记忆管理”策略。定期总结对话历史、只发送最近的几轮关键信息,是控制长对话成本的有效方法。

五、优化成本的实践策略

了解了原理后,我们可以采取一些具体措施来优化使用成本:

六、总结

Token是大模型交互的基石单位,也是成本核算的核心指标。 理解Token的生成原理,能帮助我们写出更高效、更经济的提示词;熟悉计费规则,能让我们在开发应用时做出明智的模型选择和架构设计。从今天起,养成“Token意识”,将成本思维融入AI应用开发,是成为一名高效AI工程师的重要一步。

记住,在你按下“发送”按钮之前,可以大致估算一下输入文本的Token数(许多平台提供在线计算工具),并预估一个合理的输出长度。掌控Token,就是掌控成本与效率的平衡。