Přeskočit na obsah
16/30Kapitola 16 z 30

Context window, tokens a účet — změřeno

Změřená konverzace o 40 kolech stojí 22× svou délku v input tokens. Caching ušetří 68 %; timestamp špatně vpředu přidá 20 %.

Na této stránce

Tady je čtyřicetikolová konverzace podpory, účtovaná kolo po kole. Není na ní nic neobvyklého: vývojář se ptá na API, assistant odpovídá jedním nebo dvěma odstavci. Celá výměna má 5 090 token textu — asi osm stran.

koloprompt tokensnový textoutputnáklad tohoto kolaprůběžný součet
121318183$0.002622$0.002622
589214123$0.003260$0.014354
101 65619114$0.004680$0.035530
202 86818103$0.006972$0.094426
303 9412099$0.009070$0.174170
404 94717142$0.011598$0.274386

Čtěte druhý a třetí sloupec dohromady. V kole 40 uživatel napsal sedmnáct token a bylo mu účtováno 4 947. Otázka nebyla těžší než ta první; byla kratší. Změnilo se to, že request s sebou nesl celou konverzaci, znovu, už počtyřicáté.

Celkem input tokens účtovaných napříč těmito čtyřiceti cally: 112 617. Konverzace je dlouhá 5 090 token. Zaplatili jste za ni dvaadvacetkrát.

Tato kapitola vysvětluje, proč se to děje, jak se tomu říká na faktuře jednotlivých providerů a s kterou z pěti věcí, za které platíte, můžete něco dělat.

Zobrazit podrobnosti

Co tato kapitola potřebuje z části II.

  • Kapitola 7 postavila tokenizer. Token je jednotkou i tady — stejnou jednotkou, teď oceněnou.
  • Kapitola 9 odvodila self-attention a její náklad O(n2)O(n^2) v boxu s asymptotickou notací. Právě tento náklad je důvod, proč nějaký limit vůbec existuje, a tady na něj odkazujeme místo opakovaného výkladu.
  • Kapitola 13 změřila prefill proti decode a spočítala, kolik zabírá KV cache. Právě tyto dvě fáze jsou tím, co si ve sloupcích input a output výše ve skutečnosti kupujete.

Všechno ostatní je TypeScript, protože jde o účetnictví remote callu, ne o matematiku modelu.

Jediný nejdražší omyl v tomto byznysu je představa, že si model pamatuje konverzaci.

Nepamatuje, a mechanismus z kapitoly 13 přesně říká proč. Stav transformer během generování je KV cache: keys a values spočítané pro každý token v sekvenci. Tato cache žije po dobu jednoho requestu. Když request skončí, proces, který ji držel, může obsloužit někoho jiného a cache zmizí. Na druhé straně není žádné úložiště pro konkrétního uživatele a žádná session.

Další request proto musí přijít se vším, co má model vědět, a model tento stav znovu vybuduje tím, že před vypsáním jediného nového token provede forward pass přes celý prompt. Kapitola 15 nazvala prompt „celým stavem“. Fyzický důvod je tento: prompt je kompletní stav, protože nic jiného call nepřežije.

Context window je maximální délka tohoto prompt plus jeho odpovědi. Je to strop toho, kolik stavu můžete znovu vybudovat, ne kontejner, který mezi requesty něco drží. Říkat mu „paměť modelu“ obrací příčinnost naruby — nenaplňujete paměť, platíte za její opětovné vytvoření.

Odtud pochází těch dvaadvacet. Kolo nn nese všech n1n-1 předchozích kol, takže celkový input napříč konverzací o nn kolech je součtem rostoucí řady, tedy kvadratický:

total input  =  i=1n(s+hi)  =  Θ(n2)\text{total input} \;=\; \sum_{i=1}^{n} \big(s + h_i\big) \;=\; \Theta(n^2)

kde ss je system prompt a hih_i historie v kole ii. Proložení naměřeného kumulativního input přes an2+bnan^2 + bn během čtyřiceti kol dává 60.22n2+432.25n60.22\,n^2 + 432.25\,n, což v kole 40 predikuje 113 645 token oproti 112 617 naměřeným. Kvadratický člen dominuje a lineární člen je to, co uživatel skutečně napsal.

Věta, kterou si z této kapitoly odnést: váš účet roste se čtvercem konverzace, ne s poslední otázkou. Stejných čtyřicet otázek položených úplně bez historie by stálo $0.066036. Udržování historie stálo $0.274386. Historie účet vynásobila 4,2× a bude ho násobit dál, protože násobitelem je délka konverzace.

Proč nějaký limit vůbec existuje

Odkaz na sekci: Proč nějaký limit vůbec existuje

Okno je konečné ze dvou důvodů, které táhnou stejným směrem. První je z kapitoly 9: attention porovnává každý token s každým jiným token, takže práce této vrstvy roste se čtvercem délky sekvence. Druhý je paměť: KV cache roste s délkou sekvence lineárně a kapitola 13 tuto aritmetiku provedla — u dlouhých sekvencí je větší než weights.

