Gå til indhold
Tælling af tokens

Tælling af tokens

Tæl tokens i en tekst eller i en hel anmodning, før du sender den.

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

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

Begge endpoints tæller med tokenizeren for den model, du angiver, og ingen model kører. De dækker de hostede open-weight-modeller. /v1/tokenize tager en ren tekst eller en Chat Completions-samtale. /v1/messages/count_tokens tager en anmodning i Anthropic Messages-formatet, som er det kald, Anthropic-SDK'et og Claude Code foretager.

Tælling er gratis. Et kald kræver din API-nøgle, tager intet fra din saldo og vises ikke i din forbrugslog.

Tæl en tekst

Send model og text. Teksten tælles, som den er, uden chatformatering omkring sig.

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

Tallene i svarene på denne side er eksempler. Den samme tekst giver en anden tælling på en anden model.

Tæl en chatanmodning

Send model og messages, med tools, når anmodningen har dem, præcis som du ville sende dem til /v1/chat/completions. Svaret er størrelsen af hele inputtet.

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

Felter i /v1/tokenize

Felt Type Beskrivelse
model string Påkrævet. Et id på en hostet open-weight-model. Store og små bogstaver behandles ens.
text string En tekst, der tælles, som den er, uden chatformatering. Op til 4,000,000 bytes. Send text eller messages; når begge er til stede, tælles text.
messages array Chatbeskeder i Chat Completions-formatet. De tælles som en anmodnings fulde input: hver besked med den formatering, som modellens chatskabelon lægger omkring den.
tools array Værktøjsdefinitioner, der skal med i tællingen. Bruges sammen med messages.

Svaret er et JSON-objekt med disse felter:

Felt Type Beskrivelse
model string Det model-id, tællingen blev foretaget for, i dets offentliggjorte stavemåde.
tokens integer Med text: tekstens tokens. Med messages: tokens i hele inputtet, billeder inklusive.

Tæl en Messages-anmodning

Send den body, du ville sende til /v1/messages: model, messages, og system og tools, når du bruger dem. De officielle Anthropic-SDK'er kalder dette endpoint via 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 Svar
{
  "input_tokens": 21
}

Felter i /v1/messages/count_tokens

Felt Type Beskrivelse
model string Påkrævet. Et id på en hostet open-weight-model.
messages array Påkrævet. Beskeder i Anthropic Messages-formatet. Blokkene text, image, tool_use og tool_result tælles.
system string | array Systemprompten: en streng eller et array af tekstblokke.
tools array Værktøjsdefinitioner med name, description og input_schema.

Accepteret af hensyn til kompatibilitet, uden virkning på tællingen: tool_choice, max_tokens, temperature, top_p, stop_sequences, stream, thinking. Du kan sende body'en fra en reel anmodning uændret.

Svaret er et JSON-objekt med disse felter:

Felt Type Beskrivelse
input_tokens integer Tokens i hele inputtet: systemprompt, beskeder, værktøjer og billeder.

Understøttede modeller

Begge endpoints tæller for de hostede open-weight-modeller. GET /v1/models opregner /v1/tokenize og /v1/messages/count_tokens i endpoints for hver model, der understøtter dem. Enhver anden model-værdi, Shannon-id'er inklusive, besvares med 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

For en Shannon-model kan du læse token-tællingerne fra usage-objektet i et svar.

Hvordan tællingen foretages

Hver model tælles med sin egen tokenizer og sin egen chatskabelon. Der bruges intet skøn ud fra tegn eller ord.

Hvad der tælles Regel
En tekst Strengens tokens, som den er sendt. En tom streng tæller 0.
Beskeder Beskederne og værktøjerne lægges op med modellens egen chatskabelon, indtil det sted hvor svaret begynder, og hele den prompt tælles.
Roller Beskeder med system, user, assistant og tool tælles. developer tælles som system. En besked uden indhold og uden værktøjskald tilføjer intet.
Værktøjskald og resultater Værktøjskald fra tidligere assistent-ture og deres resultater indgår i tællingen, på begge endpoints.
Billeder Et billede sendt inde i body'en (base64 eller en data:-URL) tilføjer én token per felt på 28 × 28 pixel: ceil(width / 28) × ceil(height / 28). Et billede angivet som en http(s)-URL downloades ikke af disse endpoints og tæller 1,024.

Eksempel: et billede på 1,024 × 768 pixel tæller ceil(1024 / 28) × ceil(768 / 28) = 37 × 28 = 1,036 tokens.

Tællingen og hvad en anmodning afregnes for

Tællingen af en hel anmodning foretages på samme måde som inputtællingen af en reel anmodning med samme model, beskeder og værktøjer. Et svar melder det tal som usage.prompt_tokens på Chat Completions, som usage.input_tokens på Responses og som usage.input_tokens plus usage.cache_read_input_tokens på Messages.

  • Tællingen er inputtet før rabatten for cached input. En reel anmodning kan læse en del af det input fra cachen og afregne den del til cachetaksten. Prompt-caching
  • Et billede angivet som en http(s)-URL tæller her 1,024. En reel anmodning downloader billedet og tæller det ud fra dets størrelse i pixel, så de to tal kan afvige. Send billedet som base64 for at få det samme tal.
  • Output er ikke en del af tællingen. Svaret på en reel anmodning afregnes som output-tokens oveni, ræsonnement inklusive.
  • En text-tælling har ingen chatformatering. Brug den til at måle et dokument eller en del af en prompt, og messages-formen til at måle en anmodning.

For at omsætte en tælling til en omkostning skal du gange den med modellens inputpris per 1M tokens. Modeller og priser

Grænser

Grænse Værdi Over den
Længden af text 4,000,000 bytes (UTF-8) 413 med beskeden text too long
Anmodningens body 32 MiB 413
Per anmodning Én tekst eller én samtale Send én anmodning per tekst for at tælle flere tekster.

Tællekald tælles ikke med i grænsen på 120 anmodninger per minut. Grænser og saldo

Fejl

Status Type Besked Hvornår
400 invalid_request_error tokenize is available for the hosted open models; unknown model: <model> /v1/tokenize med en model, der ikke er et id på en hostet open-weight-model.
400 invalid_request_error count_tokens is available for the hosted open models; unknown model: <model> /v1/messages/count_tokens med en model, der ikke er et id på en hostet open-weight-model, eller uden model.
400 invalid_request_error send `text` or `messages` /v1/tokenize hverken med text eller messages.
401 authentication_error Missing authentication / Invalid API key Der blev ikke sendt nogen nøgle, eller nøglen er ugyldig.
413 invalid_request_error text too long text er længere end 4,000,000 bytes. En body over 32 MiB besvares også med 413.
415 invalid_request_error Expected request with `Content-Type: application/json` Anmodningen har ingen JSON-indholdstype.
422 invalid_request_error Failed to deserialize the JSON body into the target type: … Et påkrævet felt mangler (model på /v1/tokenize, messages på /v1/messages/count_tokens), eller et felt har den forkerte type.
503 api_error token counting is temporarily unavailable for this model Tællingen kan ikke foretages for denne model i øjeblikket. Prøv igen senere.

/v1/tokenize returnerer fejl i OpenAI-formen. På /v1/messages/count_tokens kommer endpointets egne fejl (400 for modellen, 503) i Anthropic-formen, og 401, 413, 415 og 422 kommer i OpenAI-formen. Læs først statuskoden, derefter error.type og error.message, som findes i begge former.

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