Langkau ke kandungan
Pengiraan token

Pengiraan token

Kira token bagi teks atau seluruh permintaan sebelum anda menghantarnya.

POST https://api.shannon-ai.com/v1/tokenize

POST https://api.shannon-ai.com/v1/messages/count_tokens

Kedua-dua endpoint mengira dengan tokenizer model yang anda namakan, dan tiada model dijalankan. Ia meliputi model open-weight yang dihoskan. /v1/tokenize menerima teks biasa atau perbualan Chat Completions. /v1/messages/count_tokens menerima permintaan dalam format Anthropic Messages, iaitu panggilan yang dibuat oleh SDK Anthropic dan Claude Code.

Pengiraan adalah percuma. Panggilan memerlukan kunci API anda, tidak mengambil apa-apa daripada baki anda dan tidak muncul dalam log penggunaan anda.

Kira teks

Hantar model dan text. Teks dikira seadanya, tanpa pemformatan sembang di sekelilingnya.

import requests

response = requests.post(
    "https://api.shannon-ai.com/v1/tokenize",
    headers={"Authorization": "Bearer YOUR_API_KEY"},
    json={
        "model": "DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
        "text": "Hello, world",
    },
)
print(response.json()["tokens"])
200 Balasan
{
  "model": "DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
  "tokens": 3
}

Nombor dalam balasan pada halaman ini ialah contoh. Teks yang sama memberikan kiraan yang berbeza pada model yang berbeza.

Kira permintaan sembang

Hantar model dan messages, dengan tools apabila permintaan mempunyainya, tepat seperti yang anda hantar kepada /v1/chat/completions. Balasan ialah saiz seluruh input.

import requests

request = {
    "model": "DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
    "messages": [
        {"role": "system", "content": "You are a concise assistant."},
        {"role": "user", "content": "What is the weather in Paris?"},
    ],
    "tools": [
        {
            "type": "function",
            "function": {
                "name": "get_weather",
                "description": "Current weather for a city",
                "parameters": {
                    "type": "object",
                    "properties": {"city": {"type": "string"}},
                    "required": ["city"],
                },
            },
        }
    ],
}

response = requests.post(
    "https://api.shannon-ai.com/v1/tokenize",
    headers={"Authorization": "Bearer YOUR_API_KEY"},
    json=request,
)
print(response.json()["tokens"])
200 Balasan
{
  "model": "DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
  "tokens": 164
}

Medan /v1/tokenize

Medan Jenis Penerangan
model string Wajib. Id model open-weight yang dihoskan. Huruf besar dan kecil dilayan sama.
text string Teks untuk dikira seadanya, tanpa pemformatan sembang. Sehingga 4,000,000 bait. Hantar text atau messages; apabila kedua-duanya ada, text yang dikira.
messages array Mesej sembang dalam format Chat Completions. Ia dikira sebagai input penuh sesuatu permintaan: setiap mesej dengan pemformatan yang diletakkan oleh templat sembang model di sekelilingnya.
tools array Takrifan alat untuk dimasukkan dalam kiraan. Digunakan bersama messages.

Balasan ialah objek JSON dengan medan berikut:

Medan Jenis Penerangan
model string Id model yang kiraan dibuat untuknya, dalam ejaan yang diterbitkan.
tokens integer Dengan text: token bagi teks itu. Dengan messages: token bagi seluruh input, termasuk imej.

Kira permintaan Messages

Hantar badan yang akan anda hantar kepada /v1/messages: model, messages, dan system serta tools apabila anda menggunakannya. SDK Anthropic rasmi memanggil endpoint ini melalui messages.count_tokens.

import anthropic

client = anthropic.Anthropic(
    api_key="YOUR_API_KEY",
    base_url="https://api.shannon-ai.com",
)

count = client.messages.count_tokens(
    model="DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
    system="You are a concise assistant.",
    messages=[
        {"role": "user", "content": "Summarise the attached report."}
    ],
)
print(count.input_tokens)
200 Balasan
{
  "input_tokens": 21
}

Medan /v1/messages/count_tokens

Medan Jenis Penerangan
model string Wajib. Id model open-weight yang dihoskan.
messages array Wajib. Mesej dalam format Anthropic Messages. Blok text, image, tool_use dan tool_result dikira.
system string | array System prompt: rentetan atau tatasusunan blok teks.
tools array Takrifan alat dengan name, description dan input_schema.

Diterima untuk keserasian, tanpa kesan pada kiraan: tool_choice, max_tokens, temperature, top_p, stop_sequences, stream, thinking. Anda boleh menghantar badan permintaan sebenar tanpa perubahan.

Balasan ialah objek JSON dengan medan berikut:

Medan Jenis Penerangan
input_tokens integer Token seluruh input: system prompt, mesej, alat dan imej.

Model yang disokong

Kedua-dua endpoint mengira untuk model open-weight yang dihoskan. GET /v1/models menyenaraikan /v1/tokenize dan /v1/messages/count_tokens dalam endpoints bagi setiap model yang menyokongnya. Sebarang nilai model lain, termasuk id Shannon, dijawab dengan 400.

  • DeepSeek-V4-Pro-0813-3BIT-REAP
  • GLM-5.2-3BIT-REAP
  • Kimi-K3-3BIT-REAP
  • Nemotron3Ultra-3BIT-REAP
  • MiniMax-M3-3BIT-REAP
  • DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP
  • Kimi-K2.6-W4A16-AUTOROUND-REAP
  • Laguna-S-2.1-W4A16-AUTOROUND-REAP
  • inkling-W4A16-AUTOROUND-REAP
  • MiMo-V2.5-Pro-W8A16
  • MiMo-V2.5-W8A16
  • Hy3-W8A16

