Přeskočit na obsah
Počítání tokenů

Počítání tokenů

Spočítejte tokeny textu nebo celého požadavku dřív, než jej pošlete.

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

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

Oba endpointy počítají tokenizerem modelu, který pojmenujete, a žádný model neběží. Pokrývají hostované modely s otevřenými váhami. /v1/tokenize přijímá prostý text nebo konverzaci ve formátu Chat Completions. /v1/messages/count_tokens přijímá požadavek ve formátu Anthropic Messages, což je volání, které provádí SDK Anthropic a Claude Code.

Počítání je zdarma. Volání potřebuje váš klíč API, nic neodebírá ze zůstatku a neobjeví se v protokolu využití.

Počítání textu

Pošlete model a text. Text se počítá tak, jak je, bez chatového formátování kolem něj.

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 Odpověď
{
  "model": "DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
  "tokens": 3
}

Čísla v odpovědích na této stránce jsou příklady. Stejný text dává u jiného modelu jiný počet.

Počítání chatového požadavku

Pošlete model a messages, s tools, pokud je požadavek má, přesně tak, jak byste je poslali na /v1/chat/completions. Odpověď je velikost celého vstupu.

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 Odpověď
{
  "model": "DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
  "tokens": 164
}

Pole /v1/tokenize

Pole Typ Popis
model string Povinné. Id hostovaného modelu s otevřenými váhami. Velká a malá písmena se berou stejně.
text string Text, který se počítá tak, jak je, bez chatového formátování. Až 4,000,000 bajtů. Pošlete text nebo messages; když jsou přítomny obě, počítá se text.
messages array Chatové zprávy ve formátu Chat Completions. Počítají se jako celý vstup požadavku: každá zpráva s formátováním, které kolem ní vloží chatová šablona modelu.
tools array Definice nástrojů, které se mají zahrnout do počtu. Používají se spolu s messages.

Odpověď je objekt JSON s těmito poli:

Pole Typ Popis
model string Id modelu, pro který se počítalo, ve zveřejněném zápisu.
tokens integer U text: tokeny textu. U messages: tokeny celého vstupu, včetně obrázků.

Počítání požadavku Messages

Pošlete tělo, které byste poslali na /v1/messages: model, messages a system a tools, pokud je používáte. Oficiální SDK Anthropic volají tento endpoint přes 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 Odpověď
{
  "input_tokens": 21
}

Pole /v1/messages/count_tokens

Pole Typ Popis
model string Povinné. Id hostovaného modelu s otevřenými váhami.
messages array Povinné. Zprávy ve formátu Anthropic Messages. Počítají se bloky text, image, tool_use a tool_result.
system string | array Systémový prompt: řetězec nebo pole textových bloků.
tools array Definice nástrojů s name, description a input_schema.

Přijímáno kvůli kompatibilitě, bez vlivu na počet: tool_choice, max_tokens, temperature, top_p, stop_sequences, stream, thinking. Můžete předat tělo skutečného požadavku beze změny.

Odpověď je objekt JSON s těmito poli:

Pole Typ Popis
input_tokens integer Tokeny celého vstupu: systémový prompt, zprávy, nástroje a obrázky.

Podporované modely

Oba endpointy počítají pro hostované modely s otevřenými váhami. GET /v1/models uvádí /v1/tokenize a /v1/messages/count_tokens v endpoints každého modelu, který je podporuje. Na jakoukoli jinou hodnotu model, včetně id Shannon, se odpoví 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

U modelu Shannon čtěte počty tokenů z objektu usage odpovědi.

Jak se počítá

Každý model se počítá vlastním tokenizerem a vlastní chatovou šablonou. Nepoužívá se žádný odhad ze znaků nebo slov.

