Pereiti prie turinio
Tokenų skaičiavimas

Tokenų skaičiavimas

Suskaičiuokite teksto ar visos užklausos tokenus prieš ją siųsdami.

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

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

Abu galiniai taškai skaičiuoja jūsų nurodyto modelio tokenizatoriumi, ir joks modelis nepaleidžiamas. Jie apima talpinamus atvirų svorių modelius. /v1/tokenize priima paprastą tekstą arba Chat Completions pokalbį. /v1/messages/count_tokens priima užklausą Anthropic Messages formatu – tai kreipinys, kurį atlieka Anthropic SDK ir Claude Code.

Skaičiavimas nemokamas. Kreipiniui reikia jūsų API rakto, jis nieko neima iš jūsų balanso ir nerodomas jūsų naudojimo žurnale.

Teksto skaičiavimas

Siųskite model ir text. Tekstas skaičiuojamas toks, koks yra, be aplink jį esančio pokalbio formatavimo.

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

Šiame puslapyje atsakymuose esantys skaičiai yra pavyzdžiai. Tas pats tekstas kitame modelyje duoda kitokį skaičių.

Pokalbio užklausos skaičiavimas

Siųskite model ir messages, o kai užklausa jų turi – ir tools, lygiai taip, kaip siųstumėte į /v1/chat/completions. Atsakymas yra visos įvesties dydis.

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

/v1/tokenize laukai

Laukas Tipas Aprašymas
model string Privaloma. Talpinamo atvirų svorių modelio id. Didžiosios ir mažosios raidės traktuojamos vienodai.
text string Tekstas, skaičiuojamas toks, koks yra, be pokalbio formatavimo. Iki 4,000,000 baitų. Siųskite text arba messages; kai yra abu, skaičiuojamas text.
messages array Pokalbio pranešimai Chat Completions formatu. Jie skaičiuojami kaip visa užklausos įvestis: kiekvienas pranešimas su formatavimu, kurį aplink jį deda modelio pokalbio šablonas.
tools array Įrankių apibrėžimai, įtraukiami į skaičių. Naudojami kartu su messages.

Atsakymas yra JSON objektas su šiais laukais:

Laukas Tipas Aprašymas
model string Modelio id, kuriam skaičius apskaičiuotas, paskelbtu rašymo būdu.
tokens integer Su text: teksto tokenai. Su messages: visos įvesties tokenai, įskaitant vaizdus.

Messages užklausos skaičiavimas

Siųskite turinį, kurį siųstumėte į /v1/messages: model, messages, o jei naudojate – system ir tools. Oficialūs Anthropic SDK šį galinį tašką kviečia per 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 Atsakymas
{
  "input_tokens": 21
}

/v1/messages/count_tokens laukai

Laukas Tipas Aprašymas
model string Privaloma. Talpinamo atvirų svorių modelio id.
messages array Privaloma. Pranešimai Anthropic Messages formatu. Skaičiuojami text, image, tool_use ir tool_result blokai.
system string | array Sistemos nurodymas: eilutė arba teksto blokų masyvas.
tools array Įrankių apibrėžimai su name, description ir input_schema.

Dėl suderinamumo priimama, skaičiui poveikio neturi: tool_choice, max_tokens, temperature, top_p, stop_sequences, stream, thinking. Galite perduoti tikros užklausos turinį nepakeistą.

Atsakymas yra JSON objektas su šiais laukais:

Laukas Tipas Aprašymas
input_tokens integer Visos įvesties tokenai: sistemos nurodymas, pranešimai, įrankiai ir vaizdai.

Palaikomi modeliai

Abu galiniai taškai skaičiuoja talpinamiems atvirų svorių modeliams. GET /v1/models kiekvieno juos palaikančio modelio endpoints išvardija /v1/tokenize ir /v1/messages/count_tokens. Į bet kurią kitą model reikšmę, įskaitant Shannon id, atsakoma 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

Shannon modelio tokenų skaičių skaitykite iš atsakymo objekto usage.

Kaip skaičiuojama

Kiekvienas modelis skaičiuojamas savo tokenizatoriumi ir savo pokalbio šablonu. Įverčiai pagal simbolius ar žodžius nenaudojami.

