Skip to content

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。粗略估算不应用于精确计费或严格的上下文边界判断。

关联文档 ​