Ugrás a tartalomra
21/3021/30. fejezet

Multimodális árazás: mit számláznak valójában a képek, a hang és a videó

Három model ugyanarra az 500 fotóra 5,5-szörösen eltérő árat ad — és az olcsóbb opció egy átméretezéssel megfordul.

Ezen az oldalon

Itt egy feladat, háromféleképpen árazva: ötszáz termékfotó leírása, mindegyikhez egy rövid képaláírás. Ugyanazok a fotók, ugyanaz az utasítás, ugyanakkora válasz. Csak az változik, melyik model olvassa őket.

fotógpt-5.6-lunagemini-3.1-flash-liteclaude-haiku-4.5
800 × 600$0.0848$0.1638$0.4380
1024 × 768$0.1200$0.1638$0.6370
1280 × 960$0.1718$0.1638$0.9010
1600 × 1200$0.2558$0.1638$0.9010
4000 × 3000$0.3220$0.1638$0.9010

Három dolog miatt érdemes megállni ennél a táblánál.

A legolcsóbb model megváltozik a harmadik és a negyedik sor között, ugyanazon a feladaton, csak azért, mert valaki átméretezte a fotókat. Kérj bekezdést képaláírás helyett, és a metszéspont újra elmozdul: 1280 × 960-nál egy negyven-token képaláírásnál a Gemini nyer, egy négyszáz-token bekezdésnél az OpenAI.

A Gemini oszlop egyáltalán nem mozdul, egyik sorban sem: egy 4000 × 3000-es fotó pontosan annyiba kerül neki, mint egy 640 × 480-as. Egy 4000 × 3000-es fotó pontosan annyiba kerül neki, mint egy 640 × 480-as fotó. Ez nem plafon. Ez annak a következménye, ahogyan számol, és azt jelenti, hogy ebben az üzletben a leggyakoribb költségoptimalizálás — lekicsinyítés feltöltés előtt — így fizetődik ki:

image tokenek, 4000 × 3000 → 800 × 600a futás költségemegtakarítás
gpt-5.6-luna2,942 → 570$0.3220 → $0.084873.7 %
claude-haiku-4.51,564 → 638$0.9010 → $0.438051.4 %
gemini-3.1-flash-lite1,032 → 1,032$0.1638 → $0.16380.0 %

Ezek közül egyik szám sem olyan ár, amelyet a vendor közzétesz. Mindhármat ki kellett számítani, három különböző szabályból, mert a fotó sehol sem számlázható egység: először tokenekké alakítják, három egymással inkompatibilis helyen leírt aritmetika alapján.

A 16. fejezet felépítette a szöveg számláját, és ott állt meg, ahol a szöveg véget ér. Ez a fejezet a számla maradéka: képek, beszéd, átírás, videó és nyers compute, amelyeket együtt nyolc különböző egységben számláznak, valamint a módszer olyan dolgok összehasonlítására, amelyeket nem ugyanabban a mértékben árulnak.

Részletek megjelenítése

Amire ennek a fejezetnek szüksége van a korábbiakból.

  • A 7. fejezet felépítette a tokenizálót és az egységet. Itt minden arról szól, hogyan lehet valamit, ami nem szöveg, ebbe az egységbe fordítani.
  • A 8. fejezet tisztázta, mit fogyaszt egy model: nem szimbólumokat, hanem vektorokat egy embedding térben. Ezért lehet egy képet egyáltalán tokenekben árazni.
  • A 16. fejezet felépítette a computeCost függvényt, annak ársávjait és öt token-kosarát. Ez a fejezet ezt a függvényt bővíti, nem lecseréli.
  • A 11. fejezet a LoRA-t fine-tuning technikaként vezette be, a 20. fejezet pedig költségvetési döntésként árazta. Itt egy olyan modelen bukkan fel, amely nem nyelvi model.

Nincsenek tenzorok, a 14. fejezet szabálya szerint: ez tarifákról, konverziókról és könyvelésről szól, tehát TypeScript.

Egy transformer vektorok sorozatát fogadja. Nincs véleménye arról, honnan jöttek. A 8. fejezet token id alapján kikeresett embeddingeket adott neki; az architektúrában semmi sem teszi kötelezővé ezt a keresést.

Tehát: vágd a képet rögzített négyzetekre, lapítsd minden négyzetet számok listájává, és küldd át mindegyik listát egy tanult lineáris rétegen, hogy a model szélességének megfelelő vektort kapj. Egy 32 × 32-es színes pixelpatch 32×32×3=307232 \times 32 \times 3 = 3072 szám; a ERd×3072E \in \mathbb{R}^{d \times 3072} projekció ebből egy dd dimenziós vektort csinál, pontosan olyan alakút, amilyenben egy text token érkezik. Ennyi az egész, és ez az a tanulmány, amelynek címe ki is mondja: egy kép 16 × 16 szót ér.1 Adj hozzá pozicionális kódolást, hogy a model tudja, melyik négyzet hol volt, fűzd össze az eredményeket a text embeddingekkel, és a model által olvasott sorozat részben kép, részben mondat.

Három tanulmány csinált ebből terméket. A CLIP egy image encodert és egy text encodert tanított meg egyetérteni négyszázmillió lekapart páron arról, hogy mi mihez tartozik; itt szűnt meg hipotézis lenni az az ötlet, hogy pixelek és szavak közös térben élhetnek.2 A Flamingo egy fagyasztott vision encodert csavarozott egy fagyasztott nyelvi modelhez néhány tanított hídréteggel.3 A LLaVA megmutatta, hogy a híd lehet egyetlen lineáris projekció, az instruction-following pedig generált adatokkal tanítható, ezért néz ki azóta minden nyílt vision-language model nagyjából ugyanúgy.4

