返回博客

AI 入门指南

输入与输出 token:AI API 向你收取什么费用

为什么 AI API 分别统计输入和输出 token,在哪里从 usage 字段读取它们,以及如何计算一次请求的成本。

作者:CheapTokens Team发布于 更新于 5 分钟阅读

深色网格背景上的封面,标题为“输入与输出 token”,并有一行“API 请求中你为何付费”
本页内容
  1. 什么算作输入,什么算作输出
  2. 在哪里读取这些数字:usage 块
  3. 为什么两侧价格不同
  4. 公式
  5. 一个使用真实模型的完整示例
  6. 在代码中使用
  7. 如何减少 token 消耗
  8. 需要记住的要点

如果你刚刚完成了对语言模型的第一次 API 调用,你很可能在响应中看到了一个 usage 块,并想知道它到底统计了什么。简短的回答是:每个请求都有两个计量器。一个统计你发送的 token(输入),另一个统计模型写回的 token(输出)。每个计量器都有自己的价格,而一次请求的成本是两者之和。

本指南说明在哪里找到这些数字、如何把它们换算成美元,以及你可以改变什么来减少花费。如果“token”这个词对你来说仍然模糊,请先阅读什么是 AI 中的 token?。

什么算作输入,什么算作输出#

输入 token 是模型为了回答你而必须读取的一切:

  • 你最新的消息;
  • 系统提示词(例如“用英语简短回答”之类的指令);
  • 对话中较早的消息,如果你再次发送它们;
  • 你粘贴到请求中的文档、代码或搜索结果。

输出 token 是模型在回复中生成的一切。在 OpenAI 兼容格式中,这就是 choices[0].message.content 中的文本。一些处于思考模式的模型还会在最终答案之前生成推理 token;请查看模型的定价页面,了解它们是否按输出计费。

对初学者来说重要的一点是:模型不会在请求之间记住你的聊天。聊天应用每次都会重新发送整个历史记录,因此长对话的输入会随着每一轮而增长,即使你的新消息只有一行。

在哪里读取这些数字:usage 块#

来自 OpenAI 兼容 API 的每个非流式响应都以一个 usage 对象结尾。这是一个展示其结构的教学示例:

json
{
  "choices": [
    { "message": { "role": "assistant", "content": "..." }, "finish_reason": "stop" }
  ],
  "usage": {
    "prompt_tokens": 2000,
    "completion_tokens": 500,
    "total_tokens": 2500
  }
}
字段 含义 计费方式
prompt_tokens 你发送的所有内容中的 token 输入
completion_tokens 模型生成的 token 输出
total_tokens prompt_tokens + completion_tokens 不是单独的价格:它只是总和

初学者常犯的一个错误是把 total_tokens 乘以一个价格。由于输入和输出价格不同,你需要分别使用这两个数字。

一些提供商会添加额外字段。例如,DeepSeek 自己的 API 还会把 prompt_tokens 拆分为 prompt_cache_hit_tokens 和 prompt_cache_miss_tokens,并且在思考模式下会报告 reasoning_tokens(来源:DeepSeek API 文档,查阅于 2026 年 10 月 21 日)。表中的三个字段是你在任何 OpenAI 兼容响应中都可以依赖的字段。

当你流式传输答案时,usage 在开始时是未知的。在 DeepSeek 自己的 API 中,它会在 data: [DONE] 之前的最后一个内容块中到达(DeepSeek API 文档,查阅于 2026 年 10 月 21 日);其他 API 可能以不同方式发送它,或仅在请求时发送,因此请检查你的客户端收到什么。流式传输本身在 Python 中的流式响应中介绍。

为什么两侧价格不同#

读取你的提示词和写出答案是不同的工作。模型会一次性处理整个提示词,但它必须一次一个 token 地生成答案,而且每个新 token 都依赖于之前的 token。这就是为什么提供商通常将输出定价高于输入,也是为什么你在任何价格表中都会看到每个模型有两个数字。

我们在下面用作示例的模型 MiniMax-M2.7(id minimax-m2.7)遵循这一模式。当前每 1M token 的价格是输入 $0.05、输出 $0.15。

公式#

价格按每 100 万 token 报价,因此一次请求的成本是:

text
cost = input_tokens × input_price ÷ 1,000,000
     + output_tokens × output_price ÷ 1,000,000

