跳到主要内容

Token 计数 / Count Tokens

在真正发起模型调用之前估算请求输入的 token 数——用于预估成本提前做上下文截断决策不计费、不触发 fallback、不消耗配额

何时使用

  • 构造长 prompt 前确认没超上下文窗口
  • RAG 场景下决定塞多少 chunk 进去
  • 面向用户显示"这次估计费多少"
  • 在 CI / 脚本里做批量预算核算

用法(Anthropic Messages)

只有 Anthropic Messages 协议有原生 count_tokens 端点(其它协议的对应 Turing 路径另见下方"其它协议"节)。

from anthropic import Anthropic

client = Anthropic(
base_url="https://live-turing.cn.llm.tcljd.com/api/v1",
auth_token="your-api-key",
)

result = client.messages.count_tokens(
model="turing/claude-sonnet-5",
messages=[{"role": "user", "content": "估算我这条请求的输入 token 数"}],
)
print(result.input_tokens) # -> 整数
curl $TURING_BASE_URL/messages/count_tokens \
-H "Authorization: Bearer $TURING_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "turing/claude-sonnet-5",
"messages": [{"role": "user", "content": "估算我这条请求的输入 token 数"}]
}'

完整请求 / 响应 schema:/api/count-message-tokens

支持的字段

和普通 /messages 请求基本一致,但不含 max_tokenstemperature 等生成类参数:

字段作用
model用哪个模型的分词器
messages对话历史
systemsystem prompt
tools工具定义(会算进 token)
tool_choice工具选择策略
thinking开启 thinking 后额度的预估
cache_control顶层缓存标记(会影响计数)

其它协议的估算方式

OpenAI Chat Completions / Responses 协议没有对应的 count_tokens 端点。常用方案:

  1. 本地 tokenizer(推荐):用 tiktoken 包对 OpenAI 系模型本地分词
    import tiktoken
    enc = tiktoken.encoding_for_model("gpt-4")
    print(len(enc.encode("要估算的文本")))
  2. 发一次 max_tokens=1 的请求,从 usage.prompt_tokens 读(会有少量计费)

注意事项

  • 计数结果是估算值:图像 / 音频 / 视频 input 的精确计数可能与实际调用略有差异
  • cache_control 时,input_tokens 返回的是预计缓存命中情况下的总数(仍是非缓存+缓存读+缓存写的合计)
  • 估算不算配额 / 预算

See also