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_tokens、temperature 等生成类参数:
| 字段 | 作用 |
|---|---|
model | 用哪个模型的分词器 |
messages | 对话历史 |
system | system prompt |
tools | 工具定义(会算进 token) |
tool_choice | 工具选择策略 |
thinking | 开启 thinking 后额度的预估 |
cache_control | 顶层缓存标记(会影响计数) |
其它协议的估算方式
OpenAI Chat Completions / Responses 协议没有对应的 count_tokens 端点。常用方案:
- 本地 tokenizer(推荐):用
tiktoken包对 OpenAI 系模型本地分词import tiktokenenc = tiktoken.encoding_for_model("gpt-4")print(len(enc.encode("要估算的文本"))) - 发一次
max_tokens=1的请求,从usage.prompt_tokens读(会有少量计费)
注意事项
- 计数结果是估算值:图像 / 音频 / 视频 input 的精确计数可能与实际调用略有差异
- 带
cache_control时,input_tokens返回的是预计缓存命中情况下的总数(仍是非缓存+缓存读+缓存写的合计) - 估算不算配额 / 预算
See also
/api/count-message-tokens— 完整 schema + Try-It- Messages 接口 —
count_tokens输入与生成请求结构对应 - Prompt 缓存 — 带缓存时的计数语义
- 计费与用量 — Anthropic
input_tokens与平台账单的映射