[{"data":1,"prerenderedAt":716},["ShallowReactive",2],{"tool-llamaindex-hu":3},{"slug":4,"published":5,"minutes":6,"category":7,"tags":8,"keywords":14,"about":22,"sources":29,"cover":56,"og":57,"expertise":58,"locales":59,"lang":62,"title":63,"description":64,"coverAlt":65,"url":66,"pricing":67,"kind":9,"metaTitle":68,"takeaways":69,"faq":75,"toc":88,"blocks":113,"others":483},"llamaindex","2026-07-14",10,"agents",[9,10,11,12,13],"Agent framework","RAG","Python","Document parsing","Workflows",[4,15,16,17,18,19,20,21],"llamaindex vs langgraph","llamaindex workflows","llama index agent framework","llamaparse pricing","rag framework python","durable workflows python","document agent framework",[23,26],{"name":24,"url":25},"LlamaIndex","https:\u002F\u002Fgithub.com\u002Frun-llama\u002Fllama_index",{"name":27,"url":28},"Retrieval-augmented generation","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FRetrieval-augmented_generation",[30,32,35,38,41,44,47,50,53],{"title":31,"url":25},"LlamaIndex repository README and focus note",{"title":33,"url":34},"Agent Workflows: introduction","https:\u002F\u002Fdevelopers.llamaindex.ai\u002Fpython\u002Fllamaagents\u002Fworkflows\u002F",{"title":36,"url":37},"Agent Workflows: writing durable workflows","https:\u002F\u002Fdevelopers.llamaindex.ai\u002Fpython\u002Fllamaagents\u002Fworkflows\u002Fdurable_workflows\u002F",{"title":39,"url":40},"Agent Workflows: observability","https:\u002F\u002Fdevelopers.llamaindex.ai\u002Fpython\u002Fllamaagents\u002Fworkflows\u002Fobservability\u002F",{"title":42,"url":43},"LlamaAgents overview","https:\u002F\u002Fdevelopers.llamaindex.ai\u002Fpython\u002Fllamaagents\u002Foverview\u002F",{"title":45,"url":46},"llama-index-core on PyPI","https:\u002F\u002Fpypi.org\u002Fproject\u002Fllama-index-core\u002F",{"title":48,"url":49},"LlamaIndex and LlamaParse pricing","https:\u002F\u002Fwww.llamaindex.ai\u002Fpricing",{"title":51,"url":52},"LiteParse documentation","https:\u002F\u002Fdevelopers.llamaindex.ai\u002Fliteparse\u002F",{"title":54,"url":55},"LangGraph on GitHub","https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Flanggraph","\u002Fimages\u002Fblog\u002Fllamaindex\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fllamaindex\u002Fog.jpg","ai-engineer",[60,61,62],"en","de","hu","LlamaIndex teszt: a legszélesebb adat-eszközkészlet, aminek a súlypontja már elmozdult","LlamaIndex 2026: MIT-licencű Python keretrendszer adatokhoz és agentekhez, több mint 300 integrációval, eseményvezérelt Workflows-szal, és egy céggel, amely a fókuszát LlamaParse-ra helyezte.","Diagram: eseményvezérelt workflow tipizált lépésekkel, párhuzamos workerekkel, gyűjtő lépéssel és egy checkpointtal újraindítás után.","https:\u002F\u002Fwww.llamaindex.ai","MIT · hosted platform paid","LlamaIndex: széles toolkit, elmozduló fókusz · Balázs Csorba",[70,71,72,73,74],"A LlamaIndex továbbra is a legszélesebb open source adat-eszközkészlet LLM-alkalmazásokhoz: több mint 300 integrációs csomag, mindegyik vékony adapter, egy kis magabsztrakció-készlet fölött.","A Workflows, az orchestrációs réteg eseményvezérelt: egy lépés eseményt kap és eseményt ad vissza, a gráf a típusannotációkból származik, és a futás előtt validálódik.","A perzisztencia opcionális és kézzel írandó. Egy futás alapértelmezés szerint efemer, a mentés a `Context.to_dict()` pillanatképéből és a csapat által írt hurokból áll, a folytatás at-least-once, tehát a lépéseknek újrafuttathatónak kell lenniük.","A cég saját README-je szerint a fókusz ma a dokumentumparsolás és a kinyerés. A LlamaParse a fizetős termék, kreditben árazva, a LiteParse pedig a helyi open source parser.","Az ítélet: használd az open source magot, a Workflows-ot pedig kis könyvtárként, de tartsd szűken a framework hatókörét, mert a karbantartás iránya egyértelműen máshová tolódott.",[76,79,82,85],{"q":77,"a":78},"Megéri-e még a LlamaIndex 2026-ban?","Igen, szűkebb hatókörrel. Az MIT-licencű magat továbbra is karbantartják, a `llama-index-core` 2026. szeptember 21-én a 0.14.25 verziónál állt, és a Workflows orchestrációs réteg valóban jól van megtervezve az elágazó és hurkozó logikához. Amitől megváltozott a helyzet, az a cég deklarált fókusza, amelyet a README a dokumentumparsolásra és kinyerésre, nem a frameworkre helyez.",{"q":80,"a":81},"Mik a LlamaIndex Workflows, és hogyan működnek?","Egy workflow a `Workflow` egy alosztálya, amelynek metódusait `@step` díszíti. Minden lépés egy eseménytípust fogad, és egy másikat ad vissza, a framework pedig típusannotáció alapján irányít, így az elágazások szokásos `if` utasítások, a hurkok pedig olyan lépések, amelyek egy korábban kezelt eseményt adnak vissza. A párhuzamosság egy `list[Event]`-et visszaadó lépés, egy `list[Event]`-et fogadó lépéssel párban. Az eseménygráf a futás előtt validálódik.",{"q":83,"a":84},"Hogyan kezeli a LlamaIndex a perzisztenciát és az újrapróbálkozást?","Alapértelmezés szerint nem. Amint a `run()` visszatér, az állapot megszűnik. A dokumentált mechanizmus egy checkpoint-hurok: a kontextust a `Context.to_dict()`-tel mentjük, amikor egy `StepStateChanged` esemény egy lépést befejezettnek jelöl, majd a `Context.from_dict()`-tel visszaépítjük, és meghívjuk a `run(ctx=...)`-t. A folytatás at-least-once, tehát a mentéskor még futó lépés újrafut. A DBOS futásidejű plugin az alternatíva, ami megszünteti a hurkot.",{"q":86,"a":87},"Mennyibe kerül a LlamaParse?","Az árazási oldal krediteket ad el, nem helyeket: 1000 kredit 1,25 dollár, 10 000 kredit ingyen, 40 000 az 50 dolláros starter csomagban és 400 000 az 500 dolládos pro csomagban, a pay-as-you-go plafon pedig havi 500, illetve 5000 dollár. Az egyidejű parse feladatok száma 5 az ingyenes és a starter csomagban, 20 a prof, 100 az enterprise szinten. A parse, a kinyerés, a besorolás és az indexelés ugyanarról az egyenlegről von le.",[89,92,95,98,101,104,107,110],{"id":90,"title":91},"what-it-is","Mi ez",{"id":93,"title":94},"how-it-works","Hogyan működik a Workflows",{"id":96,"title":97},"getting-started","Első lépések",{"id":99,"title":100},"durability","Perzisztencia és újrapróbálkozás",{"id":102,"title":103},"where-it-falls-short","Hol gyengül",{"id":105,"title":106},"the-pivot","A fordulópont a dokumentumfeldolgozás felé",{"id":108,"title":109},"verdict","Ítélet",{"id":111,"title":112},"sources","Források",[114,118,121,124,144,167,168,194,203,231,241,242,245,247,269,288,289,310,312,327,328,331,388,391,398,399,402,417,420,426,427,430,445,449,452,453],{"type":115,"content":116},"paragraph",[117],"A LlamaIndex MIT-licencű Python-keretrendszer, amely LLM-alkalmazásokat köt össze adatokkal. Konnektorok és indexabsztrakciók halmazaként indult retrievalre, és máig a legszélesebb ilyen eszközkészlet: a repository több mint 300 integrációs csomagot publikál modell-szolgáltatókhoz, embedding modellekhez, vektortárakhoz, dokumentum-betöltőkhöz és rerankerekhez. Ez a szélesség az oka, hogy a legtöbb csapat először ezzel találkozik, és az is, hogy hasznos marad akkor is, ha a cég figyelme már máshol jár. Az itt felvett állás egyszerű: használd az open source magot, és tudatosan döntsd el, melyik hosztolt részt veszed fel.",{"type":115,"content":119},[120],"A modell-szolgáltató és az alkalmazás között helyezkedik el. A magban semmi nem beszél közvetlenül modell-szolgáltatóval; minden modell, embedder és vektortár egy integrációs csomagon keresztül érkezik, amely a mag egy absztrakt osztályát implementálja. Ez tiszta határ, és egyben a fő panasz forrása is: ugyanaz az absztrakciónak le kell fednie az OpenAI-t, egy helyi Ollama-folyamatot és egy tucat embedding modellt, így a hasznos közös nevező keskenyebb, mint a felület sugallja. A LangGraphgel ugyanazt az orchestrációs szerepet versenypályázza, a LangChainnel az adatkezelést, a kézzel összerakott vektortár-plusz-reranker kombinációval pedig a kényelmet versenyezi, nem a képességet.",{"type":122,"level":123,"id":90,"text":91},"heading",2,{"type":115,"content":125},[126,127,131,132,135,136,139,140,143],"A csomagstruktúra az első, amit ellenőrizni kell, és ott kezdődik a legtöbb zavar. A ",{"tag":128,"children":129},"code",[130],"llama-index-core"," tartalmazza az absztrakciókat, és a Workflows-ot is mellé szállítja. A ",{"tag":128,"children":133},[134],"llama-index"," az induló csomag, amely a magot és egy választott integrációcsoportot telepíti. A Workflows önállóan is megjelent ",{"tag":128,"children":137},[138],"llama-index-workflows"," néven, és ha a magon keresztül érkezik, akkor ",{"tag":128,"children":141},[142],"llama_index.core.workflow"," néven importálják. Minden más külön telepítés, és csak ezért marad kezelhető a függőségi fa.",{"type":145,"ordered":146,"items":147},"list",false,[148,153,155,157,159,165],[149,150,152],"MIT-licenc. A ",{"tag":128,"children":151},[130]," aktuális kiadása 0.14.25, 2026. szeptember 21-én.",[154],"Több mint 300 integrációs csomag a PyPI-n, mindegyik vékony adapter a mag egy absztrakt osztálya fölött.",[156],"A Workflows, az orchestrációs réteg eseményvezérelt: egy lépés egy eseményt kap, és egy másikat ad vissza, a framework pedig típusannotáció alapján irányít, nem deklarált él mentén.",[158],"Az eseménygráfot a futás előtt validálja a framework. Elutasítja az olyan workflow-kat, ahol egy eseménynek nincs termelője, egy előállított eseménynek nincs fogyasztója, vagy nem érhető el végső esemény.",[160,161,164],"A futások alapértelmezés szerint efemerisek. A perzisztencia opcionális ",{"tag":128,"children":162},[163],"Context.to_dict()"," pillanatképeken keresztül, vagy egy futásidejű pluginnon, mint a DBOS, amely a lépésátmeneteket adatbázisba naplózza.",[166],"A framework gyakorlati célplatformja a Python. Csak a LiteParse, a cég új helyi parserje szállít bindingokat a Pythonon túl.",{"type":122,"level":123,"id":93,"text":94},{"type":115,"content":169},[170,171,174,175,178,179,182,183,186,187,190,191,193],"A Workflows az a rész, amit érdemes megérteni, mert az is az, ami túléri a framework RAG-múltját. Egy workflow a ",{"tag":128,"children":172},[173],"Workflow"," egy alosztálya, amelynek metódusait a ",{"tag":128,"children":176},[177],"@step"," díszíti. Minden lépés egy eseménytípust fogad, és egy másikat ad vissza; a kezdeti eseménytípus visszaadása indítja a futást, a ",{"tag":128,"children":180},[181],"StopEvent"," visszaadása zárja. Az elágazások szokásos ",{"tag":128,"children":184},[185],"if"," utasítások, amelyek különböző eseménytípusokat adnak vissza, a hurok pedig olyan lépés, amely korábban kezelt eseménytípust ad vissza. A párhuzamosság egy ",{"tag":128,"children":188},[189],"list[Event]","-et visszaadó lépés, egy ",{"tag":128,"children":192},[189],"-et fogadó lépéssel párban, amely a gyűjtő.",{"type":195,"attrs":196,"inner":200,"caption":201},"diagram",{"viewBox":197,"role":198,"aria-labelledby":199},"0 0 720 350","img","li-flow-t li-flow-d","\u003Ctitle id=\"li-flow-t\">Workflows: tipizált események viszik előre a futást\u003C\u002Ftitle>\u003Cdesc id=\"li-flow-d\">Egy kezdő esemény elindít egy retrieval lépést, amely nyolc párhuzamos workerre fanoutol, majd egy reranking lépés és egy záró StopEvent következik. Alattuk egy checkpoint lépés minden befejezett lépés után JSON-ba menti a kontextust, és egy resume útvonal csak a befejezetlen munkát ismétli.\u003C\u002Fdesc>\u003Ctext x=\"20\" y=\"28\" class=\"d-title\">Workflows: az események viszik a futást\u003C\u002Ftext>\u003Ctext x=\"700\" y=\"28\" text-anchor=\"end\" class=\"d-label\">llama-index-workflows\u003C\u002Ftext>\u003Ctext x=\"20\" y=\"56\" class=\"d-label\">EGY FUTÁS\u003C\u002Ftext>\u003Crect x=\"20\" y=\"70\" width=\"130\" height=\"60\" rx=\"10\" class=\"d-box\" \u002F>\u003Ctext x=\"85\" y=\"100\" text-anchor=\"middle\" class=\"d-text\">kérdés\u003C\u002Ftext>\u003Ctext x=\"85\" y=\"120\" text-anchor=\"middle\" class=\"d-small\">StartEvent\u003C\u002Ftext>\u003Cpath d=\"M150 100 H182\" class=\"d-line\" \u002F>\u003Cpath d=\"M190 100 l-9 -5 v10 z\" class=\"d-head\" \u002F>\u003Crect x=\"190\" y=\"70\" width=\"170\" height=\"60\" rx=\"10\" class=\"d-sky\" \u002F>\u003Ctext x=\"275\" y=\"100\" text-anchor=\"middle\" class=\"d-text\">retrieve\u003C\u002Ftext>\u003Ctext x=\"275\" y=\"120\" text-anchor=\"middle\" class=\"d-small\">top_k = 8\u003C\u002Ftext>\u003Cpath d=\"M360 100 H392\" class=\"d-line\" \u002F>\u003Cpath d=\"M400 100 l-9 -5 v10 z\" class=\"d-head\" \u002F>\u003Crect x=\"400\" y=\"70\" width=\"150\" height=\"60\" rx=\"10\" class=\"d-sky\" \u002F>\u003Ctext x=\"475\" y=\"100\" text-anchor=\"middle\" class=\"d-text\">rerank\u003C\u002Ftext>\u003Ctext x=\"475\" y=\"120\" text-anchor=\"middle\" class=\"d-small\">cross-encoder\u003C\u002Ftext>\u003Cpath d=\"M550 100 H582\" class=\"d-line\" \u002F>\u003Cpath d=\"M590 100 l-9 -5 v10 z\" class=\"d-head\" \u002F>\u003Crect x=\"590\" y=\"70\" width=\"110\" height=\"60\" rx=\"10\" class=\"d-accent\" \u002F>\u003Ctext x=\"645\" y=\"100\" text-anchor=\"middle\" class=\"d-text\">válasz\u003C\u002Ftext>\u003Ctext x=\"645\" y=\"120\" text-anchor=\"middle\" class=\"d-small\">StopEvent\u003C\u002Ftext>\u003Cpath d=\"M275 130 V172\" class=\"d-line\" \u002F>\u003Cpath d=\"M275 182 l-5 -9 h10 z\" class=\"d-head\" \u002F>\u003Ctext x=\"20\" y=\"168\" class=\"d-label\">EGY LÉPÉS, N WORKER\u003C\u002Ftext>\u003Crect x=\"20\" y=\"186\" width=\"160\" height=\"56\" rx=\"10\" class=\"d-box\" \u002F>\u003Ctext x=\"100\" y=\"214\" text-anchor=\"middle\" class=\"d-text\">read #1\u003C\u002Ftext>\u003Ctext x=\"100\" y=\"233\" text-anchor=\"middle\" class=\"d-small\">WorkItem\u003C\u002Ftext>\u003Cpath d=\"M180 214 H192\" class=\"d-line\" \u002F>\u003Cpath d=\"M200 214 l-9 -5 v10 z\" class=\"d-head\" \u002F>\u003Crect x=\"200\" y=\"186\" width=\"160\" height=\"56\" rx=\"10\" class=\"d-box\" \u002F>\u003Ctext x=\"280\" y=\"214\" text-anchor=\"middle\" class=\"d-text\">read #2\u003C\u002Ftext>\u003Ctext x=\"280\" y=\"233\" text-anchor=\"middle\" class=\"d-small\">WorkItem\u003C\u002Ftext>\u003Cpath d=\"M360 214 H372\" class=\"d-line\" \u002F>\u003Cpath d=\"M380 214 l-9 -5 v10 z\" class=\"d-head\" \u002F>\u003Crect x=\"380\" y=\"186\" width=\"160\" height=\"56\" rx=\"10\" class=\"d-box\" \u002F>\u003Ctext x=\"460\" y=\"214\" text-anchor=\"middle\" class=\"d-text\">read #n\u003C\u002Ftext>\u003Ctext x=\"460\" y=\"233\" text-anchor=\"middle\" class=\"d-small\">8 fut\u003C\u002Ftext>\u003Cpath d=\"M540 214 H552\" class=\"d-line\" \u002F>\u003Cpath d=\"M560 214 l-9 -5 v10 z\" class=\"d-head\" \u002F>\u003Crect x=\"560\" y=\"186\" width=\"140\" height=\"56\" rx=\"10\" class=\"d-mint\" \u002F>\u003Ctext x=\"630\" y=\"214\" text-anchor=\"middle\" class=\"d-text\">összegyűjt\u003C\u002Ftext>\u003Ctext x=\"630\" y=\"233\" text-anchor=\"middle\" class=\"d-small\">list[Done]\u003C\u002Ftext>\u003Ctext x=\"20\" y=\"274\" class=\"d-label\">ÚJRAINDÍTÁS UTÁN\u003C\u002Ftext>\u003Crect x=\"20\" y=\"288\" width=\"260\" height=\"52\" rx=\"10\" class=\"d-box\" \u002F>\u003Ctext x=\"150\" y=\"312\" text-anchor=\"middle\" class=\"d-text\">checkpoint\u003C\u002Ftext>\u003Ctext x=\"150\" y=\"331\" text-anchor=\"middle\" class=\"d-small\">ctx.to_dict() JSON\u003C\u002Ftext>\u003Cpath d=\"M630 242 V314 H332\" class=\"d-line\" \u002F>\u003Cpath d=\"M320 314 l9 -5 v10 z\" class=\"d-head\" \u002F>\u003Cpath d=\"M280 314 H302\" class=\"d-line\" \u002F>\u003Cpath d=\"M310 314 l-9 -5 v10 z\" class=\"d-head\" \u002F>\u003Crect x=\"340\" y=\"288\" width=\"360\" height=\"52\" rx=\"10\" class=\"d-mint\" \u002F>\u003Ctext x=\"520\" y=\"312\" text-anchor=\"middle\" class=\"d-text\">folytatás a mentésből\u003C\u002Ftext>\u003Ctext x=\"520\" y=\"331\" text-anchor=\"middle\" class=\"d-small\">kész lépések kihagyva, at-least-once\u003C\u002Ftext>",[202],"A gráf a lépésszignatúrákból származik, és az első esemény kibocsátása előtt validálódik. A perzisztencia nem része a futásidejének: az egy hurok, amit a csapat ír körül.",{"type":145,"ordered":146,"items":204},[205,210,215,221],[206,207,209],"Adj vissza ",{"tag":128,"children":208},[189],"-et, ha egy lépés véges halmazzal dolgozik, és minden munkaelemet előállíthat, mielőtt a további workerek elindulnak.",[211,212,214],"Fogadj el ",{"tag":128,"children":213},[189],"-et, ha a lépésnek az eredmények teljes halmazára szüksége van a folytatáshoz.",[216,217,220],"Hívd a ",{"tag":128,"children":218},[219],"ctx.send_event(...)"," metódust, ha az események száma előre ismeretlen, vagy ha egy eseményt lépen kívülről kell kibocsátani.",[222,223,226,227,230],"A ",{"tag":128,"children":224},[225],"ctx.store"," a futáson belüli megosztott állapotra való, a ",{"tag":128,"children":228},[229],"Resource(...)"," pedig azokra a kliensekre, modellekre és konfigurációra, amelyek nem kerülhetnek egy pillanatképbe.",{"type":115,"content":232},[233,234,236,237,240],"A típusannotációk nem díszítőelemek, hanem teherhordók. Végrehajtás előtt a framework a lépésszignatúrákból levezeti az eseménygráfot, és megtagadja az indulást, ha van nem előállított esemény, elfogyasztatlanul maradó esemény vagy el nem érhető ",{"tag":128,"children":235},[181],". Ez olyan bekötési hibákat fog meg, amelyeket a kézzel megírt függvénykompozíció egyáltalán nem, és ez a tervezés legerősebb érve. Az ár az, hogy a szándékosan dinamikus workflow-nak a ",{"tag":128,"children":238},[239],"ctx.send_event","-hez kell visszatérnie, és meg kell jelölnie, mely statikus ellenőrzések hagyhatók ki, ami gyakorlatban azt jelenti: minél képesebb egy workflow, annál kevésbé ellenőrizhető statikusan.",{"type":122,"level":123,"id":96,"text":97},{"type":115,"content":243},[244],"A legkisebb használható workflow körülbelül húsz sor. Két telepítési forma támogatott, és az importútban különböznek, ez a részlet szokott sokaknak megbukni:",{"type":128,"code":246},"import asyncio\n\nfrom llama_index.core import VectorStoreIndex\nfrom workflows import Workflow, step\nfrom workflows.events import Event, StartEvent, StopEvent\n\n\nclass Answered(Event):\n    question: str\n    answer: str\n\n\nclass TriageFlow(Workflow):\n    index: VectorStoreIndex\n\n    @step\n    async def retrieve(self, ev: StartEvent) -> Answered:\n        retriever = self.index.as_retriever(similarity_top_k=8)\n        nodes = await retriever.aretrieve(ev.question)\n        best = max(nodes, key=lambda n: n.score or 0.0)\n        return Answered(question=ev.question, answer=best.node.get_content())\n\n    @step\n    async def answer(self, ev: Answered) -> StopEvent:\n        return StopEvent(result=ev.answer)\n\n\nasync def main():\n    flow = TriageFlow(index=VectorStoreIndex.from_documents(documents), timeout=60)\n    result = await flow.run(question=\"What is the refund window?\")\n    print(result.result)\n\nasyncio.run(main())",{"type":115,"content":248},[222,249,252,253,256,257,260,261,264,265,268],{"tag":128,"children":250},[251],"run()"," egy ",{"tag":128,"children":254},[255],"WorkflowHandler","-t ad vissza. Awaitelhető, és ha nem awaitelsz azonnal, hanem megtartod a handlert, közben hozzáférsz a ",{"tag":128,"children":258},[259],"stream_events()","-hez a folyamatjelzéshez. A ",{"tag":128,"children":262},[263],"timeout"," argumentum másodpercben értendő, és a konstruktorban adod át. Minden lépés szándékosan async, ezért egy önálló szkripthez egyetlen ",{"tag":128,"children":266},[267],"asyncio.run"," belépési pont kell; FastAPI-ben vagy jegyzetfüzetben nem szükséges.",{"type":270,"variant":271,"title":272,"body":273},"callout","tip","Válaszd ki tudatosan a telepítési formát",[274],[275,276,278,279,281,282,284,285,287],"Ha csak az orchestráció kell, telepítsd egyedül a ",{"tag":128,"children":277},[138]," csomagot; ha a retrieval-komponensek is jönnek, telepítsd a ",{"tag":128,"children":280},[130],"-t, mert az újra exportálja a Workflows-ot ",{"tag":128,"children":283},[142]," néven. Az induló ",{"tag":128,"children":286},[134]," csomag egy választott integrációcsoportot húz be, amit a legtöbb alkalmazás már az első napon lecserél.",{"type":122,"level":123,"id":99,"text":100},{"type":115,"content":290},[291,292,294,295,297,298,301,302,305,306,309],"A Workflows alapértelmezés szerint efemer: amint a ",{"tag":128,"children":293},[251]," visszatér, az állapot megszűnik, és a következő futás nulláról indul. Sok száz dokumentumra kiterjedő kiszámoláshoz, amelynek nem szabad nulláról újrakezdődnie, a dokumentáció checkpoint hurkot ír elő. A ",{"tag":128,"children":296},[163]," szerializálja a még folyamatban lévő eseményeket és az állapottárolót, a ",{"tag":128,"children":299},[300],"Context.from_dict()"," visszaépíti őket, a ",{"tag":128,"children":303},[304],"run(ctx=...)"," pedig egy másik folyamatban folytatja. Beépített checkpointer nincs: a futás belső ",{"tag":128,"children":307},[308],"StepStateChanged"," eseményt ad le, amikor egy lépés befejeződik, és ez a mentési jel.",{"type":128,"code":311},"import json\n\nfrom workflows.events import StepState, StepStateChanged\n\nhandler = flow.run(question=q)\n\nasync for ev in handler.stream_events(expose_internal=True):\n    if isinstance(ev, StepStateChanged) and ev.step_state == StepState.NOT_RUNNING:\n        json.dump(handler.ctx.to_dict(), open(\"run.json\", \"w\"))\n\nresult = await handler\n\n# after a restart: resume from the last snapshot\nctx = Context.from_dict(flow, json.load(open(\"run.json\")))\nresult = await flow.run(ctx=ctx)",{"type":115,"content":313},[314,315,318,319,322,323,326],"A dizájn két tulajdonsága üzemeltetéskor jelentkezik. A folytatás at-least-once: az a lépés, amely a pillanatkép idején még futott, visszatekeredik és újrafut, tehát legfeljebb ",{"tag":128,"children":316},[317],"num_workers"," elem duplázódik. A pillanatkép pedig JSON, így ha a szerializáló nem tud kódolni egy értéket, a ",{"tag":128,"children":320},[321],"to_dict()"," feldob, és az egész mentés elhasal, nem csak az érintett mező. A nehéz bemenetek ezért ",{"tag":128,"children":324},[325],"Resource","-be kerülnek, amely folytatáskor újraalkotódik ahelyett, hogy szerializálódna. Aki nem akarja magát kezelni a hurkot, használhatja a DBOS futásidejű plugint, amely a lépésátmeneteket adatbázisba naplózza, és nem kell hozzá checkpoint-kód.",{"type":122,"level":123,"id":102,"text":103},{"type":115,"content":329},[330],"A gyengeségek strukturálisak, nem bugok. A szélesség karbantartási felület: több száz integrációval egy frissítés olyan modell-wrappert is mozgathat, amelyet senki nem akart hozzáérni, és egy integráció rögzítése gyakran a mag rögzítését is jelenti. A magas szintű API annyit elrejt, hogy egy prototípus anélkül juthat productionbe, hogy bárki feljegyezné, melyik chunkméret, melyik top-k és melyik prompt-sablon adta a választ; az alapértékek kényelmesek, és nincsenek alapértékként dokumentálva. A perzisztencia opcionális és kézzel írandó, vagyis épp az ellentéte annak, amit egy hosszú életű batch feladat kér. És a framework mögötti cég nyíltan szűkítette a fókuszát, ami 2026-ban kínos értékelési tényező.",{"type":332,"head":333,"rows":342},"table",[334,336,338,340],[335],"Framework",[337],"Orchestrációs modell",[339],"Perzisztencia és állapot",[341],"Hol nyer",[343,355,366,377],[344,349,351,353],[345],{"tag":346,"children":347},"strong",[348],"LlamaIndex Workflows",[350],"Eseményvezérelt lépések, vezérlési folyamat normál Pythonban",[352],"Nincs beépített checkpointer; kontextusmentések a csapattól vagy a DBOS futásidejű plugin",[354],"A retrieval- és dokumentumkomponensek ugyanabban a könyvtárban vannak",[356,360,362,364],[357],{"tag":346,"children":358},[359],"LangGraph",[361],"Explicit állapotgráf feltételes élekkel",[363],"A tartós végrehajtás és a checkpointerek az alapértelmezés",[365],"Az állapotátmenetek maguk az artefaktum, és gráfként átláthatók maradnak",[367,371,373,375],[368],{"tag":346,"children":369},[370],"Haystack",[372],"Tipizált komponensekből álló pipeline-ok",[374],"Komponensenkénti hibaelágak és újrapróbálkozások",[376],"Stabil komponenskatalógus retrievalre épülő alkalmazásokhoz",[378,382,384,386],[379],{"tag":346,"children":380},[381],"DSPy",[383],"Deklaratív modulok, offline hangolva egy metrikára",[385],"Nincs; ez nem orchestrációs futásidej",[387],"Promptok és modulok hangolása, mielőtt kiszolgáló kód egyáltalán létezne",{"type":115,"content":389},[390],"Végigolvasva a perzisztencia oszlopot a gyakorlati metszet jól látszik. A LangGraph alapértelmezetté teszi a checkpointot, és ezt azzal fizeti meg, hogy a gráf explicit, ami gondolkodási munka, viszont olvashatóságot vásárol. A Workflows a vezérlést normál Pythonban tartja, ami jobban olvasható és rosszabbul átlátható: egy workflow, amely 500 dokumentumra is kiterjed, 500 párhuzamos hívás, amelyek sorrendjét egyetlen eszköz sem segít meglátni. Egy csapat számára, amelynek munkája az állapotátmenetek átgondolása, ez rossz csere. Egy csapat számára, amely normál Pythont akar írni és elvárja, hogy előre nem láthatóan viselkedjen, ez jó csere.",{"type":115,"content":392},[393,394,397],"Ide tartozik egy második megjegyzés. A dinamikus workflow elveszíti a statikus analízist, és a dokumentáció kimondja, hogy az el nem érhető lépések és az egyszeri események pontosan azok, amit ezek az ellenőrzések nem látnak. Aki kézzel rajzolt gráfot ültet át Workflows-ba, elég korán nyúl a ",{"tag":128,"children":395},[396],"skip_graph_checks"," opcióhoz, és ezzel csendben letiltja azt az ellenőrzést, amely az elhalt ágakat megtalálná, vagyis ugyanazt az ellenőrzést, amely eredetileg a bekötési hibát kiszúrta volna.",{"type":122,"level":123,"id":105,"text":106},{"type":115,"content":400},[401],"A repository README-je mostantól feltűnő jegyzetet visel: a LlamaIndex aktuális fókusza a dokumentumparsolás és kinyerés, a LlamaParse pedig a cég vállalati platformja ehhez. Ez megváltoztatja, hogy mit finanszíroz egy karbantartási keret. Az integrációs csomagok továbbra is megjelennek és működnek; az már nem garantált, hogy mindegyik bővül, amikor új szolgáltató jelenik meg.",{"type":145,"ordered":146,"items":403},[404,406,408,410,415],[405],"A LlamaParse a fizetős termék: agentikus OCR, parsolás, kinyerés és indexelés, kreditben értékesítve, nem felhasználói helyek szerint.",[407],"A LiteParse az open source ellensúly: egy Rust parser, amely helyben fut, LLM, felhőfüggőség és API-kulcs nélkül, TypeScripthez, Pythonhoz, Rusthoz és böngészős WASM-hez való bindingokkal.",[409],"A ParseBench és az ExtractBench a cég saját nyilvános benchmarkjai parsolásra és kinyerésre.",[411,412,414],"A framework MIT-licencű marad, és megjelent a PyPI-n, a ",{"tag":128,"children":413},[130]," 0.14.25 verzióval 2026. szeptember 21-én.",[416],"Az eredmény egy megosztott stratégia: nyílt eszközök a helyi parsoláshoz, hosztolt platform a nehéz dokumentumokhoz, és közöttük az agent-framework mint integrációs felület.",{"type":115,"content":418},[419],"Ez megindokolható üzleti döntés, és enyhe figyelmeztetés mindenkinek, aki most keretrendszert választ. A halom azon részei, amelyeket leginkább karbantartanak, a fizetős fal mögött vannak, és a MIT-mag az, ami könyvtárként hasznos marad. Ezt úgy olvasd, hogy a framework hatókörét érdemes kicsire tartani: a Workflows-ot az orchestrációra használd, a betöltést és a parsolást tartsd házban, ahol ez lehetséges, és légy explicit abban, melyik hívások hagyják el az infrastruktúrádat.",{"type":270,"variant":421,"title":422,"body":423},"note","A LlamaParse árai számokban",[424],[425],"Az árazási oldal krediteket ad el, nem helyeket: 1000 kredit 1,25 dollár, 10 000 kredit az ingyenes csomagban, 40 000 az 50 dolláros starterben és 400 000 az 500 dolládos pro csomagban, a pay-as-you-go plafon pedig havi 500, illetve 5000 dollár. Az egyidejű parse feladatok száma 5 az ingyenes és a starter csomagban, 20 a prof, 100 az enterprise szinten. A parse, a kinyerés, a besorolás és az indexelés ugyanarról az egyenlegről von le, és ugyanaz a táblázat intelligens eredménytárolást sorol fel nulla kredites újraparse-sel, amit egy adott parse-konfigurációnál érdemes ellenőrizni, nem pedig feltételezni.",{"type":122,"level":123,"id":108,"text":109},{"type":115,"content":428},[429],"Az ítélet az, hogy a LlamaIndex a legteljesebb válasz egy szűk kérdésre, hogyan kerülnek dokumentumok egy LLM-alkalmazásba saját integrációs réteg írása nélkül, és közepes válasz a tágabb kérdésre, hogyan kell orchestrálni egy agentet. A Workflows valóban jól fordítja elágazó logikát tipizált, validált Pythonná, és az at-least-once checkpoint modellje őszinte a saját hibaértelmezésével. Amit a framework nem kínál, az egy olyan futásideje, amelyre rámutathatsz és megnézhetsz: nincs állapotgráf átvizsgálásra, nincs alapértelmezett perzisztencia, és a karbantartás iránya nyilvánosan máshová tolódott.",{"type":145,"ordered":431,"items":432},true,[433,435,437,439,441,443],[434],"Vedd, ha az adataid többsége dokumentum, és a konektor-, chunker-, embedder- és reranker-absztrakciók már meg vannak írva. Ez valódi megtakarítás, és ez volt az eredeti cél.",[436],"Vedd a Workflows-ot önálló, kis könyvtárként, ha az orchestráció elágazó, hurkozó Python, amely most az asyncio-ban összekeveredve él. A tipizált eseménygráf és az indulás előtti validáció az ok.",[438],"Ne válaszd egy olyan gráf miatt, amelyen végig kell gondolkodni. Ha az állapotátmenetek maguk a vizsgálandó anyag, az explicit gráf ver a Python vezérlési struktúrája.",[440],"Ne válaszd a hosztolt platform miatt. A LlamaParse, az Extract és az index szolgáltatás külön fizetős termék kreditárazással, és az ingestion-számládat frameworkhez kötni döntés, nem alapértelmezés.",[442],"Kerüld TypeScript- vagy Go stackhez. A mag Python, csak az új LiteParse parser szállít szélesebb bindingokat.",[444],"Értékeld újra egy év múlva, ha az integrációs szélesség hordozó. A cég parsolásra és kinyerésre fókuszáló iránya mellett a vektortár- és embedder-integrációk hosszú farka az, ami a leginkább kitett a lassú karbantartásnak.",{"type":446,"content":447},"quote",[448],"The current focus of LlamaIndex is to build the best AI-powered engine for document parsing and extraction.",{"type":115,"content":450},[451],"Ez a mondat a projekt README-jében áll, nem egy blogbejegyzésben, ami szokatlan és megjegyzésre érdemes: maguk a framework fenntartói nevezik meg, merre tart az ütterv. Mérnöki olvasatban ez azt jelenti, hogy az orchestrációs réteget karbantartják, de nem az a cél, a fizetős dokumentumfeldolgozás viszont az.",{"type":122,"level":123,"id":111,"text":112},{"type":145,"ordered":431,"items":454},[455,459,462,465,468,471,474,477,480],[456],{"tag":457,"href":25,"children":458},"a",[31],[460],{"tag":457,"href":34,"children":461},[33],[463],{"tag":457,"href":37,"children":464},[36],[466],{"tag":457,"href":40,"children":467},[39],[469],{"tag":457,"href":43,"children":470},[42],[472],{"tag":457,"href":46,"children":473},[45],[475],{"tag":457,"href":49,"children":476},[48],[478],{"tag":457,"href":52,"children":479},[51],[481],{"tag":457,"href":55,"children":482},[54],[484,549,598,662],{"slug":485,"published":486,"minutes":487,"category":7,"tags":488,"keywords":493,"about":500,"sources":504,"cover":541,"og":542,"expertise":58,"locales":543,"lang":62,"title":544,"description":545,"coverAlt":546,"url":507,"pricing":547,"kind":548},"mcp-reference-servers","2026-09-25",9,[489,490,491,492],"MCP","Reference servers","Tool protocol","Server SDKs",[494,495,496,497,498,499],"mcp reference servers","modelcontextprotocol servers github","write an mcp server","mcp server examples","mcp server sdk","mcp server security",[501],{"name":502,"url":503},"Model Context Protocol","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FModel_Context_Protocol",[505,508,511,514,517,520,523,526,529,532,535,538],{"title":506,"url":507},"MCP reference servers repository","https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Fservers",{"title":509,"url":510},"Repository README and server list","https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Fservers\u002Fblob\u002Fmain\u002FREADME.md",{"title":512,"url":513},"Security policy","https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Fservers\u002Fblob\u002Fmain\u002FSECURITY.md",{"title":515,"url":516},"Release process and trusted publishing","https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Fservers\u002Fblob\u002Fmain\u002FRELEASING.md",{"title":518,"url":519},"Filesystem server README","https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Fservers\u002Fblob\u002Fmain\u002Fsrc\u002Ffilesystem\u002FREADME.md",{"title":521,"url":522},"Everything server feature list","https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Fservers\u002Fblob\u002Fmain\u002Fsrc\u002Feverything\u002Fdocs\u002Ffeatures.md",{"title":524,"url":525},"MCP Registry","https:\u002F\u002Fregistry.modelcontextprotocol.io\u002F",{"title":527,"url":528},"Archived reference servers","https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Fservers-archived",{"title":530,"url":531},"Model Context Protocol documentation","https:\u002F\u002Fmodelcontextprotocol.io\u002F",{"title":533,"url":534},"TypeScript MCP SDK","https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Ftypescript-sdk",{"title":536,"url":537},"Python MCP SDK","https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Fpython-sdk",{"title":539,"url":540},"FastMCP on PyPI","https:\u002F\u002Fpypi.org\u002Fproject\u002Ffastmcp\u002F","\u002Fimages\u002Fblog\u002Fmcp-reference-servers\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fmcp-reference-servers\u002Fog.jpg",[60,61,62],"MCP-referenciaszerverek: mit mutatnak be és mit hagynak ki","Elemzés a modelcontextprotocol\u002Fservers repozól: hét referenciaszerver, mit tanít mindegyik, a mögöttes SDK-verziók, és miért nem kerülhet egyik sem éles rendszerbe.","Hét referenciaszerver, amelyet egyetlen MCP-kliens hoz el stdio-n keresztül","MIT","Protocol tooling",{"slug":550,"published":551,"minutes":6,"category":7,"tags":552,"keywords":558,"about":566,"sources":573,"cover":590,"og":591,"expertise":58,"locales":592,"lang":62,"title":593,"description":594,"coverAlt":595,"url":596,"pricing":597,"kind":553},"aider","2026-09-23",[553,554,555,556,557],"Coding agent","Terminal","Git workflow","BYO key","Open source",[550,559,560,561,562,563,564,565],"aider vs claude code","aider polyglot benchmark","ai pair programming terminal","aider leaderboard","open source coding agent","aider architect mode","aider install",[567,570],{"name":568,"url":569},"Aider","https:\u002F\u002Faider.chat\u002F",{"name":571,"url":572},"Aider on GitHub","https:\u002F\u002Fgithub.com\u002FAider-AI\u002Faider",[574,576,579,582,585,587],{"title":575,"url":569},"Aider website",{"title":577,"url":578},"Aider LLM leaderboards","https:\u002F\u002Faider.chat\u002Fdocs\u002Fleaderboards\u002F",{"title":580,"url":581},"Aider linting and testing","https:\u002F\u002Faider.chat\u002Fdocs\u002Fusage\u002Flint-test.html",{"title":583,"url":584},"Aider token limits","https:\u002F\u002Faider.chat\u002Fdocs\u002Ftroubleshooting\u002Ftoken-limits.html",{"title":586,"url":572},"Aider repository on GitHub",{"title":588,"url":589},"aider-chat on PyPI","https:\u002F\u002Fpypi.org\u002Fproject\u002Faider-chat\u002F","\u002Fimages\u002Fblog\u002Faider\u002Fcover.webp","\u002Fimages\u002Fblog\u002Faider\u002Fog.jpg",[60,61,62],"Aider teszt: git-first párprogramozás a terminálon","Az Aider 0.86.2 tesztje: Apache-2.0-s terminálos párprogramozó, amelynek benchmarkja őszintén rangsorolja a modelleket, és amelynek megállt a kiadási üteme.","Borítókép az Aider-teszthez: egy terminálmunkamenet, amely egyetlen kérést egy sor git committá alakít","https:\u002F\u002Faider.chat","Free · BYO API key",{"slug":599,"published":600,"minutes":6,"category":7,"tags":601,"keywords":605,"about":614,"sources":624,"cover":655,"og":656,"expertise":58,"locales":657,"lang":62,"title":658,"description":659,"coverAlt":660,"url":627,"pricing":661,"kind":9},"openai-agents-sdk","2026-09-11",[602,603,604,489,11],"Agent runtime","Tracing","Guardrails",[606,607,608,609,610,611,612,613],"openai agents sdk","openai agents sdk vs langgraph","python agent framework comparison","openai agents sdk guardrails","agent run tracing tool calls","openai agents sdk human in the loop","openai-agents pypi","agents sdk vs responses api",[615,618,621],{"name":616,"url":617},"Model context protocol","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FModel_context_protocol",{"name":619,"url":620},"Software framework","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSoftware_framework",{"name":622,"url":623},"Agentic AI","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FAgentic_AI",[625,628,631,634,637,640,643,646,649,652],{"title":626,"url":627},"OpenAI Agents SDK documentation: Intro, and Agents SDK or Responses API","https:\u002F\u002Fopenai.github.io\u002Fopenai-agents-python\u002F",{"title":629,"url":630},"OpenAI Agents SDK documentation: Running agents","https:\u002F\u002Fopenai.github.io\u002Fopenai-agents-python\u002Frunning_agents\u002F",{"title":632,"url":633},"OpenAI Agents SDK documentation: Guardrails","https:\u002F\u002Fopenai.github.io\u002Fopenai-agents-python\u002Fguardrails\u002F",{"title":635,"url":636},"OpenAI Agents SDK documentation: Human-in-the-loop","https:\u002F\u002Fopenai.github.io\u002Fopenai-agents-python\u002Fhuman_in_the_loop\u002F",{"title":638,"url":639},"OpenAI Agents SDK documentation: Tracing","https:\u002F\u002Fopenai.github.io\u002Fopenai-agents-python\u002Ftracing\u002F",{"title":641,"url":642},"OpenAI Agents SDK documentation: Configuration","https:\u002F\u002Fopenai.github.io\u002Fopenai-agents-python\u002Fconfig\u002F",{"title":644,"url":645},"openai-agents 0.23.1 on PyPI, release history and licence","https:\u002F\u002Fpypi.org\u002Fproject\u002Fopenai-agents\u002F",{"title":647,"url":648},"OpenAI: The next evolution of the Agents SDK (15 April 2026)","https:\u002F\u002Fopenai.com\u002Findex\u002Fthe-next-evolution-of-the-agents-sdk\u002F",{"title":650,"url":651},"OpenAI API documentation: Agents, comparison of the three runtimes","https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents",{"title":653,"url":654},"Arize: AI agent frameworks compared (1 October 2026)","https:\u002F\u002Farize.com\u002Fai-agents\u002Fagent-frameworks\u002F","\u002Fimages\u002Fblog\u002Fopenai-agents-sdk\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fopenai-agents-sdk\u002Fog.jpg",[60,61,62],"OpenAI Agents SDK: könnyű agent-runtime éles szélekkel","Az OpenAI Agents SDK értékelése: a runner-ciklus, a tracing, a guardrail-ek és a jóváhagyások, plusz mit fizet a kiadási tempó és a Responses-only funkciók.","Az Agents SDK runner-ciklusának diagramja: bemenet, ügynök, modellhívás, végső kimenet, guardrail-ek, és a bemenetbe visszafutó eszközhívások","MIT · API pay per token",{"slug":663,"published":664,"minutes":487,"category":7,"tags":665,"keywords":670,"about":677,"sources":687,"cover":708,"og":709,"expertise":58,"locales":710,"lang":62,"title":711,"description":712,"coverAlt":713,"url":714,"pricing":715,"kind":553},"openhands","2026-09-09",[553,666,667,668,669],"Sandboxed execution","Automations","Self-hosted","MIT licence",[663,671,672,673,674,675,563,676],"openhands self-host","open hands coding agent","openhands vs claude code","agent canvas","openhands docker sandbox","openhands cloud pricing",[678,681,684],{"name":679,"url":680},"OpenHands","https:\u002F\u002Fwww.openhands.dev",{"name":682,"url":683},"OpenHands on GitHub","https:\u002F\u002Fgithub.com\u002FOpenHands\u002FOpenHands",{"name":685,"url":686},"Intelligent agent","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FIntelligent_agent",[688,690,693,696,699,702,705],{"title":689,"url":683},"OpenHands README",{"title":691,"url":692},"OpenHands licence (MIT)","https:\u002F\u002Fgithub.com\u002FOpenHands\u002FOpenHands\u002Fblob\u002Fmain\u002FLICENSE",{"title":694,"url":695},"Agent Canvas 1.25.0 release notes","https:\u002F\u002Fdocs.openhands.dev\u002Fopenhands\u002Fusage\u002Fagent-canvas\u002Frelease-notes\u002Fv1.25.0.md",{"title":697,"url":698},"OpenHands sandbox overview","https:\u002F\u002Fdocs.openhands.dev\u002Fopenhands\u002Fusage\u002Fsandboxes\u002Foverview.md",{"title":700,"url":701},"OpenHands quick start","https:\u002F\u002Fdocs.openhands.dev\u002Fopenhands\u002Fusage\u002Finstallation",{"title":703,"url":704},"OpenHands pricing","https:\u002F\u002Fwww.openhands.dev\u002Fpricing",{"title":706,"url":707},"Introducing the OpenHands Index","https:\u002F\u002Fwww.openhands.dev\u002Fblog\u002Fintroducing-the-openhands-index","\u002Fimages\u002Fblog\u002Fopenhands\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fopenhands\u002Fog.jpg",[60,61,62],"OpenHands: a nyílt forráskódú coding agent, amit üzemeltetsz","Az OpenHands 1.25.0 MIT-licencű coding agent platform web canvas-szal, CLI-vel, sandboxolt végrehajtással és ütemezett automatizálásokkal. Elemzés arról, hol erős és hol nehézkes.","Az OpenHands-ajánló címképe: hurok a feladattól az agenten és a sandboxon át vissza","https:\u002F\u002Fgithub.com\u002FAll-Hands-AI\u002FOpenHands","Free · self-host",1791383550206]