Na oba limity se útočilo a ani jeden nezmizel. FlashAttention1 reorganizuje výpočet tak, aby mnohem méně četl a zapisoval do high-bandwidth memory, díky čemuž jsou dlouhé sekvence praktické, aniž by se změnil asymptotický náklad. Position Interpolation2 a YaRN3 rozšiřují použitelné okno natrénovaného modelu rescalováním positional encodings z kapitoly 9 místo retrainingu. Společně vysvětlují, proč se okna za pět let posunula z 2K na 1M.

Co ale neudělaly: neudělaly dlouhé kontexty zdarma. Zvedly strop a zjemnily sklon. Sklon pořád existuje a právě ten měří cenové tier později v této kapitole.

Skoro každý kalkulátor nákladů na internetu modeluje API call jako input tokens krát input cena plus output tokens krát output cena. V roce 2023 to byla pravda. Dnes je to špatně způsobem, který produkuje účty odchýlené dvojnásobně nebo víc oběma směry.

Existuje pět účtovatelných kategorií token:

kbelíkco to jetypická cena vůči input
uncached inputprompt tokens, které model musel zpracovat čerstvě
cache readprompt tokens obsloužené z uloženého prefixu0,1×
cache writeprompt tokens uložené do cache v tomto callu1,25× až 2×
outputtokens, které model vygeneroval a poslal vám5× až 6×
reasoningtokens, které model vygeneroval a neposlal vámoutput sazba

Tři z těch pěti před dvěma lety neexistovaly jako samostatné řádky a dva řádky cache jsou ty, ve kterých se lidé pletou, protože cache write stojí víc než obyčejný input, ne méně. Platíte prémii za uložení něčeho, abyste pak mohli platit slevu za opětovné čtení, a jestli se to vyplatí, závisí výhradně na tom, kolikrát to přečtete.

Kbelík reasoning je z kapitoly 12, teď s cenovkou, a nese detail, který stojí za přímé pojmenování: dokumentace Googlu říká, že pricing „vychází z úplných thought tokens, které model potřebuje vygenerovat, přestože z API je jako output vrácen pouze souhrn.“4 Účtují se vám tokens, které se k vám nikdy nepřenášejí. Je to jediný kbelík, jehož obsah nemůžete spočítat, zkontrolovat ani ověřit.

Teď část, která z toho dělá problém normalizace, ne problém násobení. Každý provider vykazuje tyto kbelíky pod jinými názvy a — tady je past — dva z nich používají stejné slovo pro dvě různé veličiny.

Vezměte jeden call: 4 837 token přečtených z cache, 110 čerstvých, 142 viditelných output tokens, 300 reasoning tokens.

three usage payloads, one callJSON
// OpenAI-compatible
{ "usage": { "prompt_tokens": 4947,
             "prompt_tokens_details": { "cached_tokens": 4837 },
             "completion_tokens": 442,
             "completion_tokens_details": { "reasoning_tokens": 300 } } }

// Anthropic
{ "usage": { "input_tokens": 110,
             "cache_read_input_tokens": 4837,
             "cache_creation_input_tokens": 0,
             "output_tokens": 442 } }

// Gemini
{ "usageMetadata": { "promptTokenCount": 4947,
                     "cachedContentTokenCount": 4837,
                     "candidatesTokenCount": 142,
                     "thoughtsTokenCount": 300 } }

Podívejte se na prompt_tokens: 4947 a input_tokens: 110. Obě pole jsou počet input token pro stejný prompt. OpenAI do něj cached tokens zahrnuje; Anthropic je vylučuje — jeho dokumentace identitu uvádí výslovně, total_input_tokens = cache_read_input_tokens + cache_creation_input_tokens + input_tokens.5 Anthropic input_tokens znamená „tokens po posledním cache breakpointu“.

A podívejte se na output. OpenAI i Anthropic vykazují 442, což už obsahuje 300 reasoning tokens. Gemini vykazuje 142 a 300 dává do vlastního pole. Kapitola 12 to označila jako nekompatibilitu mezi dvěma způsoby počítání stejné práce; tady vidíte, kolik to stojí.

Normalizátor má třicet řádků a není volitelný:

normalise.tsTS
export interface Usage {
  promptTokens?: number;        // input, NOT cached
  cachedInputTokens?: number;   // read from cache
  cacheWriteTokens?: number;    // written to cache on this call
  completionTokens?: number;    // output
  reasoningTokens?: number;     // billed apart from output (Gemini only)
}

const num = (v: unknown) => (typeof v === "number" && isFinite(v) ? v : 0);

