[{"data":1,"prerenderedAt":747},["ShallowReactive",2],{"blog-llamaindex-de":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":61,"title":63,"description":64,"coverAlt":65,"metaTitle":66,"takeaways":67,"faq":73,"toc":86,"blocks":111,"others":476},"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 im Test: das breiteste Daten-Toolkit, dessen Schwerpunkt schon gewandert ist","LlamaIndex 2026: ein MIT-lizenziertes Python-Framework für Daten und Agenten, mit über 300 Integrationen, ereignisgetriebenen Workflows und einem Unternehmen, dessen Fokus auf LlamaParse liegt.","Acht Speichen um eine mittige quadratische Nabe, eine viel längere erreicht eine ferne Kiste.","LlamaIndex: breites Toolkit, wandernder Fokus · Balázs Csorba",[68,69,70,71,72],"LlamaIndex ist weiterhin das breiteste Open-Source-Daten-Toolkit für LLM-Anwendungen: über 300 Integrationspakete, jeweils ein dünner Adapter, auf einem kleinen Satz Kernabstraktionen.","Workflows, die Orchestrierungsschicht, ist ereignisgetrieben: Ein Schritt nimmt ein Ereignis entgegen und gibt ein Ereignis zurück, der Graph wird aus Typannotationen abgeleitet und vor dem Lauf validiert.","Persistenz ist optional und handgeschrieben. Ein Lauf ist standardmäßig efemer, Schnappschüsse entstehen aus `Context.to_dict()` plus einer Schleife, die das Team schreibt, und das Fortsetzen ist at-least-once, Schritte müssen also wiederholbar sein.","Das README des Unternehmens nennt inzwischen Dokumentenparsing und Extraktion als Fokus. LlamaParse ist das kostenpflichtige Produkt, in Credits abgerechnet, LiteParse der lokale Open-Source-Parser.","Das Urteil: den Open-Source-Kern nutzen, Workflows als kleine Bibliothek, den Wirkungsradius des Frameworks aber klein halten, weil die Wartungsrichtung sichtbar woanders liegt.",[74,77,80,83],{"q":75,"a":76},"Lohnt sich LlamaIndex 2026 noch?","Ja, mit eingegrenztem Anwendungsbereich. Der MIT-lizenzierte Kern wird gepflegt, `llama-index-core` stand am 21. September 2026 bei Version 0.14.25, und die Orchestrierungsschicht Workflows ist wirklich gut durchdacht für verzweigende und schleifende Logik. Geändert hat sich der erklärte Fokus des Unternehmens, den das README auf Dokumentenparsing und Extraktion statt auf das Framework legt.",{"q":78,"a":79},"Was sind LlamaIndex Workflows und wie funktionieren sie?","Ein Workflow ist eine Unterklasse von `Workflow` mit Methoden, die mit `@step` dekoriert sind. Jeder Schritt nimmt einen Ereignistyp entgegen und gibt einen anderen zurück, und das Framework routet nach Typannotation, sodass Verzweigungen gewöhnliche `if`-Anweisungen sind und Schleifen Schritte, die ein früher behandeltes Ereignis zurückgeben. Nebenläufigkeit ist ein Schritt, der `list[Event]` zurückgibt, gepaart mit einem Schritt, der `list[Event]` entgegennimmt. Der Ereignisgraph wird vor dem Lauf validiert.",{"q":81,"a":82},"Wie geht LlamaIndex mit Persistenz und Retries um?","Standardmäßig gar nicht. Sobald `run()` zurückkehrt, ist der Zustand weg. Der dokumentierte Mechanismus ist ein Checkpoint-Loop: den Kontext mit `Context.to_dict()` serialisieren, wenn ein `StepStateChanged`-Ereignis einen Schritt als beendet markiert, dann mit `Context.from_dict()` wieder aufbauen und `run(ctx=...)` aufrufen. Das Fortsetzen ist at-least-once, ein beim Speichern noch laufender Schritt läuft erneut. Das DBOS-Laufzeit-Plugin ist die Alternative, die die Schleife überflüssig macht.",{"q":84,"a":85},"Was kostet LlamaParse?","Die Preisseite verkauft Credits statt Sitze: 1.000 Credits für 1,25 $, 10.000 Credits kostenlos, 40.000 im Starter-Tarif für 50 $ und 400.000 im Pro-Tarif für 500 $, dazu Pay-as-you-go-Grenzen von 500 $ und 5.000 $ pro Monat. Gleichzeitige Parse-Jobs: 5 in Free und Starter, 20 in Pro, 100 in Enterprise. Parse, Extraktion, Klassifizierung und Indexierung ziehen alle vom selben Guthaben ab.",[87,90,93,96,99,102,105,108],{"id":88,"title":89},"what-it-is","Was es ist",{"id":91,"title":92},"how-it-works","Wie Workflows funktioniert",{"id":94,"title":95},"getting-started","Erste Schritte",{"id":97,"title":98},"durability","Persistenz und Retries",{"id":100,"title":101},"where-it-falls-short","Wo es schwächelt",{"id":103,"title":104},"the-pivot","Die Kehrtwende zur Dokumentenverarbeitung",{"id":106,"title":107},"verdict","Urteil",{"id":109,"title":110},"sources","Quellen",[112,116,119,122,142,165,166,192,198,225,235,236,239,241,263,282,283,304,306,321,322,325,382,385,392,393,396,411,414,420,421,424,438,442,445,446],{"type":113,"content":114},"paragraph",[115],"LlamaIndex ist ein MIT-lizenziertes Python-Framework, das LLM-Anwendungen mit Daten verbindet. Es begann als Sammlung von Konnektoren und Index-Abstraktionen für Retrieval und ist bis heute das breiteste solche Toolkit: Das Repository veröffentlicht über 300 Integrationspakete für Modellprovider, Embedding-Modelle, Vektorspeicher, Dokumenten-Loader und Reranker. Diese Breite ist der Grund, warum die meisten Teams dem Projekt zuerst begegnen, und der Grund, warum es nützlich bleibt, obwohl die Aufmerksamkeit des Unternehmens längst woanders liegt. Die Position dieses Textes ist einfach: den Open-Source-Kern nutzen und bewusst entscheiden, welche gehosteten Teile dazukommen.",{"type":113,"content":117},[118],"Es sitzt zwischen dem Modellprovider und der Anwendung. Nichts im Kern spricht direkt mit einem Modellprovider; jedes Modell, jeder Embedder und jeder Vektortär kommt über ein Integrationspaket herein, das eine abstrakte Klasse aus dem Kern implementiert. Das ist eine saubere Grenze und zugleich die Quelle des Hauptkritikpunkts: Dieselbe Abstraktion muss OpenAI, einen lokalen Ollama-Prozess und ein Dutzend Embedding-Modelle abdecken, der gemeinsame Nenner ist also kleiner, als die Oberfläche vermuten lässt. Gegen LangGraph konkurriert es um dieselbe Orchestrierungsrolle, gegen LangChain um den Umgang mit Daten und gegen eine von Hand zusammengesetzte Kombination aus Vektorspeicher und Reranker um Bequemlichkeit statt um Fähigkeiten.",{"type":120,"level":121,"id":88,"text":89},"heading",2,{"type":113,"content":123},[124,125,129,130,133,134,137,138,141],"Das Paketlayout ist das Erste, was man prüfen sollte, und dort fängt die meiste Verwirrung an. ",{"tag":126,"children":127},"code",[128],"llama-index-core"," enthält die Abstraktionen und liefert Workflows mit aus. ",{"tag":126,"children":131},[132],"llama-index"," ist das Starter-Paket, das den Kern plus eine Auswahl an Integrationen installiert. Workflows gibt es zusätzlich eigenständig als ",{"tag":126,"children":135},[136],"llama-index-workflows",", und kommt es über den Kern herein, wird es als ",{"tag":126,"children":139},[140],"llama_index.core.workflow"," importiert. Alles andere ist eine eigene Installation, und nur deshalb bleibt der Abhängigkeitsbaum handhabbar.",{"type":143,"ordered":144,"items":145},"list",false,[146,151,153,155,157,163],[147,148,150],"MIT-Lizenz. Die aktuelle Version von ",{"tag":126,"children":149},[128]," ist 0.14.25, veröffentlicht am 21. September 2026.",[152],"Über 300 Integrationspakete auf PyPI, jedes ein dünner Adapter über einer abstrakten Klasse des Kerns.",[154],"Workflows, die Orchestrierungsschicht, ist ereignisgetrieben: Ein Schritt nimmt ein Ereignis entgegen und gibt ein anderes zurück, und das Framework routet nach Typannotation, nicht nach einer deklarierten Kante.",[156],"Der Ereignisgraph wird vor dem Start eines Laufs validiert. Workflows, in denen ein Ereignis keinen Produzenten, ein erzeugtes Ereignis keinen Konsumenten hat oder kein Endereignis erreichbar ist, werden abgelehnt.",[158,159,162],"Läufe sind standardmäßig efemer. Persistenz ist optional über ",{"tag":126,"children":160},[161],"Context.to_dict()","-Snapshots oder über ein Laufzeit-Plugin wie DBOS, das Schrittübergänge in eine Datenbank protokolliert.",[164],"Python ist das praktische Ziel des Frameworks. Nur LiteParse, der neue lokale Parser des Unternehmens, liefert Bindings über Python hinaus.",{"type":120,"level":121,"id":91,"text":92},{"type":113,"content":167},[168,169,172,173,176,177,180,181,184,185,188,189,191],"Workflows ist der Teil, den man verstehen sollte, weil er zugleich der Teil ist, der die RAG-Vergangenheit des Frameworks überdauert. Ein Workflow ist eine Unterklasse von ",{"tag":126,"children":170},[171],"Workflow",", deren Methoden mit ",{"tag":126,"children":174},[175],"@step"," dekoriert sind. Jeder Schritt nimmt einen Ereignistyp entgegen und gibt einen anderen zurück; die Rückgabe des Startereignis-Typs beginnt einen Lauf, die Rückgabe von ",{"tag":126,"children":178},[179],"StopEvent"," beendet ihn. Verzweigungen sind gewöhnliche ",{"tag":126,"children":182},[183],"if","-Anweisungen, die unterschiedliche Ereignistypen zurückgeben, und eine Schleife ist ein Schritt, der einen Ereignistyp zurückgibt, der früher im Graph behandelt wird. Nebenläufigkeit ist ein Schritt, der ",{"tag":126,"children":186},[187],"list[Event]"," zurückgibt, zusammen mit einem zweiten Schritt, der ",{"tag":126,"children":190},[187]," entgegennimmt und als Sammelschritt fungiert.",{"type":193,"src":194,"alt":195,"wide":196,"caption":197},"image","\u002Fimages\u002Fblog\u002Fllamaindex\u002Fdiagram-7.webp","Workflows: typisierte Ereignisse treiben den Lauf voran Ein Startereignis löst einen Retrieval-Schritt aus, der auf acht parallele Worker ausfächert, gefolgt von einem Reranking-Schritt und einem abschließenden StopEvent. Darunter serialisiert ein Checkpoint-Schritt den Kontext nach jedem beendeten Schritt als JSON, und ein Resume-Pfad wiederholt nur die unfertige Arbeit.",true,"Der Graph wird aus den Schritt-Signaturen abgeleitet und validiert, bevor das erste Ereignis abgeschickt wird. Persistenz gehört nicht zur Laufzeitumgebung: Sie ist eine Schleife, die das Team drumherum schreibt.",{"type":143,"ordered":144,"items":199},[200,205,210,216],[201,202,204],"Zurückgeben von ",{"tag":126,"children":203},[187],", wenn ein Schritt eine endliche Menge hat und alle Arbeitspakete erzeugen kann, bevor die nachgelagerten Worker starten.",[206,207,209],"Entgegennehmen von ",{"tag":126,"children":208},[187],", wenn der Schritt die gesamte Ergebnismenge braucht, bevor er fortfahren kann.",[211,212,215],"",{"tag":126,"children":213},[214],"ctx.send_event(...)"," verwenden, wenn die Anzahl der Ereignisse vorab unbekannt ist oder ein Ereignis von außerhalb eines Schritts abgeschickt werden muss.",[211,217,220,221,224],{"tag":126,"children":218},[219],"ctx.store"," für gemeinsamen Zustand pro Lauf und ",{"tag":126,"children":222},[223],"Resource(...)"," für Clients, Modelle und Konfiguration, die nicht in einen Snapshot serialisiert werden dürfen.",{"type":113,"content":226},[227,228,230,231,234],"Die Typannotationen sind nicht dekorativ, sondern tragend. Vor der Ausführung leitet das Framework den Ereignisgraphen aus den Schritt-Signaturen ab und verweigert den Start, wenn ein Ereignis nicht erzeugt, ein erzeugtes Ereignis nicht konsumiert wird oder kein ",{"tag":126,"children":229},[179]," erreichbar ist. Damit fängt es eine Klasse von Verdrahtungsfehlern, die eine von Hand geschriebene Funktionskomposition überhaupt nicht fängt, und das ist das stärkste Argument für das Design. Der Preis ist, dass ein absichtlich dynamischer Workflow auf ",{"tag":126,"children":232},[233],"ctx.send_event"," ausweichen und angeben muss, welche statischen Prüfungen übersprungen werden, was praktisch bedeutet: Je fähiger ein Workflow wird, desto weniger lässt er sich statisch prüfen.",{"type":120,"level":121,"id":94,"text":95},{"type":113,"content":237},[238],"Der kleinste sinnvolle Workflow umfasst rund zwanzig Zeilen. Zwei Installationsformen werden unterstützt, und sie unterscheiden sich im Importpfad, woran es häufig scheitert:",{"type":126,"code":240},"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":113,"content":242},[243,246,247,250,251,254,255,258,259,262],{"tag":126,"children":244},[245],"run()"," liefert einen ",{"tag":126,"children":248},[249],"WorkflowHandler",". Er ist awaitable, und wer das Handler-Objekt behält statt direkt zu awaiten, erhält zugleich Zugriff auf ",{"tag":126,"children":252},[253],"stream_events()"," für Fortschrittsmeldungen. Das Argument ",{"tag":126,"children":256},[257],"timeout"," wird in Sekunden angegeben und im Konstruktor gesetzt. Jeder Schritt ist bewusst asynchron, ein eigenständiges Skript braucht also einen einzigen ",{"tag":126,"children":260},[261],"asyncio.run","-Einstiegspunkt; in FastAPI oder im Notebook ist das nicht nötig.",{"type":264,"variant":265,"title":266,"body":267},"callout","tip","Installationsform bewusst wählen",[268],[269,270,272,273,275,276,278,279,281],"Wer nur die Orchestrierung braucht, installiert ",{"tag":126,"children":271},[136]," allein; wer auch die Retrieval-Komponenten braucht, installiert ",{"tag":126,"children":274},[128],", weil dieses Paket Workflows unter ",{"tag":126,"children":277},[140]," erneut exportiert. Das Starter-Paket ",{"tag":126,"children":280},[132]," zieht eine Vorauswahl an Integrationen nach, die die meisten Anwendungen ohnehin am ersten Tag ersetzen.",{"type":120,"level":121,"id":97,"text":98},{"type":113,"content":284},[285,286,288,289,291,292,295,296,299,300,303],"Workflows sind standardmäßig efemer: Sobald ",{"tag":126,"children":287},[245]," zurückkehrt, ist der Zustand weg, und der nächste Lauf beginnt bei null. Für eine Ausspielung über hunderte Dokumente, die nicht wieder bei null beginnen soll, sieht die Dokumentation einen Checkpoint-Loop vor. ",{"tag":126,"children":290},[161]," serialisiert die noch laufenden Ereignisse und den Zustandsspeicher, ",{"tag":126,"children":293},[294],"Context.from_dict()"," baut sie wieder auf, und ",{"tag":126,"children":297},[298],"run(ctx=...)"," setzt in einem anderen Prozess fort. Ein eingebauter Checkpointer gibt es nicht: Der Lauf emittiert bei jedem beendeten Schritt ein internes ",{"tag":126,"children":301},[302],"StepStateChanged","-Ereignis, und genau das ist das Signal zum Speichern.",{"type":126,"code":305},"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":113,"content":307},[308,309,312,313,316,317,320],"Zwei Eigenschaften dieses Designs zeigen sich im Betrieb. Das Fortsetzen ist at-least-once: Ein Schritt, der beim Speichern noch lief, wird zurückgesetzt und erneut ausgeführt, es werden also bis zu ",{"tag":126,"children":310},[311],"num_workers"," Elemente doppelt verarbeitet. Und der Snapshot ist JSON; ein Wert, den der Serialisierer nicht kodieren kann, lässt ",{"tag":126,"children":314},[315],"to_dict()"," scheitern und damit den gesamten Snapshot, nicht nur das betroffene Feld. Schwere Eingaben gehören deshalb in eine ",{"tag":126,"children":318},[319],"Resource",", die beim Fortsetzen neu erzeugt wird, statt serialisiert zu werden. Wer den Loop nicht selbst verwalten will, nutzt das DBOS-Laufzeit-Plugin, das Schrittübergänge in eine Datenbank protokolliert und keinen Checkpoint-Code braucht.",{"type":120,"level":121,"id":100,"text":101},{"type":113,"content":323},[324],"Die Schwächen sind strukturell und keine Fehler. Breite ist eine Wartungsfläche: Bei Hunderten Integrationen kann ein Upgrade die Modell-Wrapper verschieben, die man gar nicht anfassen wollte, und eine Integration festzupinnen bedeutet oft, den Kern festzupinnen. Die High-Level-API versteht genug, dass ein Prototyp in die Produktion kommen kann, ohne dass jemand festhält, welche Chunkgröße, welches top-k und welche Prompt-Vorlage die Antwort erzeugt haben; die Voreinstellungen sind bequem und nicht als Voreinstellungen dokumentiert. Persistenz ist optional und handgeschrieben, also das Gegenteil dessen, was ein langlebiger Batch-Job braucht. Und das Unternehmen hinter dem Framework hat seinen Fokus öffentlich verengt, was 2026 unangenehm zu bewerten ist.",{"type":326,"head":327,"rows":336},"table",[328,330,332,334],[329],"Framework",[331],"Orchestrierungsmodell",[333],"Persistenz und Zustand",[335],"Wo es gewinnt",[337,349,360,371],[338,343,345,347],[339],{"tag":340,"children":341},"strong",[342],"LlamaIndex Workflows",[344],"Ereignisgetriebene Schritte, Kontrollfluss in normalem Python",[346],"Kein eingebauter Checkpointer; Kontext-Snapshots vom Team oder das DBOS-Laufzeit-Plugin",[348],"Retrieval- und Dokumentenkomponenten liegen in derselben Bibliothek",[350,354,356,358],[351],{"tag":340,"children":352},[353],"LangGraph",[355],"Expliziter Zustandsgraph mit bedingten Kanten",[357],"Dauerhafte Ausführung und Checkpointer sind Standard",[359],"Zustandsübergänge sind das Artefakt und bleiben als Graph einsehbar",[361,365,367,369],[362],{"tag":340,"children":363},[364],"Haystack",[366],"Pipelines typisierter Komponenten",[368],"Fehlerzweige und Retries pro Komponente",[370],"Ein stabiler Komponentenkatalog für retrieval-lastige Anwendungen",[372,376,378,380],[373],{"tag":340,"children":374},[375],"DSPy",[377],"Deklarative Module, offline gegen eine Metrik optimiert",[379],"Keine; das ist keine Orchestrierungs-Laufzeitumgebung",[381],"Tuning von Prompts und Modulen, noch bevor es Servercode gibt",{"type":113,"content":383},[384],"Liest man die Spalte zur Persistenz durch, wird der praktische Zuschnitt lesbar. LangGraph macht Checkpointing zum Standard und bezahlt das mit einem expliziten Graphen, was Denkarbeit kostet und Lesbarkeit einkauft. Workflows behält die Kontrolle im normalen Python, das liest sich besser und lässt sich schlechter untersuchen: Ein Workflow, der über 500 Dokumente ausspielt, sind 500 parallele Aufrufe, deren Reihenfolge kein Werkzeug sichtbar macht. Für ein Team, dessen Arbeit das Nachdenken über Zustandsübergänge ist, ist das der falsche Handel. Für ein Team, das normales Python schreiben und sich darauf verlassen will, dass es sich vorhersehbar verhält, ist es der richtige.",{"type":113,"content":386},[387,388,391],"Ein zweiter Vorbehalt gehört hierher. Ein dynamischer Workflow verliert die statische Analyse, und die Dokumentation sagt ausdrücklich, dass unerreichbare Schritte und einmalige Ereignisse genau das sind, was diese Prüfungen nicht sehen können. Wer einen von Hand gezeichneten Graphen in Workflows überführt, greift früh zu ",{"tag":126,"children":389},[390],"skip_graph_checks"," und schaltet damit genau die Prüfung still ab, die tote Zweige fände, also dieselbe Prüfung, die zuerst den Verdrahtungsfehler gefunden hätte.",{"type":120,"level":121,"id":103,"text":104},{"type":113,"content":394},[395],"Das README des Repositorys trägt inzwischen einen nicht zu übersehenden Hinweis: Der aktuelle Fokus von LlamaIndex liegt auf Dokumentenparsing und Extraktion, und LlamaParse ist die Unternehmensplattform dafür. Das ändert, was ein Wartungsbudget finanziert. Die Integrationspakete werden weiterhin ausgeliefert und funktionieren weiterhin; was nicht mehr garantiert ist, dass jedes einzelne erweitert wird, wenn ein neuer Anbieter erscheint.",{"type":143,"ordered":144,"items":397},[398,400,402,404,409],[399],"LlamaParse ist das kostenpflichtige Produkt: agentisches OCR, Parsing, Extraktion und Indexierung, verkauft in Credits statt in Sitzen.",[401],"LiteParse ist das offene Gegenstück: ein Rust-Parser, der lokal ohne LLM, ohne Cloud-Abhängigkeit und ohne API-Schlüssel läuft, mit Bindings für TypeScript, Python, Rust und Browser-WASM.",[403],"ParseBench und ExtractBench sind die eigenen öffentlichen Benchmarks des Unternehmens für Parsing und Extraktion.",[405,406,408],"Das Framework bleibt MIT-lizenziert und auf PyPI veröffentlicht, mit ",{"tag":126,"children":407},[128]," in Version 0.14.25 vom 21. September 2026.",[410],"Das Ergebnis ist eine geteilte Strategie: offene Werkzeuge für lokales Parsing, eine gehostete Plattform für schwierige Dokumente und dazwischen das Agent-Framework als Integrationsfläche.",{"type":113,"content":412},[413],"Das ist eine vertretbare Geschäftsentscheidung und eine leichte Warnung für alle, die jetzt ein Framework wählen. Die Teile des Stacks, die am ehesten gepflegt werden, sind die Teile hinter der Bezahlschranke, und der MIT-Kern ist das, was als Bibliothek nützlich bleibt. Das liest sich als Plädoyer für einen kleinen Wirkungsradius des Frameworks: Workflows für die Orchestrierung nutzen, Laden und Parsing im eigenen Haus lassen, wo das möglich ist, und explizit sein, welche Aufrufe die eigene Infrastruktur verlassen.",{"type":264,"variant":415,"title":416,"body":417},"note","LlamaParse-Preise in Zahlen",[418],[419],"Die Preisseite verkauft Credits, keine Sitze: 1.000 Credits für 1,25 $, 10.000 Credits im kostenlosen Tarif, 40.000 im Starter-Tarif für 50 $ und 400.000 im Pro-Tarif für 500 $, dazu Pay-as-you-go-Grenzen von 500 $ beziehungsweise 5.000 $ pro Monat. Gleichzeitige Parse-Jobs: 5 in Free und Starter, 20 in Pro, 100 in Enterprise. Parse, Extraktion, Klassifizierung und Indexierung ziehen alle vom selben Guthaben ab, und dieselbe Tabelle listet intelligentes Ergebnis-Caching mit einem Reparse für 0 Credits, was man für eine konkrete Parse-Konfiguration prüfen sollte, statt es anzunehmen.",{"type":120,"level":121,"id":106,"text":107},{"type":113,"content":422},[423],"Das Urteil lautet: LlamaIndex bleibt die vollständigste Antwort auf eine enge Frage, nämlich wie Dokumente ohne selbst geschriebene Integrationsschicht in eine LLM-Anwendung gelangen, und eine mittelmäßige Antwort auf die breitere Frage, wie ein Agent orchestriert wird. Workflows ist wirklich gut darin, verzweigte Logik in typisiertes, validiertes Python zu übersetzen, und sein at-least-once-Checkpoint-Modell ist ehrlich über seine eigenen Fehlersemantiken. Was das Framework nicht liefert, ist eine Laufzeitumgebung, auf die man zeigen und schauen kann: kein Zustandsgraph zum Inspizieren, keine Persistenz als Standard und eine Wartungsrichtung, die sichtbar woanders liegt.",{"type":143,"ordered":196,"items":425},[426,428,430,432,434,436],[427],"Nimm es, wenn die meisten Daten Dokumente sind und die Abstraktionen für Konnektoren, Chunker, Embedder und Reranker bereits geschrieben vorliegen. Das ist eine echte Ersparnis und war der ursprüngliche Zweck.",[429],"Nimm Workflows einzeln als kleine Bibliothek, wenn die Orchestrierung verzweigendes, schleifendes Python ist, das derzeit in asyncio verknotet steckt. Der typisierte Ereignisgraph und die Vorabvalidierung sind der Grund.",[431],"Wähle es nicht für einen Graphen, über den man nachdenken muss. Wenn die Zustandsübergänge das Artefakt sind, das geprüft wird, schlägt ein expliziter Graph die Python-Kontrollstruktur.",[433],"Wähle es nicht wegen der gehosteten Plattform. LlamaParse, Extract und der Index-Dienst sind ein separates kostenpflichtiges Produkt mit Credit-Preisen, und die eigene Ingest-Rechnung an ein Framework zu binden ist eine Entscheidung, keine Voreinstellung.",[435],"Vermeide es für einen TypeScript- oder Go-Stack. Der Kern ist Python; nur der neue LiteParse-Parser liefert breitere Bindings.",[437],"Bewerte in einem Jahr neu, wenn die Integrationsbreise tragend ist. Bei des Unternehmens Fokus auf Parsing und Extraktion ist der lange Riegel der Vektorspeicher- und Embedder-Integrationen der Teil, der am ehesten von langsamer Wartung betroffen ist.",{"type":439,"content":440},"quote",[441],"The current focus of LlamaIndex is to build the best AI-powered engine for document parsing and extraction.",{"type":113,"content":443},[444],"Dieser Satz steht im README des Projekts und nicht in einem Blogbeitrag, was ungewöhnlich ist und Beachtung verdient: Die Maintainer des Frameworks selbst benennen, wohin die Roadmap führt. Als technische Aussage gelesen heißt das: Die Orchestrierungsschicht wird gepflegt, ist aber nicht das Ziel, die kostenpflichtige Dokumentenpipeline schon.",{"type":120,"level":121,"id":109,"text":110},{"type":143,"ordered":196,"items":447},[448,452,455,458,461,464,467,470,473],[449],{"tag":450,"href":25,"children":451},"a",[31],[453],{"tag":450,"href":34,"children":454},[33],[456],{"tag":450,"href":37,"children":457},[36],[459],{"tag":450,"href":40,"children":460},[39],[462],{"tag":450,"href":43,"children":463},[42],[465],{"tag":450,"href":46,"children":466},[45],[468],{"tag":450,"href":49,"children":469},[48],[471],{"tag":450,"href":52,"children":472},[51],[474],{"tag":450,"href":55,"children":475},[54],[477,536,609,679],{"slug":478,"published":479,"minutes":480,"category":7,"tags":481,"keywords":487,"about":498,"sources":508,"cover":530,"og":531,"expertise":58,"locales":532,"lang":61,"title":533,"description":534,"coverAlt":535},"agent-tool-design-descriptions-errors","2026-10-17",11,[482,483,484,485,486],"AI agents","Tool use","Function calling","MCP","Agent design",[488,489,490,491,492,493,494,495,496,497],"agent tool design","writing tool descriptions for llm","function calling best practices","tool use error handling","mcp tool design","tool calling is_error","how many tools should an agent have","tool search defer_loading","agent computer interface","llm tool schema design",[499,502,505],{"name":500,"url":501},"Intelligent agent","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FIntelligent_agent",{"name":503,"url":504},"Model Context Protocol","https:\u002F\u002Fmodelcontextprotocol.io\u002F",{"name":506,"url":507},"Poka-yoke","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FPoka-yoke",[509,512,515,518,521,524,527],{"title":510,"url":511},"Anthropic Engineering: Writing effective tools for agents, with agents (Sep 2025)","https:\u002F\u002Fwww.anthropic.com\u002Fengineering\u002Fwriting-tools-for-agents",{"title":513,"url":514},"Anthropic Engineering: Building effective agents (Dec 2024)","https:\u002F\u002Fwww.anthropic.com\u002Fengineering\u002Fbuilding-effective-agents",{"title":516,"url":517},"Claude Platform Docs: Define tools","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fagents-and-tools\u002Ftool-use\u002Fdefine-tools",{"title":519,"url":520},"Claude Platform Docs: Handle tool calls","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fagents-and-tools\u002Ftool-use\u002Fhandle-tool-calls",{"title":522,"url":523},"Claude Platform Docs: Tool search tool","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fagents-and-tools\u002Ftool-use\u002Ftool-search-tool",{"title":525,"url":526},"Model Context Protocol specification 2025-11-25: Tools","https:\u002F\u002Fmodelcontextprotocol.io\u002Fspecification\u002F2025-11-25\u002Fserver\u002Ftools",{"title":528,"url":529},"OpenAI API Docs: Function calling","https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Ffunction-calling","\u002Fimages\u002Fblog\u002Fagent-tool-design-descriptions-errors\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fagent-tool-design-descriptions-errors\u002Fog.jpg",[60,61,62],"Tools für KI-Agenten gestalten: Namen, Beschreibungen, Schemas und Fehlermeldungen","Agent-Tools, die richtig gewählt und aufgerufen werden: aufgabenorientierte Tools, Beschreibungen, Schemas, kompakte Antworten und verwertbare Fehlermeldungen.","Ein Sockel mit drei Schlitzen; über dem mittleren steht ein passend breiter Block, daneben zwei Blöcke falscher Breite.",{"slug":537,"published":479,"minutes":480,"category":7,"tags":538,"keywords":544,"about":557,"sources":567,"cover":603,"og":604,"expertise":58,"locales":605,"lang":61,"title":606,"description":607,"coverAlt":608},"coding-agents-legacy-codebase-migration",[539,540,541,542,543],"Legacy migration","Coding agents","Strangler fig","Testing","Code review",[545,546,547,548,549,550,551,552,553,554,555,556],"legacy code migration ai","coding agent legacy codebase","strangler fig pattern ai","characterization tests legacy code","ai code migration review","agent assisted refactoring","legacy modernization coding agent","differential testing migration","shadow traffic migration","ai code review gate","test harness before migration","llm code migration",[558,561,564],{"name":559,"url":560},"Legacy code","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FLegacy_code",{"name":562,"url":563},"Characterization test","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FCharacterization_test",{"name":565,"url":566},"Strangler fig pattern","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FStrangler_fig_pattern",[568,571,573,576,579,582,585,588,591,594,597,600],{"title":569,"url":570},"Martin Fowler: Strangler Fig (2024)","https:\u002F\u002Fmartinfowler.com\u002Fbliki\u002FStranglerFigApplication.html",{"title":572,"url":563},"Wikipedia: Characterization test",{"title":574,"url":575},"Google Research: Accelerating code migrations with AI (2024)","https:\u002F\u002Fresearch.google\u002Fblog\u002Faccelerating-code-migrations-with-ai\u002F",{"title":577,"url":578},"Ziftci et al.: Migrating Code At Scale With LLMs At Google (arXiv 2504.09691)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2504.09691",{"title":580,"url":581},"Anthropic: Effective harnesses for long-running agents (2025)","https:\u002F\u002Fwww.anthropic.com\u002Fengineering\u002Feffective-harnesses-for-long-running-agents",{"title":583,"url":584},"Anthropic: Redesigning source control at Anthropic (2026)","https:\u002F\u002Fwww.anthropic.com\u002Fengineering\u002Fredesigning-source-control",{"title":586,"url":587},"METR: Measuring the Impact of Early-2025 AI on Experienced Open-Source Developer Productivity","https:\u002F\u002Fmetr.org\u002Fblog\u002F2025-07-10-early-2025-ai-experienced-os-dev-study\u002F",{"title":589,"url":590},"Chand et al.: Why Industry Migrates and When It Trusts LLMs (ESEM 2026)","https:\u002F\u002Fdrops.dagstuhl.de\u002Fentities\u002Fdocument\u002F10.4230\u002FLIPIcs.ESEM.2026.85",{"title":592,"url":593},"Li et al.: Environment-in-the-Loop: Rethinking Code Migration with LLM-based Agents (arXiv 2602.09944)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2602.09944",{"title":595,"url":596},"AWS: Amazon Q Developer just reached a $260 million dollar milestone (2024)","https:\u002F\u002Faws.amazon.com\u002Fblogs\u002Fdevops\u002Famazon-q-developer-just-reached-a-260-million-dollar-milestone\u002F",{"title":598,"url":599},"OpenAI: Why SWE-bench Verified no longer measures frontier coding capabilities (2026)","https:\u002F\u002Fopenai.com\u002Findex\u002Fwhy-we-no-longer-evaluate-swe-bench-verified\u002F",{"title":601,"url":602},"GitHub Docs: About GitHub Copilot cloud agent","https:\u002F\u002Fdocs.github.com\u002Fen\u002Fcopilot\u002Fconcepts\u002Fagents\u002Fcoding-agent\u002Fabout-coding-agent","\u002Fimages\u002Fblog\u002Fcoding-agents-legacy-codebase-migration\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fcoding-agents-legacy-codebase-migration\u002Fog.jpg",[60,61,62],"Legacy-Codebase mit Coding-Agenten migrieren: ein Strangler-Fig-Playbook","Wie Coding-Agenten eine Legacy-Migration tragen: Characterization-Tests zuerst, ein Seam pro Task, Review-Gates und differentielle Verifikation.","Ein Stapel Schichten, bei dem die obersten zwei durch neue ersetzt werden, daneben eine Naht und ein Haken.",{"slug":610,"published":479,"minutes":611,"category":7,"tags":612,"keywords":616,"about":628,"sources":638,"cover":673,"og":674,"expertise":58,"locales":675,"lang":61,"title":676,"description":677,"coverAlt":678},"background-agents-async-pr-workflow",12,[540,613,614,543,615],"Pull requests","CI","Automation",[617,618,619,620,621,622,623,624,625,626,627],"background coding agent","async coding agent","cloud coding agent pull request","copilot coding agent limits","codex cloud tasks","claude code cloud sessions","jules coding agent limits","agent pull request review","coding agent sandbox","agent CI gating","cost per merged pull request",[629,632,635],{"name":630,"url":631},"Software agent","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSoftware_agent",{"name":633,"url":634},"Pull request","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FDistributed_version_control",{"name":636,"url":637},"Continuous integration","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FContinuous_integration",[639,640,643,646,649,652,655,658,661,664,667,670],{"title":601,"url":602},{"title":641,"url":642},"GitHub Docs: Risks and mitigations for Copilot cloud agent","https:\u002F\u002Fdocs.github.com\u002Fen\u002Fcopilot\u002Fconcepts\u002Fagents\u002Fcloud-agent\u002Frisks-and-mitigations",{"title":644,"url":645},"OpenAI Developers: Codex cloud environments","https:\u002F\u002Fdevelopers.openai.com\u002Fcodex\u002Fcloud\u002Fenvironments",{"title":647,"url":648},"Anthropic: Use Claude Code in the cloud","https:\u002F\u002Fcode.claude.com\u002Fdocs\u002Fen\u002Fclaude-code-on-the-web",{"title":650,"url":651},"Google Jules: Limits and plans","https:\u002F\u002Fjules.google\u002Fdocs\u002Fusage-limits\u002F",{"title":653,"url":654},"Google Jules: Getting started","https:\u002F\u002Fjules.google\u002Fdocs\u002F",{"title":656,"url":657},"GitHub Docs: About protected branches","https:\u002F\u002Fdocs.github.com\u002Fen\u002Frepositories\u002Fconfiguring-branches-and-merges-in-your-repository\u002Fmanaging-protected-branches\u002Fabout-protected-branches",{"title":659,"url":660},"GitHub Docs: Models and pricing for GitHub Copilot","https:\u002F\u002Fdocs.github.com\u002Fen\u002Fcopilot\u002Freference\u002Fcopilot-billing\u002Fmodels-and-pricing",{"title":662,"url":663},"OpenAI Developers: Codex pricing","https:\u002F\u002Fdevelopers.openai.com\u002Fcodex\u002Fpricing",{"title":665,"url":666},"Ehsani et al.: Where Do AI Coding Agents Fail? An Empirical Study of Failed Agentic Pull Requests in GitHub (MSR 2026, arXiv 2601.15195)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2601.15195",{"title":668,"url":669},"Peralta et al.: Why Are Agentic Pull Requests Merged or Rejected? An Empirical Study (MSR 2026, arXiv 2605.22534)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2605.22534",{"title":671,"url":672},"DORA: State of AI-assisted Software Development 2025","https:\u002F\u002Fdora.dev\u002Fdora-report-2025","\u002Fimages\u002Fblog\u002Fbackground-agents-async-pr-workflow\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fbackground-agents-async-pr-workflow\u002Fog.jpg",[60,61,62],"Coding-Agenten im Hintergrund: Pull Requests, Queues und Review","Wie asynchrone Coding-Agenten Tasks einreihen, in Sandboxes laufen, Draft-PRs öffnen und CI passieren. Grenzen, Kosten, Review und Fehlerbilder.","Eine Karte in einer Ablage fächert sich zu fünf Feldern auf, alle Pfeile führen zu einer Seite hinter einem Tor.",{"slug":680,"published":681,"minutes":6,"category":7,"tags":682,"keywords":688,"about":700,"sources":708,"cover":741,"og":742,"expertise":58,"locales":743,"lang":61,"title":744,"description":745,"coverAlt":746},"context-rot-compaction-long-running-agents","2026-10-16",[683,684,685,686,687],"Context rot","Compaction","Context engineering","Long-running agents","Agent memory",[689,690,691,692,693,694,695,696,697,698,699],"context rot","context rot LLM","compaction AI agents","context engineering","long-running agents context window","Claude compaction API","context editing clear tool results","OpenAI responses compaction","lost in the middle LLM","agent context management","sub-agents context isolation",[701,704,707],{"name":702,"url":703},"Context window","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FLarge_language_model#Context_window",{"name":705,"url":706},"Attention (machine learning)","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FAttention_(machine_learning)",{"name":500,"url":501},[709,712,715,718,721,723,726,729,732,735,738],{"title":710,"url":711},"Chroma: Context Rot: How Increasing Input Tokens Impacts LLM Performance (Jul 2025)","https:\u002F\u002Fresearch.trychroma.com\u002Fcontext-rot",{"title":713,"url":714},"Liu et al.: Lost in the Middle: How Language Models Use Long Contexts (2023)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2307.03172",{"title":716,"url":717},"Modarressi et al.: NoLiMa: Long-Context Evaluation Beyond Literal Matching (2025)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2502.05167",{"title":719,"url":720},"Anthropic: Effective context engineering for AI agents (Sep 2025)","https:\u002F\u002Fwww.anthropic.com\u002Fengineering\u002Feffective-context-engineering-for-ai-agents",{"title":722,"url":581},"Anthropic: Effective harnesses for long-running agents (Nov 2025)",{"title":724,"url":725},"Claude API docs: Compaction at a token threshold","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fbuild-with-claude\u002Fcompaction-threshold",{"title":727,"url":728},"Claude API docs: Compaction on demand","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fbuild-with-claude\u002Fcompaction-on-demand",{"title":730,"url":731},"Claude API docs: Context editing","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fbuild-with-claude\u002Fcontext-editing",{"title":733,"url":734},"Claude API docs: Memory tool","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fagents-and-tools\u002Ftool-use\u002Fmemory-tool",{"title":736,"url":737},"OpenAI API docs: Compaction","https:\u002F\u002Fplatform.openai.com\u002Fdocs\u002Fguides\u002Fcompaction",{"title":739,"url":740},"Cognition: Don't Build Multi-Agents","https:\u002F\u002Fcognition.ai\u002Fblog\u002Fdont-build-multi-agents","\u002Fimages\u002Fblog\u002Fcontext-rot-compaction-long-running-agents\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fcontext-rot-compaction-long-running-agents\u002Fog.jpg",[60,61,62],"Context Rot bei langlaufenden Agenten: Leeren, Compaction, Memory und Sub-Agenten","Warum die Genauigkeit von LLMs mit wachsendem Kontext sinkt und wie Leeren, Compaction, Notizen und Sub-Agenten lange Agentenläufe stabil halten.","Eine kleine Presse drückt einen hohen Blätterstapel zu einem kurzen, zwei Notizen zweigen ab.",1792261157914]