A számlád szempontjából a következmény azonnali és prózai: a patchek pozíciók a sorozatban, tehát input tokenek, tehát az input díjon fizetsz értük. Hány darab? Aritmetika, és minden provider másképp csinálja.

Három szabály, mind publikált, egyik sem ugyanaz

Link a szakaszhoz: Három szabály, mind publikált, egyik sem ugyanaz

Az alábbi szabályok mindegyike a provider saját dokumentációjából van implementálva, és ugyanannak a dokumentációnak a kidolgozott példáival ellenőrizve.

Az OpenAI 32 × 32-es patchekkel fedi le a képet, és a darabszámot egy modelenkénti faktorral szorozza. Ha a patchszám meghaladja az adott model és részletességi szint keretét, a képet addig kicsinyíti, amíg belefér:

patches=w32×h32,shrink=322budgetwh\text{patches} = \left\lceil \frac{w}{32} \right\rceil \times \left\lceil \frac{h}{32} \right\rceil, \qquad \text{shrink} = \sqrt{\frac{32^2 \cdot \text{budget}}{w \cdot h}}

Az Anthropic 28 × 28-as patchekkel fedi le, vizuális tokenenként egyet, és plafont tesz mind a hosszú élre, mind a tokenszámra — standard-tier modelleknél 1,568 pixel és 1,568 token, a nagyfelbontású tieren 2,576 és 4,784. A túlméretes képeket a legnagyobb olyan méretre skálázza, amely mindkettőbe belefér.5

A Google egyáltalán nem pixeleket számol. Egy kép, amelynek mindkét oldala legfeljebb 384 pixel, fixen 258 tokenbe kerül. Ami nagyobb, azt 258 tokenes csempékre vágja, és a csemperács egy min(w,h)/1.5\lfloor \min(w,h) / 1.5 \rfloor crop unitból jön.6

imagetokens.tsTS
export function openaiImageTokens(
  w: number, h: number,
  { maxDim, patchBudget, multiplier }: { maxDim: number; patchBudget: number; multiplier: number },
) {
  const fit = Math.min(1, maxDim / Math.max(w, h));      // never enlarges
  w = Math.floor(w * fit); h = Math.floor(h * fit);
  let patches = Math.ceil(w / 32) * Math.ceil(h / 32);   
  if (patches > patchBudget) {
    const s = Math.sqrt((32 * 32 * patchBudget) / (w * h));
    const adj = s * Math.min(
      Math.floor((w * s) / 32) / ((w * s) / 32),
      Math.floor((h * s) / 32) / ((h * s) / 32));
    patches = Math.ceil(Math.floor(w * adj) / 32) * Math.ceil(Math.floor(h * adj) / 32);
  }
  return Math.ceil(patches * multiplier);                
}

export function anthropicVisualTokens(
  w: number, h: number,
  { maxLongEdge, maxTokens }: { maxLongEdge: number; maxTokens: number },
) {
  const tok = (a: number, b: number) => Math.ceil(a / 28) * Math.ceil(b / 28);
  const long = Math.max(w, h), short = Math.min(w, h);
  for (let L = Math.min(long, maxLongEdge); L >= 1; L--) {     
    const t = tok(L, Math.round((short * L) / long));
    if (t <= maxTokens) return t;                              
  }
  return 0;
}

export function geminiImageTokens(w: number, h: number) {
  if (w <= 384 && h <= 384) return 258;
  const crop = Math.floor(Math.min(w, h) / 1.5);               
  return Math.ceil(w / crop) * Math.ceil(h / crop) * 258;      
}

Futtasd mindegyiket a saját vendorja által nyomtatott számokon:

three implementations against three documentationsTEXT
OpenAI, gpt-5.4 at detail:high (2048 px, 2,500 patches, 1.2x)
  1024x1024 -> 1024 patches -> 1229 tokens   doc says 1229   MATCH
  2048x2048 -> 2500 patches -> 3000 tokens   doc says 3000   MATCH

Anthropic, the published table (one tier per row shown)
  200x200    std   64 @ 200x200     doc   64, not resized    OK
  1000x1000  std 1296 @ 1000x1000   doc 1296, not resized    OK
  1092x1092  std 1521 @ 1092x1092   doc 1521, not resized    OK
  1920x1080  std 1560 @ 1456x819    doc 1560, 1456x819       OK
  2000x1500  std 1564 @ 1269x952    doc 1564, 1269x952       OK
  3840x2160  hi  4784 @ 2576x1449   doc 4784, 2576x1449      OK

Google, the worked example
  960x540 -> crop 360 -> 3 x 2 = 6 tiles     doc says 6      MATCH

Kilenc egyezés jelenik meg; a teljes futás tizenötöt ellenőriz, mert az Anthropic táblája mind a hat mérethez mindkét tiert megadja. A szabályok most már a tieid, bármelyik fotódon futtathatod őket, és ez a lényeg: ez az egyetlen három függvény ebben a fejezetben, amelyet nem kapsz meg egy árlistából.

Küldd át ugyanazt a 4:3-as fotót mindhárom rendszeren hat méretben:

méretOpenAI, highAnthropic, standardAnthropic, high-resGemini
384 × 288130154154258
640 × 4803604144141,032
800 × 6005706386381,032
1600 × 12002,2801,5642,4941,032
3200 × 24002,9421,5644,7401,032
4000 × 30002,9421,5644,7401,032

