Token 是什么?
Token 是模型处理内容时使用的计量单位。对文本模型,它通常对应一段文本经过分词后的片段;对支持图片、音频、视频或文件的多模态模型,媒体也会被转换为模型内部的计费表示。Token 数量不是字符数,也不是请求体的字节数,同一段内容在不同模型上的 Token 数量可能不同。
Token 是用量单位,不等于金额。费用还取决于模型、计费项单价、协议支持的字段以及是否使用缓存等因素。预估值只能用于预算,最终应以响应 usage、请求日志和账单明细核对。
一次调用包含哪些 Token?
| Token 来源 | 说明 |
|---|---|
| 用户输入 | 用户提交的问题、指令、文档片段等 |
| 系统提示词 | 定义模型角色、输出格式和业务规则的内容 |
| 历史上下文 | 多轮对话中为保持上下文而携带的历史消息 |
| 工具说明与参数 | Agent、插件或函数调用场景中的工具定义和调用参数 |
| 模型输出 | 模型生成的回答、代码、摘要和结构化结果 |
图片、音频、视频和文件也可能产生输入用量,但具体的计费单位和返回字段由目标模型决定。不要因为请求中包含一个文件,就直接把文件大小换算成 Token;文件大小、媒体时长与模型计费 Token 之间通常不是线性关系。
输入 Token 和输出 Token
大模型计费通常会区分输入 Token 和输出 Token:
| 计费项 | 说明 |
|---|---|
| 输入 Token | 模型读取和处理的内容,包括用户输入、历史上下文、系统提示词、工具说明和部分媒体输入 |
| 输出 Token | 模型生成的文本或结构化内容;部分生图模型也可能把图片输出折算为输出 Token |
不同模型的输入、输出单价可能不同,部分推理模型还会返回思考或推理相关用量。不能假设输出一定比输入贵,也不能假设所有模型都会返回相同的字段;以具体模型的价格项和响应格式为准。
预估用量和实际用量
请求发送前可以根据文本长度、历史消息和媒体参数估算成本,但预估不一定等于最终用量:
- 模型可能对图片、音频、视频使用专门的媒体 Token 规则。
- 多轮对话通常会重复发送历史消息,每一轮的输入用量都会重新计算,除非命中缓存或由服务端提供其他复用机制。
- 实际输出取决于模型何时结束生成,
max_tokens只是上限。 - Agent 可能在一次用户操作中发起多次模型请求,业务侧应按请求总量核算。
对账时优先查看以下字段(字段名会随协议不同而变化):
输入:input_tokens 或 prompt_tokens
输出:output_tokens 或 completion_tokens
总量:total_tokens
缓存:input_tokens_details.cached_tokens 或 prompt_tokens_details.cached_tokens如果响应没有提供某个字段,不要用字符数、文件大小或请求次数自行替代;应查看该模型的接口说明或账单明细。
为什么同样的问题费用不同?
不同模型在能力、上下文长度、推理效果、响应速度和资源消耗上存在差异,因此价格也可能不同。可以根据任务复杂度选择模型:
| 任务类型 | 推荐策略 |
|---|---|
| 简单分类、标签判断、格式转换 | 优先使用低成本模型 |
| 常规问答、摘要、改写 | 使用通用模型,平衡效果与成本 |
| 复杂推理、代码生成 | 使用高性能模型,保证结果质量 |
| 长文档分析 | 使用支持长上下文的模型,并控制输入范围 |
| 图片、视频、音频理解 | 限制媒体数量、时长、分辨率、FPS 或分析区间 |
| 图片、视频生成 | 根据输出尺寸、质量、时长和数量选择模型与档位 |
| 批量任务 | 优先控制上下文、媒体参数、输出长度和并发重试 |
如何减少不必要的 Token?
- 缩短无关上下文:不要默认携带完整历史对话或整篇文档,只传入与问题相关的内容。
- 控制输出长度:通过提示词或 API 参数限制最大输出 Token,例如要求“用 5 条要点回答”或“控制在 300 字以内”。
- 精简系统提示词:删除重复规则、低频示例和无关说明,减少每次调用携带的固定内容。
- 按任务选择模型:简单任务使用低成本模型,复杂任务再切换到高能力模型。
- 减少媒体输入:先裁剪视频区间、降低不必要的 FPS 或分辨率,图片先压缩到任务需要的清晰度。
- 区分请求次数和执行次数:把 Agent 的子请求、失败重试和异步任务都纳入成本统计。
- 定期查看用量明细:按 API Key、模型和时间维度查看消耗,定位主要成本来源。
小结
影响费用的不只是用户输入了多少字,还包括系统提示词、历史上下文、工具调用、模型输出长度和模型单价。建立 Token 意识后,可以更有针对性地优化提示词、模型选择和调用链路。