Preskoči na vsebino
Štetje tokenov

Štetje tokenov

Preštejte tokene besedila ali celotnega zahtevka, preden ga pošljete.

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

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

Obe končni točki štejeta s tokenizerjem modela, ki ga navedete, in noben model se ne zažene. Zajemata gostovane modele z odprtimi utežmi. /v1/tokenize sprejme golo besedilo ali pogovor Chat Completions. /v1/messages/count_tokens sprejme zahtevek v formatu Anthropic Messages, kar je klic, ki ga delata SDK Anthropic in Claude Code.

Štetje je brezplačno. Klic potrebuje vaš API ključ, ne vzame ničesar z vašega stanja in se ne pojavi v dnevniku vaše porabe.

Štetje besedila

Pošljite model in text. Besedilo se šteje, kot je, brez oblikovanja za klepet okoli njega.

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

Števila v odgovorih na tej strani so primeri. Isto besedilo na drugem modelu da drugačno število.

Štetje zahtevka za klepet

Pošljite model in messages, s tools, kadar jih zahtevek ima, natanko tako, kot bi jih poslali na /v1/chat/completions. Odgovor je velikost celotnega vhoda.

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

Polja /v1/tokenize

Polje Tip Opis
model string Obvezno. Id gostovanega modela z odprtimi utežmi. Velike in male črke se obravnavajo enako.
text string Besedilo, ki se šteje, kot je, brez oblikovanja za klepet. Do 4,000,000 bajtov. Pošljite text ali messages; kadar sta prisotna oba, se šteje text.
messages array Sporočila klepeta v formatu Chat Completions. Štejejo se kot celoten vhod zahtevka: vsako sporočilo z oblikovanjem, ki ga okoli njega postavi predloga za klepet modela.
tools array Definicije orodij, ki naj bodo vključene v štetje. Uporabljajo se skupaj z messages.

Odgovor je objekt JSON s temi polji:

Polje Tip Opis
model string Id modela, za katerega je bilo štetje opravljeno, v objavljenem zapisu.
tokens integer Pri text: tokeni besedila. Pri messages: tokeni celotnega vhoda, vključno s slikami.

Štetje zahtevka Messages

Pošljite telo, ki bi ga poslali na /v1/messages: model, messages ter system in tools, kadar ju uporabljate. Uradni SDK-ji Anthropic to končno točko kličejo prek 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 Odgovor
{
  "input_tokens": 21
}

Polja /v1/messages/count_tokens

Polje Tip Opis
model string Obvezno. Id gostovanega modela z odprtimi utežmi.
messages array Obvezno. Sporočila v formatu Anthropic Messages. Štejejo se bloki text, image, tool_use in tool_result.
system string | array Sistemski prompt: niz ali polje besedilnih blokov.
tools array Definicije orodij z name, description in input_schema.

Sprejeto zaradi združljivosti, brez vpliva na štetje: tool_choice, max_tokens, temperature, top_p, stop_sequences, stream, thinking. Telo pravega zahtevka lahko podate nespremenjeno.

Odgovor je objekt JSON s temi polji:

Polje Tip Opis
input_tokens integer Tokeni celotnega vhoda: sistemski prompt, sporočila, orodja in slike.

Podprti modeli

Obe končni točki štejeta za gostovane modele z odprtimi utežmi. GET /v1/models navaja /v1/tokenize in /v1/messages/count_tokens v endpoints vsakega modela, ki ju podpira. Na vsako drugo vrednost model, vključno z id Shannon, se odgovori z 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

Pri modelu Shannon števila tokenov preberite iz objekta usage v odgovoru.

Kako se šteje

Vsak model se šteje z lastnim tokenizerjem in lastno predlogo za klepet. Ocena po znakih ali besedah se ne uporablja.