Olvasd lefelé az utolsó oszlopot. Amint a kép 384 pixel fölé kerül, a szám soha többé nem változik, és ez nem véletlen, nem is plafon. Helyettesítsd vissza a crop unitot a csempeképletbe, egy legalább olyan széles képhez, mint amilyen magas:

tiles=wh/1.5×hh/1.51.5wh×2\text{tiles} = \left\lceil \frac{w}{\lfloor h/1.5 \rfloor} \right\rceil \times \left\lceil \frac{h}{\lfloor h/1.5 \rfloor} \right\rceil \approx \left\lceil \frac{1.5\,w}{h} \right\rceil \times 2

A méret kiesik. A Google image tokenjei az oldalaránytól függenek, és semmi mástól. Egy 4:3-as fotó négy csempe, akár bélyegkép, akár poszter. Ez az egyetlen algebrai tény magyarázza a fenti megtakarítási tábla nulláját, és ezt egyetlen árlista sem mondja ki sehol.

A másik két oszlop ehelyett plafonoz, különböző magasságokon és különböző okokból — az Anthropic deklarált tokenplafonnál, az OpenAI pedig pixelkorlát utáni patchkeretnél —, ezért keresztezik egymást a három görbe különböző méreteknél.

Most törd el. Egy vision modelen kevesebbet költeni nyilván úgy lehet, hogy kevesebb részletet kérsz, ezért küldd el ezt: detail: "low":

gpt-5.4, the same photograph, two detail levelsTEXT
1600x1200   low = 2280   high = 2280   ratio 1.00
3200x2400   low = 3687   high = 2942   ratio 1.25

Kevesebb részletet kérni 25 %-kal többe került. Ez nem bug, és az OpenAI egyetlen sorban ki is mondja a méretezési táblában: azon a modelcsaládon a low 2048 pixeles korlátot használ 6,144 patchből álló kerettel, míg a high ugyanazt a pixelkorlátot használja 2,500 patchből álló kerettel, „so it can use more tokens than high”.7 A low szó hűségbeállítást nevez meg, nem árat: az öt dokumentált modelcsaládból kettőn egyáltalán nem hoz megtakarítást, és e kettő egyikén többe kerül.

Eddig minden arról szólt, hogy egy model olvas egy képet. Egy kép elkészítése olyan mechanizmuson fut, amelyben egyáltalán nincsenek tokenek, és ezért adják el képenként, nem szavanként.

Kép készítése: a képenkénti ár tokenenkénti ár

Link a szakaszhoz: Kép készítése: a képenkénti ár tokenenkénti ár

A vendorok a képgenerálást képenkénti árként publikálják. Nem az. A GPT Image modellek specializált image tokeneket bocsátanak ki, amelyek száma a kért mérettől és minőségtől függ; szorozd meg a publikált darabszámokat a GPT Image 1 közzétett, milliónként $40-os image output díjával, és hasonlítsd össze ugyanazon az oldalon a képenkénti árakkal:

minőség1024 × 10241024 × 15361536 × 1024
low272 tok → $0.0109 ($0.011)408 tok → $0.0163 ($0.016)400 tok → $0.0160 ($0.016)
medium1,056 tok → $0.0422 ($0.042)1,584 tok → $0.0634 ($0.063)1,568 tok → $0.0627 ($0.063)
high4,160 tok → $0.1664 ($0.167)6,240 tok → $0.2496 ($0.25)6,208 tok → $0.2483 ($0.25)

Kilenc származtatott szám kilenc publikált számmal szemben, minden pár $0.002-en belül egyezik.11 A Google még explicitebb, és magán az árlistán végzi el helyetted a konverziót: image output $60 millió tokenenként, „output images at 1K (1024x1024px) consume 1120 tokens and are equivalent to $0.067 per image”.12

Tehát a képenkénti ár tokenenkénti ár, beépített darabszámmal. Ez rendben van, és elrejt valamit. Fogd a jelenlegi generáció tábláját, és ossz visszafelé:

gpt-image-2, published price -> implied output tokens at $30/MTEXT
quality   1024x1024            1024x1536
low       $0.006 -> 200 tok    $0.005 -> 167 tok
medium    $0.053 -> 1767 tok   $0.041 -> 1367 tok
high      $0.211 -> 7033 tok   $0.165 -> 5500 tok

A nagyobb kép minden minőségen olcsóbb. Egy 1024 × 1536-os canvas 50 %-kal több pixel, mint egy 1024 × 1024-es, és 23 %-kal kevesebb tokenbe kerül mediumon. Az OpenAI egy olyan mondatban jelzi, amelyet simán átugranál — „a larger non-square resolution can sometimes produce fewer output tokens than a smaller or square resolution at the same quality setting” —, az előző modelgeneráción pedig fordítva volt: a portré 50 %-kal többe került, mint a négyzet.11 Minden 1024x1024 default, amelyet a változás előtt írtak, most a drága opció.

Hang, másodpercben, karakterben és tokenben számlázva

Link a szakaszhoz: Hang, másodpercben, karakterben és tokenben számlázva

Kérj meg három terméket, hogy mondja ki ugyanazt az 519 karaktert — körülbelül 38 másodpercnyi hangot —, és két vendortól három egységrendszert kapsz:

modelegységár
tts-1karakterenként$15.00 millió karakterenként → $0.007785
tts-1-hdkarakterenként$30.00 millió karakterenként → $0.015570
gemini-3.1-flash-ttsaudio tokenenként, 25 másodpercenként$20.00 milliónként → $0.019319

