大语言模型 API Token 消耗深度剖析

大语言模型 API Token 消耗深度剖析

在调用大语言模型(LLM)API 时,Token 统计不仅是计费的唯一依据,更是评估模型推理深度、响应延迟及上下文窗口管理的关键指标。本文旨在通过源码解析,帮助开发者彻底理解 Token 的消耗逻辑。


一、 数据结构源码定义

以下是基于主流 API(如 OpenAI 协议)的底层类定义,展示了 Token 消耗的层级结构:

python 复制代码
from typing import Optional
from pydantic import BaseModel

class PromptTokensDetails(BaseModel):
    """输入 token(Prompt)的详细组成"""
    audio_tokens: Optional[int] = None    # 提示词中的音频输入 token 数
    cached_tokens: Optional[int] = None   # 提示词中命中缓存的 token 数

class CompletionTokensDetails(BaseModel):
    """输出 token(Completion)的详细组成"""
    accepted_prediction_tokens: Optional[int] = None  # 预测内容被模型采纳的 token 数
    audio_tokens: Optional[int] = None                # 模型生成的音频输出 token 数
    reasoning_tokens: Optional[int] = None            # 模型生成的推理/思考 token 数
    rejected_prediction_tokens: Optional[int] = None  # 未被采纳的预测 Token 数

class CompletionUsage(BaseModel):
    """单次请求的完整用量统计"""
    prompt_tokens: int              # 输入总 token 数
    completion_tokens: int          # 输出总 token 数
    total_tokens: int               # 总计消耗 (Prompt + Completion)
    
    prompt_tokens_details: Optional[PromptTokensDetails] = None
    completion_tokens_details: Optional[CompletionTokensDetails] = None

二、 Prompt 消耗组成 (输入端)

prompt_tokens 代表模型在生成第一个字符前必须"阅读"的信息总量。在 RAG(检索增强生成)场景中,这部分的成本控制至关重要。

Prompt 构成详表

组成部分 对应源码字段 物理意义 计费与性能影响
缓存 token cached_tokens 复用了之前请求中已处理过并存储在服务器缓存中的内容。 核心优化点。通常有显著价格折扣,且能极大提升首字响应速度 (TTFT)。
音频 token audio_tokens 输入中包含的语音数据、音频采样转换而来的等效 token。 适用于多模态原生语音交互。
常规输入 (隐式计算) 包含 System Prompt、历史上下文、用户当前提问等。 按标准输入单价全额计费。

三、 Completion 消耗组成 (输出端)

completion_tokens 反映了模型的"思考成本"和"表达成本"。现代高性能模型(如 DeepSeek-R1, GPT-4o)的输出 Token 由多部分组成,即使最终看到的文字很少,产生的 Token 也可能非常多。

Completion 构成详表

组成部分 对应源码字段 物理意义 是否在最终答案中可见
推理 token reasoning_tokens 模型在给出答案前进行的逻辑推演、思维链(CoT)内容。 通常不可见(后台运行)
已接受预测 accepted_prediction_tokens 预测输出(Predicted Outputs)技术中模型猜对并采纳的 token。 可见
被拒绝预测 rejected_prediction_tokens 预测输出中猜错的部分。虽未采纳,但已产生计算消耗。 不可见
音频 token audio_tokens 模型直接生成的语音数据转换而来的等效 token。 以声音形式输出
标准文本 (隐式计算) 模型根据推理结果输出的最终文字答案。 可见

四、 核心逻辑总结

1. 计算公式

  • 总消耗公式
    total_tokens = prompt_tokens + completion_tokens
  • 输入细分公式
    prompt_tokens = cached_tokens + audio_tokens + text
  • 输出细分公式
    completion_tokens = reasoning + accepted_pred + rejected_pred + audio + text

2. 开发者调优建议

  • 警惕推理陷阱 :在处理复杂逻辑时,reasoning_tokens 消耗极快。对于不需要深度逻辑的任务,建议降级使用非推理模型以节省开支。
  • 利用缓存优化 :在 RAG 架构中,尽量保持 Prompt 头部(如大型知识库或 System Prompt)稳定,以提高 cached_tokens 命中率,从而降低 50%-90% 的输入成本。
  • 窗口溢出风险 :请记住,无论是隐藏的"推理 token"还是被丢弃的"预测 token",都会占用模型的上下文窗口总上限 。如果任务中断,请检查是否因推理过长导致触发 length 限制。
相关推荐
醉卧考场君莫笑2 小时前
规则与传统NLP之任务范式
人工智能·自然语言处理
叶子丶苏2 小时前
第二节_机器学习基本知识点
人工智能·python·机器学习·数据科学
小锋java12342 小时前
LangChain4j 来了,Java AI智能体开发再次起飞。。。
java·人工智能·后端
一点一一2 小时前
nestjs+langchain:Prompt Template
人工智能·后端
永霖光电_UVLED2 小时前
1.6T 光模块的能效革命
大数据·人工智能·汽车·娱乐
代码随想录2 小时前
RAG大厂面试题汇总:向量检索、混合检索、Rerank、幻觉处理高频问题
人工智能·大模型·rag·ai应用开发
今日说"法"2 小时前
数值计算与浮点误差:深度学习中梯度崩溃的数学根源与归一化对策
人工智能·深度学习
LaughingZhu2 小时前
Product Hunt 每日热榜 | 2026-04-21
人工智能·经验分享·深度学习·神经网络·产品运营
田井中律.2 小时前
知识图谱(关系抽取方法)【第十章】
人工智能·c#·知识图谱