下面用虚构的整数价格展示,仅用于说明算术(示例,请用下表中的当前价格替换):

python
# example, substitute current prices from the table
price_in = 0.20    # USD per 1M input tokens
price_out = 0.80   # USD per 1M output tokens

prompt_tokens = 2000
completion_tokens = 500

cost = (prompt_tokens * price_in + completion_tokens * price_out) / 1_000_000
# 2000 × 0.20 ÷ 1,000,000 = 0.0004 (input)
# 500 × 0.80 ÷ 1,000,000 = 0.0004 (output)
# 0.0004 + 0.0004 = 0.0008 USD

一个使用真实模型的完整示例#

以上面 usage 示例中的请求为例:2,000 个输入 token 和 500 个输出 token。在 CheapTokens 上通过 MiniMax-M2.7,它花费 $0.00018。该数字在每次显示页面时根据当前价格表计算。

单个请求很小,因此扩大规模会有帮助。一个发送 10,000 个这种规模请求的小型应用使用 20,000,000 个输入 token 和 5,000,000 个输出 token,总计 $1.75。

同样的请求在我们列表中的其他模型上:

模型 费用 OpenRouter
GLM-5.3-Flash $0.00006 $0.00012
DeepSeek-V4-Flash $0.00008 $0.00017
MiniMax-M2.7 $0.00018 $0.0012

总计 2,000 个输入 token 和 500 个输出 token。每 100 万 token 的价格为当前价格,会随我们的资费一同变动;OpenRouter 列显示相同工作负载的参考价格。

请注意,输出在这里的 token 数量中只占一小部分(2,500 中的 500),但在账单中占比高于其 token 份额,因为输出 token 定价更高(见表格)。对于这个模型,输出侧也是相对于 OpenRouter 参考价格节省得到确认的地方,如果你的应用会写长答案,这很有用。

在代码中使用#

你可以通过将官方 openai Python 包指向 CheapTokens 基础 URL,从中读取 usage:

python
from openai import OpenAI

client = OpenAI(
    base_url="https://api.cheaptokens.dev/v1",
    api_key="YOUR_API_KEY",
)

response = client.chat.completions.create(
    model="MiniMaxAI/MiniMax-M2.7",
    messages=[{"role": "user", "content": "Explain input and output tokens in two sentences."}],
)

usage = response.usage
print("input:", usage.prompt_tokens)
print("output:", usage.completion_tokens)
print("total:", usage.total_tokens)

# example, substitute current prices from the table above
price_in, price_out = 0.20, 0.80
cost = (usage.prompt_tokens * price_in + usage.completion_tokens * price_out) / 1_000_000
print(f"approx. cost: ${cost:.6f}")

如果你还没有发送过请求,请先按照使用 CheapTokens 的第一次 API 请求操作。

如何减少 token 消耗#

  • 缩短提示词。 精简系统提示词,删除模型不需要的指令。你发送的每个 token 都会在每次请求中计费。
  • 精简历史记录。 在长聊天中,保留最后几轮或简短摘要,而不是整个对话。
  • 只发送文档的相关部分。 一页文本比整个文件更便宜。
  • 要求你需要的格式。 “用三个要点回答”比开放式文章产生更少的输出 token。
  • 有意识地设置 max_tokens。 它只限制输出。设置太低会导致答案被截断;详情见为什么 AI 的回答会在句子中间停止? CheapTokens 上的 MiniMax-M2.7 每个答案最多允许 8,192 个输出 token,并具有 180K 上下文窗口。

要估算更大工作流的成本,请参阅如何估算 AI 智能体的成本。

需要记住的要点#

  1. 每个请求都有输入 token(prompt_tokens)和输出 token(completion_tokens)。
  2. 它们有各自的价格,通常输出更高。
  3. 成本 = 输入 token × 输入价格 + 输出 token × 输出价格,价格按每 1M token 计。
  4. 从响应中的 usage 读取这些数字,而不是猜测。

在 CheapTokens 上,一个预付费余额覆盖所有模型,每个模型的价格固定,没有高峰时段定价,并且 API 兼容 OpenAI Chat Completions 和 Anthropic Messages。要尝试上面的示例,请获取 API 密钥并发送你的第一个请求。

每个模型的当前价格:CheapTokens 定价。