Ugyanaz a vendor mindkét egységet árulja: az OpenAI tts-1 millió karakterenként van árazva, míg a gpt-4o-mini-tts millió tokenenként, $0.60 be és $12.00 ki.13 Így a „legolcsóbb text-to-speech” nem megválaszolható kérdés addig, amíg meg nem mondod, mit mondatsz ki.

És a két egység ellentétes dolgokra vak. A karakterenkénti ár nem látja az időtartamot: válassz lassú, megfontolt hangot, vagy adj hozzá szüneteket, és a számla nem mozdul, miközben a hang hosszabb lesz. A másodpercenkénti ár nem látja a tartalmat: harminc másodperc ugyanannyiba kerül, akár sűrű technikai bekezdés, akár valaki tízig számol. Változtasd meg a hangot, és a két vendorod közül pontosan az egyik áraz újra.

Az átírás fordítva működik, és a teljes számla legegyszerűbb sora — hangpercenként, fixen:

transcribing 59.6 secondsTEXT
whisper                  $0.005960     ($0.006 / min)
gpt-transcribe           $0.004470     ($0.0045 / min)
gpt-4o-mini-transcribe   $0.002980     ($0.003 / min)
gpt-live-transcribe      $0.016887     ($0.017 / min)

Figyeld meg az utolsó sort a harmadikhoz képest: élőben, ahogy a szavak érkeznek, 5,7-szer annyiba kerül, mint kész fájlon. Ez a különbség annak az ára, hogy nem lehet batch-elni, és ez teszi drágává a következő szakaszt.

Most jön az a szám, amely eldönti, hogy a voice funkció vagy termék.

A hívás: tízfordulós support beszélgetés, 149 szó, ami deklarált 150 szó/perc mellett 59,6 másodperc beszéd — ebből 21,2-t a hívó mond, 38,4-et válaszként mondanak vissza. A tokenkonverziók a providerok sajátjai. OpenAI: „audio tokens in user messages are 1 token per 100 ms of audio, while audio tokens in assistant messages are 1 token per 50 ms”.14 Google: 25 token másodpercenként, mindkét irányban, amit az árlistája is megerősít azzal, hogy ugyanazon a soron $12.00 milliónként és $0.018 percenként szerepel.12

A beszélgetés pontosan úgy halmozódik, ahogy a 16. fejezet mondta, mert ugyanaz a mechanizmus: „the entire conversation is sent to the model for each Response... thus turns later in the session will be more expensive”.14 Csak most az előzményeket audio tokenekben mérjük.

fordulóuserassistantfriss audio becached audio beaudio kiköltség
14.4 s9.2 s440184$0.013224
25.6 s9.6 s56228192$0.014211
35.2 s9.2 s52476184$0.013670
44.0 s4.8 s4071296$0.007749
52.0 s5.6 s20848112$0.008187

Most az összehasonlítás, amely eldönti a terméket, mind a négyet percre normalizálva:

percenkéntszöveghez képest
gpt-realtime-2.1, caching nélkül$0.13125937.9×
gpt-realtime-2.1, history cached$0.05742516.6×
gemini-3.1-flash-live, caching nélkül$0.0239656.9×
ugyanezek a szavak begépelve, gpt-5.6-terra$0.003461

Harmincnyolcszor. Nem harmincnyolc százalékkal. Az azonos eszmecsere hangban, szöveg helyett, majdnem két nagyságrenddel drágább, és ebből a különbségből semmi sem olyan árrés, amelyet valaki felszámítani választott — ez a konverziós arány. Egy másodpercnyi assistant audio húsz token. Ugyanez a másodperc a deklarált sebesség mellett 2,5 szót hordoz, a mért átirat pedig 1,26 token/szóval fut, tehát szövegként 3,15 token. A hang ugyanarra a jelentésre 6,3-szor terjedelmesebb csomag, és minden tokenjét 5,3-szoros text output díjon és 16-szoros text input díjon számlázzák. Szorozz össze egy tömegességi arányt egy árarányal, és a nagyságrend már azelőtt megvan, hogy bármilyen könyvelés elkezdődne.

Két működési következmény egyenesen kiesik a táblából.

Az audio caching nem optimalizálás, hanem az üzleti modell. A cached audio input $0.40 milliónként a friss $32.00-val szemben — 98,75 %-os kedvezmény, amely megfelezi a hívást. A szabály a 16. fejezeté, változatlanul: a cache prefixet illeszt, tehát bármi, amit hívás közben a beszélgetés elejére szúrsz be, elpusztítja, és a „the caller is now verified” természetes helye pontosan ott van.

És semmi, amit a kliensben csinálsz, nem számlátlanít egy hangot. A user rászól az assistantre, a kódod leállítja a lejátszást, a hangszóró elnémul. Ami addig már legenerálódott, azért már fizettél, mert a számlázás a response létrehozásakor keletkezik; és a 16. fejezet szabálya szerint ami a beszélgetésben marad, azt minden következő fordulóban újraküldik input audio-ként. A 14. fejezet ugyanezt a pontot tette meg text stream megszakításáról. Hangban ez harmincszor többe kerül.

Videó, GPU-másodpercek és egy ár, ami nem ár

Link a szakaszhoz: Videó, GPU-másodpercek és egy ár, ami nem ár

A videót egyes vendorok másodpercenként, mások klipenként adják el, felbontási tierekkel, néha időtartam szerinti tierekkel is. Ez a két forma nem pusztán kényelmességben különbözik; keresztezik egymást.

