[{"data":1,"prerenderedAt":613},["ShallowReactive",2],{"blog-semantic-caching-llm-responses-de":3},{"slug":4,"published":5,"minutes":6,"category":7,"tags":8,"keywords":14,"about":25,"sources":35,"cover":48,"og":49,"expertise":50,"locales":51,"lang":53,"title":55,"description":56,"coverAlt":57,"metaTitle":58,"takeaways":59,"faq":65,"toc":81,"blocks":105,"others":344},"semantic-caching-llm-responses","2026-10-16",6,"llmops",[9,10,11,12,13],"Semantic cache","LLM cost","Latency","Embeddings","Redis",[15,16,17,18,19,20,21,22,23,24],"semantic caching llm","semantic cache","llm response cache","gptcache","semantic cache similarity threshold","prompt caching vs semantic caching","reduce llm api cost","cache llm answers redis","semantic cache false positive","llm cache invalidation",[26,29,32],{"name":27,"url":28},"Cache (computing)","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FCache_(computing)",{"name":30,"url":31},"Sentence embedding","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSentence_embedding",{"name":33,"url":34},"Large language model","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FLarge_language_model",[36,39,42,45],{"title":37,"url":38},"Regmi and Pun: GPT Semantic Cache: Reducing LLM Costs and Latency via Semantic Embedding Caching (2024)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2411.05276",{"title":40,"url":41},"Zilliz: GPTCache README (modules, similarity evaluation, eviction)","https:\u002F\u002Fgithub.com\u002Fzilliztech\u002FGPTCache",{"title":43,"url":44},"Claude Platform Docs: Prompt caching","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fbuild-with-claude\u002Fprompt-caching",{"title":46,"url":47},"pgvector README: vector types and indexes","https:\u002F\u002Fgithub.com\u002Fpgvector\u002Fpgvector","\u002Fimages\u002Fblog\u002Fsemantic-caching-llm-responses\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fsemantic-caching-llm-responses\u002Fog.jpg","ai-engineer",[52,53,54],"en","de","hu","Semantisches Caching für LLM-Apps: wann Antworten wiederverwenden sicher ist und wann nicht","Wie semantische Caches LLM-Antworten für ähnliche Fragen wiederverwenden, was sie vom Prompt-Caching trennt, wie man falsche Treffer und Lecks vermeidet.","Eine neue Frage wird eingebettet und mit gecachten Fragen verglichen; über einer Ähnlichkeitsschwelle kommt die gespeicherte Antwort, darunter wird das Modell aufgerufen.","Semantisches Caching für LLM-Apps: Schwellen · Balázs Csorba",[60,61,62,63,64],"Prompt-Caching nutzt beim Anbieter ein identisches Präfix wieder und ändert die Antwort nie; ein semantischer Cache liefert eine gespeicherte Antwort auf eine ähnliche Frage.","In einem veröffentlichten Test mit Kundenservice-ähnlichen Fragen senkte ein semantischer Cache die API-Aufrufe um bis zu 68,8 % bei über 97 % korrekten Treffern.","Die Ähnlichkeitsschwelle ist eine Produktentscheidung: Man setzt sie anhand gelabelter Fragepaare, die eine Antwort teilen müssen oder dürfen nicht.","Cache-Schlüssel nach Mandant, Nutzer, Sprache und Datenstand trennen, sonst bekommt ein Kunde die Antwort eines anderen.","Nur Antworten cachen, die nicht von frischen Daten oder persönlichem Kontext abhängen, und jedem Eintrag eine TTL und einen Invalidierungsweg geben.",[66,69,72,75,78],{"q":67,"a":68},"Was ist der Unterschied zwischen Prompt-Caching und semantischem Caching?","Prompt-Caching ist eine Anbieterfunktion, die das verarbeitete Präfix eines Prompts wiederverwendet, wenn es exakt gleich ist; das Modell erzeugt trotzdem eine neue Antwort. Semantisches Caching ist eine eigene Schicht, die eine früher erzeugte Antwort liefert, wenn eine neue Frage einer gecachten ähnlich genug ist, und den Modellaufruf ganz spart.",{"q":70,"a":71},"Wie viel spart ein semantischer Cache?","Das hängt davon ab, wie repetitiv der Traffic ist. Das Paper zu GPT Semantic Cache berichtet bei repetitiven, kundenservice-ähnlichen Fragen bis zu 68,8 % weniger API-Aufrufe, Trefferquoten von 61,6 bis 68,8 % und über 97 % korrekte Treffer. Offener Chat hat deutlich weniger Treffer.",{"q":73,"a":74},"Welche Ähnlichkeitsschwelle sollte ich nutzen?","Eine allgemeingültige Zahl gibt es nicht; sie hängt vom Embedding-Modell und der Domäne ab. Paare echter Fragen sammeln, die als gleiche oder unterschiedliche Antwort gelabelt sind, und die Schwelle wählen, bei der falsche Treffer auf diesem Satz nahe null bleiben.",{"q":76,"a":77},"Ist ein semantischer Cache mit personenbezogenen Daten sicher?","Nur wenn Cache-Einträge auf den Nutzer oder Mandanten beschränkt sind, dem sie gehören, und Antworten mit personenbezogenen Daten ausgeschlossen oder pro Nutzer gecacht werden. Ein gemeinsamer Cache ohne Trennung kann die Antwort eines Nutzers an einen anderen geben.",{"q":79,"a":80},"Wann sollte ich keinen semantischen Cache nutzen?","Wenn Antworten von Live-Daten wie Bestand, Preisen oder Bestellstatus abhängen, vom bisherigen Gespräch oder von den Rechten des Nutzers. Dann die teuren Teile cachen, etwa Retrieval-Ergebnisse oder Tool-Ausgaben, nicht die finale Antwort.",[82,85,88,90,93,96,99,102],{"id":83,"title":84},"prompt-vs-semantic-caching","Was unterscheidet semantisches Caching vom Prompt-Caching?",{"id":86,"title":87},"how-it-works","Wie funktioniert ein semantischer Cache?",{"id":89,"title":70},"how-much-it-saves",{"id":91,"title":92},"choosing-the-threshold","Wie wählt man die Ähnlichkeitsschwelle?",{"id":94,"title":95},"scope-and-privacy","Wie verhindert man, dass ein semantischer Cache Daten preisgibt?",{"id":97,"title":98},"invalidation","Wie lässt man gecachte Antworten ablaufen und invalidiert sie?",{"id":100,"title":101},"measure-it","Was sollte man überwachen?",{"id":103,"title":104},"sources","Quellen",[106,110,113,116,154,168,169,178,190,193,194,201,204,205,224,236,239,240,247,270,278,285,286,294,295,322,329,330],{"type":107,"content":108},"paragraph",[109],"Support-Assistenten und FAQ-Bots beantworten immer wieder dieselben Fragen: Wie setze ich mein Passwort zurück, wo ist meine Rechnung, wie lange dauert die Lieferung. Jede dieser Fragen kostet einen Modellaufruf. Ein semantischer Cache speichert die Antwort beim ersten Mal und liefert sie, wenn eine spätere Frage dasselbe meint, auch wenn sie anders formuliert ist. Gut gemacht, entfällt ein großer Teil der Aufrufe und die Antwort kommt in Millisekunden. Nachlässig gemacht, liefert er selbstsichere Antworten auf Fragen, die niemand gestellt hat.",{"type":107,"content":111},[112],"Dieser Artikel trennt semantisches Caching vom Prompt-Caching der Anbieter, zeigt die Architektur und verbringt die meiste Zeit mit den Teilen, die über die Sicherheit entscheiden: Schwelle, Cache-Bereich, was man nicht cachen sollte und Invalidierung.",{"type":114,"level":115,"id":83,"text":84},"heading",2,{"type":117,"head":118,"rows":125},"table",[119,121,123],[120],"Aspekt",[122],"Prompt-Caching (Anbieter)",[124],"Semantisches Caching (eigenes)",[126,133,140,147],[127,129,131],[128],"Treffer",[130],"Exakt identisches Präfix",[132],"Ähnliche Bedeutung über einer Schwelle",[134,136,138],[135],"Was wiederverwendet wird",[137],"Verarbeitete Eingabe-Tokens",[139],"Die ganze gespeicherte Antwort",[141,143,145],[142],"Modell läuft trotzdem",[144],"Ja, die Antwort wird neu erzeugt",[146],"Nein, bei einem Treffer",[148,150,152],[149],"Risiko falscher Antwort",[151],"Keines durchs Caching",[153],"Ja, bei falschem Treffer",{"type":107,"content":155},[156,157,161,162,167],"Die Dokumentation zum ",{"tag":158,"href":44,"children":159},"a",[160],"Prompt-Caching von Claude"," sagt klar, dass Treffer zu 100 % identische Prompt-Abschnitte verlangen und das Caching die Ausgabe nicht beeinflusst. Das ist von Haus aus sicher, und man sollte es zuerst einschalten; mehr dazu in ",{"tag":163,"to":164,"children":165},"link","\u002Fblog\u002Fllm-cost-latency-prompt-caching-routing",[166],"Prompt-Caching und Modell-Routing",". Ein semantischer Cache sitzt vor dem Modell und ist eine andere Art Entscheidung, denn er ändert, was der Nutzer bekommt.",{"type":114,"level":115,"id":86,"text":87},{"type":170,"attrs":171,"inner":175,"caption":176},"diagram",{"viewBox":172,"role":173,"aria-labelledby":174},"0 0 720 170","img","sc1-t sc1-d","\u003Ctitle id=\"sc1-t\">Abfrage eines semantischen Caches\u003C\u002Ftitle>\u003Cdesc id=\"sc1-d\">Die Frage wird normalisiert und eingebettet, eine Vektorsuche findet die nächste gecachte Frage im selben Bereich, und die gespeicherte Antwort kommt zurück, wenn die Ähnlichkeit die Schwelle erreicht; sonst wird das Modell aufgerufen und die neue Antwort mit TTL gespeichert.\u003C\u002Fdesc>\u003Cdefs>\u003Cmarker id=\"sc1-ah\" viewBox=\"0 0 10 10\" refX=\"9\" refY=\"5\" markerWidth=\"7\" markerHeight=\"7\" orient=\"auto-start-reverse\">\u003Cpath d=\"M0 0L10 5L0 10z\" class=\"d-head\" \u002F>\u003C\u002Fmarker>\u003C\u002Fdefs>\u003Crect x=\"20\" y=\"47\" width=\"118\" height=\"76\" rx=\"10\" class=\"d-box\" \u002F>\u003Ctext x=\"79\" y=\"81\" text-anchor=\"middle\" class=\"d-text\">Frage\u003C\u002Ftext>\u003Ctext x=\"79\" y=\"103\" text-anchor=\"middle\" class=\"d-small\">normalisieren\u003C\u002Ftext>\u003Cpath d=\"M138 85H158\" class=\"d-line\" marker-end=\"url(#sc1-ah)\" \u002F>\u003Crect x=\"160\" y=\"47\" width=\"118\" height=\"76\" rx=\"10\" class=\"d-accent\" \u002F>\u003Ctext x=\"220\" y=\"81\" text-anchor=\"middle\" class=\"d-text\">Einbetten\u003C\u002Ftext>\u003Ctext x=\"220\" y=\"103\" text-anchor=\"middle\" class=\"d-small\">gleiches Modell\u003C\u002Ftext>\u003Cpath d=\"M279 85H299\" class=\"d-line\" marker-end=\"url(#sc1-ah)\" \u002F>\u003Crect x=\"301\" y=\"47\" width=\"118\" height=\"76\" rx=\"10\" class=\"d-gold\" \u002F>\u003Ctext x=\"360\" y=\"81\" text-anchor=\"middle\" class=\"d-text\">Suchen\u003C\u002Ftext>\u003Ctext x=\"360\" y=\"103\" text-anchor=\"middle\" class=\"d-small\">im Bereich\u003C\u002Ftext>\u003Cpath d=\"M419 85H439\" class=\"d-line\" marker-end=\"url(#sc1-ah)\" \u002F>\u003Crect x=\"441\" y=\"47\" width=\"118\" height=\"76\" rx=\"10\" class=\"d-mint\" \u002F>\u003Ctext x=\"500\" y=\"81\" text-anchor=\"middle\" class=\"d-text\">Treffer?\u003C\u002Ftext>\u003Ctext x=\"500\" y=\"103\" text-anchor=\"middle\" class=\"d-small\">≥ Schwelle\u003C\u002Ftext>\u003Cpath d=\"M560 85H580\" class=\"d-line\" marker-end=\"url(#sc1-ah)\" \u002F>\u003Crect x=\"582\" y=\"47\" width=\"118\" height=\"76\" rx=\"10\" class=\"d-sky\" \u002F>\u003Ctext x=\"641\" y=\"81\" text-anchor=\"middle\" class=\"d-text\">Antwort\u003C\u002Ftext>\u003Ctext x=\"641\" y=\"103\" text-anchor=\"middle\" class=\"d-small\">gecacht oder neu\u003C\u002Ftext>",[177],"Bei einem Fehlschlag antwortet das Modell und das Ergebnis wird zurückgeschrieben, so füllt sich der Cache aus echtem Traffic.",{"type":107,"content":179},[180,181,184,185,189],"Bibliotheken wie ",{"tag":158,"href":41,"children":182},[183],"GPTCache"," teilen das in einen Embedding-Generator, einen Speicher für Antworten, einen Vektorspeicher für Fragen und einen Similarity Evaluator, der entscheidet, ob ein Kandidat passt. Eine Bibliothek braucht man dafür nicht: Eine Embedding-Tabelle mit Vektorindex in Postgres, etwa ",{"tag":163,"to":186,"children":187},"\u002Ftools\u002Fpgvector",[188],"pgvector",", und zwanzig Zeilen Code reichen.",{"type":191,"code":192},"code","# Illustrative semantic cache on Postgres + pgvector\ndef cached_answer(question: str, scope: dict) -> str:\n    q = normalize(question)\n    vec = embed(q)                                       # same model for writes and reads\n    row = db.fetchone(\"\"\"\n        SELECT answer, 1 - (embedding \u003C=> %(v)s) AS sim\n        FROM answer_cache\n        WHERE tenant = %(tenant)s AND lang = %(lang)s AND data_version = %(ver)s\n          AND expires_at > now()\n        ORDER BY embedding \u003C=> %(v)s LIMIT 1\"\"\", {\"v\": vec, **scope})\n    if row and row.sim >= THRESHOLD:\n        metrics.hit(row.sim)\n        return row.answer\n    answer = call_model(question, scope)\n    if cacheable(question, answer):\n        db.execute(\"INSERT INTO answer_cache (...) VALUES (...)\")   # with expires_at = now() + ttl\n    return answer\n",{"type":114,"level":115,"id":89,"text":70},{"type":107,"content":195},[196,197,200],"Das ",{"tag":158,"href":38,"children":198},[199],"Paper zu GPT Semantic Cache"," speicherte Anfrage-Embeddings in Redis und testete repetitive, kundenservice-ähnliche Anfragen. Es berichtet bis zu 68,8 % weniger API-Aufrufe, Trefferquoten zwischen 61,6 % und 68,8 % je nach Kategorie und korrekte Treffer, also Treffer mit richtiger Antwort, von über 97 %. Diese Zahlen stammen aus bewusst repetitivem Traffic. Eine Produkt-FAQ sieht so aus; ein offener Assistent oder ein Coding-Tool nicht und wird nur einen Bruchteil der Treffer sehen.",{"type":107,"content":202},[203],"Vor dem Bauen messen: eine Woche Fragen loggen, einbetten und zählen, wie viele einen nahen Nachbarn haben, den ein Mensch als dieselbe Frage akzeptieren würde. Diese Zahl ist die Obergrenze.",{"type":114,"level":115,"id":91,"text":92},{"type":107,"content":206},[207,208,212,213,216,217,212,220,223],"Embedding-Ähnlichkeit misst das Thema, nicht die Absicht. ",{"tag":209,"children":210},"em",[211],"Wie storniere ich meine Bestellung?"," und ",{"tag":209,"children":214},[215],"Wie kündige ich mein Abo?"," liegen im Vektorraum sehr nah und brauchen verschiedene Antworten. ",{"tag":209,"children":218},[219],"Kann ich geöffnete Artikel zurückgeben?",{"tag":209,"children":221},[222],"Kann ich ungeöffnete Artikel zurückgeben?"," unterscheiden sich um eine Vorsilbe und haben gegensätzliche Antworten. Eine auf durchschnittliche Ähnlichkeit getrimmte Schwelle liefert die eine für die andere.",{"type":225,"ordered":226,"items":227},"list",true,[228,230,232,234],[229],"Einige hundert Paare echter Fragen sammeln und jedes labeln: gleiche oder andere Antwort. Die kniffligen Negativbeispiele bewusst aufnehmen.",[231],"Die Ähnlichkeit jedes Paars mit dem Embedding-Modell berechnen, das in Produktion läuft.",[233],"Die niedrigste Schwelle wählen, bei der falsche Treffer bei oder nahe null bleiben, und die daraus folgende Trefferquote akzeptieren.",[235],"Die Prüfung bei jedem Wechsel des Embedding-Modells wiederholen, denn Ähnlichkeitsskalen unterscheiden sich zwischen Modellen.",{"type":107,"content":237},[238],"Eine zweite Prüfung hilft im Grenzbereich: Bei Treffern knapp über der Schwelle ein kleines, günstiges Modell fragen, ob beide Fragen dieselbe Antwort haben. Das kostet weit weniger als die Antwort zu erzeugen und entfernt die meisten Beinahe-Treffer.",{"type":114,"level":115,"id":94,"text":95},{"type":107,"content":241},[242,243,246],"Ein Cache ist gemeinsamer Speicher zwischen Nutzern. Wird die Antwort auf ",{"tag":209,"children":244},[245],"Wie hoch ist mein aktueller Rabatt?"," ohne Kundennummer im Schlüssel gecacht, bekommt der nächste Kunde den Rabatt des ersten. Jede Abfrage nach allem trennen, wovon die Antwort abhängt:",{"type":225,"items":248},[249,255,260,265],[250,254],{"tag":251,"children":252},"strong",[253],"Mandant und bei persönlichen Antworten der Nutzer."," Oder persönliche Antworten ganz vom Cache ausschließen.",[256,259],{"tag":251,"children":257},[258],"Sprache,"," damit eine deutsche Frage keine gecachte englische Antwort bekommt.",[261,264],{"tag":251,"children":262},[263],"Rolle oder Berechtigungsstufe,"," wenn interne Mitarbeitende mehr sehen als Kunden.",[266,269],{"tag":251,"children":267},[268],"Daten- und Prompt-Version:"," Eine neue Preisliste, ein neuer Richtlinientext oder System-Prompt sollte einen frischen Cache-Namensraum starten.",{"type":107,"content":271},[272,273,277],"Gecachte Antworten mit personenbezogenen Daten sind gespeicherte personenbezogene Daten, mit den entsprechenden Löschpflichten; siehe ",{"tag":163,"to":274,"children":275},"\u002Fblog\u002Fpii-redaction-llm-pipelines",[276],"PII-Redaktion in LLM-Pipelines",". Ein Cache ist außerdem ein Schreibweg: Können Nutzer beliebige Modellausgaben speichern lassen, die anderen ausgeliefert werden, kann sich eine per Prompt Injection manipulierte Antwort verbreiten. Nur Antworten aus vertrauenswürdigen Abläufen speichern und nie aus Sitzungen, die die Guardrails markiert haben.",{"type":279,"variant":280,"title":281,"body":282},"callout","warn","Nie Antworten cachen, die von Live-Daten abhängen",[283],[284],"Lagerbestände, Preise, Bestellstatus und alles hinter einem Tool-Aufruf ändern sich schneller als jede sinnvolle TTL. Die stabilen Teile cachen, etwa abgerufene Richtlinien-Chunks oder Tool-Ergebnisse mit eigenem Ablauf, und die finale Antwort vom Modell zusammensetzen lassen.",{"type":114,"level":115,"id":97,"text":98},{"type":107,"content":287},[288,289,293],"Drei Mechanismen kombinieren. Eine TTL für jeden Eintrag, eher Stunden oder Tage als Monate. Eine Version im Cache-Schlüssel für Daten und Prompt, aus denen die Antwort stammt, damit eine Inhaltsänderung in einen frischen Namensraum wechselt, statt Zeilen einzeln zu löschen. Und eine manuelle Bereinigung pro Dokument: Ändert jemand die Rückgaberichtlinie, alle Einträge löschen, deren Antwort dieses Dokument zitiert hat. Dafür muss man die Quell-IDs mit jeder Antwort speichern, was sich für Zitate ohnehin lohnt, wie bei ",{"tag":163,"to":290,"children":291},"\u002Fblog\u002Fllm-hallucination-grounding-citations",[292],"Grounding und Zitaten",".",{"type":114,"level":115,"id":100,"text":101},{"type":117,"head":296,"rows":301},[297,299],[298],"Metrik",[300],"Warum",[302,307,312,317],[303,305],[304],"Trefferquote pro Bereich",[306],"Zeigt, wo sich der Cache lohnt",[308,310],[309],"Ähnlichkeitsverteilung der Treffer",[311],"Viele Treffer nahe der Schwelle bedeuten Risiko",[313,315],[314],"Daumen-runter-Quote gecacht vs. frisch",[316],"Das direkte Signal falscher Treffer",[318,320],[319],"Stichproben-Review der Treffer",[321],"Findet falsche Treffer, die Nutzer nicht melden",{"type":107,"content":323},[324,325,293],"Cache-Treffer wie jeden anderen Schritt tracen, mit Ähnlichkeitswert und ID des Eintrags, damit sich eine falsche Antwort auf die Frage zurückführen lässt, für die sie ursprünglich erzeugt wurde; siehe ",{"tag":163,"to":326,"children":327},"\u002Fblog\u002Fagent-observability-opentelemetry",[328],"Observability für LLM-Agenten",{"type":114,"level":115,"id":103,"text":104},{"type":225,"ordered":226,"items":331},[332,335,338,341],[333],{"tag":158,"href":38,"children":334},[37],[336],{"tag":158,"href":41,"children":337},[40],[339],{"tag":158,"href":44,"children":340},[43],[342],{"tag":158,"href":47,"children":343},[46],[345,398,455,509],{"slug":346,"published":5,"minutes":347,"category":7,"tags":348,"keywords":354,"about":366,"sources":373,"cover":392,"og":393,"expertise":50,"locales":394,"lang":53,"title":395,"description":396,"coverAlt":397},"structured-outputs-json-schema-llm",9,[349,350,351,352,353],"Structured outputs","JSON Schema","Constrained decoding","LLM APIs","Validation",[355,356,357,358,359,360,361,362,363,364,365],"structured outputs LLM","JSON schema LLM output","OpenAI structured outputs strict mode","Claude structured outputs","Gemini structured output","constrained decoding","JSON mode vs structured outputs","validate LLM JSON output","Zod structured output","Pydantic LLM output","vLLM structured outputs",[367,370,372],{"name":368,"url":369},"JSON","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FJSON",{"name":350,"url":371},"https:\u002F\u002Fjson-schema.org\u002F",{"name":33,"url":34},[374,377,380,383,386,389],{"title":375,"url":376},"OpenAI API docs: Structured model outputs","https:\u002F\u002Fplatform.openai.com\u002Fdocs\u002Fguides\u002Fstructured-outputs",{"title":378,"url":379},"Claude API docs: Structured outputs","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fbuild-with-claude\u002Fstructured-outputs",{"title":381,"url":382},"Gemini API docs: Structured outputs","https:\u002F\u002Fai.google.dev\u002Fgemini-api\u002Fdocs\u002Fstructured-output",{"title":384,"url":385},"vLLM docs: Structured Outputs","https:\u002F\u002Fdocs.vllm.ai\u002Fen\u002Flatest\u002Ffeatures\u002Fstructured_outputs.html",{"title":387,"url":388},"Tam et al.: Let Me Speak Freely? A Study on the Impact of Format Restrictions on Performance of LLMs (2024)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2408.02442",{"title":390,"url":391},"Geng et al.: JSONSchemaBench: A Rigorous Benchmark of Structured Outputs for Language Models (2025)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2501.10868","\u002Fimages\u002Fblog\u002Fstructured-outputs-json-schema-llm\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fstructured-outputs-json-schema-llm\u002Fog.jpg",[52,53,54],"Structured Outputs mit JSON Schema: was die Garantie abdeckt und was nicht","Wie Structured Outputs und Constrained Decoding bei OpenAI, Claude, Gemini und vLLM funktionieren, welche Schemaregeln zählen und was du validierst.","Ein JSON Schema wird zu einer Grammatik kompiliert, die Tokens maskiert und schemagültiges JSON erzeugt, das danach eine fachliche Validierung durchläuft.",{"slug":399,"published":5,"minutes":347,"category":7,"tags":400,"keywords":406,"about":419,"sources":427,"cover":449,"og":450,"expertise":50,"locales":451,"lang":53,"title":452,"description":453,"coverAlt":454},"evaluating-ai-agents-trajectories",[401,402,403,404,405],"Agent evals","Trajectories","Tool calling","pass^k","LLM-as-judge",[407,408,409,410,411,412,413,414,415,416,417,418],"evaluating AI agents","agent trajectory evaluation","agent evals","tool call accuracy","trajectory match evaluator","pass^k metric","tau-bench","LLM as a judge for agents","agent regression testing","outcome vs trajectory evaluation","agentevals","tool correctness metric",[420,423,426],{"name":421,"url":422},"Intelligent agent","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FIntelligent_agent",{"name":424,"url":425},"Software testing","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSoftware_testing",{"name":33,"url":34},[428,431,434,437,440,443,446],{"title":429,"url":430},"Anthropic: Demystifying evals for AI agents (Jan 2026)","https:\u002F\u002Fwww.anthropic.com\u002Fengineering\u002Fdemystifying-evals-for-ai-agents",{"title":432,"url":433},"Yao et al.: τ-bench: A Benchmark for Tool-Agent-User Interaction in Real-World Domains (2024)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2406.12045",{"title":435,"url":436},"Barres et al.: τ²-Bench: Evaluating Conversational Agents in a Dual-Control Environment (2025)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2506.07982",{"title":438,"url":439},"LangChain: agentevals (GitHub)","https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fagentevals",{"title":441,"url":442},"DeepEval docs: Tool Correctness","https:\u002F\u002Fdeepeval.com\u002Fdocs\u002Fmetrics-tool-correctness",{"title":444,"url":445},"Ragas docs: Agentic or tool use metrics","https:\u002F\u002Fdocs.ragas.io\u002Fen\u002Fstable\u002Fconcepts\u002Fmetrics\u002Favailable_metrics\u002Fagents\u002F",{"title":447,"url":448},"OpenAI API docs: Trace grading","https:\u002F\u002Fplatform.openai.com\u002Fdocs\u002Fguides\u002Ftrace-grading","\u002Fimages\u002Fblog\u002Fevaluating-ai-agents-trajectories\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fevaluating-ai-agents-trajectories\u002Fog.jpg",[52,53,54],"KI-Agenten evaluieren: Trajektorien, Ergebnisse und Zuverlässigkeit bewerten","KI-Agenten evaluieren: Ergebnis- und Trajektorie-Grader, Match-Modi, pass^k, isolierte Umgebungen und LLM-Judges, die belastbar sind.","Eine Agenten-Trajektorie aus Tool-Aufrufen wird zweimal bewertet: ein Trajektorie-Grader prüft Reihenfolge und Argumente, ein Ergebnis-Grader vergleicht die Datenbank mit dem Zielzustand.",{"slug":456,"published":5,"minutes":457,"category":7,"tags":458,"keywords":464,"about":476,"sources":483,"cover":503,"og":504,"expertise":50,"locales":505,"lang":53,"title":506,"description":507,"coverAlt":508},"llm-model-migration-regression-testing",10,[459,460,461,462,463],"Model migration","Regression testing","Deprecations","LLM evals","Canary releases",[465,466,467,468,469,470,471,472,473,474,475],"LLM model migration","LLM regression testing","model deprecation OpenAI","Claude model deprecation","switch LLM model without breaking","LLM model upgrade checklist","prompt regression testing","shadow testing LLM","model retirement date","golden dataset LLM","LLM drift monitoring",[477,479,480],{"name":460,"url":478},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FRegression_testing",{"name":33,"url":34},{"name":481,"url":482},"Feature toggle","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FFeature_toggle",[484,487,490,493,496,499,502],{"title":485,"url":486},"Claude API docs: Model deprecations","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fabout-claude\u002Fmodel-deprecations",{"title":488,"url":489},"OpenAI API docs: Deprecations","https:\u002F\u002Fplatform.openai.com\u002Fdocs\u002Fdeprecations",{"title":491,"url":492},"Gemini API docs: Models and version name patterns","https:\u002F\u002Fai.google.dev\u002Fgemini-api\u002Fdocs\u002Fmodels",{"title":494,"url":495},"Claude API docs: Claude Opus 5.5 migration guide","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fmodels\u002Fopus-5-5\u002Fmigration-guide",{"title":497,"url":498},"Chen, Zaharia, Zou: How is ChatGPT's behavior changing over time? (2023)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2307.09009",{"title":500,"url":501},"Sclar et al.: Quantifying Language Models' Sensitivity to Spurious Features in Prompt Design (2023)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2310.11324",{"title":429,"url":430},"\u002Fimages\u002Fblog\u002Fllm-model-migration-regression-testing\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fllm-model-migration-regression-testing\u002Fog.jpg",[52,53,54],"LLM-Modellmigration ohne Regressionen: Deprecations, Evals, Shadow-Traffic","Ein Playbook für den Wechsel von LLM-Modellen: Deprecation-Fristen, Vertragsfixes, Regression-Suite, Prompt-Tuning, Shadow-Traffic und Canary.","Fünf Migrationsstufen von Inventar und Vertragsanpassungen über Offline-Evals und Shadow-Traffic bis zu einem Canary-Rollout mit Rückweg.",{"slug":510,"published":511,"minutes":457,"category":7,"tags":512,"keywords":518,"about":527,"sources":537,"cover":607,"og":608,"expertise":50,"locales":609,"lang":53,"title":610,"description":611,"coverAlt":612},"self-hosted-llm-gdpr-cost","2026-10-09",[513,514,515,516,517],"Self-hosting","GDPR","vLLM","GPU cost","Open-weight models",[519,520,521,522,523,524,525,526],"self-hosted LLM GDPR","self-host LLM data protection","LLM GPU memory requirements","vLLM throughput benchmark","EU GPU cloud for LLMs","LLM API vs self-hosting break-even","open-weight LLM hardware cost","data processing agreement LLM",[528,531,532,535],{"name":529,"url":530},"General Data Protection Regulation","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FGeneral_Data_Protection_Regulation",{"name":33,"url":34},{"name":533,"url":534},"Graphics processing unit","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FGraphics_processing_unit",{"name":515,"url":536},"https:\u002F\u002Fgithub.com\u002Fvllm-project\u002Fvllm",[538,541,544,547,550,553,556,559,562,565,568,571,574,577,580,583,586,589,592,595,598,601,604],{"title":539,"url":540},"openai\u002Fgpt-oss-120b model card (Hugging Face)","https:\u002F\u002Fhuggingface.co\u002Fopenai\u002Fgpt-oss-120b",{"title":542,"url":543},"mistralai\u002FMistral-Small-3.2-24B-Instruct-2506 model card (Hugging Face)","https:\u002F\u002Fhuggingface.co\u002Fmistralai\u002FMistral-Small-3.2-24B-Instruct-2506",{"title":545,"url":546},"meta-llama\u002FLlama-3.3-70B-Instruct model card (Hugging Face)","https:\u002F\u002Fhuggingface.co\u002Fmeta-llama\u002FLlama-3.3-70B-Instruct",{"title":548,"url":549},"mistralai\u002FMistral-Large-3-675B-Instruct-2512 model card (Hugging Face)","https:\u002F\u002Fhuggingface.co\u002Fmistralai\u002FMistral-Large-3-675B-Instruct-2512",{"title":551,"url":552},"vLLM blog: v0.6.0 performance update (September 2024)","https:\u002F\u002Fblog.vllm.ai\u002F2024\u002F09\u002F05\u002Fperf-update.html",{"title":554,"url":555},"vLLM documentation: engine arguments","https:\u002F\u002Fdocs.vllm.ai\u002Fen\u002Flatest\u002Fconfiguration\u002Fengine_args.html",{"title":557,"url":558},"vLLM documentation: vllm bench serve","https:\u002F\u002Fdocs.vllm.ai\u002Fen\u002Flatest\u002Fcli\u002Fbench\u002Fserve.html",{"title":560,"url":561},"SemiAnalysis InferenceX: Llama 3.3 70B on H100 vs H200","https:\u002F\u002Finferencex.semianalysis.com\u002Fcompare\u002Fllama-3-3-70b-h100-vs-h200",{"title":563,"url":564},"Scaleway GPU instances pricing","https:\u002F\u002Fwww.scaleway.com\u002Fen\u002Fpricing\u002Fgpu\u002F",{"title":566,"url":567},"Scaleway blog: a transparent update on Scaleway pricing (27 April 2026)","https:\u002F\u002Fwww.scaleway.com\u002Fen\u002Fblog\u002Fa-transparent-update-on-scaleway-pricing\u002F",{"title":569,"url":570},"Scaleway Generative APIs pricing","https:\u002F\u002Fwww.scaleway.com\u002Fen\u002Fpricing\u002Fmodel-as-a-service\u002F",{"title":572,"url":573},"OVHcloud public cloud price list","https:\u002F\u002Fwww.ovhcloud.com\u002Fen\u002Fpublic-cloud\u002Fprices\u002F",{"title":575,"url":576},"OVHcloud AI Endpoints","https:\u002F\u002Fwww.ovhcloud.com\u002Fen\u002Fpublic-cloud\u002Fai-endpoints\u002F",{"title":578,"url":579},"OVHcloud AI Endpoints model catalogue","https:\u002F\u002Fwww.ovhcloud.com\u002Fen\u002Fpublic-cloud\u002Fai-endpoints\u002Fcatalog\u002F",{"title":581,"url":582},"Hetzner dedicated GPU servers","https:\u002F\u002Fwww.hetzner.com\u002Fdedicated-rootserver\u002Fmatrix-gpu\u002F",{"title":584,"url":585},"NVIDIA newsroom: GeForce RTX 50 Series launch","https:\u002F\u002Fnvidianews.nvidia.com\u002Fnews\u002Fnvidia-blackwell-geforce-rtx-50-series-opens-new-world-of-ai-computer-graphics",{"title":587,"url":588},"NVIDIA GeForce RTX 5090","https:\u002F\u002Fwww.nvidia.com\u002Fen-us\u002Fgeforce\u002Fgraphics-cards\u002F50-series\u002Frtx-5090\u002F",{"title":590,"url":591},"NVIDIA GeForce software licence","https:\u002F\u002Fwww.nvidia.com\u002Fen-us\u002Fdrivers\u002Fgeforce-license\u002F",{"title":593,"url":594},"GDPR Article 28: processor","https:\u002F\u002Fgdpr-info.eu\u002Fart-28-gdpr\u002F",{"title":596,"url":597},"GDPR Article 44: general principle for transfers","https:\u002F\u002Fgdpr-info.eu\u002Fart-44-gdpr\u002F",{"title":599,"url":600},"European Commission: EU-US data transfers (Data Privacy Framework)","https:\u002F\u002Fcommission.europa.eu\u002Flaw\u002Flaw-topic\u002Fdata-protection\u002Finternational-dimension-data-protection\u002Feu-us-data-transfers_en",{"title":602,"url":603},"EDPB Opinion 28\u002F2024 on AI models (adopted 17 December 2024)","https:\u002F\u002Fwww.edpb.europa.eu\u002Fsystem\u002Ffiles\u002F2024-12\u002Fedpb_opinion_202428_ai-models_en.pdf",{"title":605,"url":606},"Mistral AI pricing","https:\u002F\u002Fmistral.ai\u002Fpricing","\u002Fimages\u002Fblog\u002Fself-hosted-llm-gdpr-cost\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fself-hosted-llm-gdpr-cost\u002Fog.jpg",[52,53,54],"LLMs selbst hosten für die DSGVO: wann es nötig ist und was es kostet","LLMs selbst hosten für die DSGVO: wann es nötig ist, GPU-Speicher für offene Modelle, EU-Preise Stand Oktober 2026 und Break-even pro Million Token.","Coverbild zu selbst gehosteten LLMs unter der DSGVO: die Wahl zwischen eigenen GPUs und einer EU-API, mit einer Break-even-Linie.",1792177149377]