export const fromOpenAI = (raw: any): Usage => {
  const u = raw.usage ?? {}, d = u.prompt_tokens_details ?? {};
  const cached = num(d.cached_tokens), write = num(d.cache_write_tokens);
  return {
    promptTokens: Math.max(0, num(u.prompt_tokens) - cached - write), 
    cachedInputTokens: cached,
    cacheWriteTokens: write,
    completionTokens: num(u.completion_tokens),   // reasoning already inside
    reasoningTokens: 0,
  };
};

export const fromAnthropic = (raw: any): Usage => {
  const u = raw.usage ?? {};
  return {
    promptTokens: num(u.input_tokens),            // already excludes cache
    cachedInputTokens: num(u.cache_read_input_tokens),
    cacheWriteTokens: num(u.cache_creation_input_tokens),
    completionTokens: num(u.output_tokens),
    reasoningTokens: 0,
  };
};

export const fromGemini = (raw: any): Usage => {
  const m = raw.usageMetadata ?? {}, cached = num(m.cachedContentTokenCount);
  return {
    promptTokens: Math.max(0, num(m.promptTokenCount) - cached),
    cachedInputTokens: cached,
    cacheWriteTokens: 0,
    completionTokens: num(m.candidatesTokenCount), // EXCLUDES thinking
    reasoningTokens: num(m.thoughtsTokenCount),    // billed at output rate
  };
};

Prožeňte tři payloady výše přes tři readery a všechny tři vyprodukují stejné Usage, a tedy stejné číslo: $0.006491. Právě tato shoda je celý smysl této vrstvy.

Když to uděláte špatně, tady je cena na stejném callu:

chybaúčtovánoodchylka
brát cached_tokens jako dodatečné k prompt_tokens$0.0161652,49× — účtujete prompt dvakrát
brát cache reads jako zdarma místo 0,1×$0.0055240,85× — spolknete 15 %
přečíst candidatesTokenCount a ignorovat thoughtsTokenCount$0.00289155 % callu zmizí

Třetí chyba je nebezpečná, protože selže potichu směrem k dobré zprávě. Váš dashboard ukazuje reasoning model, který stojí méně než polovinu toho, co skutečně stojí, a nikde nic nevyhodí chybu.

Když jsou kbelíky normalizované, cost function je krátká. Jediná ne zcela zřejmá část je tier lookup, který vysvětluje další sekce:

cost.tsTS
export interface Tier { maxPromptTokens: number | null; price: number }
export interface Pricing {
  input: Tier[]; output: Tier[];
  cachedInput?: Tier[]; cacheWrite?: Tier[]; reasoning?: Tier[];
}

const tierPrice = (tiers: Tier[] | undefined, contextSize: number, fallback?: Tier[]) => {
  const table = tiers ?? fallback;
  if (!table?.length) return 0;
  const sorted = [...table].sort(
    (a, b) => (a.maxPromptTokens ?? Infinity) - (b.maxPromptTokens ?? Infinity));
  for (const t of sorted)
    if (t.maxPromptTokens === null || contextSize <= t.maxPromptTokens) return t.price;
  return sorted[sorted.length - 1].price;
};

export function computeCost(pricing: Pricing, usage: Usage): number {
  const fresh = usage.promptTokens ?? 0;
  const read  = usage.cachedInputTokens ?? 0;
  const write = usage.cacheWriteTokens ?? 0;
  const out   = usage.completionTokens ?? 0;
  const think = usage.reasoningTokens ?? 0;
  const contextSize = fresh + read + write;   // the tier depends on the WHOLE prompt
  return fresh * tierPrice(pricing.input, contextSize)
       + read  * tierPrice(pricing.cachedInput, contextSize, pricing.input)
       + write * tierPrice(pricing.cacheWrite,  contextSize, pricing.input)
       + out   * tierPrice(pricing.output, contextSize)
       + think * tierPrice(pricing.reasoning, contextSize, pricing.output);
}

Za dvě rozhodnutí v návrhu stojí argumentovat. Fallbacky — cache ceny padající zpět na input, reasoning na output — kódují význam chybějící tabulky: reasoning tokens na Gemini jsou účtovány output sazbou, takže chybějící cena reasoning není nula, ale output cena. A contextSize sčítá všechny tři input kbelíky, ne jen ty čerstvé, protože tier se volí podle délky prompt, ne podle toho, za jak velkou část jste zaplatili plnou cenu.

Prompt caching a kolik stojí zápis

Odkaz na sekci: Prompt caching a kolik stojí zápis

Prompt cache ukládá vypočtený stav modelu pro prefix vašeho prompt, takže pozdější request se stejným prefixem přeskočí jeho přepočítání. Ze slova „prefix“ plynou čtyři vlastnosti a všechny čtyři lidi překvapují.

Cache porovnává od začátku vyrenderovaného prompt dopředu a zastaví se na prvním bytu, který se liší. Za obsah, který se objeví později v jiném pořadí, není žádný částečný kredit. OpenAI to říká natvrdo: „cache reuse vyžaduje shodu celého vyrenderovaného prefixu.“6