model1 s2 s5 s10 s20 s
veo-3.1, másodpercenként, 1080p$0.400$0.800$2.000$4.000$8.000
veo-3.1-fast, másodpercenként, 1080p$0.120$0.240$0.600$1.200$2.400
sora-2, másodpercenként, 720p$0.100$0.200$0.500$1.000$2.000
hailuo-02, klipenként, 1080p$0.480$0.480$0.480$0.480$0.480
mochi, GPU-másodpercenként$0.018$0.037$0.092$0.183$0.366

A klipenkénti vendor drágább, mint a másodpercenkénti 1,2 másodperc alatt, húsz másodpercnél pedig 16,7-szer olcsóbb. A kliphossz változását ez a két model semmilyen sorrendje nem éli túl, tehát a „melyik video model a legolcsóbb” nem modellekről szóló kérdés.

Az utolsó sor rosszabb, és ez a fejezet őszinte magja. A mochi számlázása valós GPU-másodpercek alapján történik — a job mért predikciós ideje szerint — $0.001400 másodpercenként A100-on és $0.001525 H100-on, amelyek nem mások, mint a bérelt gép díjai.15 Ez tökéletesen precíz tarifa, és nem ár, mert az általa szorzott mennyiség ismeretlen addig, amíg már el nem kötelezted magad a fizetésre. A fenti sor tizenkét GPU-másodpercet feltételez egy másodpercnyi outputra; négyszerezd ezt a feltételezést, és kikerül a legolcsóbb sávból, csak hatszorosnál ér a tábla közepére. Ez az egyetlen tarifa ezen az oldalon, amelyet nem tehetsz ajánlatba.

Tehát: tokenek, image tokenek, karakterek, percek, videómásodpercek, egész klipek, GPU-másodpercek, fix egységek. Nyolc mennyiség, és egyetlen módon tehetők egy tengelyre: deklarálsz egy workloadot, és beárazod.

Ez a 16. fejezet computeCost függvényének kiterjesztése — ugyanaz a tier-gépezet, immár olyan kritériumokkal, amelyek nem prompt-hosszok:

normalise.tsTS
export interface MediaCriteria {
  resolution?: string[]; quality?: string[];
  hasAudio?: boolean; maxDurationSeconds?: number;
}
export interface MediaTier { when?: MediaCriteria; price: number }
export type MediaRate = number | MediaTier[];

const matches = (when: MediaCriteria, u: Usage) => {
  const inList = (l?: string[], v?: string) => !l || (v !== undefined && l.includes(v));
  if (!inList(when.resolution, u.resolution)) return false;
  if (!inList(when.quality, u.quality)) return false;
  if (when.hasAudio !== undefined && when.hasAudio !== (u.hasAudio ?? false)) return false;
  if (when.maxDurationSeconds !== undefined
      && (u.videoSeconds ?? 0) > when.maxDurationSeconds) return false;   
  return true;
};

const mediaPrice = (rate: MediaRate | undefined, u: Usage): number => {
  if (rate === undefined) return 0;
  if (typeof rate === "number") return rate;
  for (const t of rate.filter((t) => t.when)) if (matches(t.when!, u)) return t.price;
  return rate.find((t) => !t.when)?.price ?? 0;      // the tier with no criteria is the default
};

export function computeCost(p: Pricing, u: Usage): number {
  let c = textCost(p, u);                             // Chapter 16, unchanged
  if (p.imageInputToken || p.imageOutputToken) {
    c += (u.imageInputTokens ?? 0) * (p.imageInputToken ?? 0)
       + (u.imageOutputTokens ?? 0) * (p.imageOutputToken ?? 0);
  } else if (p.imageUnit !== undefined) c += (u.images ?? 1) * mediaPrice(p.imageUnit, u);  
  if (p.videoSecond !== undefined) c += (u.videoSeconds ?? 0) * mediaPrice(p.videoSecond, u);
  if (p.videoUnit   !== undefined) c += (u.videoCount ?? 1)   * mediaPrice(p.videoUnit, u);
  c += (u.audioInputTokens ?? 0)       * (p.audioInputToken ?? 0)
     + (u.cachedAudioInputTokens ?? 0) * (p.cachedAudioInputToken ?? p.audioInputToken ?? 0)
     + (u.audioOutputTokens ?? 0)      * (p.audioOutputToken ?? 0)
     + (u.computeSeconds ?? 0)         * (p.computeSecond ?? 0)
     + (u.chars ?? 0)                  * (p.perChar ?? 0)
     + (u.minutes ?? 0)                * (p.perMinute ?? 0);
  return c;
}

A két jelölt sor az, ahol eltörik. Egy egységenként jegyzett tarifa a u.images ?? 1 értéket szorozza; egy tokenenként jegyzett tarifa olyasmit szoroz, ami alapból nullára esik. Adj mindkettőnek üres usage-et — azt az alakot, amelyet akkor kapsz, amikor egy mérés elbukott —, és figyeld:

the same missing measurement, priced by unitTEXT
per image (nano-banana-pro)     empty usage => $0.1500
per clip  (hailuo-02)           empty usage => $0.1500
per unit  (a cloned voice)      empty usage => $3.0000
per token (gpt-image-2)         empty usage => $0.0000
per second (veo-3.1)            empty usage => $0.0000
per GPU-second (mochi)          empty usage => $0.0000

