[{"data":1,"prerenderedAt":652},["ShallowReactive",2],{"blog-prompt-versioning-management-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":417},"prompt-versioning-management","2026-10-17",8,"llmops",[9,10,11,12,13],"Prompt management","Versioning","LLMOps","Evals","Langfuse",[15,16,17,18,19,20,21,22,23,24],"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",[26,29,32],{"name":27,"url":28},"Prompt engineering","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FPrompt_engineering",{"name":30,"url":31},"Version control","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FVersion_control",{"name":33,"url":34},"Continuous integration","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FContinuous_integration",[36,39,42,45,48,51,54,57],{"title":37,"url":38},"OpenAI API Docs: Migrate from prompt objects","https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fprompting\u002Fmigrate-from-prompt-object",{"title":40,"url":41},"OpenAI API Docs: Prompt engineering (reusable prompts deprecation note)","https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fprompt-engineering",{"title":43,"url":44},"Langfuse Docs: Prompt version control","https:\u002F\u002Flangfuse.com\u002Fdocs\u002Fprompt-management\u002Ffeatures\u002Fprompt-version-control",{"title":46,"url":47},"Langfuse Docs: Prompt caching in the SDKs","https:\u002F\u002Flangfuse.com\u002Fdocs\u002Fprompt-management\u002Ffeatures\u002Fcaching",{"title":49,"url":50},"Langfuse Docs: Link prompts to traces","https:\u002F\u002Flangfuse.com\u002Fdocs\u002Fprompt-management\u002Ffeatures\u002Flink-to-traces",{"title":52,"url":53},"MLflow Docs: Prompt Registry","https:\u002F\u002Fmlflow.org\u002Fdocs\u002Flatest\u002Fgenai\u002Fprompt-registry\u002F",{"title":55,"url":56},"Promptfoo Docs: GitHub Action","https:\u002F\u002Fwww.promptfoo.dev\u002Fdocs\u002Fintegrations\u002Fgithub-action\u002F",{"title":58,"url":59},"Claude Platform Docs: Prompt caching","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fbuild-with-claude\u002Fprompt-caching","\u002Fimages\u002Fblog\u002Fprompt-versioning-management\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fprompt-versioning-management\u002Fog.jpg","ai-engineer",[64,65,66],"en","de","hu","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.","Promptverziózás: git, registry, címkék · Balázs Csorba",[72,73,74,75,76],"Egy promptverzió a teljes csomag: sablon, modell, paraméterek, eszközök és kimeneti séma. Együtt verziózd őket, különben nem tudsz reprodukálni egy eredményt.","Az OpenAI kivezeti az újrahasznosítható prompt-objektumokat, a v1\u002Fprompts leállítása 2026. november 30-ra van ütemezve, és most azt javasolja, hogy a promptok az alkalmazás kódjában legyenek.","A Langfuse- és MLflow-féle registryk megváltoztathatatlan verziókat és áthelyezhető címkéket adnak, így a visszaállítás címkeváltás, nem telepítés.","Minden promptváltozást egy pull requesten futó eval védjen, az éles trace-eket pedig kösd össze az őket előállító promptverzióval.","A rendszerprompt vagy egy eszközdefiníció módosítása érvényteleníti a szolgáltatói prompt cache-t, így egy promptkiadás rövid költség- és késleltetési esemény is.",[78,81,84,87,90],{"q":79,"a":80},"Gitben vagy promptkezelő eszközben legyenek a promptok?","Alapból gitben: a review, az előzmények és a tesztek ingyen jönnek, és az OpenAI is pontosan ezt javasolja. A registry akkor éri meg, ha nem fejlesztők is szerkesztenek promptot, ha telepítés nélkül akarsz visszaállni, vagy ha verziónkénti éles metrikákra van szükséged. Sok csapat mindkettőt csinálja: a git a forrás, a registry a futásidejű tároló.",{"q":82,"a":83},"Mi a különbség a promptverzió és a címke között?","A verzió a prompt megváltoztathatatlan pillanatképe; az MLflow kimondja, hogy a verziók létrehozás után nem szerkeszthetők. A címke vagy alias, például a production, egy áthelyezhető mutató egy verzióra. A kód a címkét kéri, az előléptetés vagy visszaállítás pedig a mutató áthelyezése.",{"q":85,"a":86},"Mi lesz az OpenAI-ban mentett promptokkal?","Az OpenAI kivezeti az API újrahasznosítható prompt-objektumait. A promptok létrehozása 2026. június 3-tól háttérbe szorul, a v1\u002Fprompts végpont leállítása pedig 2026. november 30-ra van ütemezve. A migrációs útmutató szerint a prompt szövegét a saját kódodba kell vinni, a változókat típusos függvényargumentumokra cserélni, és az eredményt inputként átadni a Responses API-nak.",{"q":88,"a":89},"Növeli a késleltetést, ha registryből töltöm a promptot?","Alig, ha az SDK cache-el. A Langfuse kliensoldalon cache-eli a promptokat, alapból 60 másodperces TTL-lel, és a háttérben frissíti őket, közben a régi verziót szolgálja ki. Ha a cache üres és az API nem érhető el, egy átadott fallback-prompt életben tartja az alkalmazást.",{"q":91,"a":92},"Hogyan teszteljek egy promptváltozást, mielőtt a felhasználókhoz ér?","Minden olyan pull requestnél, amely promptfájlokat érint, futtasd ugyanazt az értékelőkészletet a régi és az új prompton. A promptfoo GitHub Action ezt csinálja, és PR-kommentként teszi közzé az összevetést. Kiadás után a pontszámokat, a késleltetést és a költséget promptverziónként hasonlítsd össze az összekapcsolt trace-eken.",[94,97,100,103,106,109,112,115,118,121],{"id":95,"title":96},"what-is-a-version","Mi tartozik egy promptverzióhoz",{"id":98,"title":99},"git-or-registry","Git vagy prompt registry?",{"id":101,"title":102},"versions-and-labels","Megváltoztathatatlan verziók, áthelyezhető címkék",{"id":104,"title":105},"runtime-fetch","Promptok betöltése futásidőben új hibaforrások nélkül",{"id":107,"title":108},"prompts-in-code","Ha a promptok a kódban élnek, legyen szerkezetük",{"id":110,"title":111},"eval-gate","Minden promptváltozás elé eval-kapu",{"id":113,"title":114},"link-to-traces","Kösd össze az éles trace-eket a promptverziókkal",{"id":116,"title":117},"cache-side-effects","A promptkiadás cache-esemény is",{"id":119,"title":120},"my-default","Észszerű alapbeállítás kis csapatoknak",{"id":122,"title":123},"sources","Források",[125,129,132,135,138,176,179,180,188,196,240,241,255,264,276,277,280,282,285,286,293,295,296,304,306,319,320,323,331,332,351,358,359,365,388,389],{"type":126,"content":127},"paragraph",[128],"A legtöbb LLM-funkcióban a prompt gyakrabban változik, mint a kód. Egy support-asszisztens új eszkalációs szabályt kap, egy kinyerési lépés megtanul egy új számlaelrendezést, egy osztályozó eggyel több kategóriát kap. Mindegyik élesbe szállított viselkedésváltozás, és sok kódbázisban a legkevésbé kontrollált: egy dashboardon átírt szöveg, egy konfigurációs fájlba bemásolt sablon, review nélkül, és senki sem tudja, melyik verzió válaszolt egy adott ügyfélnek múlt kedden.",{"type":126,"content":130},[131],"Ez az útmutató bemutatja, mit kell tartalmaznia egy promptverziónak, mikor elég a git és mikor éri meg egy prompt registry, hogyan teszik olcsóvá a címkék a visszaállítást, hogyan védd a promptváltozásokat evallal a CI-ban, és egy mellékhatást, amelyet a csapatok gyakran nem vesznek észre: egy promptkiadás nullázza a szolgáltatói prompt cache-t. Szó lesz egy 2026-os változásról is, amely a vita egy részét eldönti: az OpenAI kivezeti a mentett prompt-objektumait.",{"type":133,"level":134,"id":95,"text":96},"heading",2,{"type":126,"content":136},[137],"Egy sablonszöveg önmagában nem határozza meg a viselkedést. Ugyanaz a szöveg más modellel, más hőmérséklettel, más eszközlistával vagy más kimeneti sémával más kimenetet ad. Ha a verziótörténet csak a szöveget rögzíti, nem tudod megválaszolni azt a kérdést, amely egy incidensnél számít: pontosan mi futott? A csomagot verziózd:",{"type":139,"head":140,"rows":145},"table",[141,143],[142],"Rész",[144],"Miért tartozik a verzióhoz",[146,151,156,161,166,171],[147,149],[148],"Rendszer- és felhasználói sablonok",[150],"Maguk az utasítások",[152,154],[153],"Modellazonosító",[155],"Az egy modellre hangolt prompt egy másikon már másik prompt",[157,159],[158],"Paraméterek",[160],"A hőmérséklet, a max tokenszám és a gondolkodási ráfordítás megváltoztatja a kimenetet",[162,164],[163],"Eszközdefiníciók",[165],"A leírások annyira irányítják az eszközválasztást, mint a rendszerprompt",[167,169],[168],"Kimeneti séma",[170],"A későbbi kód függ tőle",[172,174],[173],"Few-shot példák",[175],"Gyakran a legnagyobb és legtöbbet szerkesztett rész",{"type":126,"content":177},[178],"Az alább tárgyalt registryk mindkettő támogatja ezt. A Langfuse-promptoknál a sablon mellett config mező is van, az MLflow pedig verziónként commitüzenetet enged, nagyon hasonlóan a githez. Gitben ezt úgy éred el, hogy a sablon, a paraméterek és a séma ugyanabban a modulban vannak.",{"type":133,"level":134,"id":98,"text":99},{"type":126,"content":181},[182,183,187],"2026-ban a git melletti legerősebb érvet egy olyan szolgáltató adta, amely korábban az alternatívát árulta. Az OpenAI kivezeti az API-ja újrahasznosítható prompt-objektumait: a promptok létrehozása 2026. június 3-tól háttérbe szorul, a ",{"tag":184,"children":185},"code",[186],"v1\u002Fprompts"," leállítása pedig 2026. november 30-ra van ütemezve. A migrációs útmutató azt mondja, hogy a prompt tartalmát vidd át az alkalmazás kódjába, hogy a promptváltozások ugyanazon a review- és kiadási folyamaton menjenek át, mint a többi kód, a promptváltozókat cseréld típusos függvényargumentumokra, a verziókat pedig commitokkal, pull requestekkel és CI-ban futó evalokkal kezeld.",{"type":126,"content":189},[190,191,195],"A registryk ettől még valódi problémákat oldanak meg. A ",{"tag":192,"to":193,"children":194},"link","\u002Ftools\u002Flangfuse",[13]," és az MLflow megváltoztathatatlan verziókat tárol áthelyezhető címkékkel, így egy termékmenedzser kipróbálhat egy új megfogalmazást, egy ügyeletes mérnök pedig másodpercek alatt, telepítés nélkül visszaállhat. Az éles metrikákat is verziókhoz kötik. A kérdés nem az, melyik tábornak van igaza, hanem az, hogy ki szerkeszti a promptokat, és milyen gyors visszaállás kell.",{"type":139,"head":197,"rows":204},[198,200,202],[199],"Szempont",[201],"Promptok gitben",[203],"Prompt registry",[205,212,219,226,233],[206,208,210],[207],"Ki szerkeszt",[209],"Fejlesztők",[211],"Fejlesztők és szakterületi szakértők",[213,215,217],[214],"Review",[216],"Pull request, mint a kódnál",[218],"Eszközfüggő, gyakran gyengébb",[220,222,224],[221],"Visszaállítás",[223],"Revert és telepítés",[225],"Címke áthelyezése, a cache TTL után él",[227,229,231],[228],"Futásidejű függőség",[230],"Nincs",[232],"Registry API, cache-sel és fallbackkel tompítva",[234,236,238],[235],"Metrikák verziónként",[237],"Csak ha magad címkézed a trace-eket",[239],"Beépített, ha a trace-ek össze vannak kötve",{"type":133,"level":134,"id":101,"text":102},{"type":126,"content":242},[243,244,247,248,251,252,254],"A hasznos gondolati modell ugyanaz, mint a konténer-registryknél: a verziók megváltoztathatatlanok, a tagek vándorolnak. Az MLflow kimondja, hogy a promptverziók a reprodukálhatóság miatt megváltoztathatatlanok, egy alias, például a ",{"tag":184,"children":245},[246],"production",", pedig módosítható hivatkozás, amelyet A\u002FB tesztekhez vagy visszaállításhoz átirányíthatsz. A Langfuse automatikusan oszt verziószámot, karbantart egy ",{"tag":184,"children":249},[250],"latest"," címkét, amely a legújabb verzióra mutat, és a ",{"tag":184,"children":253},[246]," címkéjű verziót adja vissza, ha címke és verzió nélkül kérsz le promptot.",{"type":256,"attrs":257,"inner":261,"caption":262},"diagram",{"viewBox":258,"role":259,"aria-labelledby":260},"0 0 720 170","img","pvm1-t pvm1-d","\u003Ctitle id=\"pvm1-t\">A committól a production címkéig\u003C\u002Ftitle>\u003Cdesc id=\"pvm1-d\">Egy promptváltozást commitolnak, a pull requesten kiértékelnek, új megváltoztathatatlan verzióként regisztrálnak, staging címkét kap, majd a production címke áthelyezésével élesbe kerül.\u003C\u002Fdesc>\u003Cdefs>\u003Cmarker id=\"pvm1-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\">Commit\u003C\u002Ftext>\u003Ctext x=\"79\" y=\"103\" text-anchor=\"middle\" class=\"d-small\">prompt + config\u003C\u002Ftext>\u003Cpath d=\"M138 85H158\" class=\"d-line\" marker-end=\"url(#pvm1-ah)\" \u002F>\u003Crect x=\"160\" y=\"47\" width=\"118\" height=\"76\" rx=\"10\" class=\"d-gold\" \u002F>\u003Ctext x=\"220\" y=\"81\" text-anchor=\"middle\" class=\"d-text\">Eval a PR-en\u003C\u002Ftext>\u003Ctext x=\"220\" y=\"103\" text-anchor=\"middle\" class=\"d-small\">régi vs. új\u003C\u002Ftext>\u003Cpath d=\"M279 85H299\" class=\"d-line\" marker-end=\"url(#pvm1-ah)\" \u002F>\u003Crect x=\"301\" y=\"47\" width=\"118\" height=\"76\" rx=\"10\" class=\"d-sky\" \u002F>\u003Ctext x=\"360\" y=\"81\" text-anchor=\"middle\" class=\"d-text\">14. verzió\u003C\u002Ftext>\u003Ctext x=\"360\" y=\"103\" text-anchor=\"middle\" class=\"d-small\">nem módosítható\u003C\u002Ftext>\u003Cpath d=\"M419 85H439\" class=\"d-line\" marker-end=\"url(#pvm1-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\">staging\u003C\u002Ftext>\u003Ctext x=\"500\" y=\"103\" text-anchor=\"middle\" class=\"d-small\">címke\u003C\u002Ftext>\u003Cpath d=\"M560 85H580\" class=\"d-line\" marker-end=\"url(#pvm1-ah)\" \u002F>\u003Crect x=\"582\" y=\"47\" width=\"118\" height=\"76\" rx=\"10\" class=\"d-box d-fill-accent\" \u002F>\u003Ctext x=\"641\" y=\"81\" text-anchor=\"middle\" class=\"d-text\">production\u003C\u002Ftext>\u003Ctext x=\"641\" y=\"103\" text-anchor=\"middle\" class=\"d-small\">címke áthelyezése\u003C\u002Ftext>",[263],"A visszaállítás annyi, hogy a production címkét újra a 13. verzióra irányítod; semmit sem kell újraépíteni.",{"type":126,"content":265},[266,267,269,270,272,273,275],"A Langfuse dokumentációjából két részletet érdemes a tervezésnél figyelembe venni. Ha olyan címkét kérsz, amely egyetlen verzión sincs rajta, 404-et kapsz; csendes visszaesés a ",{"tag":184,"children":268},[246]," vagy ",{"tag":184,"children":271},[250]," címkére nincs. A védett címkék pedig, amelyek a fizetős és vállalati kiadásokban érhetők el, megakadályozzák, hogy a viewer és member szerepkörök áthelyezzék a ",{"tag":184,"children":274},[246]," címkét, ez a registry megfelelője egy védett branchnek.",{"type":133,"level":134,"id":104,"text":105},{"type":126,"content":278},[279],"A registry hálózati hívást tesz a funkció és az utasításai közé. A Langfuse ezt kliensoldali cache-sel kezeli: az alapértelmezett TTL 60 másodperc, és lejárat után az SDK továbbra is a régi promptot szolgálja ki, miközben a háttérben újratölti. Ha a cache üres és az API nem érhető el, egy átadott fallback-prompt jön vissza helyette. Erre az utolsó esetre kell tervezni, mert hidegindításnál éppen abban az incidensben fordul elő, amikor a registry nem működik.",{"type":184,"code":281},"from langfuse import get_client\nfrom prompts.support import SUPPORT_SYSTEM_FALLBACK  # the same text, committed in git\n\nlangfuse = get_client()\n\ndef support_prompt():\n    # label, not version: promotion and rollback happen by moving \"production\"\n    return langfuse.get_prompt(\n        \"support-assistant\",\n        label=\"production\",\n        cache_ttl_seconds=300,          # default is 60; longer means slower rollbacks\n        fallback=SUPPORT_SYSTEM_FALLBACK,\n    )",{"type":126,"content":283},[284],"A TTL olyan kompromisszum, amelyet érdemes leírni: minél hosszabb, annál kevesebb a registry-hívás, és annál tovább tart, mire egy visszaállítás minden példányhoz eljut. Batch-feladatokban és evalokban rögzíts konkrét verziót, ott a reprodukálhatóság fontosabb, mint a címke követése.",{"type":133,"level":134,"id":107,"text":108},{"type":126,"content":287},[288,289,292],"Az OpenAI útmutatója konkrét: a promptok egy kis ",{"tag":184,"children":290},[291],"prompts\u002F"," modulban legyenek, promptonként egy elnevezett builderrel és könnyű eval-fixture-ökkel, ne szétszórva a kódbázisban. Két szokást tegyél hozzá. Először: a statikus tartalom legyen elöl, a dinamikus a végén, ezt ugyanez az útmutató javasolja, mert a cache-találat pontos előtagegyezésen múlik. Másodszor: minden prompttal exportálj egy verzióazonosítót, hogy a trace-ek registry nélkül is rögzítsék, melyik futott.",{"type":184,"code":294},"\u002F\u002F prompts\u002Finvoice-extract.ts\nimport { z } from 'zod'\n\nexport const INVOICE_EXTRACT = {\n  id: 'invoice-extract',\n  version: '2026-10-14.2',          \u002F\u002F bump on any change to text, model, params or schema\n  model: 'claude-sonnet-5-5',\n  params: { max_tokens: 2048 },\n  schema: z.object({ supplier: z.string(), total: z.number(), currency: z.string().length(3) }),\n  build: (input: { pdfText: string; locale: 'de' | 'en' | 'hu' }) => ({\n    system: SYSTEM_RULES,           \u002F\u002F static, long, cacheable: first\n    messages: [{ role: 'user' as const, content: `Locale: ${input.locale}\\n\\n${input.pdfText}` }],\n  }),\n}",{"type":133,"level":134,"id":110,"text":111},{"type":126,"content":297},[298,299,303],"A verziózás megmondja, mi változott; csak egy értékelés mondja meg, hogy jobb lett-e. A legolcsóbb működő megoldás minden olyan pull requestnél, amely promptfájlokat érint, egy rögzített tesztkészletet futtat a régi és az új prompton. A ",{"tag":192,"to":300,"children":301},"\u002Ftools\u002Fpromptfoo",[302],"Promptfoo"," GitHub Action pontosan ezt csinálja: a promptútvonalak alatti változásokra indul, összeveti a promptot a változás előtt és után, az eredményt PR-kommentként teszi közzé a nézegetőjére mutató linkkel, és a futások között cache-eli a modellhívásokat a költség miatt.",{"type":184,"code":305},"# .github\u002Fworkflows\u002Fprompt-eval.yml (trimmed)\non:\n  pull_request:\n    paths: ['prompts\u002F**']\njobs:\n  evaluate:\n    runs-on: ubuntu-latest\n    permissions: { pull-requests: write }\n    steps:\n      - uses: actions\u002Fcheckout@v4\n      - uses: promptfoo\u002Fpromptfoo-action@v1\n        with:\n          github-token: ${{ secrets.GITHUB_TOKEN }}\n          prompts: 'prompts\u002F**\u002F*.json'\n          config: 'prompts\u002Fpromptfooconfig.yaml'\n          cache-path: ~\u002F.cache\u002Fpromptfoo",{"type":126,"content":307},[308,309,313,314,318],"Az, hogy mi kerül a tesztkészletbe, többet számít az eszköznél. Valódi hibákból indulj, ahogy az ",{"tag":192,"to":310,"children":311},"\u002Fblog\u002Fllm-evals-for-product-features",[312],"LLM-evalok termékfunkciókhoz"," cikkben leírtam: minden hibajegy, amelyet egy promptváltozás javított, tesztesetté válik, így a következő változás nem hozhatja vissza csendben. Egy modellfrissítés csak egy promptverzió új modellazonosítóval, és ugyanazt a kaput kapja, lásd: ",{"tag":192,"to":315,"children":316},"\u002Fblog\u002Fllm-model-migration-regression-testing",[317],"modellmigrációk regresszió nélkül",".",{"type":133,"level":134,"id":113,"text":114},{"type":126,"content":321},[322],"Az offline evalok azokat az eseteket fedik le, amelyekre gondoltál. Az éles üzem a többit, de csak akkor, ha minden generálás rögzíti, melyik promptverzió állította elő. A Langfuse az SDK-n vagy az OpenAI-, LangChain- és AI SDK-integrációin keresztül köti a promptot a generáláshoz, a Metrics fül pedig medián késleltetés, bemeneti és kimeneti tokenek, költség, generálásszám és medián pontszám szerint veti össze a verziókat. Egy megkötés a dokumentációból: ha a fallback-prompt fut, nem jön létre kapcsolat, így az össze nem kötött generálások hirtelen megugrása maga is jelzi, hogy a registry elérhetetlen volt.",{"type":126,"content":324},[325,326,330],"Registry nélkül a kódból származó promptazonosítót és verziót írd a span-attribútumokba. Az ",{"tag":192,"to":327,"children":328},"\u002Fblog\u002Fagent-observability-opentelemetry",[329],"LLM-ágensek megfigyelhetősége"," cikk OpenTelemetry-beállítása egy group-byjal ugyanezt az összevetést adja.",{"type":133,"level":134,"id":116,"text":117},{"type":126,"content":333},[334,335,338,339,338,342,345,346,350],"A szolgáltatói prompt cache pontos előtagokhoz kötődik. Az Anthropic a ",{"tag":184,"children":336},[337],"tools",", aztán a ",{"tag":184,"children":340},[341],"system",{"tag":184,"children":343},[344],"messages"," részt cache-eli, és egy szinten végzett változtatás azt a szintet és minden utána következőt érvénytelenít: ha egy eszközleírást módosítasz, az egész cache elvész, ha a rendszerpromptot, a system és a messages rész újraépül. A cache-írás drágább a normál bemenetnél (ötperces cache-nél az alapár 1,25-szöröse), az olvasás töredékbe kerül, így közvetlenül egy kiadás után írási árat fizetsz, és hosszabb az első tokenig eltelt idő, amíg az új előtag fel nem melegszik. A mechanikát a ",{"tag":192,"to":347,"children":348},"\u002Fblog\u002Fllm-cost-latency-prompt-caching-routing",[349],"prompt caching és modell-routing"," cikkben írtam le.",{"type":352,"variant":353,"title":354,"body":355},"callout","tip","A változékony szöveg ne kerüljön az előtagba",[356],[357],"A dátum, a felhasználónév, a feature flagek és az A\u002FB-változatok szövege a prompt végére való, nem a rendszerpromptba. Különben minden változat és minden nap külön cache-előtag, és egy ártalmatlan kísérlet megduplázza a bemeneti költséget.",{"type":133,"level":134,"id":119,"text":120},{"type":126,"content":360},[361,362,364],"Az általam épített projektekben az alapértelmezés: először git. A promptok a modelljükkel, paramétereikkel és sémájukkal együtt egy ",{"tag":184,"children":363},[291]," modulban élnek; minden változásnál nő egy verziószöveg; a pull requesten promptfoo- vagy hasonló eval fut; és a verzió minden trace-be bekerül. Registry akkor jön a képbe, ha a fejlesztőcsapaton kívül valakinek promptot kell szerkesztenie, vagy ha a visszaállításnak gyorsabbnak kell lennie egy telepítésnél. Ilyenkor a git marad az igazság forrása, a CI pedig publikál a registrybe, így a címke csak az eval-kapu után mozdul.",{"type":366,"items":367},"list",[368,374,379,383],[369,373],{"tag":370,"children":371},"strong",[372],"Az éles szöveget soha ne szerkeszd helyben."," Hozz létre verziót, értékeld ki, helyezd át a címkét.",[375,378],{"tag":370,"children":376},[377],"Evalokban és batch-feladatokban rögzítsd a verziót",", címkét csak interaktív útvonalakon kövess.",[380],{"tag":370,"children":381},[382],"Minden registryben kezelt prompthoz tarts fallback-promptot a repóban.",[384,387],{"tag":370,"children":385},[386],"A review-ban kezeld kódként a promptot:"," egy prompt diffje ugyanannyi figyelmet érdemel, mint egy SQL-lekérdezésé.",{"type":133,"level":134,"id":122,"text":123},{"type":366,"ordered":390,"items":391},true,[392,396,399,402,405,408,411,414],[393],{"tag":394,"href":38,"children":395},"a",[37],[397],{"tag":394,"href":41,"children":398},[40],[400],{"tag":394,"href":44,"children":401},[43],[403],{"tag":394,"href":47,"children":404},[46],[406],{"tag":394,"href":50,"children":407},[49],[409],{"tag":394,"href":53,"children":410},[52],[412],{"tag":394,"href":56,"children":413},[55],[415],{"tag":394,"href":59,"children":416},[58],[418,486,542,595],{"slug":419,"published":5,"minutes":420,"category":7,"tags":421,"keywords":427,"about":439,"sources":449,"cover":480,"og":481,"expertise":62,"locales":482,"lang":66,"title":483,"description":484,"coverAlt":485},"llm-rate-limits-retries-provider-fallback",10,[422,423,424,425,426],"Rate limits","Retries","Fallback","Reliability","LLM gateway",[428,429,430,431,432,433,434,435,436,437,438],"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",[440,443,446],{"name":441,"url":442},"Token bucket","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FToken_bucket",{"name":444,"url":445},"Exponential backoff","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FExponential_backoff",{"name":447,"url":448},"Circuit breaker design pattern","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FCircuit_breaker_design_pattern",[450,453,456,459,462,465,468,471,474,477],{"title":451,"url":452},"Claude Platform Docs: Rate limits","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fapi\u002Frate-limits",{"title":454,"url":455},"Claude Platform Docs: API errors","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fapi\u002Ferrors",{"title":457,"url":458},"OpenAI API Docs: Rate limits","https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Frate-limits",{"title":460,"url":461},"AWS Builders Library: Timeouts, retries and backoff with jitter","https:\u002F\u002Fbuilder.aws.com\u002Fcontent\u002F3EumjoZascWd1oZiEgL8ORlv3qE\u002Ftimeouts-retries-and-backoff-with-jitter",{"title":463,"url":464},"MDN: Retry-After header","https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FHTTP\u002FReference\u002FHeaders\u002FRetry-After",{"title":466,"url":467},"Martin Fowler: Circuit Breaker (2014)","https:\u002F\u002Fmartinfowler.com\u002Fbliki\u002FCircuitBreaker.html",{"title":469,"url":470},"LiteLLM Docs: Router, retries and cooldowns","https:\u002F\u002Fdocs.litellm.ai\u002Fdocs\u002Frouting",{"title":472,"url":473},"LiteLLM Docs: Proxy fallbacks and reliability","https:\u002F\u002Fdocs.litellm.ai\u002Fdocs\u002Fproxy\u002Freliability",{"title":475,"url":476},"OpenRouter Docs: Model fallbacks","https:\u002F\u002Fopenrouter.ai\u002Fdocs\u002Fguides\u002Frouting\u002Fmodel-fallbacks",{"title":478,"url":479},"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":487,"published":5,"minutes":488,"category":7,"tags":489,"keywords":494,"about":505,"sources":515,"cover":536,"og":537,"expertise":62,"locales":538,"lang":66,"title":539,"description":540,"coverAlt":541},"llm-batch-api-offline-workloads",9,[490,491,11,492,493],"Batch API","Cost","Prompt caching","Data pipelines",[495,496,497,498,499,500,501,502,503,504],"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",[506,509,512],{"name":507,"url":508},"Batch processing","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FBatch_processing",{"name":510,"url":511},"JSON Lines","https:\u002F\u002Fjsonlines.org\u002F",{"name":513,"url":514},"Large language model","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FLarge_language_model",[516,519,521,522,525,528,530,533],{"title":517,"url":518},"Claude Platform Docs: Batch processing","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fbuild-with-claude\u002Fbatch-processing",{"title":520,"url":452},"Claude Platform Docs: Rate limits (Message Batches API)",{"title":58,"url":59},{"title":523,"url":524},"OpenAI API Docs: Batch API","https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fbatch",{"title":526,"url":527},"OpenAI API Docs: Flex processing","https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fflex-processing",{"title":529,"url":458},"OpenAI API Docs: Rate limits (batch queue limits)",{"title":531,"url":532},"Google AI for Developers: Gemini Batch API","https:\u002F\u002Fai.google.dev\u002Fgemini-api\u002Fdocs\u002Fbatch-api",{"title":534,"url":535},"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",[64,65,66],"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.",{"slug":543,"published":544,"minutes":488,"category":7,"tags":545,"keywords":551,"about":563,"sources":570,"cover":589,"og":590,"expertise":62,"locales":591,"lang":66,"title":592,"description":593,"coverAlt":594},"structured-outputs-json-schema-llm","2026-10-16",[546,547,548,549,550],"Structured outputs","JSON Schema","Constrained decoding","LLM APIs","Validation",[552,553,554,555,556,557,558,559,560,561,562],"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",[564,567,569],{"name":565,"url":566},"JSON","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FJSON",{"name":547,"url":568},"https:\u002F\u002Fjson-schema.org\u002F",{"name":513,"url":514},[571,574,577,580,583,586],{"title":572,"url":573},"OpenAI API docs: Structured model outputs","https:\u002F\u002Fplatform.openai.com\u002Fdocs\u002Fguides\u002Fstructured-outputs",{"title":575,"url":576},"Claude API docs: Structured outputs","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fbuild-with-claude\u002Fstructured-outputs",{"title":578,"url":579},"Gemini API docs: Structured outputs","https:\u002F\u002Fai.google.dev\u002Fgemini-api\u002Fdocs\u002Fstructured-output",{"title":581,"url":582},"vLLM docs: Structured Outputs","https:\u002F\u002Fdocs.vllm.ai\u002Fen\u002Flatest\u002Ffeatures\u002Fstructured_outputs.html",{"title":584,"url":585},"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":587,"url":588},"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":596,"published":544,"minutes":488,"category":7,"tags":597,"keywords":603,"about":616,"sources":624,"cover":646,"og":647,"expertise":62,"locales":648,"lang":66,"title":649,"description":650,"coverAlt":651},"evaluating-ai-agents-trajectories",[598,599,600,601,602],"Agent evals","Trajectories","Tool calling","pass^k","LLM-as-judge",[604,605,606,607,608,609,610,611,612,613,614,615],"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",[617,620,623],{"name":618,"url":619},"Intelligent agent","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FIntelligent_agent",{"name":621,"url":622},"Software testing","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSoftware_testing",{"name":513,"url":514},[625,628,631,634,637,640,643],{"title":626,"url":627},"Anthropic: Demystifying evals for AI agents (Jan 2026)","https:\u002F\u002Fwww.anthropic.com\u002Fengineering\u002Fdemystifying-evals-for-ai-agents",{"title":629,"url":630},"Yao et al.: τ-bench: A Benchmark for Tool-Agent-User Interaction in Real-World Domains (2024)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2406.12045",{"title":632,"url":633},"Barres et al.: τ²-Bench: Evaluating Conversational Agents in a Dual-Control Environment (2025)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2506.07982",{"title":635,"url":636},"LangChain: agentevals (GitHub)","https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fagentevals",{"title":638,"url":639},"DeepEval docs: Tool Correctness","https:\u002F\u002Fdeepeval.com\u002Fdocs\u002Fmetrics-tool-correctness",{"title":641,"url":642},"Ragas docs: Agentic or tool use metrics","https:\u002F\u002Fdocs.ragas.io\u002Fen\u002Fstable\u002Fconcepts\u002Fmetrics\u002Favailable_metrics\u002Fagents\u002F",{"title":644,"url":645},"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.",1792222774280]