Kas skaičiuojama Taisyklė
Tekstas Eilutės tokenai tokie, kokia išsiųsta. Tuščia eilutė skaičiuojama kaip 0.
Pranešimai Pranešimai ir įrankiai išdėstomi pagal paties modelio pokalbio šabloną iki vietos, kurioje prasideda atsakymas, ir skaičiuojamas visas tas nurodymas.
Vaidmenys Skaičiuojami system, user, assistant ir tool pranešimai. developer skaičiuojamas kaip system. Pranešimas be turinio ir be įrankio kreipinio nieko neprideda.
Įrankių kreipiniai ir rezultatai Ankstesnių asistento ėjimų įrankių kreipiniai ir jų rezultatai įeina į skaičių abiejuose galiniuose taškuose.
Vaizdai Turinyje išsiųstas vaizdas (base64 arba data: URL) prideda po vieną tokeną kiekvienam 28 × 28 pikselių lopinėliui: ceil(width / 28) × ceil(height / 28). Vaizdo, nurodyto kaip http(s) URL, šie galiniai taškai neatsisiunčia ir skaičiuoja jį kaip 1,024.

Pavyzdys: 1,024 × 768 pikselių vaizdas skaičiuojamas kaip ceil(1024 / 28) × ceil(768 / 28) = 37 × 28 = 1,036 tokenai.

Skaičius ir tai, kiek apmokestinama užklausa

Visos užklausos skaičius apskaičiuojamas taip pat kaip tikros užklausos su tuo pačiu modeliu, pranešimais ir įrankiais įvesties skaičius. Atsakymas šį skaičių nurodo kaip usage.prompt_tokens kelyje Chat Completions, kaip usage.input_tokens kelyje Responses ir kaip usage.input_tokens plius usage.cache_read_input_tokens kelyje Messages.

  • Skaičius yra įvestis prieš kešuotos įvesties nuolaidą. Tikra užklausa dalį tos įvesties gali nuskaityti iš kešo ir apmokestinti tą dalį kešo tarifu. Užklausų kešavimas
  • Vaizdas, nurodytas kaip http(s) URL, čia skaičiuojamas kaip 1,024. Tikra užklausa vaizdą atsisiunčia ir skaičiuoja pagal jo dydį pikseliais, todėl du skaičiai gali skirtis. Siųskite vaizdą kaip base64, kad gautumėte tą patį skaičių.
  • Išvestis į skaičių neįeina. Tikros užklausos atsakymas papildomai apmokestinamas kaip išvesties tokenai, įskaitant mąstymą.
  • text skaičius pokalbio formatavimo neturi. Naudokite jį dokumentui ar užklausos daliai išmatuoti, o messages formą – užklausai išmatuoti.

Norėdami skaičių paversti kaina, padauginkite jį iš modelio įvesties kainos už 1M tokenų. Modeliai ir kainos

Ribos

Riba Reikšmė Viršijus
text ilgis 4,000,000 baitų (UTF-8) 413 su pranešimu text too long
Užklausos turinys 32 MiB 413
Vienai užklausai Vienas tekstas arba vienas pokalbis Kelių tekstų skaičiavimui kiekvienam tekstui siųskite atskirą užklausą.

Skaičiavimo kreipiniai neįskaičiuojami į 120 užklausų per minutę ribą. Ribos ir balansas

Klaidos

Būsena Tipas Pranešimas Kada
400 invalid_request_error tokenize is available for the hosted open models; unknown model: <model> /v1/tokenize su model, kuris nėra talpinamo atvirų svorių modelio id.
400 invalid_request_error count_tokens is available for the hosted open models; unknown model: <model> /v1/messages/count_tokens su model, kuris nėra talpinamo atvirų svorių modelio id, arba be model.
400 invalid_request_error send `text` or `messages` /v1/tokenize be text ir be messages.
401 authentication_error Missing authentication / Invalid API key Raktas nebuvo išsiųstas arba raktas netinkamas.
413 invalid_request_error text too long text ilgesnis nei 4,000,000 baitų. Į turinį, didesnį nei 32 MiB, taip pat atsakoma 413.
415 invalid_request_error Expected request with `Content-Type: application/json` Užklausa neturi JSON turinio tipo.
422 invalid_request_error Failed to deserialize the JSON body into the target type: … Trūksta privalomo lauko (model kelyje /v1/tokenize, messages kelyje /v1/messages/count_tokens) arba laukas turi netinkamą tipą.
503 api_error token counting is temporarily unavailable for this model Šiam modeliui skaičiaus šiuo metu apskaičiuoti negalima. Pabandykite vėliau.

/v1/tokenize klaidas grąžina OpenAI forma. Kelyje /v1/messages/count_tokens paties galinio taško klaidos (400 dėl modelio, 503) ateina Anthropic forma, o 401, 413, 415 ir 422 – OpenAI forma. Pirmiausia skaitykite būsenos kodą, paskui error.type ir error.message, kurie yra abiejose formose.

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