Semmi sem történt, hatszor, és egyszer három dollárba került, ötször pedig semmibe. Ez nem kerekítési különbség; ez döntés arról, mit jelent egy hiányzó szám, minden egységre külön meghozva és sehol le nem írva. A helyes szabály az, hogy egy mező, amelyet senki sem mért, hiányzó marad, mert a „nem mért” és a „mértük, és nulla lett” különböző dolgok. Ez a függvény csendben nem ért egyet.

A második hiba az időtartam. A klipárazású tarifa a tierjét a maxDurationSeconds és u.videoSeconds ?? 0 összevetésével választja, így egy usage, amely sosem rögzített időtartamot, a legrövidebb tierhez illeszkedik:

hailuo-02, 768pTEXT
duration recorded    ->  $0.45
duration missing     ->  $0.27

Negyven százalék kedvezmény azért, mert nem tudjuk, milyen hosszú volt a videó. Mindkét bug gyökere ugyanaz: kényelmi default egy olyan függvényben, amelynek az lenne az egész dolga, hogy pontos legyen.

Miután a költségek kiszámíthatók, az összehasonlításhoz kell a másik fél — egy deklarált reprezentatív workload, engine-enként egy, nyilvánosan kimondva, hogy az olvasó vitatkozhasson vele:

workloads.tsTS
export const representative = {
  text:   { blend: [[{ promptTokens: 1e6 }, 0.25], [{ completionTokens: 1e6 }, 0.75]] },
  image:  { images: 1, imageInputTokens: 50, imageOutputTokens: 1500 },
  video:  { videoSeconds: 5, videoCount: 1, resolution: "1080p", hasAudio: true, computeSeconds: 60 },
  voice:  { chars: 1000, computeSeconds: 10 },
  stt:    { minutes: 1 },
};

Ezek közül minden sor állítás. A text negyed inputot és háromnegyed outputot kever, mert a valós használat output felé torzít; egy fele-fele keverék másképp rangsorolná a modelleket. Az image workload 1,500 output tokent feltételez, az OpenAI medium négyzetre adott 1,056 és medium portréra adott 1,584 értéke között. A video öt másodpercet feltételez 1080p-n, és épp láttuk, hogy két vendor 1,2 másodpercnél helyet cserél. A compute bejegyzés hatvan GPU-másodpercet feltételez, mert nincs mi mást feltételezni.

Ez a módszer, és ez az egyetlen őszinte elérhető módszer: különböző egységű árakat nem tudsz összehasonlítani; csak egy leírt workload költségét tudod összehasonlítani. Bármelyik tábla, amely multimodal modelleket rangsorol anélkül, hogy kinyomtatná a workloadját, a saját feltételezéseit rangsorolja.

Most már be tudsz árazni bármit, amit egy model elő tud állítani, bármilyen egységben adják el, és hangosan ki tudod mondani, milyen workloadot feltételezett az összehasonlításod. Ez lezárja a számlát, amelyet a 16. fejezet megnyitott, és lezárja a III. részt: a 14. fejezettől idáig minden egy hívásról szólt — hogyan indítsd el, mit tegyél bele, hogyan mintavételezd, mit ad vissza, mennyibe kerül.

A 22. fejezet megváltoztatja az elemzés egységét, és ez a változás drága. Egy agent nem egy hívás; olyan ciklus, amely maga dönti el, hány hívást indít, és az előző két fejezet aritmetikája az, ami ezt architektúra-diagramból költségvetéssé alakítja. Azzal nyit, hogy ugyanannak a modelnek kétszer felteszi ugyanazt a kérdést, másodszor egy toollal kiegészítve a katalógust, és leméri, mit tett ez az egy tool: egy hívásból kettő lett, harminckilenc input tokenből 420.

Hogy ettől agent lesz-e, attól függ, melyik két publikált definíciót nyitod meg, és ezek nem értenek egyet. Az egyik saját magával sem.


Ebben a fejezetben minden árat, képletet és konverziós rátát a provider saját oldaláról olvastunk le 2026. szeptember 7-én, és ezzel a dátummal idézünk, mert mind mozogni fog. A tokenszámokat, költségeket és összehasonlításokat a fenti kód számolta ezen az adaton, egy gépen, fizetett API-hívás nélkül — és ez az őszinte oka annak is, hogy ebben a fejezetben egyetlen latency állítás sincs.

