[{"data":1,"prerenderedAt":795},["ShallowReactive",2],{"blog-pydantic-ai-de":3},{"slug":4,"published":5,"minutes":6,"category":7,"tags":8,"keywords":14,"about":23,"sources":34,"cover":101,"og":102,"expertise":103,"locales":104,"lang":106,"title":108,"description":109,"coverAlt":110,"metaTitle":111,"takeaways":112,"faq":118,"toc":131,"blocks":159,"others":523},"pydantic-ai","2026-10-08",8,"agents",[9,10,11,12,13],"Agent framework","Typed Python","Structured output","Dependency injection","OpenTelemetry",[15,16,17,18,19,20,21,22],"pydantic ai","pydantic ai review","pydantic ai vs langgraph","pydantic ai vs openai agents sdk","typed python agent framework","pydantic ai logfire pricing","pydantic ai 2.0 upgrade","python llm agent framework",[24,27,30,32],{"name":25,"url":26},"Pydantic","https:\u002F\u002Fpydantic.dev",{"name":28,"url":29},"Python (programming language)","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FPython_(programming_language)",{"name":12,"url":31},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FDependency_injection",{"name":13,"url":33},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FOpenTelemetry",[35,38,41,44,47,50,53,56,59,62,65,68,71,74,77,80,83,86,89,92,95,98],{"title":36,"url":37},"Pydantic AI documentation","https:\u002F\u002Fai.pydantic.dev\u002F",{"title":39,"url":40},"pydantic-ai 2.55.0 on PyPI (released 9 October 2026)","https:\u002F\u002Fpypi.org\u002Fproject\u002Fpydantic-ai\u002F",{"title":42,"url":43},"pydantic\u002Fpydantic-ai on GitHub: licence, stars and README","https:\u002F\u002Fgithub.com\u002Fpydantic\u002Fpydantic-ai",{"title":45,"url":46},"Pydantic AI release notes: 2.51.0 to 2.55.0 and the 2.52.0 security fix","https:\u002F\u002Fgithub.com\u002Fpydantic\u002Fpydantic-ai\u002Freleases",{"title":48,"url":49},"Pydantic AI version policy","https:\u002F\u002Fai.pydantic.dev\u002Fversion-policy\u002F",{"title":51,"url":52},"Pydantic AI upgrade guide: the V2 betas and the stable release","https:\u002F\u002Fai.pydantic.dev\u002Fproject\u002Fchangelog\u002F",{"title":54,"url":55},"Pydantic AI output: tool output, retries and output validators","https:\u002F\u002Fai.pydantic.dev\u002Foutput\u002F",{"title":57,"url":58},"Pydantic AI dependencies and RunContext","https:\u002F\u002Fai.pydantic.dev\u002Fdependencies\u002F",{"title":60,"url":61},"Pydantic AI models and providers","https:\u002F\u002Fai.pydantic.dev\u002Fmodels\u002Foverview\u002F",{"title":63,"url":64},"Pydantic AI unit testing with TestModel and FunctionModel","https:\u002F\u002Fai.pydantic.dev\u002Ftesting\u002F",{"title":66,"url":67},"Pydantic AI durable execution overview","https:\u002F\u002Fai.pydantic.dev\u002Fdurable_execution\u002Foverview\u002F",{"title":69,"url":70},"Pydantic Logfire: observability for Pydantic AI","https:\u002F\u002Fai.pydantic.dev\u002Flogfire\u002F",{"title":72,"url":73},"Pydantic Logfire pricing","https:\u002F\u002Fpydantic.dev\u002Fpricing",{"title":75,"url":76},"Pydantic security and compliance","https:\u002F\u002Fpydantic.dev\u002Fsecurity",{"title":78,"url":79},"OpenAI Agents SDK documentation","https:\u002F\u002Fopenai.github.io\u002Fopenai-agents-python\u002F",{"title":81,"url":82},"OpenAI Agents SDK tracing","https:\u002F\u002Fopenai.github.io\u002Fopenai-agents-python\u002Ftracing\u002F",{"title":84,"url":85},"openai\u002Fopenai-agents-python on GitHub","https:\u002F\u002Fgithub.com\u002Fopenai\u002Fopenai-agents-python",{"title":87,"url":88},"openai-agents 0.23.1 on PyPI","https:\u002F\u002Fpypi.org\u002Fproject\u002Fopenai-agents\u002F",{"title":90,"url":91},"langchain-ai\u002Flanggraph on GitHub","https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Flanggraph",{"title":93,"url":94},"langgraph 1.2.14 on PyPI","https:\u002F\u002Fpypi.org\u002Fproject\u002Flanggraph\u002F",{"title":96,"url":97},"LangGraph overview","https:\u002F\u002Fdocs.langchain.com\u002Foss\u002Fpython\u002Flanggraph\u002Foverview",{"title":99,"url":100},"LangGraph interrupts","https:\u002F\u002Fdocs.langchain.com\u002Foss\u002Fpython\u002Flanggraph\u002Finterrupts","\u002Fimages\u002Fblog\u002Fpydantic-ai\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fpydantic-ai\u002Fog.jpg","ai-engineer",[105,106,107],"en","de","hu","Pydantic AI im Test: typisierte Python-Agenten mit geprüfter Ausgabe","Pydantic AI 2.55 bringt typisierte Abhängigkeiten, geprüfte Ausgaben und OpenTelemetry. Was 2.0 änderte, was Logfire kostet und wer es nehmen sollte.","Quadrat, Dreieck und Kreis laufen in einen Sortierrahmen, unten kommen gleiche kleine Quadrate heraus.","Pydantic AI im Test: typisierte Agenten · Balázs Csorba",[113,114,115,116,117],"Pydantic AI 2.55.0, veröffentlicht am 9. Oktober 2026, ist MIT-lizenziert und im Betrieb kostenlos. Deine Kosten sind Modell-Tokens und, falls du es nutzt, Logfire-Records.","Die 2.0-Linie ist seit dem 23. Juni 2026 stabil, nach sieben Betas, und hat die Konfiguration in Capabilities verlagert. Pinne die Version und folge dem Upgrade-Pfad.","Abhängigkeiten erreichen deine Tools über einen typisierten RunContext, und output_type prüft jede Antwort. Eine fehlgeschlagene Prüfung geht ans Modell zurück, bevor dein Code sie sieht.","Tracing ist optional und folgt OpenTelemetry, sodass Spans an Logfire oder an jedes OpenTelemetry-Backend gehen können. Durable Runs brauchen Temporal, DBOS, Prefect, Restate oder AWS Lambda.","Nimm es für typisierte Python-Dienste. Nimm das OpenAI Agents SDK für einen kleinen, OpenAI-zentrierten Stack und LangGraph, wenn explizite Graphen, Checkpoints und Unterbrechungen das Produkt sind.",[119,122,125,128],{"q":120,"a":121},"Was kostet Pydantic AI?","Stand Oktober 2026 ist die Bibliothek MIT-lizenziert und kostenlos. Die Rechnung kommt von deinem Modellanbieter und, wenn du Logfire nutzt, von dessen Records: Personal ist bis 10 Millionen Records pro Monat kostenlos, danach wird die Aufnahme an dieser Grenze angehalten. Team kostet 49 $ im Monat, Growth 249 $ im Monat, und Enterprise wird individuell angeboten.",{"q":123,"a":124},"Ist die 2.x-Linie stabil genug für die Produktion?","Ja, mit der üblichen Sorgfalt. Kleinere Releases sollen öffentliche APIs nicht brechen, aber Funktionen in Beta-Modulen können sich ändern, und jede Hauptversion entfernt, was vorher als veraltet markiert war. Sicherheitsfixes für V1 laufen noch mindestens sechs Monate nach dem stabilen 2.0-Release weiter, also plane den Umstieg.",{"q":126,"a":127},"Wie vergleicht es sich mit dem OpenAI Agents SDK und LangGraph?","Das OpenAI Agents SDK ist kleiner und schaltet Tracing standardmäßig ein. LangGraph ist um explizite Graphen mit Checkpoints und Unterbrechungen herum gebaut. Pydantic AI liegt dazwischen: typisierte Abhängigkeiten und geprüfte Ausgaben für Python-Code, mit einem Anbieter-Präfix für etwa zwei Dutzend Anbieter.",{"q":129,"a":130},"Bekommt Logfire meine Prompts?","Nur die Spans, die du exportierst. Die Instrumentierung ist optional, die Doku beschreibt, wie du Prompts und Completions aus den Spans ausschließt, und Pydantic bietet einen Data Processing Addendum, einen SOC-2-Type-2-Bericht auf Anfrage und eine Liste der Unterauftragsverarbeiter.",[132,135,138,141,144,147,150,153,156],{"id":133,"title":134},"what-it-is","Was es ist",{"id":136,"title":137},"how-it-works","Wie es funktioniert",{"id":139,"title":140},"getting-started","Erste Schritte",{"id":142,"title":143},"typed-agents-and-validation","Typisierte Abhängigkeiten und geprüfte Ausgabe",{"id":145,"title":146},"tracing-and-durable-runs","Tracing und durable Runs",{"id":148,"title":149},"cost-and-deployment","Kosten, Hosting und Datenschutz",{"id":151,"title":152},"where-it-falls-short","Wo es zu kurz greift",{"id":154,"title":155},"verdict","Fazit",{"id":157,"title":158},"sources","Quellen",[160,164,167,170,195,196,199,205,208,209,212,215,218,219,222,225,247,250,251,260,263,270,271,274,321,324,330,333,340,341,344,354,357,360,404,405,408,431,432],{"type":161,"content":162},"paragraph",[163],"Pydantic AI ist das Python-Agenten-Framework des Teams hinter Pydantic, der Bibliothek für Datenvalidierung. Abhängigkeiten, Tools und Ergebnisse sind gewöhnliche Python-Typen, und jede strukturierte Antwort des Modells wird geprüft, bevor dein Code sie bekommt. Das Urteil vorweg – nimm es für typisierte Agenten in Python-Diensten, wo das Team ohnehin mit Pydantic-Modellen denkt. Lass es, wenn dein Team in TypeScript baut, einen visuellen Builder als Hauptweg zum Entwerfen von Workflows will oder API-Änderungen zwischen Releases nicht verkraften kann.",{"type":165,"level":166,"id":133,"text":134},"heading",2,{"type":161,"content":168},[169],"Das aktuelle Release ist 2.55.0, auf PyPI veröffentlicht am 9. Oktober 2026. Es ist MIT-lizenziert, braucht Python 3.11 oder neuer und hat auf GitHub rund 20.500 Sterne. Das Projekt nennt sich „How Python does AI“: Agenten, Echtzeit-Sprache, Bildgenerierung und Embeddings, durchgehend typisiert. Die 2.0-Linie wurde am 23. Juni 2026 stabil, deshalb beschreiben ältere Tutorials womöglich noch die 1.x-API.",{"type":171,"ordered":172,"items":173},"list",false,[174,180,185,190],[175,179],{"tag":176,"children":177},"strong",[178],"Typisierte Abhängigkeiten. ","`deps_type` legt fest, was ein Agent braucht, und jeder Lauf bekommt eine Instanz über `deps=`.",[181,184],{"tag":176,"children":182},[183],"Geprüfte Ausgabe. ","`output_type` nimmt ein Pydantic-Modell, eine Union oder eine Liste von Typen. Das Modell füllt sie standardmäßig über Tool-Calling aus.",[186,189],{"tag":176,"children":187},[188],"Rund zwei Dutzend Anbieter. ","Ein Präfix wie `openai:`, `anthropic:` oder `google:` wählt den Anbieter. Das Verzeichnis deckt außerdem Groq, Mistral, Ollama und OpenRouter ab, dazu jeden OpenAI-kompatiblen Endpunkt.",[191,194],{"tag":176,"children":192},[193],"Capabilities und durable Runs. ","Capabilities bündeln Tools, Hooks, Anweisungen und Modelleinstellungen zu einer wiederverwendbaren Einheit. Durable Runs werden über Temporal, DBOS, Prefect, Restate und AWS Lambda angebunden.",{"type":165,"level":166,"id":136,"text":137},{"type":161,"content":197},[198],"Ein Agentenlauf ist eine Schleife mit einer Prüfung am Ende. Der Agent schickt seine Anweisungen, den Nachrichtenverlauf und die Tool-Schemata an das Modell. Ruft das Modell ein Tool auf, führt Pydantic AI deine Python-Funktion mit dem typisierten Kontext aus und gibt das Ergebnis ans Modell zurück. Hört das Modell auf, Tools aufzurufen, wird seine Ausgabe gegen `output_type` geprüft. Eine fehlgeschlagene Prüfung geht als Wiederholung zurück ans Modell, und das Standardbudget für Wiederholungen der Ausgabe ist eins.",{"type":200,"src":201,"alt":202,"wide":203,"caption":204},"image","\u002Fimages\u002Fblog\u002Fpydantic-ai\u002Fdiagram-6.webp","Ein Agentenlauf in Pydantic AI Dein Code übergibt Abhängigkeiten und Eingabe an einen Agenten. Der Agent schickt Anweisungen und Tool-Schemata an das Modell. Ruft das Modell ein Tool auf, läuft das Tool mit dem typisierten Kontext, und sein Ergebnis geht ans Modell zurück. Wenn das Modell fertig ist, wird seine Ausgabe gegen den Ausgabetyp geprüft. Eine fehlgeschlagene Prüfung geht als Wiederholung ans Modell zurück, und eine bestandene Antwort geht an deinen Code.",true,"Jeder Lauf dreht sich zwischen Modell und Tools, und jede Antwort passiert die Prüfstufe, bevor sie den Agenten verlässt.",{"type":161,"content":206},[207],"Abhängigkeiten gehen an deine Funktionen, nie an das Modell. Ein Datenbank-Pool oder eine HTTP-Session kann neben dem Agenten stehen, ohne in einem Prompt aufzutauchen. Das Modell sieht nur die Anweisungen, die Tool-Schemata und die Nachrichten. Diese Grenze lohnt es, bewusst zu entwerfen.",{"type":165,"level":166,"id":139,"text":140},{"type":161,"content":210},[211],"Installiere mit `uv add pydantic-ai` oder `pip install pydantic-ai` und setze dann die Zugangsdaten, die dein Anbieter erwartet. Das Beispiel unten ist ein Support-Triage-Agent. Er nimmt eine typisierte Abhängigkeit, ruft ein Tool auf und gibt ein geprüftes Objekt zurück.",{"type":213,"code":214},"code","from dataclasses import dataclass\nfrom typing import Literal\n\nfrom pydantic import BaseModel, Field\nfrom pydantic_ai import Agent, RunContext\n\nfrom myshop.orders import OrderService\n\n\n@dataclass\nclass SupportDeps:\n    customer_id: int\n    orders: OrderService  # your own client, injected per run\n\n\nclass Triage(BaseModel):\n    category: Literal['refund', 'shipping', 'other']\n    risk: int = Field(ge=0, le=10, description='How urgently a person should review this')\n    reply: str\n\n\nsupport = Agent(\n    'openai:gpt-6-sol',\n    deps_type=SupportDeps,\n    output_type=Triage,\n    instructions='Triage the message. Check the order before you answer.',\n)\n\n\n@support.tool\nasync def latest_order(ctx: RunContext[SupportDeps]) -> str:\n    '''Return the status of the most recent order.'''\n    return await ctx.deps.orders.latest_status(ctx.deps.customer_id)\n\n\nresult = support.run_sync(\n    'Where is my parcel?',\n    deps=SupportDeps(customer_id=42, orders=OrderService()),\n)\nprint(result.output.category, result.output.risk)",{"type":161,"content":216},[217],"Zwei Teile des Codes leisten die Arbeit. Die Klasse `Triage` ist sowohl das Schema, das ans Modell geht, als auch der Typ, den dein Code bekommt. Eine Antwort außerhalb der erlaubten Kategorien oder des Risikobereichs von 0 bis 10 wird wiederholt und, wenn sie weiter scheitert, als Fehler ausgelöst, statt deinen Code zu erreichen. Die Annotation `RunContext[SupportDeps]` gibt dem Tool eine typisierte Sicht auf deinen Client, sodass der Editor jedes Attribut prüfen kann, das du verwendest.",{"type":165,"level":166,"id":142,"text":143},{"type":161,"content":220},[221],"Abhängigkeiten würde ich zuerst übernehmen. `deps_type` deklariert den Typ, `RunContext[Deps]` gibt Tools, Anweisungen und Output-Validatoren Zugriff auf `ctx.deps`, und ein Test kann den echten Client mit `agent.override(deps=...)` gegen einen Fake tauschen. Die Verdrahtung bleibt im Konstruktor und im Aufruf statt in globalen Variablen auf Modulebene, und so bleibt der Agent leicht testbar.",{"type":161,"content":223},[224],"Bei der Ausgabe zahlt sich das Framework aus. Standardmäßig liefert das Modell strukturierte Daten über seine Tool-Calling-Schnittstelle, und eine Union von Typen wird zu einem Ausgabe-Tool pro Mitglied. Die Marker `TextOutput` und `PromptedOutput` schalten auf Klartext um, für Modelle mit unzuverlässigem Tool-Calling. `ToolOutput` gibt einem Ausgabe-Tool ein eigenes Wiederholungsbudget, sodass ein komplexer Typ mehr Versuche bekommen kann als ein einfacher.",{"type":171,"ordered":172,"items":226},[227,232,237,242],[228,231],{"tag":176,"children":229},[230],"`ModelRetry` ","lässt ein Tool oder eine Ausgabefunktion einen Wert ablehnen und dem Modell sagen, was es ändern soll.",[233,236],{"tag":176,"children":234},[235],"`@agent.output_validator` ","führt nach dem Parsen deine eigenen Prüfungen aus, zum Beispiel ob eine Bestellnummer in der Antwort existiert.",[238,241],{"tag":176,"children":239},[240],"`Agent(retries={'output': N})` ","erhöht das Wiederholungsbudget der Ausgabe für den ganzen Agenten. Der Standard ist eins.",[243,246],{"tag":176,"children":244},[245],"`ToolOutput(Fruit, max_retries=2)` ","gibt einem Ausgabetyp eine eigene Anzahl an Wiederholungen.",{"type":161,"content":248},[249],"Beim Testen zahlt sich der Entwurf aus. `TestModel` ruft jedes Tool auf und liefert eine strukturell gültige Antwort, `FunctionModel` lässt einen Test die Antwort des Modells vorgeben, und `ALLOW_MODEL_REQUESTS=False` blockiert versehentliche Aufrufe echter Anbieter in der CI. Ein Unit-Test des Support-Ablaufs braucht dann weder API-Schlüssel noch Netzwerk.",{"type":165,"level":166,"id":145,"text":146},{"type":161,"content":252},[253,254,259],"Tracing ist optional. Rufe beim Start `logfire.configure()` und `logfire.instrument_pydantic_ai()` auf, dann wird jeder Lauf, jede Modellantwort und jeder Tool-Aufruf zu einem OpenTelemetry-Span, der den Konventionen für generative KI folgt. Das Logfire-SDK kann dieselben Daten an jedes OpenTelemetry-Backend schicken, was zählt, wenn die Telemetrie in einem System bleiben muss, das das Team ohnehin betreibt. Den größeren Zusammenhang findest du in ",{"tag":255,"to":256,"children":257},"link","\u002Fblog\u002Fagent-observability-opentelemetry",[258],"Agent-Observability mit OpenTelemetry",".",{"type":161,"content":261},[262],"Durable Execution ist das zweite Feature, das du verstehen solltest. Die Doku führt acht Engines auf. Temporal, DBOS, Prefect, Restate und AWS Lambda werden gemeinsam mit ihren Anbietern gepflegt, und Kitaru, Apache Airflow und Absurd kommen als externe Integrationen. In 2.x hängst du eine Durability-Capability an den Agenten. Das README-Beispiel fügt `TemporalDurability()` in einem Temporal-Workflow zu den Capabilities eines Agenten hinzu.",{"type":264,"variant":265,"title":266,"body":267},"callout","warn","Durable heißt nicht gespeichert",[268],[269],"Eine Durable-Engine hält einen Lauf über Abstürze und Neustarts hinweg am Leben. Sie speichert deine Chat-Threads nicht. Die Doku behandelt das Speichern eines Gesprächs und das spätere Fortsetzen als eigenes Problem, also plane diese Speicherung bewusst ein.",{"type":165,"level":166,"id":148,"text":149},{"type":161,"content":272},[273],"Stand Oktober 2026 kostet die Bibliothek im Betrieb nichts. Die Lizenz deckt den Code ab, also kommen die Rechnungen aus drei Quellen: Modell-Tokens von deinem Anbieter, Logfire-Records, wenn du Logfire nutzt, und die Infrastruktur für eine Durable-Engine, falls du eine einsetzt. Die Logfire-Tarife zeigen, wie die zweite Rechnung aussieht.",{"type":275,"head":276,"rows":285},"table",[277,279,281,283],[278],"Tarif",[280],"Preis",[282],"Inbegriffen",[284],"Was sich ändert",[286,295,304,312],[287,289,291,293],[288],"Personal",[290],"Kostenlos",[292],"10 Mio. Records pro Monat, hart begrenzt",[294],"3 Projekte, 30 Tage Aufbewahrung, 1 Platz und 2 Gäste mit Lesezugriff",[296,298,300,302],[297],"Team",[299],"49 $ pro Monat",[301],"10 Mio. Records, dann 2 $ pro Mio.",[303],"5 Plätze (bis 12), 10 Gäste, 5 Projekte, 30 Tage Aufbewahrung, Ausgabenlimit",[305,307,309,310],[306],"Growth",[308],"249 $ pro Monat",[301],[311],"Unbegrenzte Plätze, Gäste und Projekte, 90 Tage Aufbewahrung, Priority-Support und BAA-Vorlage",[313,315,317,319],[314],"Enterprise",[316],"Individuell",[318],"Nach Vereinbarung",[320],"Cloud, Dedicated oder Self-hosted; SSO, SCIM und ein SLA",{"type":161,"content":322},[323],"Logfire rechnet Records ab: Logs, Spans und Metriken. Die inbegriffenen 10 Millionen pro Monat sind durch das Plan-Guthaben abgedeckt, darüber kosten Team und Growth 2 $ pro Million. Ein Team, das 30 Millionen Records im Monat sendet, zahlt 49 $ plus 40 $ für die zusätzlichen 20 Millionen, also rund 89 $ vor allen Modell-Tokens. Das AI-Gateway schlägt bei eingebauten Anbietern 5 Prozent Aufschlag drauf, während bis zu drei eigene Anbieter-Schlüssel ohne Aufschlag durchgereicht werden.",{"type":264,"variant":325,"title":326,"body":327},"tip","Das Limit setzen, bevor der erste Lasttest läuft",[328],[329],"Personal nimmt ab 10 Millionen Records keine Daten mehr an, und Team bietet ein Ausgabenlimit. Schalte das Limit vor einem Lasttest oder einem großen Eval-Lauf ein, nicht nach der ersten überraschenden Rechnung.",{"type":161,"content":331},[332],"Selbst hosten ist der Standard, weil die Bibliothek einfach nur Code in deiner eigenen Umgebung ist. Die Enterprise-Stufe von Logfire ergänzt eine selbst gehostete Option auf deinem eigenen Kubernetes-Cluster. Für den Datenschutz zählen drei Flüsse. Der Modellanbieter bekommt Prompts und Tool-Ergebnisse, also stehen dessen Auftragsverarbeitungsbedingungen und Region an erster Stelle. Logfire bekommt jeden Span, den du exportierst, also schließe Prompts und Completions dort aus, wo du sie nicht brauchst. Pydantic bietet außerdem einen Data Processing Addendum für die DSGVO, einen SOC-2-Type-2-Bericht auf Anfrage und eine veröffentlichte Liste der Unterauftragsverarbeiter.",{"type":161,"content":334},[335,336],"Die Region ist auf jedem Tarif eine Einstellung, die du prüfen solltest. Die Tarifmatrix setzt bei jedem gehosteten Tarif, von Personal bis Enterprise Cloud, ein Häkchen bei EU- oder US-Datenregion. Enterprise Dedicated bietet eine beliebige Google-Cloud-Region, und Self-hosting hält die Daten dort, wo du sie betreibst. Die Preisseite sagt nicht, welche Region ein neues Projekt standardmäßig bekommt, also prüfe das, bevor du personenbezogene Daten schickst. ",{"tag":255,"to":337,"children":338},"\u002Fblog\u002Fgdpr-llm-api-eu-data-residency",[339],"Die allgemeinere Frage zur Datenresidenz bei Modell-APIs behandelt ein eigener Artikel.",{"type":165,"level":166,"id":151,"text":152},{"type":161,"content":342},[343],"Das größte Risiko ist Veränderung – und das Changelog ist offen darüber. Die 2.0-Linie durchlief sieben Betas zwischen dem 20. Mai und dem 10. Juni 2026, bevor das stabile Release am 23. Juni kam. Die Breaking Changes kommen in zwei Gruppen: Entfernungen, die die Deprecation-Warnungen von V1 nicht ankündigen konnten, und Änderungen, vor denen V1 gewarnt hat. Entfernt wurden unter anderem die Outlines-Integration und ihre Extras, und `ModelProfile` wurde von einer Dataclass zu einem TypedDict. Eine Migration ist eine echte Aufgabe, kein Versionssprung.",{"type":264,"variant":345,"title":346,"body":347},"note","In dieser Reihenfolge upgraden",[348,350,352],[349],"Auf das neueste V1-Release wechseln, mindestens 1.100.0, wo die meisten Entfernungen zuerst als veraltet markiert wurden.",[351],"Die Testsuite mit sichtbaren Warnungen laufen lassen und jede Deprecation-Warnung beheben.",[353],"Die Liste der Breaking Changes lesen, dann auf 2.x wechseln und die Version pinnen.",{"type":161,"content":355},[356],"Auch kleinere Releases kommen häufig. Version 2.51.0 erschien am 25. September 2026 und 2.55.0 am 9. Oktober, ein lose gepinntes Projekt sieht also in zwei Wochen mehrere Änderungen. Die Versionsrichtlinie verspricht keine absichtlichen Breaking Changes in kleineren Releases, aber Funktionen in einem Beta-Modul sind ausdrücklich instabil und können sich so ändern, dass bestehender Code bricht. Behandle jeden Import aus einem Beta-Modul wie eine gepinnte Abhängigkeit.",{"type":161,"content":358},[359],"Behalte außerdem die Sicherheitshinweise im Blick. Release 2.52.0 behob ein Problem mit CPU und Speicher im lokalen Tool `web_fetch`, bei dem tief verschachteltes HTML übermäßig viele Ressourcen verbrauchen konnte. Das providereigene Web-Fetching war nicht betroffen. Und schließlich – es ist eine Python-Bibliothek. Teams, die Agenten in TypeScript bauen, brauchen ein anderes Framework, und Durable-Engines bringen Infrastruktur mit, die jemand betreiben oder bezahlen muss.",{"type":275,"head":361,"rows":372},[362,364,366,368,370],[363],"Tool",[365],"Lizenz",[367],"Version, Oktober 2026",[369],"Stärke",[371],"Tracing",[373,384,394],[374,376,378,380,382],[375],"Pydantic AI",[377],"MIT",[379],"2.55.0",[381],"Typisierte Abhängigkeiten und geprüfte Ausgabe in Python",[383],"Optional, über Logfire oder OpenTelemetry",[385,387,388,390,392],[386],"OpenAI Agents SDK",[377],[389],"0.23.1",[391],"Sehr wenige Primitive: Agenten, Handoffs, Guardrails, Sessions",[393],"Standardmäßig an, exportiert an OpenAI, sofern nicht abgeschaltet",[395,397,398,400,402],[396],"LangGraph",[377],[399],"1.2.14",[401],"Explizite Graphen mit Checkpoints, Unterbrechungen und Fehlertoleranz",[403],"LangSmith, eine eigene Plattform",{"type":165,"level":166,"id":154,"text":155},{"type":161,"content":406},[407],"Pydantic AI ist mein Standard für ein Python-Team, das seine Daten bereits mit Pydantic modelliert und Agenten will, die typisiert, testbar und leicht neben dem Rest des Dienstes zu betreiben sind. Es ist die falsche Wahl für eine TypeScript-Codebasis, für ein Team, das einen visuellen Graph-Editor als wichtigstes Entwurfswerkzeug will, und für jedes Team, das API-Änderungen zwischen Releases nicht verkraftet. In diesen Fällen passen die Alternativen unten besser.",{"type":171,"ordered":203,"items":409},[410,415,423],[411,414],{"tag":176,"children":412},[413],"Nimm Pydantic AI ","wenn deine Dienste in Python laufen, deine Daten schon in Pydantic-Modellen stehen und du typisierte Tools und geprüfte Ausgaben willst.",[416,419,422],{"tag":176,"children":417},[418],"Nimm das ",{"tag":255,"to":420,"children":421},"\u002Fblog\u002Fopenai-agents-sdk",[386],", wenn du dich auf OpenAI festgelegt hast und sehr wenige Primitive willst. Schalte Tracing ab oder füge einen eigenen Processor hinzu, bevor echte Kundendaten hindurchlaufen.",[424,427,430],{"tag":176,"children":425},[426],"Nimm ",{"tag":255,"to":428,"children":429},"\u002Fblog\u002Flanggraph",[396],", wenn der Workflow das Produkt ist: expliziter Zustand, Checkpoints und benannte Freigabeschritte. Du schreibst mehr Code und kontrollierst jeden Übergang.",{"type":165,"level":166,"id":157,"text":158},{"type":171,"ordered":172,"items":433},[434,439,443,447,451,455,459,463,467,471,475,479,483,487,491,495,499,503,507,511,515,519],[435],{"tag":436,"href":37,"children":437},"a",[438],"Pydantic-AI-Dokumentation",[440],{"tag":436,"href":40,"children":441},[442],"pydantic-ai 2.55.0 auf PyPI (veröffentlicht am 9. Oktober 2026)",[444],{"tag":436,"href":43,"children":445},[446],"pydantic\u002Fpydantic-ai auf GitHub: Lizenz, Sterne und README",[448],{"tag":436,"href":46,"children":449},[450],"Pydantic-AI-Release-Notes: 2.51.0 bis 2.55.0 und der Sicherheitsfix in 2.52.0",[452],{"tag":436,"href":49,"children":453},[454],"Pydantic-AI-Versionsrichtlinie",[456],{"tag":436,"href":52,"children":457},[458],"Pydantic-AI-Upgrade-Leitfaden: die V2-Betas und das stabile Release",[460],{"tag":436,"href":55,"children":461},[462],"Pydantic-AI-Output: Tool-Ausgabe, Wiederholungen und Output-Validatoren",[464],{"tag":436,"href":58,"children":465},[466],"Pydantic-AI-Abhängigkeiten und RunContext",[468],{"tag":436,"href":61,"children":469},[470],"Pydantic-AI-Modelle und Anbieter",[472],{"tag":436,"href":64,"children":473},[474],"Pydantic-AI-Unit-Tests mit TestModel und FunctionModel",[476],{"tag":436,"href":67,"children":477},[478],"Pydantic-AI-Überblick zu Durable Execution",[480],{"tag":436,"href":70,"children":481},[482],"Pydantic Logfire: Observability für Pydantic AI",[484],{"tag":436,"href":73,"children":485},[486],"Pydantic Logfire: Preise",[488],{"tag":436,"href":76,"children":489},[490],"Pydantic: Sicherheit und Compliance",[492],{"tag":436,"href":79,"children":493},[494],"OpenAI-Agents-SDK-Dokumentation",[496],{"tag":436,"href":82,"children":497},[498],"OpenAI-Agents-SDK: Tracing",[500],{"tag":436,"href":85,"children":501},[502],"openai\u002Fopenai-agents-python auf GitHub",[504],{"tag":436,"href":88,"children":505},[506],"openai-agents 0.23.1 auf PyPI",[508],{"tag":436,"href":91,"children":509},[510],"langchain-ai\u002Flanggraph auf GitHub",[512],{"tag":436,"href":94,"children":513},[514],"langgraph 1.2.14 auf PyPI",[516],{"tag":436,"href":97,"children":517},[518],"LangGraph-Überblick",[520],{"tag":436,"href":100,"children":521},[522],"LangGraph-Interrupts",[524,583,656,726],{"slug":525,"published":526,"minutes":527,"category":7,"tags":528,"keywords":534,"about":545,"sources":555,"cover":577,"og":578,"expertise":103,"locales":579,"lang":106,"title":580,"description":581,"coverAlt":582},"agent-tool-design-descriptions-errors","2026-10-17",11,[529,530,531,532,533],"AI agents","Tool use","Function calling","MCP","Agent design",[535,536,537,538,539,540,541,542,543,544],"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",[546,549,552],{"name":547,"url":548},"Intelligent agent","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FIntelligent_agent",{"name":550,"url":551},"Model Context Protocol","https:\u002F\u002Fmodelcontextprotocol.io\u002F",{"name":553,"url":554},"Poka-yoke","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FPoka-yoke",[556,559,562,565,568,571,574],{"title":557,"url":558},"Anthropic Engineering: Writing effective tools for agents, with agents (Sep 2025)","https:\u002F\u002Fwww.anthropic.com\u002Fengineering\u002Fwriting-tools-for-agents",{"title":560,"url":561},"Anthropic Engineering: Building effective agents (Dec 2024)","https:\u002F\u002Fwww.anthropic.com\u002Fengineering\u002Fbuilding-effective-agents",{"title":563,"url":564},"Claude Platform Docs: Define tools","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fagents-and-tools\u002Ftool-use\u002Fdefine-tools",{"title":566,"url":567},"Claude Platform Docs: Handle tool calls","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fagents-and-tools\u002Ftool-use\u002Fhandle-tool-calls",{"title":569,"url":570},"Claude Platform Docs: Tool search tool","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fagents-and-tools\u002Ftool-use\u002Ftool-search-tool",{"title":572,"url":573},"Model Context Protocol specification 2025-11-25: Tools","https:\u002F\u002Fmodelcontextprotocol.io\u002Fspecification\u002F2025-11-25\u002Fserver\u002Ftools",{"title":575,"url":576},"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",[105,106,107],"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":584,"published":526,"minutes":527,"category":7,"tags":585,"keywords":591,"about":604,"sources":614,"cover":650,"og":651,"expertise":103,"locales":652,"lang":106,"title":653,"description":654,"coverAlt":655},"coding-agents-legacy-codebase-migration",[586,587,588,589,590],"Legacy migration","Coding agents","Strangler fig","Testing","Code review",[592,593,594,595,596,597,598,599,600,601,602,603],"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",[605,608,611],{"name":606,"url":607},"Legacy code","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FLegacy_code",{"name":609,"url":610},"Characterization test","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FCharacterization_test",{"name":612,"url":613},"Strangler fig pattern","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FStrangler_fig_pattern",[615,618,620,623,626,629,632,635,638,641,644,647],{"title":616,"url":617},"Martin Fowler: Strangler Fig (2024)","https:\u002F\u002Fmartinfowler.com\u002Fbliki\u002FStranglerFigApplication.html",{"title":619,"url":610},"Wikipedia: Characterization test",{"title":621,"url":622},"Google Research: Accelerating code migrations with AI (2024)","https:\u002F\u002Fresearch.google\u002Fblog\u002Faccelerating-code-migrations-with-ai\u002F",{"title":624,"url":625},"Ziftci et al.: Migrating Code At Scale With LLMs At Google (arXiv 2504.09691)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2504.09691",{"title":627,"url":628},"Anthropic: Effective harnesses for long-running agents (2025)","https:\u002F\u002Fwww.anthropic.com\u002Fengineering\u002Feffective-harnesses-for-long-running-agents",{"title":630,"url":631},"Anthropic: Redesigning source control at Anthropic (2026)","https:\u002F\u002Fwww.anthropic.com\u002Fengineering\u002Fredesigning-source-control",{"title":633,"url":634},"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":636,"url":637},"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":639,"url":640},"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":642,"url":643},"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":645,"url":646},"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":648,"url":649},"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",[105,106,107],"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":657,"published":526,"minutes":658,"category":7,"tags":659,"keywords":663,"about":675,"sources":685,"cover":720,"og":721,"expertise":103,"locales":722,"lang":106,"title":723,"description":724,"coverAlt":725},"background-agents-async-pr-workflow",12,[587,660,661,590,662],"Pull requests","CI","Automation",[664,665,666,667,668,669,670,671,672,673,674],"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",[676,679,682],{"name":677,"url":678},"Software agent","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSoftware_agent",{"name":680,"url":681},"Pull request","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FDistributed_version_control",{"name":683,"url":684},"Continuous integration","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FContinuous_integration",[686,687,690,693,696,699,702,705,708,711,714,717],{"title":648,"url":649},{"title":688,"url":689},"GitHub Docs: Risks and mitigations for Copilot cloud agent","https:\u002F\u002Fdocs.github.com\u002Fen\u002Fcopilot\u002Fconcepts\u002Fagents\u002Fcloud-agent\u002Frisks-and-mitigations",{"title":691,"url":692},"OpenAI Developers: Codex cloud environments","https:\u002F\u002Fdevelopers.openai.com\u002Fcodex\u002Fcloud\u002Fenvironments",{"title":694,"url":695},"Anthropic: Use Claude Code in the cloud","https:\u002F\u002Fcode.claude.com\u002Fdocs\u002Fen\u002Fclaude-code-on-the-web",{"title":697,"url":698},"Google Jules: Limits and plans","https:\u002F\u002Fjules.google\u002Fdocs\u002Fusage-limits\u002F",{"title":700,"url":701},"Google Jules: Getting started","https:\u002F\u002Fjules.google\u002Fdocs\u002F",{"title":703,"url":704},"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":706,"url":707},"GitHub Docs: Models and pricing for GitHub Copilot","https:\u002F\u002Fdocs.github.com\u002Fen\u002Fcopilot\u002Freference\u002Fcopilot-billing\u002Fmodels-and-pricing",{"title":709,"url":710},"OpenAI Developers: Codex pricing","https:\u002F\u002Fdevelopers.openai.com\u002Fcodex\u002Fpricing",{"title":712,"url":713},"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":715,"url":716},"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":718,"url":719},"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",[105,106,107],"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":727,"published":728,"minutes":729,"category":7,"tags":730,"keywords":736,"about":748,"sources":756,"cover":789,"og":790,"expertise":103,"locales":791,"lang":106,"title":792,"description":793,"coverAlt":794},"context-rot-compaction-long-running-agents","2026-10-16",10,[731,732,733,734,735],"Context rot","Compaction","Context engineering","Long-running agents","Agent memory",[737,738,739,740,741,742,743,744,745,746,747],"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",[749,752,755],{"name":750,"url":751},"Context window","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FLarge_language_model#Context_window",{"name":753,"url":754},"Attention (machine learning)","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FAttention_(machine_learning)",{"name":547,"url":548},[757,760,763,766,769,771,774,777,780,783,786],{"title":758,"url":759},"Chroma: Context Rot: How Increasing Input Tokens Impacts LLM Performance (Jul 2025)","https:\u002F\u002Fresearch.trychroma.com\u002Fcontext-rot",{"title":761,"url":762},"Liu et al.: Lost in the Middle: How Language Models Use Long Contexts (2023)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2307.03172",{"title":764,"url":765},"Modarressi et al.: NoLiMa: Long-Context Evaluation Beyond Literal Matching (2025)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2502.05167",{"title":767,"url":768},"Anthropic: Effective context engineering for AI agents (Sep 2025)","https:\u002F\u002Fwww.anthropic.com\u002Fengineering\u002Feffective-context-engineering-for-ai-agents",{"title":770,"url":628},"Anthropic: Effective harnesses for long-running agents (Nov 2025)",{"title":772,"url":773},"Claude API docs: Compaction at a token threshold","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fbuild-with-claude\u002Fcompaction-threshold",{"title":775,"url":776},"Claude API docs: Compaction on demand","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fbuild-with-claude\u002Fcompaction-on-demand",{"title":778,"url":779},"Claude API docs: Context editing","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fbuild-with-claude\u002Fcontext-editing",{"title":781,"url":782},"Claude API docs: Memory tool","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fagents-and-tools\u002Ftool-use\u002Fmemory-tool",{"title":784,"url":785},"OpenAI API docs: Compaction","https:\u002F\u002Fplatform.openai.com\u002Fdocs\u002Fguides\u002Fcompaction",{"title":787,"url":788},"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",[105,106,107],"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.",1792261157193]