Pod ní se nic necachuje a nevrací se žádná chyba. U OpenAI je minimum 1 024 token pro GPT-5.6 a novější a 2 048 pro starší modely. U Anthropic se podle modelu pohybuje od 512 do 4 096 — 1 024 pro Claude Sonnet 4.5, 4 096 pro Claude Haiku 4.5. Pokud se obě cache pole vrátí jako nula, obvykle je to důvod.

Zápis stojí víc než čtení a víc než necachovat

Odkaz na sekci: Zápis stojí víc než čtení a víc než necachovat

U OpenAI a Anthropic stojí cache write 1,25× uncached input sazbu u krátkodobé cache a hodinová cache Anthropic stojí 2×. Read je 0,1×. Google za zápis neúčtuje nic, ale pronajímá storage: $4.50 za milion token za hodinu na Gemini 2.5 Pro.

Výchozí položka Anthropic žije pět minut a při každém hitu se zdarma obnoví. OpenAI ji drží alespoň třicet minut po posledním zápisu nebo reuse. A OpenAI poznamenává, že cached states žijí na jednotlivých strojích, takže request trefí cache jen tehdy, pokud je routován na stroj, který položku drží — což prompt_cache_key ovlivňuje, ale nezaručuje.

Break-even je dost malý na to, abyste ho udrželi v hlavě, a dokumentace OpenAI aritmetiku ukazuje: zapsat prefix jednou a jednou ho znovu použít stojí 1,35× jeho běžný input náklad, oproti 2× při dvojím nezacachovaném zpracování; přes deset requestů stojí jeden zápis a devět čtení 2,15× oproti 10×. Jedno reuse zaplatí zápis. Anthropic vychází stejně: jedno čtení u pětiminutové cache, dvě u hodinové cache.

Teď znovu čtyřicetikolová konverzace, s caching zapnutým a stabilním prefixem:

uncached inputcache readscache writescelkem
bez cache112 617$0.274386
caching2 887104 7834 947$0.088250

O šedesát osm procent levnější a tři čísla v tabulce si zaslouží pozornost.

Cache se nezapojí až do kola 6. Prompt dosáhne 1 024 token teprve tehdy, takže prvních pět kol se účtuje přesně jako předtím — a šesté se účtuje hůř, s 1,25× write prémií, protože právě to je kolo, které cache naplní. První read přijde v kole 7. Těch 2 887 uncached tokens v tabulce je aritmetika: hodnota pěti kol, ne šesti. Caching je sleva na dlouhé prompts a krátká konverzace z něj nemá nic.

Write prémie je $0.002474, tedy 2,8 % cached účtu. Každé kolo zapisuje svůj nový tail, čtyřicetkrát, a celá write prémie je zaokrouhlovací chyba proti tomu, co reads ušetřily. Write charge stojí za přesné pochopení proto, abyste se jí přestali bát.

Jen 2 887 token bylo účtováno plnou input cenou ze 112 617. Tak vypadá fungující cache: skoro všechno je read.

Pořadí prompt rozhoduje, jestli se něco z toho stane

Odkaz na sekci: Pořadí prompt rozhoduje, jestli se něco z toho stane

Tady je selhání, které stojí skutečné peníze, a je to jednořádkový bug.

Dejte něco, co se při každém callu mění, blízko začátku prompt — timestamp, request id, jméno uživatele, řádek „dnes je“, čerstvě vyhledaný dokument — a prefix se liší od prvního bytu. Nic se neshoduje. Každý call je miss. A protože každý call představuje nový prefix, každý call také zapisuje.

Stejná konverzace, stejných čtyřicet kol, caching zapnutý, s timestampem pro každý call nahoře v system prompt:

celkemoproti
úplně bez caching$0.274386
caching, stabilní prefix$0.088250−67,8 %
caching, volatilní prefix$0.329251+20,0 %

Zapnutí prompt caching konverzaci zdražilo o dvacet procent víc než kdybyste ho nezapnuli. Zaplatili jste 1,25× write prémii na 109 730 token a nepřečetli zpět nic. Není tu chyba, není tu varování a funkce je zapnutá.

Pravidlo — a v jedné větě celé prompt caching — tedy zní: stabilní obsah dopředu, proměnlivý obsah dozadu. System instructions, tool definitions a referenční materiál nejdřív; timestamps, identita uživatele a aktuální otázka nakonec. Anthropic hierarchii uvádí výslovně — cache následuje toolssystemmessages a změna na jakékoli úrovni invaliduje tuto úroveň a všechno po ní, takže úprava jediného popisu tool invaliduje celou cache.5

Dva důsledky, o které lidé zakopávají. Změna toho, které tools jsou enabled, mění tool definitions, takže feature flag, který některým uživatelům přidá tool, rozdělí vaši cache na dvě. A u Anthropic přepnutí web search nebo citací upravuje system prompt, což invaliduje system a message caches, aniž byste se dotkli jediného řádku vlastního textu.

