AI API Token 计费怎么算?
简答:AI API 通常按输入 Token、输出 Token及模型对应单价计算,缓存、推理、多模态和工具调用可能使用独立计费项。先查看当前模型价格表,再读取响应中的 usage 字段,按“Token÷每百万×单价”逐项相加,最后用日调用量推算月预算。
定义:Token 是模型处理文本、代码或多模态内容时使用的分词单位,AI API Token 计费就是按照不同类别 Token 的实际数量乘以对应单价。
先用这张表判断:你到底要算哪些 Token
不要只看接口调用次数或最终显示的回答长度。一次请求可能同时包含输入 Token、输出 Token、缓存 Token、推理 Token,以及图像、音频、工具调用产生的额外用量。不同平台字段名称不完全相同,最终应以所调用接口返回的 usage 或 usageMetadata 为准。
| 计费项目 | 含义 | 核对重点 |
|---|---|---|
| 输入 Token | 发送给模型的系统提示词、用户消息、历史对话、文档和工具结果等内容。 | 多轮对话可能重新发送历史上下文,不能只按本轮新输入估算。 |
| 输出 Token | 模型生成的可见回答,以及部分模型可能产生的推理 Token。 | 输出单价通常与输入单价不同,应单独计算。 |
| 缓存 Token | 被缓存并再次使用的输入内容。 | 缓存读取、缓存写入可能有不同价格,不能直接当作普通输入。 |
| 推理 Token | 推理模型内部生成、用于完成回答的 Token。 | 部分平台会单独展示,部分价格页把它计入输出价格。 |
| 多模态或工具用量 | 图像、音频、视频、搜索、代码执行或其他工具产生的计费项目。 | 确认价格页是否按 Token、请求次数、时长或其他单位计费。 |
OpenAI 的 Chat Completions 响应常见字段包括 prompt_tokens、completion_tokens 和 total_tokens;Responses 接口则使用 input_tokens、output_tokens 和 total_tokens。部分响应还会提供缓存 Token 和推理 Token明细,可参考 OpenAI API 用量与成本说明 以及 Chat Completions API 响应结构。
AI API Token 计费公式怎么套
当价格表按“每百万 Token”展示时,最基本的公式是:
总费用 = 输入 Token ÷ 1,000,000 × 输入单价 + 输出 Token ÷ 1,000,000 × 输出单价
如果存在缓存、推理或其他计费项目,应继续加上对应项:
总费用 = 普通输入费用 + 缓存读取费用 + 缓存写入费用 + 输出费用 + 推理或工具费用
如果价格表按每千 Token报价,把分母改成 1,000 即可。不要把“每千 Token”和“每百万 Token”的单价直接混用,否则结果会相差一千倍。
一个可复算的示例
假设某模型的示例价格为:输入每百万 Token 2 美元,输出每百万 Token 8 美元。一次请求消耗输入 1,000 Token、输出 500 Token,则:
- 输入费用:1,000 ÷ 1,000,000 × 2 = 0.002 美元。
- 输出费用:500 ÷ 1,000,000 × 8 = 0.004 美元。
- 单次合计:0.006 美元。
这里的价格只用于演示公式,不代表任何平台或模型的当前真实价格。实际计算时,应打开对应模型的价格页,确认输入、输出、缓存、批处理、长上下文和服务等级是否适用。OpenAI、Anthropic 和 Gemini 的价格页都显示了输入与输出可能采用不同单价,缓存也可能单独列价,分别可查看 OpenAI API Pricing、Anthropic Pricing 和 Gemini API Pricing。
Token 不等于汉字、字符或单词
Token 是分词结果,不是固定长度的字符计数。中文、英文、数字、代码、标点、URL、JSON,以及图片和音频等内容,都可能采用不同的分词方式。同一段文字换一个模型或接口,Token 数也可能不同。
| 你看到的单位 | 能否直接当作 Token | 正确做法 |
|---|---|---|
| 汉字数量 | 不能 | 只能做非常粗略的预估,不能用于最终账单。 |
| 字符数 | 不能 | 用目标模型提供的 Token 统计工具或接口预估。 |
| 英文单词数 | 不能 | 缩写、标点和代码可能改变分词结果。 |
| 接口返回的 usage | 可以作为实际用量依据 | 保存请求 ID、模型名、usage 和时间,再与账单核对。 |
例如,Gemini 文档提供了 countTokens 用于在生成前估算输入 Token;生成响应还会返回 promptTokenCount、candidatesTokenCount、thoughtsTokenCount 和 totalTokenCount 等字段,可参考 Gemini Token 统计文档 和 Gemini GenerateContent API。这些字段比按字符数推算更适合做成本核对。
从 API 返回的 usage 到最终账单,按五步核对
- 确认模型。记录请求实际使用的模型名,不要只看客户端下拉框或配置文件中的默认值。
- 确认价格版本。打开该模型当前价格页,核对输入、输出、缓存、推理、批处理和长上下文等条件。
- 保存原始用量。记录响应中的
usage或usageMetadata,包括输入、输出、缓存和推理字段。 - 逐项代入公式。每个计费类别单独计算,再相加;不要先把所有 Token 混成一个总数后套一个单价。
- 和账单或余额变化对照。如果不一致,检查汇率、平台倍率、预充值扣费、工具调用、重试请求、流式请求是否完整记录。
流式响应尤其要注意:有些接口只有在流结束时才返回完整 usage。如果连接中断,客户端可能没有拿到最后的用量块,因此“没有收到 usage”不能直接等于“没有产生用量”。OpenAI 对流式 Chat Completions 提供了 stream_options.include_usage 选项,具体行为可查看 OpenAI Reviewing API usage and costs。
如果使用兼容接口或中转 API,还要把“模型原始 Token 用量”和“平台实际扣费”分开记录。基础模型价格、平台倍率、余额换算、最低扣费单位等信息若未在服务商公开文档中核实,就不要自行推断,应以该平台当前价格和账单明细为准。
为什么多轮对话会让输入 Token 变多
许多对话式调用会在下一轮请求中再次发送系统提示词、历史消息、工具结果和新问题。即使用户只新增一句话,模型收到的完整上下文也可能已经很长,因此输入 Token 会随对话轮数增加。
可以用下面的简化方式估算:
单轮成本 ≈ 当前累计上下文 Token ÷ 1,000,000 × 输入单价 + 本轮输出 Token ÷ 1,000,000 × 输出单价
实际是否重复计费、哪些内容命中缓存,以及缓存读取和写入分别如何收费,要看具体平台。Anthropic 的价格说明将基础输入、缓存写入、缓存命中和输出分开列出;Gemini 的响应则会分别返回普通提示词、缓存内容、候选输出和思考 Token字段。不要把某个平台的字段含义直接套到另一个平台。
- 上下文过长时,删除无关历史消息。
- 把稳定的系统说明、项目规则或长文档放入合适的缓存机制。
- 将多轮对话定期压缩成摘要,但保留必要的事实、约束和任务状态。
- 对工具返回结果设置长度上限,避免把完整日志反复发送。
如何估算单日和单月 AI API 预算
先用真实请求记录得到平均值,再按调用量放大,不要只用一次最短问答作为预算依据。
月度预算 ≈ 每日请求数 × 平均单次费用 × 预计使用天数
更稳妥的做法是分别记录三组数据:平均输入 Token、平均输出 Token、每天请求次数。然后计算:
- 月输入费用 = 日请求数 × 平均输入 Token × 使用天数 ÷ 1,000,000 × 输入单价。
- 月输出费用 = 日请求数 × 平均输出 Token × 使用天数 ÷ 1,000,000 × 输出单价。
- 月总费用 = 月输入费用 + 月输出费用 + 缓存、推理、工具或其他额外费用。
预算不应只设置一个理想值。可以同时建立基准、偏高和异常三档:基准档使用日常平均值,偏高档提高输入上下文或输出长度,异常档考虑重试、循环调用、批量任务和长文档处理。若平台支持用量告警或硬性支出限制,可按平台文档设置,但要注意记录和限制通常存在处理延迟,不能把它当作绝对即时的断路器。
降低 Token 成本的可操作清单
- 限制输出长度:根据接口和模型使用对应的输出上限参数,例如某些 Chat Completions 请求使用
max_completion_tokens,Responses 接口可能使用max_output_tokens,具体字段以目标接口文档为准。 - 压缩输入:删除重复的系统提示词、无关历史消息、冗余格式和过长日志。
- 控制工具结果:只保留模型完成任务需要的字段,不要把整份数据库结果或完整网页原文反复传入。
- 选择合适模型:先用代表性任务测试实际输入、输出和质量,再比较总费用,而不是只比较每百万 Token 单价。
- 区分失败重试:把每次重试视为独立请求记录,检查 SDK 或网关是否自动重试。
- 分开记录缓存和推理:缓存命中可能降低部分输入成本,但推理 Token 仍可能单独计入,必须查看响应字段与当前价格页。
OpenAI 的官方说明也提醒,较低的每百万 Token 单价不一定带来较低的总成本,因为不同模型可能产生不同数量的输入、输出或推理 Token;因此应使用代表性任务测试,而不是只比较可见回答长度。可参考 Understanding and counting tokens。
使用兼容接口时,基础价和实际扣费要分开看
OpenAI Compatible 只说明请求格式或响应结构在一定程度上兼容,不代表所有平台采用相同的价格、缓存规则、模型映射、倍率、余额单位或 usage 字段。接入前应逐项确认:
| 核对项 | 要确认的问题 |
|---|---|
| 模型名 | 请求中的模型名实际路由到哪个模型,是否会自动替换。 |
| 单价 | 输入、输出、缓存、推理和工具是否分别计价。 |
| 单位 | 价格按 Token、千 Token、百万 Token、请求次数还是其他单位计算。 |
| 倍率或余额 | 是否存在平台自定义倍率、充值换算或最低扣费单位。 |
| 用量字段 | 响应是否保留原始 usage,字段是否与官方接口完全一致。 |
| 账单记录 | 是否能按模型、时间、Key 或请求查看实际扣费明细。 |
如果公开页面只展示了基础价格,没有展示缓存、重试、工具调用或余额扣费规则,应明确标记为“未核实”,不要用基础价格直接推断最终账单。对于本项目涉及的产品和服务,价格、计费倍率及用量规则均应以其当前公开页面和实际账单为准。
常见问题
AI API 是按请求次数收费,还是按 Token 收费?
常见文本模型主要按输入和输出 Token计价,但具体服务也可能对搜索、音频、视频、工具调用、缓存或批处理采用其他计费单位。应同时查看价格页和实际 usage,不能只按请求次数估算。
输入 Token 和输出 Token 哪个更贵?
没有统一答案,取决于模型和服务等级。许多价格表会把输入、缓存输入和输出分开列价,因此必须分别代入公式。不能根据模型名称或回答长短推断价格。
为什么只输入一句话,Token 也可能很多?
请求可能携带系统提示词、历史对话、文档、工具结果、图片或其他上下文。多轮对话中,历史内容可能再次发送,因此应查看响应中的输入 Token字段,而不是只统计当前输入框的文字。
缓存 Token 是不是完全免费?
不能一概而论。不同平台可能区分缓存写入、缓存读取和缓存存储,并分别设置价格;有的平台还把缓存命中显示在输入用量明细中。是否收费以及如何收费,要以对应模型的当前价格页为准。
接口没有返回 usage,是不是就没有产生费用?
不是。流式连接中断、代理未转发最后一个 usage 块、SDK没有保留完整响应,都可能导致本地缺少用量字段。应检查接口的流式 usage 配置、服务端日志、请求 ID和平台账单,不能仅凭字段缺失判断费用为零。
人民币预算怎么换算?
先按美元或平台账单原始单位算出 Token费用,再使用实际结算时采用的汇率或平台余额换算规则转换。汇率和平台扣费规则会变化,因此不要把某一天的换算结果当作长期固定价格。