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"]) const response = await fetch("https://api.shannon-ai.com/v1/tokenize", {
method: "POST",
headers: {
Authorization: "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
model: "DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
text: "Hello, world",
}),
});
const { tokens } = await response.json();
console.log(tokens); curl https://api.shannon-ai.com/v1/tokenize \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
"text": "Hello, world"
}' {
"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"]) const 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"],
},
},
},
],
};
const response = await fetch("https://api.shannon-ai.com/v1/tokenize", {
method: "POST",
headers: {
Authorization: "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify(request),
});
const { tokens } = await response.json();
console.log(tokens); curl https://api.shannon-ai.com/v1/tokenize \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"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"]
}
}
}
]
}' {
"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) import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic({
apiKey: "YOUR_API_KEY",
baseURL: "https://api.shannon-ai.com",
});
const count = await client.messages.countTokens({
model: "DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
system: "You are a concise assistant.",
messages: [
{ role: "user", content: "Summarise the attached report." },
],
});
console.log(count.input_tokens); curl https://api.shannon-ai.com/v1/messages/count_tokens \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
"system": "You are a concise assistant.",
"messages": [
{"role": "user", "content": "Summarise the attached report."}
]
}' {
"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-REAPGLM-5.2-3BIT-REAPKimi-K3-3BIT-REAPNemotron3Ultra-3BIT-REAPMiniMax-M3-3BIT-REAPDeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAPKimi-K2.6-W4A16-AUTOROUND-REAPLaguna-S-2.1-W4A16-AUTOROUND-REAPinkling-W4A16-AUTOROUND-REAPMiMo-V2.5-Pro-W8A16MiMo-V2.5-W8A16Hy3-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ą.
textskaičius pokalbio formatavimo neturi. Naudokite jį dokumentui ar užklausos daliai išmatuoti, omessagesformą – 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.
{
"error": {
"type": "invalid_request_error",
"message": "tokenize is available for the hosted open models; unknown model: shannon-3"
}
} {
"type": "error",
"error": {
"type": "invalid_request_error",
"message": "count_tokens is available for the hosted open models; unknown model: shannon-3"
}
}