·
7 min čtení
·
Napsal Tomáš Mikeš
Claude Batch API na překlady: 50 % levnější, ale je to fronta
V překladové pipeline pro The Clinic jsme ze synchronního Claude API přešli na Batch API. 50 % discount plus prompt caching = zhruba 80 % úspora. Háček je v orchestraci fronty — a v pár situacích, kdy je batch ta špatná volba.
Pro The Clinic Praha — zubní kliniku s mezinárodní klientelou z Německa, Francie, Ruska i arabského světa — jsme stavěli překladovou pipeline. Web běží v šesti jazycích (čeština jako zdroj + pět překladů včetně RTL arabštiny). Každý článek, služba a ošetření je dlouhý text, typicky 2 až 5 tisíc tokenů. Editor upraví češtinu, pipeline musí doplnit pět překladů.
První iterace byla synchronní Claude API. Pět paralelních requestů, čekáš na všechny, uložíš. Fungovalo. Dvě bolesti se ale začaly ukazovat: cena a tlak na kontextové okno u článků s dlouhými FAQ sekcemi, které se blížily k limitům.
Co je Batch API
Anthropic má Messages Batches API. Pošleš batch až 10 000 requestů najednou jako JSONL payload, dostaneš batch_id, Anthropic zpracovává na pozadí (inzerované SLA 24 hodin, v praxi typicky desítky minut) a ty si po dokončení výsledky vyzvedneš.
Cena: 50 % discount na input i output tokeny. Háček: batch je async.
Ekonomika v reálu
Pro typický článek The Clinic (~4 000 tokenů vstupu, ~4 000 tokenů výstupu × 5 jazyků) vypadá matematika takto:
- Sync: 5× (4 k input + 4 k output) za plnou cenu.
- Batch: totéž s 50 % slevou → jednorázová 50 % úspora.
Skutečný trik je ale kombinace s prompt caching. Všech pět volání sdílí stejný zdrojový český text, liší se jen language instrukcí. Když zdroj cachuješ:
- 1× cache write (1,25× cena input tokenů)
- 4× cache read (0,1× cena input tokenů)
- + 50 % batch discount na všem
Konkrétní dopad na 4k-tokenovém článku do pěti jazyků: z ~$0,32 za sync běh na ~$0,07 za batch + cache běh. Zhruba 80 % úspora proti naivnímu sync řešení. Při desítkách článků měsíčně to začíná být reálný provozní rozdíl.
Práce s frontou — daň za slevu
Sync je fire-and-forget. Batch vyžaduje pořádný orchestrator. Co jsme pro The Clinic museli postavit:
1. Persistentní stav jobu
Tabulka TranslationJob v DB: batchId, status (PENDING, IN_PROGRESS, COMPLETED, FAILED), articleId, submittedAt, completedAt. Bez toho nevíš, co je v letu, a restart služby ti rozbije celou běžící dávku.
2. Polling nebo webhook
Anthropic nabízí obojí. Pro The Clinic polujeme každých 60 s přes background job v .NET (IHostedService). Bezpečnostní timeout — job, který běží víc než 4 hodiny, zfailujeme a pošleme alert. Inzerovaných 24 hodin je nejhorší případ a při provozu se do něj dostaneš jen vzácně, ale pipeline ho musí unést.
3. Idempotence a kolize verzí
Když editor během zpracovávání batche klikne „přeložit znovu“ (typicky proto, že si všimnul překlepu ve zdroji), nový batch musí buď zrušit ten předchozí, nebo jeho výsledek zahodit. Jinak se ti v DB přepíšou nové překlady starými, které se stihly dokončit později. Pragmaticky: každý job nese sourceVersion zdroje, a když se při aplikaci výsledku zjistí, že už se posunul, výsledek se zahodí.
4. Partial failures uvnitř batche
Jeden z pěti requestů může selhat — rate limit, model error, divný input. Anthropic vrátí JSONL, kde každý řádek má vlastní status. Pipeline musí úspěšné aplikovat a neúspěšné zařadit na individuální retry — typicky už přes sync API, protože jedno volání už za další batch nestojí.
5. Status směrem k editorovi
Admin portál ukazuje u každého článku štítek „překlad running“, „překlad done“ nebo „překlad failed: <jazyk>“. Bez toho editor nerozumí, proč článek, který právě publikoval, ještě pár minut (nebo hodin) nevypadá v cizí jazykové mutaci.
Kdy batch není správná volba
- Urgence. Editor vytvořil službu a chce ji teď hned publikovat ve všech jazycích. Sync, ne batch.
- Malý objem. Pár requestů za den. Orchestrace fronty je overhead bez úspory. Sync.
- Striktní SLA na latenci. Chat, real-time asistent, interaktivní autoring. Batch je nepoužitelný.
Hybrid, který nám vyšel
Pro The Clinic platí: editor vytvoří nebo výrazně upraví článek → batch job. Pokud někdo klikne „urgentně přeložit“ pro jeden jazyk (třeba potřebuje rychle německou verzi k tiskové zprávě), jde to přes sync API. 90 % provozu teče batchem, 10 % sync.
Tohle dělení bere 100 % úspory, kterou batch nabízí, a zároveň nechává pipeline reaktivní, když to musí být.
Co si z toho vzít
Batch API není skok dopředu ve funkcích — je to posun v ekonomice. Kdykoli máš workload tvaru „velký objem, není to urgentní“, je to první věc k uvážení. Překlady, bulk sumarizace, klasifikace starého obsahu, generování metadat pro tisíce položek — všechno to sedí.
Cena změny je v orchestraci: zhruba jeden až dva inženýrské dny na čistě postavený job layer, pak je to udržovatelné. Pro The Clinic se to vrátilo během prvního měsíce provozu.
Řešíš něco podobného?
Domluvme si 30min technický call. Bez obchodních procesů — přímá architekturní zpětná vazba.