Zřejmá reakce na kvadratický účet je přestat posílat celou historii: nechat posledních dvanáct zpráv a zbytek zahodit. Účet to sníží, a obvykle je to špatný tah; měření říká proč.

strategiecelkemoproti plná historie + cache
plná historie, bez cache$0.274386+211 %
plná historie, caching$0.088250
posledních 12 zpráv, bez cache$0.118712+35 %
posledních 12 zpráv, caching zapnutý$0.122546+39 %

Zkrácení na okno dvanácti zpráv je o 57 % levnější než posílat všechno uncached — to je srovnání, které dělá každý, a důvod popularity této techniky. Jenže je o 39 % dražší než posílat všechno s fungující cache, a zapnutí caching vedle truncation ho mírně zhorší, ne zlepší.

Mechanismus je znovu prefix. Sliding window v každém kole zahodí nejstarší zprávu, takže prompt už nezačíná tam, kde začínal minule, a každé kolo představuje nový prefix. Doporučení OpenAI říká přesně toto: „summarisation, compaction nebo context truncation mohou změnit prefix a resetovat cache reuse.“6 V kole 40 má windowed prompt 813 token, pod minimem 1 024 token, takže se vůbec nedá cachovat.

A peníze jsou levnější polovina nákladu. Zahodili jste instrukci, kterou uživatel dal v kole 2 a kterou model potřeboval v kole 40. Truncation mění účet, který vidíte, za selhání, které nevidíte, a udělat to správně — compaction, strukturované poznámky držené mimo okno, retrieval historie na vyžádání — je tématem kapitoly 24.

Překročení tier přecení celý request

Odkaz na sekci: Překročení tier přecení celý request

Dlouhé kontexty nejsou dražší jen proto, že jsou delší. Za prahem jsou dražší za token a práh se retroaktivně vztahuje na celý prompt.

Stránka modelu OpenAI pro gpt-5.6-terra to uvádí jednou větou: „Prompts s >272K input tokens jsou účtovány za 2× input a 1,5× output pro celý request.“7 Ne pro přebytek. Pro celé.

the most expensive token you will ever sendTEXT
prompt 271,999 + 500 output  ->  $0.5500
prompt 272,000 + 500 output  ->  $0.5500
prompt 272,001 + 500 output  ->  $1.0970

Jeden token, padesát pět centů. Pokud vaše služba staví prompts z vyhledaných dokumentů, jejichž velikost nekontrolujete, máte v nákladovém modelu útes na hranici, kterou si nikdo ve vašem týmu nezapsal.

Pricing Googlu funguje stejně s prahem 200 000 token: Gemini 2.5 Pro stojí $1.25 za milion input tokens u prompts do 200K a $2.50 nad ním, output jde z $10.00 na $15.00.8 Anthropic šel opačně — k 6. září 2026 jeho dokumentace uvádí, že Claude 4.6 a novější zahrnují celé milionové context window ve standardním pricing, takže „request s 900k token je účtován stejnou sazbou za token jako request s 9k token.“9 Dřívější modely příplatek držely.

Proto cena není číslo. Cena je tabulka tiers klíčovaná délkou prompt, k čemuž v cost function slouží Tier[], a proto computeCost vybírá tier podle celého prompt, ne podle každého kbelíku zvlášť.

Prefill, decode a proč output stojí šestkrát víc než input

Odkaz na sekci: Prefill, decode a proč output stojí šestkrát víc než input

Pět kbelíků se mapuje na dvě fáze z kapitoly 13, a jakmile toto mapování uvidíte, cenové poměry přestanou vypadat svévolně.

Input tokens jsou prefill. Celý prompt prochází modelem jedním průchodem, zpracovaný paralelně — velké maticové násobení, compute-bound. Náklad na token je nízký a tato fáze určuje time to first token: prompt o 4 947 token má 4 947 token prefill, které je potřeba udělat, než se objeví první slovo.

Output tokens jsou decode. Vznikají po jednom, každý jako celý forward pass, který čte celou KV cache, zatímco GPU většinou čeká na paměť místo výpočtu. Tato fáze určuje tokens per second, nelze ji paralelizovat uvnitř jedné odpovědi a proto output stojí u zde oceněného modelu asi šestkrát tolik co input: $12.00 proti $2.00 za milion token.

Přímo z toho plynou tři důsledky. Cache read nahrazuje prefill work, takže kupuje latenci i peníze zároveň — stejná sleva se projeví jako nižší účet i kratší čekání na první token. Reasoning tokens jsou decode, který nikdy nevidíte, proto reasoning model několik sekund nic nestreamuje a pak rychle odpoví: kapitola 12 varovala před dopadem na rozhraní a toto je dopad na fakturu. A přerušení streamu nezastaví generováníkapitola 14 postavila cancellation a cenu nechala na tuto kapitolu, a cenou je plný počet output, protože tokens vzniknou a jsou účtovány bez ohledu na to, jestli někdo poslouchá. Totéž platí pro odpověď, kterou si nikdo nenechá: pět regenerací odpovědi v kole 40 stojí $0.057990 za tu jednu, která zůstane na obrazovce.

