外观
Token 计数
OpenNave 提供 Token 计数端点,用于在生成前估算消息的 Token 数量。它可用于费用预估、上下文窗口管理和提示词优化,且不会生成模型响应。
端点
text
POST /v1/messages/count_tokens该端点遵循 Anthropic Token 计数 API 格式,接受与 Messages API 相同的 messages 和 system 参数,但不需要 max_tokens。
请求格式
sh
curl "https://api.opennave.top/v1/messages/count_tokens" \
-H "x-api-key: $OPENNAVE_API_KEY" \
-H "Content-Type: application/json" \
-H "anthropic-version: 2023-06-01" \
-d '{
"model": "claude-sonnet-4-6",
"messages": [
{"role": "user", "content": "生命的意义是什么?"}
]
}'要获得更完整的计数,应同时传入系统提示词:
python
result = client.messages.count_tokens(
model="claude-sonnet-4-6",
system="你是一个乐于助人的助手。",
messages=[
{"role": "user", "content": "用简单的语言解释量子计算。"}
],
)
print(f"输入 Token 数: {result.input_tokens}")响应格式
json
{
"input_tokens": 15
}input_tokens 是消息及系统提示词的总 Token 数。
使用场景
费用估算
使用计数结果和当前模型输入单价预估输入费用:
python
token_prices = {
"claude-sonnet-4-6": {"input": 3.00, "output": 15.00},
}
result = client.messages.count_tokens(
model="claude-sonnet-4-6",
messages=my_messages,
)
price = token_prices["claude-sonnet-4-6"]
input_cost = (result.input_tokens / 1_000_000) * price["input"]
print(f"预估输入费用: ${input_cost:.6f}")示例价格仅用于演示计算方法。实际价格应从控制台或模型定价接口读取。
上下文窗口管理
发送前判断消息是否接近模型上下文上限:
python
max_context = 200_000
result = client.messages.count_tokens(
model="claude-sonnet-4-6",
messages=my_messages,
)
if result.input_tokens > max_context * 0.9:
print("警告:即将达到上下文窗口限制")提示词优化
比较不同提示词写法的 Token 消耗,选择更简洁且语义完整的版本:
python
prompts = [
"请总结以下文本:",
"简要概括:",
"给出简短摘要:",
]
for prompt in prompts:
result = client.messages.count_tokens(
model="claude-sonnet-4-6",
messages=[{"role": "user", "content": f"{prompt} {my_text}"}],
)
print(f"{prompt!r} -> {result.input_tokens} tokens")不调用接口的粗略估算
无法调用 Token 计数接口时,可按以下规则粗估:英文约每 4 个字符 1 个 Token;代码与英文接近;中日韩文字通常每字符约 1 至 2 个 Token。粗略估算不应用于精确计费或严格的上下文边界判断。