Bagi model Shannon, baca bilangan token daripada objek usage dalam balasan.

Cara kiraan dibuat

Setiap model dikira dengan tokenizernya sendiri dan templat sembangnya sendiri. Tiada anggaran daripada aksara atau perkataan digunakan.

Apa yang dikira Peraturan
Teks Token bagi rentetan seperti yang dihantar. Rentetan kosong dikira 0.
Mesej Mesej dan alat disusun dengan templat sembang model itu sendiri, sehingga titik balasan bermula, dan seluruh prompt itu dikira.
Peranan Mesej system, user, assistant dan tool dikira. developer dikira sebagai system. Mesej tanpa kandungan dan tanpa panggilan alat tidak menambah apa-apa.
Panggilan alat dan keputusan Panggilan alat daripada giliran assistant terdahulu dan keputusannya menjadi sebahagian daripada kiraan, pada kedua-dua endpoint.
Imej Imej yang dihantar di dalam badan (base64 atau URL data:) menambah satu token bagi setiap petak piksel 28 × 28: ceil(width / 28) × ceil(height / 28). Imej yang diberikan sebagai URL http(s) tidak dimuat turun oleh endpoint ini dan dikira 1,024.

Contoh: imej 1,024 × 768 piksel dikira ceil(1024 / 28) × ceil(768 / 28) = 37 × 28 = 1,036 token.

Kiraan dan apa yang dicaj pada permintaan

Kiraan seluruh permintaan dibuat dengan cara yang sama seperti kiraan input permintaan sebenar dengan model, mesej dan alat yang sama. Balasan melaporkan nombor itu sebagai usage.prompt_tokens pada Chat Completions, sebagai usage.input_tokens pada Responses, dan sebagai usage.input_tokens campur usage.cache_read_input_tokens pada Messages.

  • Kiraan ialah input sebelum diskaun input cached. Permintaan sebenar mungkin membaca sebahagian input itu daripada cache dan membilkan bahagian itu pada kadar cached. Caching prompt
  • Imej yang diberikan sebagai URL http(s) dikira 1,024 di sini. Permintaan sebenar memuat turun imej dan mengiranya daripada saiznya dalam piksel, jadi kedua-dua nombor boleh berbeza. Hantar imej sebagai base64 untuk mendapat nombor yang sama.
  • Output bukan sebahagian daripada kiraan. Balasan permintaan sebenar dibilkan sebagai token output di atasnya, termasuk penaakulan.
  • Kiraan text tidak mempunyai pemformatan sembang. Gunakannya untuk mengukur dokumen atau bahagian prompt, dan bentuk messages untuk mengukur permintaan.

Untuk menukar kiraan kepada kos, darabkannya dengan harga input model bagi setiap 1M token. Model & harga

Had

Had Nilai Melebihinya
Panjang text 4,000,000 bait (UTF-8) 413 dengan mesej text too long
Badan permintaan 32 MiB 413
Bagi setiap permintaan Satu teks atau satu perbualan Hantar satu permintaan bagi setiap teks untuk mengira beberapa teks.

Panggilan pengiraan tidak dikira dalam had 120 permintaan seminit. Had dan baki

Ralat

Status Jenis Mesej Bila
400 invalid_request_error tokenize is available for the hosted open models; unknown model: <model> /v1/tokenize dengan model yang bukan id open-weight yang dihoskan.
400 invalid_request_error count_tokens is available for the hosted open models; unknown model: <model> /v1/messages/count_tokens dengan model yang bukan id open-weight yang dihoskan, atau tanpa model.
400 invalid_request_error send `text` or `messages` /v1/tokenize tanpa text mahupun messages.
401 authentication_error Missing authentication / Invalid API key Tiada kunci dihantar, atau kunci tidak sah.
413 invalid_request_error text too long text lebih panjang daripada 4,000,000 bait. Badan melebihi 32 MiB juga dijawab dengan 413.
415 invalid_request_error Expected request with `Content-Type: application/json` Permintaan tidak mempunyai jenis kandungan JSON.
422 invalid_request_error Failed to deserialize the JSON body into the target type: … Medan wajib tiada (model pada /v1/tokenize, messages pada /v1/messages/count_tokens) atau sesuatu medan mempunyai jenis yang salah.
503 api_error token counting is temporarily unavailable for this model Kiraan tidak dapat dibuat untuk model ini buat masa ini. Cuba lagi kemudian.

/v1/tokenize memulangkan ralat dalam bentuk OpenAI. Pada /v1/messages/count_tokens, ralat endpoint itu sendiri (400 untuk model, 503) datang dalam bentuk Anthropic, dan 401, 413, 415 serta 422 datang dalam bentuk OpenAI. Baca kod status dahulu, kemudian error.type dan error.message, yang wujud dalam kedua-dua bentuk.

400 /v1/tokenize
{
  "error": {
    "type": "invalid_request_error",
    "message": "tokenize is available for the hosted open models; unknown model: shannon-3"
  }
}
400 /v1/messages/count_tokens
{
  "type": "error",
  "error": {
    "type": "invalid_request_error",
    "message": "count_tokens is available for the hosted open models; unknown model: shannon-3"
  }
}