Co se počítá Pravidlo
Text Tokeny řetězce tak, jak byl poslán. Prázdný řetězec se počítá jako 0.
Zprávy Zprávy a nástroje se rozloží vlastní chatovou šablonou modelu až do místa, kde odpověď začíná, a počítá se celý tento prompt.
Role Počítají se zprávy system, user, assistant a tool. developer se počítá jako system. Zpráva bez obsahu a bez volání nástroje nepřidá nic.
Volání nástrojů a výsledky Volání nástrojů z dřívějších kol asistenta a jejich výsledky jsou součástí počtu, na obou endpointech.
Obrázky Obrázek poslaný uvnitř těla (base64 nebo URL data:) přidá jeden token na čtverec 28 × 28 pixelů: ceil(width / 28) × ceil(height / 28). Obrázek zadaný jako URL http(s) tyto endpointy nestahují a počítají jej jako 1,024.

Příklad: obrázek 1,024 × 768 pixelů se počítá jako ceil(1024 / 28) × ceil(768 / 28) = 37 × 28 = 1,036 tokenů.

Počet a to, co se požadavku účtuje

Počet celého požadavku se dělá stejným způsobem jako počet vstupu skutečného požadavku se stejným modelem, zprávami a nástroji. Odpověď toto číslo hlásí jako usage.prompt_tokens u Chat Completions, jako usage.input_tokens u Responses a jako usage.input_tokens plus usage.cache_read_input_tokens u Messages.

  • Počet je vstup před slevou za cachovaný vstup. Skutečný požadavek může část tohoto vstupu číst z cache a tuto část účtovat za cachovanou sazbu. Caching promptů
  • Obrázek zadaný jako URL http(s) se zde počítá jako 1,024. Skutečný požadavek obrázek stáhne a počítá jej podle velikosti v pixelech, takže se obě čísla mohou lišit. Pošlete obrázek jako base64, abyste dostali stejné číslo.
  • Výstup není součástí počtu. Odpověď skutečného požadavku se navíc účtuje jako výstupní tokeny, včetně uvažování.
  • Počet pro text nemá chatové formátování. Použijte jej k měření dokumentu nebo části promptu a formu messages k měření požadavku.

Chcete-li počet převést na náklady, vynásobte jej cenou vstupu modelu za 1M tokenů. Modely a ceny

Limity

Limit Hodnota Nad ním
Délka text 4,000,000 bajtů (UTF-8) 413 se zprávou text too long
Tělo požadavku 32 MiB 413
Na požadavek Jeden text nebo jedna konverzace Chcete-li spočítat více textů, pošlete jeden požadavek na každý text.

Volání pro počítání se nezapočítávají do limitu 120 požadavků za minutu. Limity a zůstatek

Chyby

Status Typ Zpráva Kdy
400 invalid_request_error tokenize is available for the hosted open models; unknown model: <model> /v1/tokenize s model, který není id hostovaného modelu s otevřenými váhami.
400 invalid_request_error count_tokens is available for the hosted open models; unknown model: <model> /v1/messages/count_tokens s model, který není id hostovaného modelu s otevřenými váhami, nebo bez model.
400 invalid_request_error send `text` or `messages` /v1/tokenize bez text i bez messages.
401 authentication_error Missing authentication / Invalid API key Nebyl poslán žádný klíč, nebo klíč není platný.
413 invalid_request_error text too long text je delší než 4,000,000 bajtů. Na tělo nad 32 MiB se také odpoví 413.
415 invalid_request_error Expected request with `Content-Type: application/json` Požadavek nemá typ obsahu JSON.
422 invalid_request_error Failed to deserialize the JSON body into the target type: … Chybí povinné pole (model na /v1/tokenize, messages na /v1/messages/count_tokens), nebo má některé pole špatný typ.
503 api_error token counting is temporarily unavailable for this model Počet se pro tento model v tuto chvíli nedá udělat. Zkuste to později.

/v1/tokenize vrací chyby ve tvaru OpenAI. Na /v1/messages/count_tokens přicházejí chyby samotného endpointu (400 pro model, 503) ve tvaru Anthropic a 401, 413, 415 a 422 ve tvaru OpenAI. Čtěte nejdřív stavový kód, potom error.type a error.message, které jsou přítomny v obou tvarech.

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"
  }
}