[{"data":1,"prerenderedAt":782},["ShallowReactive",2],{"blog-llm-batch-api-offline-workloads-hu":3},{"slug":4,"published":5,"minutes":6,"category":7,"tags":8,"keywords":14,"about":25,"sources":35,"cover":60,"og":61,"expertise":62,"locales":63,"lang":66,"title":67,"description":68,"coverAlt":69,"metaTitle":70,"takeaways":71,"faq":77,"toc":93,"blocks":124,"others":547},"llm-batch-api-offline-workloads","2026-10-17",9,"llmops",[9,10,11,12,13],"Batch API","Cost","LLMOps","Prompt caching","Data pipelines",[15,16,17,18,19,20,21,22,23,24],"llm batch api","anthropic message batches api","openai batch api","gemini batch mode","batch inference llm cost","batch api 50 percent discount","openai flex processing","bedrock batch inference","llm offline processing","batch api prompt caching",[26,29,32],{"name":27,"url":28},"Batch processing","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FBatch_processing",{"name":30,"url":31},"JSON Lines","https:\u002F\u002Fjsonlines.org\u002F",{"name":33,"url":34},"Large language model","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FLarge_language_model",[36,39,42,45,48,51,54,57],{"title":37,"url":38},"Claude Platform Docs: Batch processing","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fbuild-with-claude\u002Fbatch-processing",{"title":40,"url":41},"Claude Platform Docs: Rate limits (Message Batches API)","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fapi\u002Frate-limits",{"title":43,"url":44},"Claude Platform Docs: Prompt caching","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fbuild-with-claude\u002Fprompt-caching",{"title":46,"url":47},"OpenAI API Docs: Batch API","https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fbatch",{"title":49,"url":50},"OpenAI API Docs: Flex processing","https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fflex-processing",{"title":52,"url":53},"OpenAI API Docs: Rate limits (batch queue limits)","https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Frate-limits",{"title":55,"url":56},"Google AI for Developers: Gemini Batch API","https:\u002F\u002Fai.google.dev\u002Fgemini-api\u002Fdocs\u002Fbatch-api",{"title":58,"url":59},"Amazon Bedrock User Guide: Batch inference","https:\u002F\u002Fdocs.aws.amazon.com\u002Fbedrock\u002Flatest\u002Fuserguide\u002Fbatch-inference.html","\u002Fimages\u002Fblog\u002Fllm-batch-api-offline-workloads\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fllm-batch-api-offline-workloads\u002Fog.jpg","ai-engineer",[64,65,66],"en","de","hu","LLM batch API-k: félárú inferencia olyan munkára, amely várhat","Mikor érdemes az Anthropic, OpenAI és Gemini batch API-ját használni, hogyan működnek a limitek, a párosítás és a hibák, és hogyan adódnak össze a kedvezmények.","Széles doboz nyolc kis négyzettel, balról érkeznek, egy hosszú nyíl visszatér.","LLM batch API-k: offline munka félárón · Balázs Csorba",[72,73,74,75,76],"Az Anthropic, az OpenAI és a Gemini is a normál ár 50%-át kéri a batch-kérésekért, cserébe az eredmény aszinkron, 24 órás ablakon belül érkezik.","Az eredmények tetszőleges sorrendben jönnek vissza: mindig custom_id vagy key alapján párosítsd őket a forrásrekordokhoz, soha ne pozíció szerint.","A batch-limitek külön keretet alkotnak a szinkron limitek mellett, így a visszatöltések és evalok batchbe költöztetése az interaktív forgalmat is védi.","A batch- és a prompt caching-kedvezmény összeadódik, de a batchben a cache-találat best effort; használj azonos cache_control blokkokat, és fontold meg az egyórás cache-t.","A batch-adatok hetekig a szolgáltatónál maradnak: az Anthropic 29 napig tartja az eredményeket, az OpenAI 30 nap után törli a kimeneti fájlokat, a Gemini 6 hét után.",[78,81,84,87,90],{"q":79,"a":80},"Mennyivel olcsóbb a batch API?","Az Anthropic, az OpenAI és a Google Gemini is a normál díj 50%-át számolja fel a batch-kérésekért. A Claude API-nál ez a bemeneti, kimeneti és speciális tokenekre is vonatkozik, így a Claude Opus 5.5 batchben millió bemeneti tokenenként 2, millió kimeneti tokenenként 10 dollárba kerül. A prompt caching kedvezménye erre jön rá.",{"q":82,"a":83},"Mennyi ideig tart egy batch?","Mindhárom szolgáltató 24 órás ablakkal dolgozik. Az Anthropic szerint a legtöbb batch egy órán belül elkészül, de a 24 órán belül fel nem dolgozott kérések lejárnak. A pipeline-t a 24 órás legrosszabb esetre tervezd, ne a jellemzőre.",{"q":85,"a":86},"Használhatok eszközöket és strukturált kimenetet batch-kérésekben?","A Claude API-nál szinte bármilyen Messages-kérés batchelhető, eszközhasználattal, szerveroldali eszközökkel, képekkel, rendszerprompttal és többfordulós beszélgetésekkel együtt; a stream, a speed és a max_tokens 0 nem támogatott. A kliensoldali eszközökhöz továbbra is oda-vissza kör kell, így minden eszközhívás új kérést jelent. Bedrockon az eszközhíváshoz InvokeModel formátum kell, nem Converse.",{"q":88,"a":89},"Mi történik a batch hibás kéréseivel?","Minden kérés saját eredményt kap. A Claude API-nál az errored, canceled és expired kérésekért nem kell fizetni. Az OpenAI-nál a hibák külön hibafájlba kerülnek, és ha egy batch lejár, a ténylegesen elkészült kérésekért fizetsz. Gyűjtsd össze a hibásakat, és küldd be őket újra egy új batchben.",{"q":91,"a":92},"Batch API vagy OpenAI flex processing?","A flex egy szinkron kérés service_tier flex beállítással, batch-áron, de lassabban és néha elérhetetlenül; ilyenkor 429-et ad, amelyért nem kell fizetni. Olyan feladatokhoz illik, amelyeknél egyszerű kérés-válasz kód kell. A batch nagy mennyiséghez illik, ahol megvárhatod az eredményfájlt.",[94,97,100,103,106,109,112,115,118,121],{"id":95,"title":96},"when-batch-fits","Milyen terhelés való batchbe",{"id":98,"title":99},"provider-comparison","Anthropic, OpenAI, Gemini és Bedrock összevetve",{"id":101,"title":102},"batch-lifecycle","Egy batch életciklusa",{"id":104,"title":105},"building-requests","Párosítható és újrapróbálható kérések összeállítása",{"id":107,"title":108},"results-and-failures","Részleges hibák, és miért fizetsz",{"id":110,"title":111},"caching-with-batches","A batch- és a prompt caching-kedvezmény összeadása",{"id":113,"title":114},"limits-throughput","Limitek, átviteli kapacitás és költés",{"id":116,"title":117},"flex-alternative","Mikor egyszerűbb a flex processing",{"id":119,"title":120},"data-retention","Adatmegőrzés és GDPR",{"id":122,"title":123},"sources","Források",[125,129,132,135,138,181,184,185,271,286,287,296,341,342,352,354,361,362,382,412,413,420,427,428,431,438,448,449,463,497,498,505,518,519],{"type":126,"content":127},"paragraph",[128],"Az LLM-költés meglepően nagy része sosem ér el felhasználót. Egy support-archívum újraosztályozása taxonómiaváltás után, termékleírások írása egy katalógusimporthoz, egy éjszakai eval-csomag futtatása, dokumentumok újraembeddelése modellváltás után: egyiknek sem kell két másodpercen belül válasz, mégis sok csapat ugyanazon a szinkron végponton küldi át őket, mint a chat-funkcióját, teljes áron, és ugyanazokért a rate limitekért versenyezve.",{"type":126,"content":130},[131],"A batch API-k pontosan erre a munkára valók. Sok kérést küldesz be egyszerre, a szolgáltató akkor dolgozza fel őket, amikor van kapacitása, te pedig 24 órán belül, félárón átveszed az eredményfájlt. Ez az útmutató összeveti az Anthropic, az OpenAI, a Gemini és a Bedrock kínálatát, aztán sorra veszi, mi változik a kódodban: az eredmények párosítása, a részleges hibák, a cache, a limitek, az adatmegőrzés, és az, hogy mikor egyszerűbb az OpenAI flex szintje.",{"type":133,"level":134,"id":95,"text":96},"heading",2,{"type":126,"content":136},[137],"A próba egyszerű: észrevenné bárki, ha az eredmény most helyett holnap reggel érkezne? Az Anthropic saját felhasználási listája: nagy léptékű értékelések, tartalommoderálás, adatelemzés és tömeges tartalomgyártás, például termékleírások. Jellemző jelöltek az általam vitt projektekben:",{"type":139,"items":140},"list",[141,153,162,167],[142,146,147,152],{"tag":143,"children":144},"strong",[145],"Katalógusbővítés."," Leírások, attribútumkinyerés és fordítások több ezer cikkszámhoz egy PIM-import után, lásd: ",{"tag":148,"to":149,"children":150},"link","\u002Fblog\u002Fpimcore-erp-delta-sync",[151],"Pimcore ERP delta-szinkron",".",[154,157,158,152],{"tag":143,"children":155},[156],"Eval-futások."," Regressziós csomagok promptverziónként több száz esettel, ahol elég egy óra múlva az eredmény; lásd: ",{"tag":148,"to":159,"children":160},"\u002Fblog\u002Fllm-evals-for-product-features",[161],"LLM-evalok termékfunkciókhoz",[163,166],{"tag":143,"children":164},[165],"Visszatöltések."," Régi jegyek, rendelések vagy dokumentumok osztályozása vagy összefoglalása egy séma- vagy taxonómiaváltás után.",[168,171,172,176,177,180],{"tag":143,"children":169},[170],"Embeddingek és moderálás."," Az OpenAI batchei lefedik a ",{"tag":173,"children":174},"code",[175],"\u002Fv1\u002Fembeddings"," és ",{"tag":173,"children":178},[179],"\u002Fv1\u002Fmoderations"," végpontot; a Gemininek külön batch-embedding hívása van.",{"type":126,"content":182},[183],"Ami nem illik bele: bármi, amire felhasználó vár, és azok az ágensciklusok, amelyek eszközei a saját kódodban futnak. Minden batch-kérés egyetlen modellforduló, így egy kliensoldali eszközt hívó ágensnek minden lépéshez új kérés kell. A szerveroldali eszközök mások: a Claude API-nál a webes keresés, a web fetch és a kódfuttatás a batch-workerben fut, amely fordulónként több ciklusiterációt végez, mint egy szinkron hívás, mielőtt megállna.",{"type":133,"level":134,"id":98,"text":99},{"type":186,"head":187,"rows":198},"table",[188,190,192,194,196],[189],"Szempont",[191],"Anthropic",[193],"OpenAI",[195],"Gemini",[197],"Bedrock",[199,209,220,231,242,260],[200,202,204,206,207],[201],"Ár",[203],"a normál ár 50%-a",[205],"50%-kal olcsóbb",[203],[208],"Lásd a Bedrock árlistát",[210,212,214,216,218],[211],"Batchenként",[213],"100 000 kérés vagy 256 MB",[215],"50 000 kérés, 200 MB-os fájl",[217],"20 MB inline, 2 GB-os fájl",[219],"Fiókonkénti kvóták",[221,223,225,227,229],[222],"Ablak",[224],"24 óra, többnyire 1 óra alatt",[226],"24 óra, rögzített",[228],"24 órás cél",[230],"Aszinkron feladat",[232,234,236,238,240],[233],"Bemenet",[235],"JSON kéréslista",[237],"Feltöltött JSONL-fájl",[239],"Inline vagy JSONL-fájl",[241],"JSONL S3-ban",[243,245,249,252,256],[244],"Párosító kulcs",[246],{"tag":173,"children":247},[248],"custom_id",[250],{"tag":173,"children":251},[248],[253],{"tag":173,"children":254},[255],"key",[257],{"tag":173,"children":258},[259],"recordId",[261,263,265,267,269],[262],"Eredmények megőrzése",[264],"29 nap",[266],"A kimenet 30 nap után törlődik",[268],"6 hét",[270],"A saját S3 bucketed",{"type":126,"content":272},[273,274,277,278,281,282,285],"Néhány megkötés könnyen elkerüli a figyelmet. Egy OpenAI-bemeneti fájl csak egy modellt célozhat. A Converse formátumot használó Bedrock batch-feladatok nem tudnak eszközt hívni; ehhez InvokeModel formátum kell az adott modell natív kéréstörzsével. A Claude API pedig batchen belül elutasítja a ",{"tag":173,"children":275},[276],"stream","-et, a fast mode ",{"tag":173,"children":279},[280],"speed"," paraméterét és a ",{"tag":173,"children":283},[284],"max_tokens: 0"," értéket; szinte minden más, a képek, az eszközhasználat és a legtöbb béta funkció is működik.",{"type":133,"level":134,"id":101,"text":102},{"type":288,"attrs":289,"inner":293,"caption":294},"diagram",{"viewBox":290,"role":291,"aria-labelledby":292},"0 0 720 170","img","lba1-t lba1-d","\u003Ctitle id=\"lba1-t\">Batch életciklusa a forrásrekordoktól a tárolt eredményekig\u003C\u002Ftitle>\u003Cdesc id=\"lba1-d\">A forrásrekordokból determinisztikus azonosítójú kérések lesznek, a batchet beküldik és lekérdezik, amíg véget nem ér, az eredményeket azonosító szerint párosítják, a hibás kérések pedig új batchbe kerülnek.\u003C\u002Fdesc>\u003Cdefs>\u003Cmarker id=\"lba1-ah\" viewBox=\"0 0 10 10\" refX=\"9\" refY=\"5\" markerWidth=\"7\" markerHeight=\"7\" orient=\"auto-start-reverse\">\u003Cpath d=\"M0 0L10 5L0 10z\" class=\"d-head\" \u002F>\u003C\u002Fmarker>\u003C\u002Fdefs>\u003Crect x=\"20\" y=\"47\" width=\"118\" height=\"76\" rx=\"10\" class=\"d-box\" \u002F>\u003Ctext x=\"79\" y=\"81\" text-anchor=\"middle\" class=\"d-text\">Összeállítás\u003C\u002Ftext>\u003Ctext x=\"79\" y=\"103\" text-anchor=\"middle\" class=\"d-small\">rekordonként id\u003C\u002Ftext>\u003Cpath d=\"M138 85H158\" class=\"d-line\" marker-end=\"url(#lba1-ah)\" \u002F>\u003Crect x=\"160\" y=\"47\" width=\"118\" height=\"76\" rx=\"10\" class=\"d-sky\" \u002F>\u003Ctext x=\"220\" y=\"81\" text-anchor=\"middle\" class=\"d-text\">Beküldés\u003C\u002Ftext>\u003Ctext x=\"220\" y=\"103\" text-anchor=\"middle\" class=\"d-small\">egy modell\u003C\u002Ftext>\u003Cpath d=\"M279 85H299\" class=\"d-line\" marker-end=\"url(#lba1-ah)\" \u002F>\u003Crect x=\"301\" y=\"47\" width=\"118\" height=\"76\" rx=\"10\" class=\"d-gold\" \u002F>\u003Ctext x=\"360\" y=\"81\" text-anchor=\"middle\" class=\"d-text\">Lekérdezés\u003C\u002Ftext>\u003Ctext x=\"360\" y=\"103\" text-anchor=\"middle\" class=\"d-small\">amíg véget ér\u003C\u002Ftext>\u003Cpath d=\"M419 85H439\" class=\"d-line\" marker-end=\"url(#lba1-ah)\" \u002F>\u003Crect x=\"441\" y=\"47\" width=\"118\" height=\"76\" rx=\"10\" class=\"d-mint\" \u002F>\u003Ctext x=\"500\" y=\"81\" text-anchor=\"middle\" class=\"d-text\">Párosítás\u003C\u002Ftext>\u003Ctext x=\"500\" y=\"103\" text-anchor=\"middle\" class=\"d-small\">custom_id szerint\u003C\u002Ftext>\u003Cpath d=\"M560 85H580\" class=\"d-line\" marker-end=\"url(#lba1-ah)\" \u002F>\u003Crect x=\"582\" y=\"47\" width=\"118\" height=\"76\" rx=\"10\" class=\"d-box\" \u002F>\u003Ctext x=\"641\" y=\"81\" text-anchor=\"middle\" class=\"d-text\">Újra\u003C\u002Ftext>\u003Ctext x=\"641\" y=\"103\" text-anchor=\"middle\" class=\"d-small\">csak a hibásak\u003C\u002Ftext>",[295],"A kör a hibákon zárul: az errored és expired kérések a következő batchbe kerülnek, nem vissza a szinkron API-ra.",{"type":126,"content":297},[298,299,302,303,306,307,310,311,314,315,318,319,314,321,314,324,314,327,314,330,176,333,336,337,340],"A Claude API-nál egy új batch ",{"tag":173,"children":300},[301],"processing_status"," értéke ",{"tag":173,"children":304},[305],"in_progress",", és ",{"tag":173,"children":308},[309],"ended"," lesz, amikor minden kérés befejeződött; az eredmények akkor tölthetők le, amikor minden üzenet elkészült, vagy 24 óra után, amelyik előbb bekövetkezik. Az OpenAI-nak több állapota van: ",{"tag":173,"children":312},[313],"validating",", ",{"tag":173,"children":316},[317],"failed",", ha a bemeneti fájl érvénytelen, ",{"tag":173,"children":320},[305],{"tag":173,"children":322},[323],"finalizing",{"tag":173,"children":325},[326],"completed",{"tag":173,"children":328},[329],"expired",{"tag":173,"children":331},[332],"cancelling",{"tag":173,"children":334},[335],"cancelled",". A Gemini ",{"tag":173,"children":338},[339],"JOB_STATE_*"," értékeket használ a pendingtől az expiredig. A Bedrock lekérdezés helyett EventBridge-en keresztül is értesíthet.",{"type":133,"level":134,"id":104,"text":105},{"type":126,"content":343},[344,345,347,348,351],"Az Anthropic és az OpenAI is kimondja, hogy az eredmények nem feltétlenül a bemeneti sorrendben érkeznek, és azt tanácsolja, hogy ",{"tag":173,"children":346},[248]," alapján párosíts. Ezt az azonosítót tedd determinisztikussá: a forrásrekordból és a promptverzióból képezd, hogy egy újrafuttatás ugyanazt az azonosítót adja, és az író folyamat upsertelhessen duplikálás helyett. A Claude API-nál illeszkednie kell a ",{"tag":173,"children":349},[350],"^[a-zA-Z0-9_-]{1,64}$"," mintára, így a perjelet vagy pontot tartalmazó nyers cikkszámok kiesnek.",{"type":173,"code":353},"import hashlib, time, anthropic\n\nclient = anthropic.Anthropic()\nPROMPT_VERSION = \"desc-v7\"\n\ndef cid(sku: str) -> str:   # deterministic, safe characters, \u003C= 64 chars\n    return f\"{PROMPT_VERSION}-{hashlib.sha1(sku.encode()).hexdigest()[:20]}\"\n\nrequests = [{\n    \"custom_id\": cid(p[\"sku\"]),\n    \"params\": {\n        \"model\": \"claude-sonnet-5-5\",\n        \"max_tokens\": 800,\n        \"system\": [{\"type\": \"text\", \"text\": STYLE_GUIDE,             # identical in every request\n                    \"cache_control\": {\"type\": \"ephemeral\", \"ttl\": \"1h\"}}],\n        \"messages\": [{\"role\": \"user\", \"content\": render_product(p)}],\n    },\n} for p in products]\n\nbatch = client.messages.batches.create(requests=requests)\nwhile client.messages.batches.retrieve(batch.id).processing_status != \"ended\":\n    time.sleep(60)\n\nretry = []\nfor r in client.messages.batches.results(batch.id):\n    if r.result.type == \"succeeded\":\n        upsert_description(r.custom_id, r.result.message)   # idempotent write\n    else:                                                    # errored, canceled, expired\n        retry.append(r.custom_id)",{"type":126,"content":355},[356,357,360],"A Claude API-nál a kérések ",{"tag":173,"children":358},[359],"params"," részének validálása aszinkron, így egy mező elírása csak akkor derül ki, amikor az egész batch véget ért. Az Anthropic azt tanácsolja, hogy egy kérésformát előbb próbálj ki a szinkron Messages API-n. Én ezt ugyanabban a szkriptben csinálom: az első kérést szinkron küldöm el, a választ ellenőrzöm a sémán, aztán beküldöm a többit.",{"type":133,"level":134,"id":107,"text":108},{"type":126,"content":363},[364,365,314,368,314,371,374,375,377,378,381],"Egy batch sosem egyszerűen sikerül vagy bukik el. A Claude API-nál minden kérés ",{"tag":173,"children":366},[367],"succeeded",{"tag":173,"children":369},[370],"errored",{"tag":173,"children":372},[373],"canceled"," vagy ",{"tag":173,"children":376},[329]," állapotban végződik, és csak az elsőért kell fizetni. A lejárat nem elméleti: az Anthropic jelzi, hogy a feldolgozás a kereslettől és a saját kérésmennyiségedtől függően lelassulhat, ilyenkor több kérés jár le 24 óra után. Az OpenAI a sikeres válaszokat kimeneti fájlba, a hibákat hibafájlba írja; ha egy batch lejár, az elkészült kérések elérhetők maradnak és számlázódnak, a többi ",{"tag":173,"children":379},[380],"batch_expired"," kóddal jelenik meg.",{"type":139,"items":383},[384,389,394,407],[385,388],{"tag":143,"children":386},[387],"Válaszd szét a hibaosztályokat."," A validációs hibákhoz kódjavítás kell; a szerverhibák és a lejártak változatlanul mennek a következő batchbe.",[390,393],{"tag":143,"children":391},[392],"Korlátozd az újrapróbálási köröket."," Két-három újraküldés, utána tedd félre a rekordokat emberi átnézésre.",[395,398,399,402,403,152],{"tag":143,"children":396},[397],"A tartalmat is ellenőrizd, ne csak az állapotot."," Egy sikeres kérés is elérheti a ",{"tag":173,"children":400},[401],"max_tokens"," határt, vagy adhat a sémán elbukó JSON-t, lásd: ",{"tag":148,"to":404,"children":405},"\u002Fblog\u002Fstructured-outputs-json-schema-llm",[406],"strukturált kimenetek",[408,411],{"tag":143,"children":409},[410],"A nagyon nagy feladatokat bontsd szét."," Az Anthropic azt javasolja, hogy a nagy adatkészleteket több batchre oszd; így a haladás és a költség is darabonként látható.",{"type":133,"level":134,"id":110,"text":111},{"type":126,"content":414},[415,416,419],"A batch-feladatok többnyire ugyanazokat a hosszú utasításokat alkalmazzák sok rekordra, ami a prompt caching ideális formája. Az Anthropic kimondja, hogy a cache és a batch kedvezménye összeadódik. A csapda az, hogy a batch-kérések párhuzamosan és tetszőleges sorrendben futnak, így a cache-találat best effort; az Anthropic a forgalmi mintától függően 30% és 98% közötti jellemző találati arányt említ. A tanács az, hogy minden kérésbe azonos ",{"tag":173,"children":417},[418],"cache_control"," blokkot tegyél, és mivel egy batch tovább futhat az ötperces cache-élettartamnál, fontold meg az egyórás cache-t. A Gemini is támogatja a context cachinget batch-kéréseknél, a szokásos cache-díjakon.",{"type":126,"content":421},[422,423,152],"Mielőtt építenél rá, számolj. Az egyórás cache írása az alap bemeneti ár kétszerese az 1,25-szörös helyett, így csak akkor térül meg, ha a közös előtag hosszú, és a batch elég nagy ahhoz, hogy sokszor olvassa. Magáról a cache működéséről lásd: ",{"tag":148,"to":424,"children":425},"\u002Fblog\u002Fllm-cost-latency-prompt-caching-routing",[426],"prompt caching és modell-routing",{"type":133,"level":134,"id":113,"text":114},{"type":126,"content":429},[430],"A batch-forgalomnak mindkét platformon saját limitjei vannak, és ez a lényeg fele. Az Anthropic szerint a Batches API használata nem érinti a Messages API rate limitjeit; helyette a batch-végpontokra érkező HTTP-kéréseket és a feldolgozási sorban váró batch-kérések számát korlátozza, modellektől függetlenül: Start szinten 200 000, Build szinten 300 000, Scale szinten 500 000 várakozó kérés, batchenként legfeljebb 100 000. Az OpenAI batch-limitjei külön keretet alkotnak, amelyet modellenként a sorban álló bemeneti tokenekből számol, és óránként legfeljebb 2000 batch hozható létre.",{"type":432,"variant":433,"title":434,"body":435},"callout","warn","A batch túllőhet a költéskereten",[436],[437],"Az Anthropic jelzi, hogy a nagy átviteli sebesség és a párhuzamos feldolgozás miatt a batchek kissé túlléphetik egy workspace beállított költéskeretét. Ha egy workspace-limit az egyetlen védelmed egy elszabadult visszatöltés ellen, tegyél mellé saját ellenőrzést: becsüld meg a kérésenkénti tokenszámot, szorozd meg a batch méretével, és egy keret felett ne küldd be.",{"type":126,"content":439},[440,441,444,445,447],"Hosszú kimenetekhez a Claude API-nak van egy csak batchben elérhető funkciója: az ",{"tag":173,"children":442},[443],"output-300k-2026-03-24"," béta fejléc 300 000-re emeli a ",{"tag":173,"children":446},[401]," határt a jelenlegi Opus, Sonnet és Haiku 5.5 generáción és több korábbi modellen, könyvhosszúságú vázlatokhoz vagy kimerítő adatkinyeréshez. Egyetlen ekkora generálás egy óránál is tovább tarthat, így a 24 órás ablakból is fogyaszt.",{"type":133,"level":134,"id":116,"text":117},{"type":126,"content":450},[451,452,302,455,458,459,462],"Az OpenAI középutat is kínál. Ha egy Responses- vagy Chat Completions-hívásnál a ",{"tag":173,"children":453},[454],"service_tier",{"tag":173,"children":456},[457],"flex",", batch-áron kapsz egy normál szinkron kérést, cserébe lassabb válaszokért és alkalmi elérhetetlenségért. Ha nincs kapacitás, olyan 429-et kapsz, amelyért nem kell fizetni, és vagy vársz és újrapróbálod, vagy ",{"tag":173,"children":460},[461],"service_tier: auto"," beállítással normál áron küldöd újra. Az SDK alapértelmezett időkorlátja tíz perc, az OpenAI példái tizenötre emelik.",{"type":186,"head":464,"rows":470},[465,467,468],[466],"Kérdés",[9],[469],"Flex processing",[471,478,483,490],[472,474,476],[473],"Kódforma",[475],"Fájl beküldése, lekérdezés, eredmények feldolgozása",[477],"Hagyományos kérés és válasz",[479,480,482],[201],[481],"Batch-ár",[481],[484,486,488],[485],"Hibamód",[487],"Lejárt vagy hibás sorok az eredményben",[489],"429 resource unavailable, nem számlázva",[491,493,495],[492],"Leginkább",[494],"Több tízezer független kéréshez",[496],"Alacsony prioritású munkához meglévő kódútvonalakon",{"type":133,"level":134,"id":119,"text":120},{"type":126,"content":499},[500,501,504],"Az aszinkron feldolgozás azt jelenti, hogy a szolgáltató addig tárolja a bemeneteidet és kimeneteidet, amíg át nem veszed őket. Az Anthropic a batch kérés- és válaszadatait a létrehozástól számítva legfeljebb 29 napig őrzi, a kész batch a ",{"tag":173,"children":502},[503],"DELETE \u002Fv1\u002Fmessages\u002Fbatches\u002F{batch_id}"," végponttal törölhető, a batchek workspace-enként elkülönülnek, és a Console-beli eredményletöltés letiltható; hogy egy funkcióra vonatkozik-e a zero data retention, azt az adatmegőrzési oldal funkciónként sorolja fel. Az OpenAI 30 nappal a batch befejezése után törli a kimeneti fájlokat, a Gemini 6 hétig őrzi az eredményeket, a Bedrock pedig egy általad kezelt S3 bucketbe írja őket.",{"type":126,"content":506},[507,508,512,513,517],"Személyes adatoknál ez három dolgot jelent: töröld a batcheket, amint eltároltad az eredményeket, vedd fel a szolgáltatót és a régiót az adatkezelési nyilvántartásba, és ellenőrizd, hogy a szerződésed megőrzési vállalásai egyáltalán kiterjednek-e a batch-tárolásra. A tágabb képet a ",{"tag":148,"to":509,"children":510},"\u002Fblog\u002Fgdpr-llm-api-eu-data-residency",[511],"GDPR és LLM-adatrezidencia"," cikk adja; ha egy visszatöltés ügyféladatokat érint, előbb futtasd át egy ",{"tag":148,"to":514,"children":515},"\u002Fblog\u002Fpii-redaction-llm-pipelines",[516],"PII-kitakarási"," lépésen.",{"type":133,"level":134,"id":122,"text":123},{"type":139,"ordered":520,"items":521},true,[522,526,529,532,535,538,541,544],[523],{"tag":524,"href":38,"children":525},"a",[37],[527],{"tag":524,"href":41,"children":528},[40],[530],{"tag":524,"href":44,"children":531},[43],[533],{"tag":524,"href":47,"children":534},[46],[536],{"tag":524,"href":50,"children":537},[49],[539],{"tag":524,"href":53,"children":540},[52],[542],{"tag":524,"href":56,"children":543},[55],[545],{"tag":524,"href":59,"children":546},[58],[548,614,672,725],{"slug":549,"published":5,"minutes":550,"category":7,"tags":551,"keywords":557,"about":569,"sources":579,"cover":608,"og":609,"expertise":62,"locales":610,"lang":66,"title":611,"description":612,"coverAlt":613},"llm-rate-limits-retries-provider-fallback",10,[552,553,554,555,556],"Rate limits","Retries","Fallback","Reliability","LLM gateway",[558,559,560,561,562,563,564,565,566,567,568],"llm rate limit handling","429 too many requests llm api","exponential backoff with jitter","anthropic 529 overloaded error","openai rate limit retry","llm provider fallback","litellm fallbacks","retry-after header","llm circuit breaker","multi provider llm failover","claude api rate limits",[570,573,576],{"name":571,"url":572},"Token bucket","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FToken_bucket",{"name":574,"url":575},"Exponential backoff","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FExponential_backoff",{"name":577,"url":578},"Circuit breaker design pattern","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FCircuit_breaker_design_pattern",[580,582,585,587,590,593,596,599,602,605],{"title":581,"url":41},"Claude Platform Docs: Rate limits",{"title":583,"url":584},"Claude Platform Docs: API errors","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fapi\u002Ferrors",{"title":586,"url":53},"OpenAI API Docs: Rate limits",{"title":588,"url":589},"AWS Builders Library: Timeouts, retries and backoff with jitter","https:\u002F\u002Fbuilder.aws.com\u002Fcontent\u002F3EumjoZascWd1oZiEgL8ORlv3qE\u002Ftimeouts-retries-and-backoff-with-jitter",{"title":591,"url":592},"MDN: Retry-After header","https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FHTTP\u002FReference\u002FHeaders\u002FRetry-After",{"title":594,"url":595},"Martin Fowler: Circuit Breaker (2014)","https:\u002F\u002Fmartinfowler.com\u002Fbliki\u002FCircuitBreaker.html",{"title":597,"url":598},"LiteLLM Docs: Router, retries and cooldowns","https:\u002F\u002Fdocs.litellm.ai\u002Fdocs\u002Frouting",{"title":600,"url":601},"LiteLLM Docs: Proxy fallbacks and reliability","https:\u002F\u002Fdocs.litellm.ai\u002Fdocs\u002Fproxy\u002Freliability",{"title":603,"url":604},"OpenRouter Docs: Model fallbacks","https:\u002F\u002Fopenrouter.ai\u002Fdocs\u002Fguides\u002Frouting\u002Fmodel-fallbacks",{"title":606,"url":607},"AI SDK Docs: Settings (maxRetries, timeout)","https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Fai-sdk-core\u002Fsettings","\u002Fimages\u002Fblog\u002Fllm-rate-limits-retries-provider-fallback\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fllm-rate-limits-retries-provider-fallback\u002Fog.jpg",[64,65,66],"LLM rate limitek élesben: újrapróbálás, backoff és szolgáltatóváltás","Hogyan működnek az LLM rate limitek, mit érdemes újrapróbálni, backoff jitterrel, retry egy rétegben, és fallback-láncok, amelyek nem rontják el a kimenetet.","Kis négyzetek kapaszkodnak három fokon egy széles téglalaphoz, mögötte még kettő sorban.",{"slug":615,"published":5,"minutes":616,"category":7,"tags":617,"keywords":622,"about":633,"sources":643,"cover":666,"og":667,"expertise":62,"locales":668,"lang":66,"title":669,"description":670,"coverAlt":671},"prompt-versioning-management",8,[618,619,11,620,621],"Prompt management","Versioning","Evals","Langfuse",[623,624,625,626,627,628,629,630,631,632],"prompt versioning","prompt management","prompt registry","version control for prompts","langfuse prompt management","mlflow prompt registry","prompts in git","openai prompt object deprecation","prompt rollback production","prompt ci evaluation",[634,637,640],{"name":635,"url":636},"Prompt engineering","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FPrompt_engineering",{"name":638,"url":639},"Version control","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FVersion_control",{"name":641,"url":642},"Continuous integration","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FContinuous_integration",[644,647,650,653,656,659,662,665],{"title":645,"url":646},"OpenAI API Docs: Migrate from prompt objects","https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fprompting\u002Fmigrate-from-prompt-object",{"title":648,"url":649},"OpenAI API Docs: Prompt engineering (reusable prompts deprecation note)","https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fprompt-engineering",{"title":651,"url":652},"Langfuse Docs: Prompt version control","https:\u002F\u002Flangfuse.com\u002Fdocs\u002Fprompt-management\u002Ffeatures\u002Fprompt-version-control",{"title":654,"url":655},"Langfuse Docs: Prompt caching in the SDKs","https:\u002F\u002Flangfuse.com\u002Fdocs\u002Fprompt-management\u002Ffeatures\u002Fcaching",{"title":657,"url":658},"Langfuse Docs: Link prompts to traces","https:\u002F\u002Flangfuse.com\u002Fdocs\u002Fprompt-management\u002Ffeatures\u002Flink-to-traces",{"title":660,"url":661},"MLflow Docs: Prompt Registry","https:\u002F\u002Fmlflow.org\u002Fdocs\u002Flatest\u002Fgenai\u002Fprompt-registry\u002F",{"title":663,"url":664},"Promptfoo Docs: GitHub Action","https:\u002F\u002Fwww.promptfoo.dev\u002Fdocs\u002Fintegrations\u002Fgithub-action\u002F",{"title":43,"url":44},"\u002Fimages\u002Fblog\u002Fprompt-versioning-management\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fprompt-versioning-management\u002Fog.jpg",[64,65,66],"Promptverziózás élesben: git, registry, címkék és visszaállítás","Promptok verziózása élesben: mi tartozik egy verzióhoz, git vagy prompt registry, címkék és visszaállítás, eval-kapu a CI-ban és a cache-re gyakorolt hatás.","Öt álló kártya sorban, a harmadik íves nyíllal visszafordul, a kapu az utolsó előtt áll.",{"slug":673,"published":674,"minutes":6,"category":7,"tags":675,"keywords":681,"about":693,"sources":700,"cover":719,"og":720,"expertise":62,"locales":721,"lang":66,"title":722,"description":723,"coverAlt":724},"structured-outputs-json-schema-llm","2026-10-16",[676,677,678,679,680],"Structured outputs","JSON Schema","Constrained decoding","LLM APIs","Validation",[682,683,684,685,686,687,688,689,690,691,692],"structured outputs LLM","JSON schema LLM output","OpenAI structured outputs strict mode","Claude structured outputs","Gemini structured output","constrained decoding","JSON mode vs structured outputs","validate LLM JSON output","Zod structured output","Pydantic LLM output","vLLM structured outputs",[694,697,699],{"name":695,"url":696},"JSON","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FJSON",{"name":677,"url":698},"https:\u002F\u002Fjson-schema.org\u002F",{"name":33,"url":34},[701,704,707,710,713,716],{"title":702,"url":703},"OpenAI API docs: Structured model outputs","https:\u002F\u002Fplatform.openai.com\u002Fdocs\u002Fguides\u002Fstructured-outputs",{"title":705,"url":706},"Claude API docs: Structured outputs","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fbuild-with-claude\u002Fstructured-outputs",{"title":708,"url":709},"Gemini API docs: Structured outputs","https:\u002F\u002Fai.google.dev\u002Fgemini-api\u002Fdocs\u002Fstructured-output",{"title":711,"url":712},"vLLM docs: Structured Outputs","https:\u002F\u002Fdocs.vllm.ai\u002Fen\u002Flatest\u002Ffeatures\u002Fstructured_outputs.html",{"title":714,"url":715},"Tam et al.: Let Me Speak Freely? A Study on the Impact of Format Restrictions on Performance of LLMs (2024)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2408.02442",{"title":717,"url":718},"Geng et al.: JSONSchemaBench: A Rigorous Benchmark of Structured Outputs for Language Models (2025)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2501.10868","\u002Fimages\u002Fblog\u002Fstructured-outputs-json-schema-llm\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fstructured-outputs-json-schema-llm\u002Fog.jpg",[64,65,66],"Strukturált kimenet JSON Schemával: mit fed le a garancia, és mit nem","Hogyan működik a strukturált kimenet és a korlátozott dekódolás az OpenAI, Claude, Gemini és vLLM esetén, mely sémaszabályok számítanak, és mit validálj.","Négy rekeszes merev keret, három blokk a helyén, egy túl széles fölötte lebeg.",{"slug":726,"published":674,"minutes":6,"category":7,"tags":727,"keywords":733,"about":746,"sources":754,"cover":776,"og":777,"expertise":62,"locales":778,"lang":66,"title":779,"description":780,"coverAlt":781},"evaluating-ai-agents-trajectories",[728,729,730,731,732],"Agent evals","Trajectories","Tool calling","pass^k","LLM-as-judge",[734,735,736,737,738,739,740,741,742,743,744,745],"evaluating AI agents","agent trajectory evaluation","agent evals","tool call accuracy","trajectory match evaluator","pass^k metric","tau-bench","LLM as a judge for agents","agent regression testing","outcome vs trajectory evaluation","agentevals","tool correctness metric",[747,750,753],{"name":748,"url":749},"Intelligent agent","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FIntelligent_agent",{"name":751,"url":752},"Software testing","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSoftware_testing",{"name":33,"url":34},[755,758,761,764,767,770,773],{"title":756,"url":757},"Anthropic: Demystifying evals for AI agents (Jan 2026)","https:\u002F\u002Fwww.anthropic.com\u002Fengineering\u002Fdemystifying-evals-for-ai-agents",{"title":759,"url":760},"Yao et al.: τ-bench: A Benchmark for Tool-Agent-User Interaction in Real-World Domains (2024)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2406.12045",{"title":762,"url":763},"Barres et al.: τ²-Bench: Evaluating Conversational Agents in a Dual-Control Environment (2025)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2506.07982",{"title":765,"url":766},"LangChain: agentevals (GitHub)","https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fagentevals",{"title":768,"url":769},"DeepEval docs: Tool Correctness","https:\u002F\u002Fdeepeval.com\u002Fdocs\u002Fmetrics-tool-correctness",{"title":771,"url":772},"Ragas docs: Agentic or tool use metrics","https:\u002F\u002Fdocs.ragas.io\u002Fen\u002Fstable\u002Fconcepts\u002Fmetrics\u002Favailable_metrics\u002Fagents\u002F",{"title":774,"url":775},"OpenAI API docs: Trace grading","https:\u002F\u002Fplatform.openai.com\u002Fdocs\u002Fguides\u002Ftrace-grading","\u002Fimages\u002Fblog\u002Fevaluating-ai-agents-trajectories\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fevaluating-ai-agents-trajectories\u002Fog.jpg",[64,65,66],"MI-ügynökök értékelése: trajektóriák, eredmények és megbízhatóság pontozása","Hogyan értékeld az MI-ügynököket: eredmény- és trajektória-értékelők, egyeztetési módok, pass^k, izolált környezet és megbízható LLM-bírák.","Két pontozott körút két négyzet között, széles kapocs keretezi a kanyargós utat.",1792222774287]