UniterRouter
API 参考Google 兼容

计算 Token

Gemini Token 计数 API - API 调用前预估 Token 使用量和成本。为 Gemini Pro、Gemini 1.5 计算提示词 Token,优化支出。

计算 Token

在发送到模型之前计算内容中的 token 数量。用于估算成本并确保内容适合上下文限制。

成本估算:使用此端点在发出生成请求之前估算 API 成本。

端点

POST https://api.uniterouter.ai/v1beta/models/{model}:countTokens

认证

x-goog-api-key: your_uniterouter_api_key

路径参数

参数类型必需描述
modelstring是用于分词的模型 ID

请求体

参数类型必需描述
contentsarray是要计算 token 的内容
generateContentRequestobject否要计算 token 的完整请求

请求示例

curl -X POST "https://api.uniterouter.ai/v1beta/models/gemini-2.0-flash:countTokens" \
  -H "Content-Type: application/json" \
  -H "x-goog-api-key: $UNITEROUTER_API_KEY" \
  -d '{
    "contents": [
      {
        "role": "user",
        "parts": [{"text": "写一篇关于人工智能及其对社会影响的详细文章。"}]
      }
    ]
  }'
import google.generativeai as genai

genai.configure(
    api_key="your_uniterouter_api_key",
    transport="rest",
    client_options={"api_endpoint": "api.uniterouter.ai"}
)

model = genai.GenerativeModel("gemini-2.0-flash")

# 计算简单提示的 token
token_count = model.count_tokens("你好,你好吗?")
print(f"Token 数量: {token_count.total_tokens}")

# 计算对话的 token
token_count = model.count_tokens([
    {"role": "user", "parts": ["什么是 AI?"]},
    {"role": "model", "parts": ["AI 是人工智能..."]},
    {"role": "user", "parts": ["告诉我更多关于机器学习的内容"]}
])
print(f"对话 token 数: {token_count.total_tokens}")
import { GoogleGenerativeAI } from "@google/generative-ai";

const genAI = new GoogleGenerativeAI("your_uniterouter_api_key", {
  baseUrl: "https://api.uniterouter.ai"
});

const model = genAI.getGenerativeModel({ model: "gemini-2.0-flash" });

const result = await model.countTokens({
  contents: [
    {
      role: "user",
      parts: [{ text: "你好,你好吗?" }]
    }
  ]
});

console.log(`总 token 数: ${result.totalTokens}`);

响应

{
  "totalTokens": 15
}

模型上下文限制

模型上下文窗口最大输出
gemini-2.0-flash1,048,5768,192
gemini-2.0-flash-thinking32,7678,192
gemini-1.5-pro2,097,1528,192
gemini-1.5-flash1,048,5768,192

使用场景

预检查

确保您的内容适合模型的上下文窗口:

def check_fits_context(content, model_name, max_context=1000000):
    model = genai.GenerativeModel(model_name)
    token_count = model.count_tokens(content)
    
    if token_count.total_tokens > max_context:
        raise ValueError(f"内容太大: {token_count.total_tokens} > {max_context}")
    
    return token_count.total_tokens

# 发送前检查
try:
    tokens = check_fits_context(long_document, "gemini-2.0-flash")
    print(f"内容适合: {tokens} token")
except ValueError as e:
    print(f"错误: {e}")

成本估算

# 定价(示例 - 请查看当前费率)
INPUT_COST_PER_MILLION = 0.075  # 每百万输入 token $0.075
OUTPUT_COST_PER_MILLION = 0.30  # 每百万输出 token $0.30

def estimate_cost(prompt, estimated_output_tokens=500):
    model = genai.GenerativeModel("gemini-2.0-flash")
    input_tokens = model.count_tokens(prompt).total_tokens
    
    input_cost = (input_tokens / 1_000_000) * INPUT_COST_PER_MILLION
    output_cost = (estimated_output_tokens / 1_000_000) * OUTPUT_COST_PER_MILLION
    
    return {
        "input_tokens": input_tokens,
        "estimated_output_tokens": estimated_output_tokens,
        "estimated_cost": input_cost + output_cost
    }

estimate = estimate_cost("写一篇 500 字关于 AI 的文章")
print(f"估计成本: ${estimate['estimated_cost']:.6f}")

相关文档

How is this guide?