Ugrás a tartalomra
Tokenszámlálás

Tokenszámlálás

Számold meg egy szöveg vagy egy teljes kérés tokenjeit, mielőtt elküldöd.

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

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

Mindkét végpont a megnevezett modell tokenizerével számol, és nem fut modell. A hosztolt nyílt súlyú modelleket fedik le. A /v1/tokenize sima szöveget vagy Chat Completions beszélgetést fogad. A /v1/messages/count_tokens Anthropic Messages formátumú kérést fogad, ezt a hívást végzi az Anthropic SDK és a Claude Code.

A számlálás ingyenes. A híváshoz az API-kulcsod kell, nem von le semmit az egyenlegedből, és nem jelenik meg a használati naplódban.

Szöveg számlálása

Küldd a model és a text mezőt. A szöveget úgy számolja, ahogy van, chatformázás nélkül.

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

Az oldal válaszaiban szereplő számok példák. Ugyanaz a szöveg más modellen más számot ad.

Chatkérés számlálása

Küldd a model és a messages mezőt, a tools mezővel, ha a kérés tartalmaz ilyet, pontosan úgy, ahogy a /v1/chat/completions végpontnak küldenéd. A válasz a teljes bemenet mérete.

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

A /v1/tokenize mezői

Mező Típus Leírás
model string Kötelező. Hosztolt nyílt súlyú modell azonosítója. A kis- és nagybetűt egyformán kezeli.
text string Egy szöveg, amelyet úgy számol, ahogy van, chatformázás nélkül. Legfeljebb 4,000,000 bájt. Küldj text vagy messages mezőt; ha mindkettő jelen van, a text számít.
messages array Chatüzenetek Chat Completions formátumban. A kérés teljes bemeneteként számolja őket: minden üzenetet azzal a formázással, amelyet a modell chatsablonja köréje tesz.
tools array A számlálásba bevonandó eszközdefiníciók. A messages mezővel együtt használatos.

A válasz egy JSON-objektum ezekkel a mezőkkel:

Mező Típus Leírás
model string A modellazonosító, amelyre a számlálás készült, a közzétett írásmódjában.
tokens integer text esetén: a szöveg tokenjei. messages esetén: a teljes bemenet tokenjei, a képeket is beleértve.

Messages kérés számlálása

Küldd azt a törzset, amelyet a /v1/messages végpontnak küldenél: model, messages, és system meg tools, ha használod őket. A hivatalos Anthropic SDK-k ezt a végpontot a messages.count_tokens hívással érik el.

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 Válasz
{
  "input_tokens": 21
}

A /v1/messages/count_tokens mezői

Mező Típus Leírás
model string Kötelező. Hosztolt nyílt súlyú modell azonosítója.
messages array Kötelező. Az Anthropic Messages formátumú üzenetek. A text, image, tool_use és tool_result blokkokat számolja.
system string | array A rendszerprompt: string vagy szövegblokkok tömbje.
tools array Eszközdefiníciók name, description és input_schema mezővel.

Kompatibilitás miatt elfogadott, a számlálásra gyakorolt hatás nélkül: tool_choice, max_tokens, temperature, top_p, stop_sequences, stream, thinking. Átadhatod egy valódi kérés törzsét változtatás nélkül.

A válasz egy JSON-objektum ezekkel a mezőkkel:

Mező Típus Leírás
input_tokens integer A teljes bemenet tokenjei: rendszerprompt, üzenetek, eszközök és képek.

Támogatott modellek

Mindkét végpont a hosztolt nyílt súlyú modelleknél számol. A GET /v1/models a /v1/tokenize és a /v1/messages/count_tokens végpontot felsorolja minden olyan modell endpoints mezőjében, amely támogatja őket. Bármely más model értékre, a Shannon azonosítókat is beleértve, 400 a válasz.

  • 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

Shannon modellnél a tokenszámokat a válasz usage objektumából olvasd.

Hogyan történik a számlálás

Minden modellt a saját tokenizerével és a saját chatsablonjával számol. Karakterekből vagy szavakból való becslést nem használ.