Kaj se šteje Pravilo
Besedilo Tokeni niza, kot je poslan. Prazen niz se šteje 0.
Sporočila Sporočila in orodja se razporedijo z modelovo lastno predlogo za klepet, do točke, kjer se začne odgovor, in šteje se ves ta prompt.
Vloge Štejejo se sporočila system, user, assistant in tool. developer se šteje kot system. Sporočilo brez vsebine in brez klica orodja ne doda nič.
Klici orodij in rezultati Klici orodij prejšnjih obratov asistenta in njihovi rezultati so del štetja, na obeh končnih točkah.
Slike Slika, poslana znotraj telesa (base64 ali URL data:), doda en token na košček 28 × 28 pikslov: ceil(width / 28) × ceil(height / 28). Slike, podane kot URL http(s), ti končni točki ne prenašata in se šteje 1,024.

Primer: slika 1,024 × 768 pikslov se šteje ceil(1024 / 28) × ceil(768 / 28) = 37 × 28 = 1,036 tokenov.

Število in kaj se zahtevku obračuna

Štetje celotnega zahtevka poteka enako kot štetje vhoda pravega zahtevka z istim modelom, sporočili in orodji. Odgovor to število sporoča kot usage.prompt_tokens pri Chat Completions, kot usage.input_tokens pri Responses in kot usage.input_tokens plus usage.cache_read_input_tokens pri Messages.

  • Število je vhod pred popustom za predpomnjen vhod. Pravi zahtevek lahko del tega vhoda prebere iz predpomnilnika in ta del obračuna po predpomnjeni ceni. Predpomaganje promptov
  • Slika, podana kot URL http(s), se tu šteje 1,024. Pravi zahtevek sliko prenese in jo šteje po velikosti v pikslih, zato se števili lahko razlikujeta. Sliko pošljite kot base64, da dobite isto število.
  • Izhod ni del štetja. Odgovor pravega zahtevka se obračuna kot izhodni tokeni povrhu, vključno z razmišljanjem.
  • Štetje text nima oblikovanja za klepet. Uporabite ga za merjenje dokumenta ali dela prompta, obliko messages pa za merjenje zahtevka.

Če želite število pretvoriti v strošek, ga pomnožite z vhodno ceno modela za 1M tokenov. Modeli in cene

Omejitve

Omejitev Vrednost Nad njo
Dolžina text 4,000,000 bajtov (UTF-8) 413 s sporočilom text too long
Telo zahtevka 32 MiB 413
Na zahtevek Eno besedilo ali en pogovor Za štetje več besedil pošljite po en zahtevek na besedilo.

Klici za štetje se ne vštevajo v omejitev 120 zahtevkov na minuto. Omejitve in stanje

Napake

Status Tip Sporočilo Kdaj
400 invalid_request_error tokenize is available for the hosted open models; unknown model: <model> /v1/tokenize z model, ki ni id gostovanega modela z odprtimi utežmi.
400 invalid_request_error count_tokens is available for the hosted open models; unknown model: <model> /v1/messages/count_tokens z model, ki ni id gostovanega modela z odprtimi utežmi, ali brez model.
400 invalid_request_error send `text` or `messages` /v1/tokenize brez text in brez messages.
401 authentication_error Missing authentication / Invalid API key Ključ ni bil poslan ali ni veljaven.
413 invalid_request_error text too long text je daljši od 4,000,000 bajtov. Na telo nad 32 MiB se prav tako odgovori z 413.
415 invalid_request_error Expected request with `Content-Type: application/json` Zahtevek nima tipa vsebine JSON.
422 invalid_request_error Failed to deserialize the JSON body into the target type: … Manjka obvezno polje (model na /v1/tokenize, messages na /v1/messages/count_tokens) ali pa ima polje napačen tip.
503 api_error token counting is temporarily unavailable for this model Štetja za ta model trenutno ni mogoče opraviti. Poskusite znova pozneje.

/v1/tokenize vrača napake v obliki OpenAI. Na /v1/messages/count_tokens napake same končne točke (400 za model, 503) pridejo v obliki Anthropic, 401, 413, 415 in 422 pa v obliki OpenAI. Najprej preberite statusno kodo, nato error.type in error.message, ki sta prisotna v obeh oblikah.

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