Počítání token před odesláním

Odkaz na sekci: Počítání token před odesláním

Tokenizer z kapitoly 7 byl v Pythonu a tam zůstal. Rozpočtování probíhá na serveru, který staví request, takže musí probíhat tady, a existují přesně tři úrovně přesnosti.

Úroveň jedna: počítat lokálně. js-tiktoken dodává stejné BPE merge tables jako pythoní tiktoken, takže pro OpenAI encodings získáte byte-for-byte identický count bez síťového callu:

count.tsTS
import { getEncoding } from "js-tiktoken";

const enc = getEncoding("o200k_base");
const PER_MESSAGE = 4;   // role and delimiters added by the chat template
const PER_REPLY = 3;     // priming for the assistant turn

export function promptTokens(messages: { role: string; content: string }[]) {
  return messages.reduce(
    (sum, m) => sum + enc.encode(m.content).length + PER_MESSAGE, PER_REPLY);
}

Na dvou konstantách záleží a právě tam se lokální počty rozjíždějí. Váš text není to, co se tokenizuje — chat template z kapitoly 11 nejdřív obalí každou zprávu značkami rolí a to jsou tokens, za které platíte. Čtyři na zprávu a tři pro reply priming je obvyklá aproximace pro chat modely OpenAI; přes jednaosmdesát zpráv výše uvedené konverzace dají dohromady 324 token, 6,4 % její délky. Zdejší počty byly zkontrolovány proti pythonímu tiktoken z kapitoly 7 na všech jednaosmdesáti řetězcích a jsou identické.

Úroveň dvě: zeptejte se providera. Anthropic vystavuje /v1/messages/count_tokens a Google vystavuje count_tokens, oba přijímají stejný tvar requestu jako skutečný call a vracejí input token count zdarma. Použijte je, když neumíte počítat lokálně — a u Anthropic lokálně počítat neumíte, protože jeho tokenizer není zveřejněný. Dokumentace Anthropic je opatrná v tom, co vám dává: count „je odhad“ a „může obsahovat tokens automaticky přidané Anthropic pro system optimizations“, za které „vám není účtováno“.10

Úroveň tři: přečtěte usage v response. To je pravda a přijde poté, co jsou peníze utracené. Právě proto existují první dvě úrovně — abyste se rozhodli, jestli request poslat, ne abyste podle nich účtovali.

Věci, za které platíte a nikdo vám je neukazuje

Odkaz na sekci: Věci, za které platíte a nikdo vám je neukazuje

Čtyři line items, které se jako line items neobjevují.

System prompt, placený při každém callu. Ten výše má se svým template overhead 192 token. Napříč čtyřiceti cally je to 7 680 token — 5,6 % celého účtu této konverzace, za osm řádků napsaných jednou. Je to zároveň nejlepší možný kandidát na cache, protože je stabilní i první.

Tool definitions. Název, popis a JSON schema každého tool odchází v každém requestu a provideři navrch přidávají scaffolding. Anthropic zveřejňuje číslo: samotné zapnutí tools přidá hidden system prompt o 496 token na Claude Sonnet 4.5 s tool_choice nastaveným na auto, nebo 588 s any či named tool.9 To je před vašimi vlastními schemas. Kapitola 18 staví katalog; kapitola 24 měří, co spotřebuje.

Každé generování, včetně těch, která zahodíte. Pět regenerací stojí pětkrát. Chat ukazuje jednu.

Thoughts, které vám nejsou ukázány. Billing vychází z úplných thought tokens, přestože je vrácen jen souhrn, a žádné vaše účetnictví to číslo nemůže auditovat.

Mít 200K token neznamená je používat

Odkaz na sekci: Mít 200K token neznamená je používat

Jedno závěrečné varování, protože je to přirozená další myšlenka a odpověď není ta zřejmá.

Milionové okno neznamená milion použitelných token. Přesnost retrieval se s pozicí zhoršuje: Liu et al. zjistili, že modely spolehlivě nacházejí informace na začátku a na konci dlouhého input a mnohem méně spolehlivě uprostřed.11 Větší okno kupuje možnost poslat víc, ne jistotu, že to bude přečteno.

Tento jev je v kurzu změřen jednou — retrieval rate na devíti pozicích ve stejném 853-token prompt — a patří do kapitoly 24, kde mění to, co agent dělá. Tady je citován proto, že mění to, co byste měli kupovat: nejlevnější token je ten, který jste neposlali.

