OpenAI API 的 Token 不等于中文字数,也不能只靠目测估算。最可靠的做法是读取每次真实响应的 usage,分别记录输入、输出和总 Token,再按照调用当天的官方价格表计算;上下文超限则是另一类问题。
从真实响应读取用量
from openai import OpenAI
client = OpenAI()
response = client.responses.create(
model="gpt-6-luna",
input="用三点解释向量检索,并给出一个生活例子。",
max_output_tokens=300,
)
usage = response.usage
print("input", usage.input_tokens)
print("output", usage.output_tokens)
print("total", usage.total_tokens)
把模型名、请求时间和这三个字段一起写入用量账本。不同模型、长短上下文、缓存输入和工具调用可能采用不同价格项,因此不能把一种模型的单价套给所有请求。当前单价应查OpenAI 官方 API 价格表。

用统一公式估算费用
基础公式是:输入成本 = 输入 Token ÷ 1,000,000 × 输入单价;输出成本 = 输出 Token ÷ 1,000,000 × 输出单价;再按价格表加入缓存写入、缓存命中或工具费用。示例:如果某模型本次有 20,000 输入 Token 和 2,000 输出 Token,就把这两个真实数分别乘以对应单价,不能只用总 Token 乘一个价格。
价格会变化,本文不把某个数字写死成永久报价。财务报表应保存“用量来源、采用的价格版本、计算时间”,并用平台 Usage 页面抽样对账。
区分计费与上下文超限
官方会话状态指南说明,多轮消息会持续占用上下文。上下文窗口约束的是本次请求可容纳的输入、历史和预留输出;账单则记录实际处理的用量。输入过长时,应删减无关历史、摘要旧消息、检索必要片段或选择合适模型,而不是简单充值。
- 出现长度错误时先记录模型、输入结构和
max_output_tokens。 - 减少历史消息后重试一条相同问题,确认错误是否消失。
- 成功后比较两次
usage,验证精简确实降低输入 Token。 - 不要在日志保存完整敏感对话;用请求 ID 与聚合用量排查。
常见问题
一个汉字等于一个 Token 吗?不固定。语言、标点、数字和模型的分词方式都会影响结果,以响应的 usage 为准。
设置输出上限就等于一定产生这么多 Token 吗?不是,上限是允许生成的最大值,实际输出可能更少。本文没有读取你的真实请求,最终成本以账号用量和调用当天价格为准。
Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/31557.html