Mit számol Szabály
Szöveg A string tokenjei úgy, ahogy elküldted. Az üres string 0-nak számít.
Üzenetek Az üzeneteket és az eszközöket a modell saját chatsablonjával rendezi el, addig a pontig, ahol a válasz kezdődik, és az egész promptot megszámolja.
Szerepek A system, user, assistant és tool üzeneteket számolja. A developer üzenetet system üzenetként számolja. A tartalom és eszközhívás nélküli üzenet nem ad hozzá semmit.
Eszközhívások és eredmények A korábbi assistant fordulók eszközhívásai és azok eredményei mindkét végponton részei a számlálásnak.
Képek A törzsben küldött kép (base64 vagy data: URL) 28 × 28 pixeles foltonként egy tokent ad hozzá: ceil(width / 28) × ceil(height / 28). Az http(s) URL-ként megadott képet ezek a végpontok nem töltik le, és 1,024-nek számítják.

Példa: egy 1,024 × 768 pixeles kép ceil(1024 / 28) × ceil(768 / 28) = 37 × 28 = 1,036 tokennek számít.

A számlálás és az, hogy mit számláz egy kérés

Egy teljes kérés számlálása ugyanúgy történik, mint a valódi kérés bemeneti számlálása ugyanazzal a modellel, üzenetekkel és eszközökkel. A válasz ezt a számot a Chat Completions végponton usage.prompt_tokens, a Responses végponton usage.input_tokens, a Messages végponton pedig usage.input_tokens plusz usage.cache_read_input_tokens néven jelenti.

  • A szám a gyorsítványos bemenet kedvezménye előtti bemenet. A valódi kérés ennek a bemenetnek egy részét gyorsítványból olvashatja, és azt a részt a gyorsítványos áron számlázhatja. Prompt gyorsítványozás
  • Az http(s) URL-ként megadott kép itt 1,024-nek számít. A valódi kérés letölti a képet, és a pixelmérete alapján számolja, így a két szám eltérhet. Küldd a képet base64 formában, hogy ugyanazt a számot kapd.
  • A kimenet nem része a számlálásnak. A valódi kérés válaszát ezen felül kimeneti tokenként számlázza, a gondolkodással együtt.
  • A text számlálás nem tartalmaz chatformázást. Dokumentum vagy prompt egy részének mérésére használd, a kérés mérésére pedig a messages formát.

Ha a számlálást költséggé akarod alakítani, szorozd meg a modell 1M tokenre vonatkozó bemeneti árával. Modellek és árak

Korlátok

Korlát Érték Fölötte
A text hossza 4,000,000 bájt (UTF-8) 413 a text too long üzenettel
Kérés törzse 32 MiB 413
Kérésenként Egy szöveg vagy egy beszélgetés Több szöveg számlálásához szövegenként külön kérést küldj.

A számláló hívások nem számítanak bele a percenkénti 120 kérés korlátjába. Korlátok és egyenleg

Hibák

Státusz Típus Üzenet Mikor
400 invalid_request_error tokenize is available for the hosted open models; unknown model: <model> A /v1/tokenize olyan model értékkel, amely nem hosztolt nyílt súlyú azonosító.
400 invalid_request_error count_tokens is available for the hosted open models; unknown model: <model> A /v1/messages/count_tokens olyan model értékkel, amely nem hosztolt nyílt súlyú azonosító, vagy model nélkül.
400 invalid_request_error send `text` or `messages` A /v1/tokenize text és messages nélkül.
401 authentication_error Missing authentication / Invalid API key Nem küldtél kulcsot, vagy a kulcs nem érvényes.
413 invalid_request_error text too long A text hosszabb 4,000,000 bájtnál. A 32 MiB feletti törzsre is 413 a válasz.
415 invalid_request_error Expected request with `Content-Type: application/json` A kérésnek nincs JSON tartalomtípusa.
422 invalid_request_error Failed to deserialize the JSON body into the target type: … Egy kötelező mező hiányzik (a /v1/tokenize végponton a model, a /v1/messages/count_tokens végponton a messages), vagy egy mező típusa hibás.
503 api_error token counting is temporarily unavailable for this model A számlálás ennél a modellnél pillanatnyilag nem végezhető el. Próbáld meg később.

A /v1/tokenize a hibákat OpenAI formában adja. A /v1/messages/count_tokens végponton a végpont saját hibái (400 a modellre, 503) Anthropic formában érkeznek, a 401, 413, 415 és 422 pedig OpenAI formában. Előbb a státuszkódot olvasd, utána az error.type és error.message mezőt, amelyek mindkét formában jelen vannak.

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