Teď umíte předpovědět, kolik bude call stát, než ho provedete, přečíst, kolik stál poté, a rozlišit jedno od druhého. Tím je pokryto všechno o requestu kromě části, které jste se ještě nedotkli: knoflíků.

Kapitola 17 je sampling — temperature, top-p, top-k, penalty a determinismus, který nemáte. Začíná rozebráním nejrozšířenější chyby v oboru: představy, že temperature je kolečko kreativity. Není: temperature dělí logits z kapitoly 4 před softmax a její zvýšení nedělá model imaginativním, zvyšuje pravděpodobnost tokens, které sám model ohodnotil jako horší. Odtud pokračuje k tomu, proč greedy decoding produkuje měřitelně horší text než sampling, proč top-k a top-p selhávají na opačných tvarech distribuce, a k experimentu, který kapitolu uzavírá: dvacet identických forward passes při temperature 0 se vrátí bit po bitu identicky, když model běží sám, a vložení stejného prompt do batch vedle requestů někoho jiného posune 97 % jeho logits.

Ne všechny se shodují. Důvod začíná boxem o floating-point z kapitoly 2.


Všechny ceny, prahy a násobitele v této kapitole byly přečteny z vlastních stránek providerů 6. září 2026 a jsou uvedeny s tímto datem, protože se změní. Metoda je důležitější než čísla: kbelíky, prefixové pravidlo a tier aritmetika jsou stabilní dva roky, zatímco každé číslo v nich se pohnulo.

Stanford CS336 lecture 2, Resource accounting, je nejbližší akademické zpracování tohoto materiálu a správné další čtení: dělá stejnou aritmetiku na straně training, jakou tato kapitola dělá na straně inference. Počty token zde byly vyprodukovány pomocí js-tiktoken 1.0.21 s encodings o200k_base a cl100k_base nad čtyřicetikolovou konverzací o 5 090 token; per-message template overhead je obvyklá aproximace čtyři-plus-tři a je uveden všude, kde je zahrnut. Čísla pro cache, tier a truncation jsou zdokumentovaná cenová pravidla aplikovaná na tyto naměřené počty token, ne pozorování živých API responses — k vytvoření této kapitoly nebyl proveden žádný placený call, což je také poctivý důvod, proč jsou tvrzení o latenci kvalitativní a tvrzení o nákladech ne.

  1. Dao, T., Fu, D. Y., Ermon, S., Rudra, A. a Ré, C. FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness. arXiv:2205.14135 (2022). Proč se strop posunul, aniž se změnil asymptotický náklad.

  2. Chen, S., Wong, S., Chen, L. a Tian, Y. Extending Context Window of Large Language Models via Positional Interpolation. arXiv:2306.15595 (2023).

  3. Peng, B., Quesnelle, J., Fan, H. a Shippole, E. YaRN: Efficient Context Window Extension of Large Language Models. arXiv:2309.00071 (2023).

  4. Google, Thinking, ai.google.dev/gemini-api/docs/thinking, a Token counting, ai.google.dev/gemini-api/docs/tokens, obojí navštíveno 2026-09-06. „Pricing vychází z úplných thought tokens, které model potřebuje vygenerovat, přestože z API je jako output vrácen pouze souhrn.“ Usage object vykazuje total_input_tokens, total_output_tokens, total_thought_tokens, total_cached_tokens, total_tool_use_tokens a total_tokens — šest kbelíků, s thoughts a tool use mimo output count. Dřívější název pole pro stejnou veličinu, stále vracený rozhraním generateContent, je thoughtsTokenCount, zdokumentovaný na třetí stránce, ai.google.dev/gemini-api/docs/generate-content/thinking.

  5. Anthropic, Prompt caching, docs.anthropic.com/en/docs/build-with-claude/prompt-caching, navštíveno 2026-09-06. Zdroj hierarchie invalidace toolssystemmessages a její tabulky; minimálních cachovatelných délek podle modelu; identity total_input_tokens = cache_read_input_tokens + cache_creation_input_tokens + input_tokens; a výchozí pětiminutové životnosti obnovované bez poplatku při každém hitu. 2

  6. OpenAI, Prompt caching, platform.openai.com/docs/guides/prompt-caching, navštíveno 2026-09-06. Zdroj pro: pravidlo celého vyrenderovaného prefixu; minimální cachovatelný prefix (1 024 viditelných input tokens na GPT-5.6 a novějších, 2 048 dříve); násobitele 1,25× pro write a 0,1× pro read a absenci jakéhokoli write charge u GPT-5.5 a dřívějších; životnost 30 minut; limity čtyř zápisů na request a padesáti breakpointů; poznámku o machine affinity a prompt_cache_key; worked examples break-even 1,35×, 2,15× a 10×; a tvrzení, že summarisation, compaction nebo truncation resetují cache reuse. 2

  7. OpenAI, Pricing (platform.openai.com/docs/pricing) a stránka modelu pro gpt-5.6-terra, obojí navštíveno 2026-09-06. gpt-5.6-terra, standard service tier, za milion token: input $2.00, cached input $0.20, cache writes $2.50, output $12.00; long context input $4.00, cached $0.40, writes $5.00, output $18.00; „prompts s >272K input tokens jsou účtovány za 2× input a 1,5× output pro celý request“; context window 1 050 000 token s maximem 922 000 input tokens. Stejná tabulka uvádí gpt-6-astra za $10.00/$1.00/$12.50/$50.00 a gpt-5.6-luna za $0.20/$0.02/$0.25/$1.20. Každý worked cost v této kapitole používá standardní short-context sazby gpt-5.6-terra.

  8. Google, Gemini Developer API pricing, ai.google.dev/gemini-api/docs/pricing, navštíveno 2026-09-06. Gemini 2.5 Pro, za milion token: input $1.25 pro prompts do 200K a $2.50 nad tím; output $10.00 a $15.00, v obou případech označeno „including thinking tokens“; context caching $0.125 a $0.25 plus storage charge $4.50 za milion token za hodinu. Gemini 3.1 Pro Preview používá stejný práh 200K při $2.00/$4.00 input a $12.00/$18.00 output.

  9. Anthropic, Pricing, docs.anthropic.com/en/docs/about-claude/pricing, navštíveno 2026-09-06. Za milion token, base input / 5-minute cache write / 1-hour cache write / cache read / output: Claude Sonnet 4.5 $3 / $3.75 / $6 / $0.30 / $15; Claude Haiku 4.5 $1 / $1.25 / $2 / $0.10 / $5; Claude Opus 5 $5 / $6.25 / $10 / $0.50 / $25. Násobitele: 1,25× pro pětiminutový write, 2× pro hodinový write, 0,1× pro read. Také zdroj tvrzení o long-context („Claude 4.6 a novější modely... zahrnují celé 1M token context window ve standardním pricing“), počtů tool-use system prompt token (496 token na Claude Sonnet 4.5 s tool_choice hodnoty auto nebo none, 588 s any nebo named tool) a poznámky, že Claude 4.7 a novější používají novější tokenizer produkující „přibližně o 30 % více tokens pro stejný text“. 2 3

  10. Anthropic, Token counting, docs.anthropic.com/en/docs/build-with-claude/token-counting, navštíveno 2026-09-06. Endpoint /v1/messages/count_tokens bere stejné vstupy jako message a vrací input token count; dokumentace uvádí, že count je odhad, že může obsahovat tokens, které Anthropic přidává pro system optimisations, a že ty se neúčtují.

  11. Liu, N. F., Lin, K., Hewitt, J., Paranjape, A., Bevilacqua, M., Petroni, F. a Liang, P. Lost in the Middle: How Language Models Use Long Contexts. arXiv:2307.03172 (2023). Citováno zde, měřeno v kapitole 24.