Az image-token függvényeket, a költségtáblákat, a voice-call bontást és az empty-usage eredményeket a fejezetben kinyomtatott TypeScript állította elő Node 22-n futtatva. A voice összehasonlításhoz használt dialógus 149 szó, és tiktoken segítségével tokenizáltuk a o200k_base encoding alatt 188 tokenre; időtartama a deklarált 150 szó/perc sebességből következik, ami az összehasonlítás paramétere, nem mérés. Minden provideradatnál szerepel az a lábjegyzet, amely megnevezi az oldalt, ahonnan származik.

  1. Dosovitskiy, A. et al. An Image Is Worth 16x16 Words: Transformers for Image Recognition at Scale. arXiv:2010.11929 (2020). Patchek, lineáris projekció az embedding dimenzióba, és position embeddingek, amelyek a rácsot olvashatóvá teszik egy sequence model számára.

  2. Radford, A. et al. Learning Transferable Visual Models From Natural Language Supervision. arXiv:2103.00020 (2021). Egy image encoder és egy text encoder kontrasztív tanítása 400 millió páron, valamint a közös tér, amelyre minden downstream épít.

  3. Alayrac, J.-B. et al. Flamingo: a Visual Language Model for Few-Shot Learning. arXiv:2204.14198 (2022). Fagyasztott vision encoder, fagyasztott nyelvi model, tanított hídrétegek — az architektúra, amely a képmegértést chat-képességgé tette.

  4. Liu, H., Li, C., Wu, Q. and Lee, Y. J. Visual Instruction Tuning. arXiv:2304.08485 (2023). Egyetlen lineáris projekció hídként és generált instruction adatok tanítóhalmazként; ezért konvergáltak a nyílt vision-language modellek egy alakra.

  5. Anthropic, Vision, platform.claude.com/docs/en/build-with-claude/vision, hozzáférés: 2026-09-07. „Claude views images in patches instead of pixels. Each patch is a 28×28-pixel block of the image, referred to as a visual token. An image, therefore, costs ⌈width / 28⌉ × ⌈height / 28⌉ visual tokens.” Továbbá a két felbontási tier (standard: 1568 pixeles hosszú él, 1568 visual token; high-resolution, Claude 4.7 és későbbi modelleken: 2576 pixel és 4784 token), a lekicsinyítési szabály, valamint a méreteket és tokenszámokat tartalmazó, fent reprodukált hat soros tábla. Model rate-ek az Anthropic Pricing oldaláról, platform.claude.com/docs/en/about-claude/pricing, ugyanaz a dátum: Claude Haiku 4.5 $1 és $5 millió input és output tokenenként.

  6. Google, Image understanding, ai.google.dev/gemini-api/docs/image-understanding, hozzáférés: 2026-09-07. „258 tokens if both dimensions <= 384 pixels. Larger images are tiled into 768x768 pixel tiles, each costing 258 tokens”, a crop-unit képlettel — floor(min(width, height) / 1.5), a méretek elosztva vele és összeszorozva —, valamint a 960 × 540-es kidolgozott példával, amely 3 × 2 = 6 csempét ad. A Google „a rough formula”-nak nevezi; a fent levezetett skálainvariancia a képlet publikált alakjának tulajdonsága. Ugyanezen a családon az audio input 32 token másodpercenként (ai.google.dev/gemini-api/docs/audio, ugyanaz a dátum).

  7. OpenAI, Images and vision, developers.openai.com/api/docs/guides/images-vision, hozzáférés: 2026-09-07. A patchalapú szabály forrása (32 × 32 patchek, patch_count = ceil(width/32)×ceil(height/32), a shrink_factor képlet és annak egészszámos korrekciója, a 30,000 patches elutasítási limit); a modelméretezési tábla, beleértve azt, hogy a low a gpt-5.4 modellen 2048 pixeles limitet és 6,144 patches keretet használ, „so it can use more tokens than high”, szemben a high 2,500 patches keretével; a szorzótábla (1.2 a GPT-5.x családokra, 1.62 a gpt-4.1-mini-ra, 2.46 a gpt-4.1-nano-ra); a fent reprodukált két kidolgozott példa (1024 × 1024 → 1229 token, 2048 × 2048 → 3000 token); a régebbi modellek csempealapú szabályai (alap plusz 512 pixeles csempék, 85 + 170 a gpt-4o modellen); és a vision dobozban idézett korlátozáslista. 2

  8. Ho, J., Jain, A. and Abbeel, P. Denoising Diffusion Probabilistic Models. arXiv:2006.11239 (2020). A forward zajosítási ütemezés, az újraparaméterezés, amely a célfüggvényt a hozzáadott zaj predikciójává alakítja, és a sampling loop.

  9. Rombach, R., Blattmann, A., Lorenz, D., Esser, P. and Ommer, B. High-Resolution Image Synthesis with Latent Diffusion Models. arXiv:2112.10752 (2022). A diffusion folyamat futtatása tömörített latent térben; ez tette a rögzített lépésszámot elég olcsóvá ahhoz, hogy képenként lehessen eladni.

  10. Prince, S. J. D. Understanding Deep Learning (MIT Press, 2023), 18. fejezet. A deklarált delegálás mindarra, amit ez a fejezet kihagyott a diffusion témából — a variációs korlát, a zajütemezések, a classifier-free guidance és a sampler családok. Hu, E. et al., LoRA: Low-Rank Adaptation of Large Language Models, arXiv:2106.09685 (2021), maga az adapter, amely a 11. fejezetben nyelvi modellen jelent meg, itt pedig image modellen használjuk matematikai változás nélkül. Radford, A. et al., Robust Speech Recognition via Large-Scale Weak Supervision (Whisper), arXiv:2212.04356 (2022), az a transcription model, amelynek percenkénti ára fent szerepel.

  11. OpenAI, Image generation, developers.openai.com/api/docs/guides/image-generation, Pricing, developers.openai.com/api/docs/pricing, és a gpt-image-1 modeloldala, mind hozzáférés: 2026-09-07. A gpt-image-2 modeloldalán nincs pricing section; rate-jei a fenti pricing page-ről származnak. A GPT Image 1 oldala text inputot $5.00, image inputot $10.00 és image outputot $40.00 millió tokenenként publikál a fenti levezetésben használt képenkénti tábla mellett. Továbbá: az output-token tábla a gpt-image-2 előtti modellekhez (272 / 408 / 400 low, 1056 / 1584 / 1568 medium, 4160 / 6240 / 6208 high, square, portrait és landscape esetén); a GPT Image 2, 1.5, 1 és 1 Mini képenkénti ártáblái, amelyeket a fenti levezetések használnak; a mondat: „a larger non-square resolution can sometimes produce fewer output tokens than a smaller or square resolution at the same quality setting”; a megjegyzés, hogy minden streamed partial image további 100 image output tokenbe kerül; valamint a gpt-image-2 díjai: $8.00 image input, $2.00 cached image input, $30.00 image output és $5.00 text input millió tokenenként. Az összehasonlításokhoz használt text model rate-ek: gpt-5.6-terra $2.00 input, $0.20 cached input és $12.00 output, gpt-5.6-luna $0.20 és $1.20, standard tier, short context. Video: sora-2 $0.10 másodpercenként 720p-n, és sora-2-pro $0.30, $0.50 és $0.70 720p-n, 1024p-n és 1080p-n. Transcription: $0.006, $0.0045, $0.003 és $0.017 percenként a gpt-4o-transcribe, gpt-transcribe, gpt-4o-mini-transcribe és gpt-live-transcribe modellekhez. 2

  12. Google, Gemini Developer API pricing, ai.google.dev/gemini-api/docs/pricing, hozzáférés: 2026-09-07. Gemini 3.1 Flash-Lite $0.25 millió input tokenenként (text, image és video) és $1.50 output. Gemini 3.1 Flash Image: image output $60 millió tokenenként, a publikált ekvivalenciákkal: 747, 1120, 1680 és 2520 token 0.5K, 1K, 2K és 4K képekre, valamint képenkénti áraik $0.045, $0.067, $0.101 és $0.151. Gemini 3.1 Flash TTS: $1.00 text input, $20.00 audio output, „audio tokens correspond to 25 tokens per second of audio”. Gemini 3.1 Flash Live Preview: $0.75 text és „$3.00 or $0.005/min” audio input, „$4.50 (text) $12.00 or $0.018/min (audio)” output. Veo 3.1 másodpercenként hanggal: $0.40 720p-n és 1080p-n, $0.60 4K standardon; $0.10, $0.12 és $0.30 fast. A Gemini Omni Flash video outputot „at a rate of 5,792 tokens per second of 720p video” számlázza, amit ugyanaz a lábjegyzet körülbelül $0.10 másodpercenkénti árra vált — ez a legvilágosabb publikált állítás bárhol arról, hogy a másodpercenkénti media price token price. 2

  13. OpenAI modeloldalak a tts-1, tts-1-hd és gpt-4o-mini-tts modellekhez, developers.openai.com/api/docs/models, hozzáférés: 2026-09-07. tts-1 $15.00 és tts-1-hd $30.00 millió karakterenként; gpt-4o-mini-tts $0.60 millió text input tokenenként és $12.00 millió audio output tokenenként — ugyanaz a vendor, ugyanaz a művelet, két egység.

  14. OpenAI, Managing costs (Realtime API), developers.openai.com/api/docs/guides/realtime-costs, hozzáférés: 2026-09-07. „Audio tokens in user messages are 1 token per 100 ms of audio, while audio tokens in assistant messages are 1 token per 50ms of audio.” Továbbá: „The entire conversation is sent to the model for each Response... thus turns later in the session will be more expensive”; a költségek akkor keletkeznek, amikor egy Response létrejön; a kidolgozott kétfordulós példa, amelynek halmozását a fenti tábla reprodukálja; és a response.done usage payload a input_token_details és output_token_details bontásaival. Rate-ek a pricing page-ről, ugyanaz a dátum: gpt-realtime-2.1 audio $32.00 input, $0.40 cached input és $64.00 output millió tokenenként, text $4.00, $0.40 és $24.00, image input $5.00. 2

  15. Replicate, Pricing, replicate.com/pricing, hozzáférés: 2026-09-07. Nvidia A100 (80GB) $0.001400 másodpercenként és $5.04 óránként; Nvidia H100 $0.001525 másodpercenként és $5.49 óránként.


Készítette

David Vicente Campos

A NeuraLIA Labs alapítója és a MyRealFood társalapítója

Mérnökinformatikus vagyok, a Leóni Egyetemen végeztem. Társalapítottam a MyRealFoodot, ahol CTO-ként felépítettem azt az alkalmazást, amelyet emberek milliói használtak arra, hogy egészségesebben táplálkozzanak, és megalapítottam a NeuraLIA Labst, ahol AI-termékeket fejlesztek. Itt arról írok, amit menet közben meg kellett értenem, úgy, ahogy szerettem volna, hogy valaki elmagyarázza nekem.

Továbbiak a szerzőről

Közzétette a NeuraLIA Labs.

Kapj új bejegyzéseket a postaládádba

AI-hírek, útmutatók és termékfrissítések — rövid email, amikor valami igazán hasznosat publikálunk.

Kurzusindex

Abstract software decision engine with branching paths, probability nodes, and glowing gates.
jev11 perc olvasás

A Jev AI-modell döntésekre készült, nem prózára

A TypeSafe AI Jev modellje azért kap figyelmet, mert a szoftveres intelligenciát valószínűségi problémaként kezeli: válaszd ki a megfelelő ágat, rendelj hozzá bizalmi szintet, és ne fizess egy LLM-nek szövegírásért, amikor a kódnak döntésre van szüksége.

Abstract agent runtime sorting documents, memory blocks and pointer nodes inside a bounded context frame.
context-engineering11 perc olvasás

Kontextustervezés hosszú távú AI-ügynökökhöz

A hosszú ideig futó ügynökök nem csak azért vallanak kudarcot, mert kicsi az ablak. Akkor hibáznak, amikor a fájlok, eszközkimenetek és elavult előzmények kiszorítják azt a feladatot, amelyet az ügynöknek be kellett volna fejeznie.

Készen állsz, hogy a LIA válasszon helyetted?

Építs az összes AI-modellel egy helyen – kezdd el ma, ingyen.