Vytvořil(a)

David Vicente Campos

Zakladatel NeuraLIA Labs a spoluzakladatel MyRealFood

Jsem inženýr informatiky, absolvent Univerzity v Leónu. Spoluzaložil jsem MyRealFood, kde jsem jako CTO vytvořil aplikaci, kterou miliony lidí používaly ke zdravějšímu stravování, a založil jsem NeuraLIA Labs, kde vyvíjím AI produkty. Píšu tu o tom, čemu jsem musel cestou porozumět, tak, jak bych si tehdy přál, aby mi to někdo vysvětlil.

Více o autorovi

Vydává NeuraLIA Labs.

Nové články do vaší schránky

Novinky z AI, návody a produktové aktuality — krátký e-mail, když vydáme něco, co stojí za váš čas.

Rejstřík kurzu

Abstract software decision engine with branching paths, probability nodes, and glowing gates.
jev11 min čtení

Model AI Jev je postavený pro rozhodování, ne pro prózu

Jev od TypeSafe AI přitahuje pozornost, protože chápe softwarovou inteligenci jako problém pravděpodobnosti: zvolit správnou větev, připojit míru jistoty a neplatit LLM za psaní textu, když kód potřebuje rozhodnutí.

Abstract legal research workspace with documents, search nodes and governance controls.
openai10 min čtení

OpenAI Astra for Law je právní AI systém, ne nový model

Právní novinka od OpenAI není ani tak o novém základním modelu jako o systému kolem něj: doménovém vyhledávání, důvěryhodných nástrojích, oprávněních, benchmarcích a revizních cestách.

Abstract agent runtime sorting documents, memory blocks and pointer nodes inside a bounded context frame.
context-engineering12 min čtení

Context engineering for long-horizon AI agents

Long-running agents do not fail only because the window is small. They fail when files, tool outputs and stale history crowd out the task the agent was supposed to finish.

Necháte výběr modelu na LIA?

Tvořte se všemi modely AI na jednom místě – začněte ještě dnes zdarma.