[{"data":1,"prerenderedAt":775},["ShallowReactive",2],{"blog-reasoning-models-effort-thinking-budget-de":3},{"slug":4,"published":5,"minutes":6,"category":7,"tags":8,"keywords":14,"about":26,"sources":36,"cover":61,"og":62,"expertise":63,"locales":64,"lang":66,"title":68,"description":69,"coverAlt":70,"metaTitle":71,"takeaways":72,"faq":78,"toc":94,"blocks":125,"others":541},"reasoning-models-effort-thinking-budget","2026-10-17",10,"llmops",[9,10,11,12,13],"Reasoning models","Effort","LLMOps","Cost","Evals",[15,16,17,18,19,20,21,22,23,24,25],"reasoning effort parameter","claude effort parameter","claude adaptive thinking","budget_tokens deprecated","openai reasoning effort","gemini thinking_level","thinking tokens cost","reasoning tokens billing","task budget claude","overthinking reasoning models","max_tokens thinking",[27,30,33],{"name":28,"url":29},"Reasoning language model","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FReasoning_language_model",{"name":31,"url":32},"Large language model","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FLarge_language_model",{"name":34,"url":35},"Prompt engineering","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FPrompt_engineering",[37,40,43,46,49,52,55,58],{"title":38,"url":39},"Claude Platform Docs: Effort","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fbuild-with-claude\u002Feffort",{"title":41,"url":42},"Claude Platform Docs: Extended thinking (manual budget_tokens mode)","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fbuild-with-claude\u002Fextended-thinking",{"title":44,"url":45},"Claude Platform Docs: Steering thinking (cost, caching, pricing)","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fbuild-with-claude\u002Fthinking-steering-and-cost",{"title":47,"url":48},"Claude Platform Docs: Task budgets","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fbuild-with-claude\u002Ftask-budgets",{"title":50,"url":51},"OpenAI API Docs: Reasoning models","https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Freasoning",{"title":53,"url":54},"Google AI for Developers: Gemini thinking","https:\u002F\u002Fai.google.dev\u002Fgemini-api\u002Fdocs\u002Fthinking",{"title":56,"url":57},"Chen et al.: Do NOT Think That Much for 2+3=? On the Overthinking of o1-Like LLMs (arXiv 2412.21187)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2412.21187",{"title":59,"url":60},"Gema et al.: Inverse Scaling in Test-Time Compute (arXiv 2507.14417)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2507.14417","\u002Fimages\u002Fblog\u002Freasoning-models-effort-thinking-budget\u002Fcover.webp","\u002Fimages\u002Fblog\u002Freasoning-models-effort-thinking-budget\u002Fog.jpg","ai-engineer",[65,66,67],"en","de","hu","Reasoning Effort und Thinking-Budgets: Wie viel soll ein Modell denken?","Wie Effort, adaptives Thinking und Thinking-Level bei Claude, OpenAI und Gemini funktionieren, was Thinking-Tokens kosten und wie ein Effort-Sweep hilft.","Vier aufrechte Balken steigen von kurz zu hoch auf einer Grundlinie, über dem höchsten hängt eine kleine Marke.","Reasoning Effort und Thinking-Budgets · Balázs Csorba",[73,74,75,76,77],"Claude, OpenAI und Gemini sind von Token-Budgets zu benannten Stufen gewechselt: Effort bei Claude und OpenAI, thinking_level bei Gemini.","Thinking-Tokens werden als Output-Tokens abgerechnet, auch wenn man nur eine Zusammenfassung oder gar nichts sieht.","max_tokens ist die einzige harte Grenze einer Anfrage; Effort und Task-Budgets sind Vorgaben, die das Modell überschreiten oder ignorieren kann.","Mehr Denken ist nicht immer besser: Studien zeigen Overthinking bei leichten Aufgaben und sinkende Genauigkeit bei manchen Aufgaben mit längerem Reasoning.","Die Stufe per Effort-Sweep auf eigenen Evals wählen und pro Konversation stabil halten, damit der Prompt-Cache nicht bricht.",[79,82,85,88,91],{"q":80,"a":81},"Was ist der Unterschied zwischen Effort und einem Thinking-Budget?","Ein Thinking-Budget wie budget_tokens bei älteren Claude-Modellen setzt ein Token-Ziel für das Reasoning vor der Antwort. Effort ist eine Verhaltensstufe, die alle Output-Tokens prägt, auch Text und Tool-Calls, und das Modell entscheiden lässt, ob es überhaupt denkt. Ab Claude 4.7 wird budget_tokens mit einem 400-Fehler abgelehnt, Effort ist dann die Steuerung.",{"q":83,"a":84},"Werden Thinking-Tokens berechnet, auch wenn ich sie nicht sehe?","Ja. Anthropic rechnet die vollständigen Thinking-Tokens als Output-Tokens ab, egal ob display auf summarized oder omitted steht. OpenAI rechnet verborgene Reasoning-Tokens als Output ab, und Gemini berechnet eine Antwort mit Thinking als Summe aus Output- und Thinking-Tokens.",{"q":86,"a":87},"Mit welcher Effort-Stufe sollte ich anfangen?","Mit dem Standard des Modells beginnen und einen Sweep auf dem eigenen Eval-Set fahren. Die Standards unterscheiden sich: Claude Opus 5.5 und Haiku 5.5 stehen auf medium, die meisten anderen Claude-Modelle auf high, gpt-5.5 auf medium. Dort heruntergehen, wo die Qualität hält, und nur dort hochgehen, wo die Evals einen Gewinn zeigen.",{"q":89,"a":90},"Warum kam meine Antwort leer oder abgeschnitten zurück?","Das Modell hat max_tokens oder max_output_tokens erreicht, während es noch dachte. Claude liefert stop_reason max_tokens, OpenAI status incomplete mit reason max_output_tokens, Gemini eine unvollständige Ausgabe. Die Grenze erhöhen oder die Effort-Stufe senken.",{"q":92,"a":93},"Bricht ein Effort-Wechsel das Prompt-Caching?","Bei Claude ja, wenn man den Top-Level-Wert ändert: Der Effort-Wert wird in den Prompt gerendert, ein neuer Wert macht Cache-Breakpoints ungültig. Mehrere aktuelle Claude-Modelle unterstützen in der Beta einen Effort-Wechsel pro Nachricht, der das gecachte Präfix erhält.",[95,98,101,104,107,110,113,116,119,122],{"id":96,"title":97},"what-you-pay-for","Was Thinking-Tokens sind und was man bezahlt",{"id":99,"title":100},"three-apis","Die Regler bei Claude, OpenAI und Gemini",{"id":102,"title":103},"from-budget-tokens","Von budget_tokens zu Effort",{"id":105,"title":106},"max-tokens-hard-cap","max_tokens ist die einzige harte Grenze",{"id":108,"title":109},"more-is-not-better","Mehr Denken ist nicht immer besser",{"id":111,"title":112},"effort-sweep","Eine Stufe wählen: der Effort-Sweep",{"id":114,"title":115},"per-request-routing","Effort pro Anfrage routen, ohne den Cache zu brechen",{"id":117,"title":118},"agent-loops","Agent-Loops: Interleaved Thinking und Task-Budgets",{"id":120,"title":121},"measure-it","Thinking messen wie jeden anderen Kostenfaktor",{"id":123,"title":124},"sources","Quellen",[126,139,146,149,152,167,168,171,261,285,307,308,318,320,327,328,346,354,356,357,360,374,375,378,387,389,409,410,425,440,443,444,457,480,481,504,511,512],{"type":127,"content":128},"paragraph",[129,130,134,135,138],"Vor einem Jahr hieß Reasoning steuern, eine Zahl zu wählen: ein Thinking-Budget von 4.000 oder 16.000 Tokens. 2026 haben sich die drei großen APIs auf etwas anderes geeinigt. Claude und OpenAI bieten eine ",{"tag":131,"children":132},"code",[133],"effort","-Stufe, Gemini ein ",{"tag":131,"children":136},[137],"thinking_level",", und das Modell entscheidet pro Anfrage, ob es überhaupt denkt. Das ist einfacher zu konfigurieren und schwerer zu durchschauen, denn der Regler entspricht keiner Token-Zahl mehr.",{"type":127,"content":140},[141,142,145],"Dieser Beitrag zeigt, was jede API tatsächlich anbietet, was Thinking auf der Rechnung kostet, warum ",{"tag":131,"children":143},[144],"max_tokens"," die einzige harte Grenze ist, warum mehr Denken Antworten verschlechtern kann und wie ich eine Stufe für ein Feature wähle: ein Effort-Sweep auf einem echten Eval-Set, danach eine feste Einstellung pro Konversation, damit der Prompt-Cache überlebt.",{"type":147,"level":148,"id":96,"text":97},"heading",2,{"type":127,"content":150},[151],"Reasoning-Modelle erzeugen Tokens vor ihrer sichtbaren Antwort und ihren Tool-Calls, bei aktuellen Modellen auch dazwischen. Bei allen großen APIs werden diese Tokens als Output abgerechnet, also auf der teuren Seite der Preisliste. OpenAI sagt klar, dass Reasoning-Tokens über die API nicht sichtbar sind, aber Kontext belegen und als Output-Tokens berechnet werden. Gemini berechnet eine Antwort mit Thinking als Summe aus Output- und Thinking-Tokens. Anthropic rechnet das vollständige interne Thinking ab, auch wenn die Antwort nur eine Zusammenfassung enthält.",{"type":127,"content":153},[154,155,158,159,162,163,166],"Bei Claude ändert die Einstellung ",{"tag":131,"children":156},[157],"display"," nur, was man sieht. Mit ",{"tag":131,"children":160},[161],"summarized"," kommt Zusammenfassungstext, mit ",{"tag":131,"children":164},[165],"omitted"," bleibt das Thinking-Feld leer, und in beiden Fällen sind die berechneten Output-Tokens das vollständige Thinking, das das Modell erzeugt hat. Anthropic warnt, dass die berechnete Zahl nicht der sichtbaren entspricht. Dazu kommt ein leiserer Kostenpunkt: Claude Opus 4.5 und Modelle ab 4.6 behalten Thinking-Blöcke früherer Turns im Kontext und berechnen sie bei jeder folgenden Anfrage als Input.",{"type":147,"level":148,"id":99,"text":100},{"type":127,"content":169},[170],"Aus der Ferne sehen die drei APIs ähnlich aus, sie unterscheiden sich aber in den Details, an denen Code bricht: wo der Parameter liegt, welche Werte ein Modell akzeptiert und was der Standard ist. Die Standards zählen am meisten, denn ein weggelassener Parameter ist auch eine Entscheidung.",{"type":172,"head":173,"rows":182},"table",[174,176,178,180],[175],"API",[177],"Parameter",[179],"Werte",[181],"Standard",[183,213,242],[184,186,190,207],[185],"Claude Messages API",[187],{"tag":131,"children":188},[189],"output_config.effort",[191,194,195,194,198,194,201,194,204],{"tag":131,"children":192},[193],"low",", ",{"tag":131,"children":196},[197],"medium",{"tag":131,"children":199},[200],"high",{"tag":131,"children":202},[203],"xhigh",{"tag":131,"children":205},[206],"max",[208,210,211],{"tag":131,"children":209},[197]," bei Opus 5.5 und Haiku 5.5, sonst meist ",{"tag":131,"children":212},[200],[214,216,220,237],[215],"OpenAI Responses API",[217],{"tag":131,"children":218},[219],"reasoning.effort",[221,194,224,194,227,194,229,194,231,194,233,194,235],{"tag":131,"children":222},[223],"none",{"tag":131,"children":225},[226],"minimal",{"tag":131,"children":228},[193],{"tag":131,"children":230},[197],{"tag":131,"children":232},[200],{"tag":131,"children":234},[203],{"tag":131,"children":236},[206],[238,239,241],"Modellabhängig, ",{"tag":131,"children":240},[197]," bei gpt-5.5",[243,245,248,257],[244],"Gemini API",[246],{"tag":131,"children":247},[137],[249,194,251,194,253,194,255],{"tag":131,"children":250},[226],{"tag":131,"children":252},[193],{"tag":131,"children":254},[197],{"tag":131,"children":256},[200],[238,258,260],{"tag":131,"children":259},[197]," bei gemini-3.8-flash",{"type":127,"content":262},[263,264,266,267,269,270,272,273,275,276,278,279,281,282,284],"Nicht jedes Modell akzeptiert jeden Wert. Bei Claude unterstützt nicht jedes Modell mit ",{"tag":131,"children":265},[206]," auch ",{"tag":131,"children":268},[203],", und die Effort-Doku enthält modellspezifische Empfehlungen, die die allgemeine Tabelle übersteuern: Für Opus 4.7 und 4.8 wird für Coding und Agenten ein Start bei ",{"tag":131,"children":271},[203]," empfohlen, für Sonnet 5.5 bei gut spezifiziertem agentischem Coding ",{"tag":131,"children":274},[197],". Bei OpenAI lehnt GPT-6 Astra ",{"tag":131,"children":277},[223]," mit HTTP 400 ab. Bei Gemini kennt gemini-3-pro-preview nur ",{"tag":131,"children":280},[193]," und ",{"tag":131,"children":283},[200],".",{"type":286,"variant":287,"title":288,"body":289},"callout","warn","Ein weggelassener Effort ist keine stabile Einstellung",[290],[291,292,294,295,297,298,300,301,306],"Claude Opus 5.5 steht standardmäßig auf ",{"tag":131,"children":293},[197],", Claude Opus 5 stand auf ",{"tag":131,"children":296},[200],". Anthropic weist darauf hin, dass eine Anfrage ohne ",{"tag":131,"children":299},[133]," deshalb eine Stufe niedriger läuft als auf Opus 5. Wer Modell-IDs tauscht, ohne Effort explizit zu setzen, ändert zwei Variablen gleichzeitig. Die Stufe im Code festschreiben und ein Modell-Upgrade als Migration mit eigenem ",{"tag":302,"to":303,"children":304},"link","\u002Fblog\u002Fllm-model-migration-regression-testing",[305],"Regressionslauf"," behandeln.",{"type":147,"level":148,"id":102,"text":103},{"type":127,"content":309},[310,311,314,315,317],"Die alte Claude-Steuerung ",{"tag":131,"children":312},[313],"thinking: {type: \"enabled\", budget_tokens: N}"," ist bei den 4.6-Modellen veraltet und wird ab Claude 4.7 mit einem 400-Fehler abgelehnt. Relevant bleibt sie für Claude 4.5 und älter, wo sie der einzige Thinking-Modus ist: Das Budget muss mindestens 1.024 Tokens betragen und unter ",{"tag":131,"children":316},[144]," liegen, und Anthropic empfiehlt für Budgets über 32k Batch-Verarbeitung, um Timeouts zu vermeiden. Die Migration ist im Code klein und im Verhalten groß.",{"type":131,"code":319},"\u002F\u002F before: fixed budget, Claude thinks on every request\n{ \"model\": \"claude-sonnet-4-6\", \"max_tokens\": 16000,\n  \"thinking\": { \"type\": \"enabled\", \"budget_tokens\": 10000 } }\n\n\u002F\u002F after: adaptive thinking, depth controlled by effort\n{ \"model\": \"claude-sonnet-4-6\", \"max_tokens\": 16000,\n  \"thinking\": { \"type\": \"adaptive\" },\n  \"output_config\": { \"effort\": \"high\" } }",{"type":127,"content":321},[322,323,326],"Mit festem Budget denkt Claude bei jeder Anfrage. Mit adaptivem Thinking entscheidet es pro Anfrage und lässt das Denken bei niedrigem Effort und leichten Eingaben eventuell ganz weg; Code sollte also nicht annehmen, dass jeder Assistant-Turn mit einem Thinking-Block beginnt. Effort wirkt auch über das Thinking hinaus: Er prägt Text und Tool-Calls, niedrigere Stufen machen weniger und knappere Tool-Calls. Bei Opus 5.5 lässt sich adaptives Thinking gar nicht abschalten; ",{"tag":131,"children":324},[325],"thinking: {type: \"disabled\"}"," liefert einen 400.",{"type":147,"level":148,"id":105,"text":106},{"type":127,"content":329},[330,331,333,334,337,338,341,342,345],"Effort ist eine Vorgabe, kein Budget. Anthropic nennt ihn ein Verhaltenssignal, die harte Obergrenze ist ",{"tag":131,"children":332},[144],", und die umfasst Thinking und Antwort zusammen. Denkt eine schwere Anfrage lange, kann sie an diese Grenze stoßen, bevor die Antwort geschrieben ist. Claude stoppt dann mit ",{"tag":131,"children":335},[336],"stop_reason: \"max_tokens\"",". OpenAI liefert ",{"tag":131,"children":339},[340],"status: \"incomplete\""," mit dem Grund ",{"tag":131,"children":343},[344],"max_output_tokens",", womöglich vor jeder sichtbaren Ausgabe, und das Reasoning wird trotzdem berechnet. Gemini verhält sich genauso und berechnet die erzeugten Thinking-Tokens.",{"type":127,"content":347},[348,349,281,351,353],"OpenAI empfiehlt, zu Beginn mindestens 25.000 Tokens für Reasoning und Ausgabe zu reservieren, Anthropic schlägt für ",{"tag":131,"children":350},[203],{"tag":131,"children":352},[206]," bei seinen größeren Modellen einen Start um 64k vor. Bei Abbrüchen entscheiden, welche Korrektur passt: Brauchten die abgeschnittenen Anfragen das Reasoning, die Grenze erhöhen; waren sie überdacht, den Effort senken. In jedem Fall den abgeschnittenen Fall im Code behandeln, statt eine halbe Antwort auszuliefern.",{"type":131,"code":355},"\u002F\u002F Claude: treat truncation as a failure, not as an answer\nconst res = await client.messages.create({\n  model: \"claude-opus-5-5\",\n  max_tokens: 32000,\n  output_config: { effort: \"high\" },\n  messages,\n});\nif (res.stop_reason === \"max_tokens\") {\n  metrics.increment(\"llm.truncated\", { effort: \"high\" });\n  \u002F\u002F retry once with a larger cap, or fall back to a lower effort\n}\nconst thinking = res.usage.output_tokens_details?.thinking_tokens ?? 0;",{"type":147,"level":148,"id":108,"text":109},{"type":127,"content":358},[359],"Die intuitive Annahme, mehr Reasoning heiße bessere Antworten, trägt bei schweren Problemen und versagt an den Rändern. Chen und Kollegen dokumentierten Ende 2024 Overthinking bei Modellen im Stil von o1: übermäßiger Rechenaufwand für einfache Aufgaben mit minimalem Nutzen, etwa lange Ketten für 2+3. Im Juli 2025 veröffentlichten Forschende aus dem Umfeld von Anthropic Aufgaben, bei denen längeres Reasoning die Genauigkeit senkt, eine inverse Skalierung zwischen Test-Time-Compute und Qualität, darunter Modelle, die sich von irrelevanten Informationen ablenken lassen und zu Scheinkorrelationen abdriften.",{"type":127,"content":361},[362,363,365,366,368,369,373],"Die Herstellerdokus sagen dasselbe in operativen Begriffen. Anthropics Hinweise zu Opus 4.7 halten fest, dass ",{"tag":131,"children":364},[206]," bei den meisten Workloads erhebliche Kosten für kleine Gewinne bringt und bei Structured-Output- oder wenig intelligenzkritischen Aufgaben zu Overthinking führen kann. OpenAI empfiehlt ",{"tag":131,"children":367},[203]," nur, wenn Evals einen klaren Nutzen zeigen. Für ein Extraktions- oder Klassifikations-Feature ist die richtige Antwort oft die niedrigste Stufe, die die Qualität hält, kombiniert mit ",{"tag":302,"to":370,"children":371},"\u002Fblog\u002Fstructured-outputs-json-schema-llm",[372],"Structured Outputs",", damit das Format nicht davon abhängt, wie lange das Modell nachgedacht hat.",{"type":147,"level":148,"id":111,"text":112},{"type":127,"content":376},[377],"Jeder Anbieter schließt seine Hinweise mit derselben Anweisung: auf dem eigenen Workload testen. Anthropic sagt ausdrücklich, einen frischen Sweep zu fahren, statt Einstellungen von einem älteren Modell zu übernehmen, weil die Stufen zwischen Generationen neu kalibriert werden. Praktisch ist das ein kleines Skript: dasselbe Eval-Set, dasselbe Modell, jede unterstützte Stufe und vier Zahlen pro Stufe.",{"type":379,"attrs":380,"inner":384,"caption":385},"diagram",{"viewBox":381,"role":382,"aria-labelledby":383},"0 0 720 170","img","rme1-t rme1-d","\u003Ctitle id=\"rme1-t\">Ablauf eines Effort-Sweeps\u003C\u002Ftitle>\u003Cdesc id=\"rme1-d\">Dasselbe Eval-Set auf jeder Effort-Stufe laufen lassen, Qualität, Kosten, Latenz und Abbrüche erfassen, die niedrigste Stufe über der Qualitätsschwelle wählen, im Code festschreiben und bei jedem Modell-Upgrade wiederholen.\u003C\u002Fdesc>\u003Cdefs>\u003Cmarker id=\"rme1-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\">Eval-Set\u003C\u002Ftext>\u003Ctext x=\"79\" y=\"103\" text-anchor=\"middle\" class=\"d-small\">echter Traffic\u003C\u002Ftext>\u003Cpath d=\"M138 85H158\" class=\"d-line\" marker-end=\"url(#rme1-ah)\" \u002F>\u003Crect x=\"160\" y=\"47\" width=\"118\" height=\"76\" rx=\"10\" class=\"d-sky\" \u002F>\u003Ctext x=\"220\" y=\"81\" text-anchor=\"middle\" class=\"d-text\">Sweep\u003C\u002Ftext>\u003Ctext x=\"220\" y=\"103\" text-anchor=\"middle\" class=\"d-small\">low bis max\u003C\u002Ftext>\u003Cpath d=\"M279 85H299\" class=\"d-line\" marker-end=\"url(#rme1-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\">Messen\u003C\u002Ftext>\u003Ctext x=\"360\" y=\"103\" text-anchor=\"middle\" class=\"d-small\">Score, Kosten, p95\u003C\u002Ftext>\u003Cpath d=\"M419 85H439\" class=\"d-line\" marker-end=\"url(#rme1-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\">Wählen\u003C\u002Ftext>\u003Ctext x=\"500\" y=\"103\" text-anchor=\"middle\" class=\"d-small\">niedrigste, die hält\u003C\u002Ftext>\u003Cpath d=\"M560 85H580\" class=\"d-line\" marker-end=\"url(#rme1-ah)\" \u002F>\u003Crect x=\"582\" y=\"47\" width=\"118\" height=\"76\" rx=\"10\" class=\"d-box\" \u002F>\u003Ctext x=\"641\" y=\"81\" text-anchor=\"middle\" class=\"d-text\">Festschreiben\u003C\u002Ftext>\u003Ctext x=\"641\" y=\"103\" text-anchor=\"middle\" class=\"d-small\">pro Feature\u003C\u002Ftext>",[386],"Der Sweep ist billig im Vergleich dazu, einen Monat lang die falsche Stufe in Produktion zu fahren. Bei jedem Wechsel der Modell-ID erneut laufen lassen.",{"type":131,"code":388},"for (const effort of [\"low\", \"medium\", \"high\", \"xhigh\"]) {\n  const runs = await Promise.all(evalSet.map(async (c) => {\n    const t0 = Date.now();\n    const r = await client.messages.create({\n      model, max_tokens: 64000, output_config: { effort },\n      messages: c.messages,\n    });\n    return { ms: Date.now() - t0, out: r.usage.output_tokens,\n             truncated: r.stop_reason === \"max_tokens\",\n             score: await grade(c, r) };\n  }));\n  report(effort, runs); \u002F\u002F pass rate, mean output tokens, p95 ms, truncation rate\n}",{"type":127,"content":390},[391,392,394,395,397,398,400,401,403,404,408],"Das Ergebnis als Kurve lesen, nicht als Sieger. Besteht ",{"tag":131,"children":393},[197]," dieselben Fälle wie ",{"tag":131,"children":396},[200]," mit einem Bruchteil der Output-Tokens, gewinnt ",{"tag":131,"children":399},[197],". Behebt ",{"tag":131,"children":402},[200]," genau die geschäftskritischen Fälle, sind die zusätzlichen Tokens billig. Schwierig ist das Bewerten, und das ist dieselbe Arbeit wie bei jedem ",{"tag":302,"to":405,"children":406},"\u002Fblog\u002Fllm-evals-for-product-features",[407],"LLM-Eval für ein Produkt-Feature",": gelabelte Fälle aus echtem Traffic und ein Grader, dem man vertraut.",{"type":147,"level":148,"id":114,"text":115},{"type":127,"content":411},[412,413,415,416,418,419,421,422,424],"Eine Stufe pro Feature ist die Grundlinie. Der nächste Schritt ist, sie pro Anfrage zu variieren: ",{"tag":131,"children":414},[193]," für eine Routinebestätigung, ",{"tag":131,"children":417},[200]," für den Planungsschritt. Anthropic führt dynamischen Effort als Best Practice, mit einem Haken. Der aufgelöste Effort-Wert wird in den Prompt gerendert, eine Änderung des Top-Level-Werts zwischen Anfragen macht Cache-Breakpoints ungültig. Anthropics eigenes Beispiel zeigt einen vollen Cache-Read bei der zweiten Anfrage und einen neuen Cache-Write bei der dritten, nachdem Effort von ",{"tag":131,"children":420},[197]," auf ",{"tag":131,"children":423},[193]," gesenkt wurde.",{"type":127,"content":426},[427,428,432,433,436,437,439],"Zwei Auswege. Zwischen Workloads an der Feature-Grenze routen, wo Konversationen ohnehin keinen Cache teilen; die Logik ist dieselbe wie beim ",{"tag":302,"to":429,"children":430},"\u002Fblog\u002Fllm-cost-latency-prompt-caching-routing",[431],"Modell-Routing",". Innerhalb einer Konversation unterstützen aktuelle Claude-Modelle wie Opus 5.5, Sonnet 5.5 und Haiku 5.5 in der Beta einen Effort-Wechsel pro Nachricht hinter dem Header ",{"tag":131,"children":434},[435],"mid-conversation-output-config-2026-07-01",": Eine leere System-Nachricht mit ",{"tag":131,"children":438},[189]," ändert die Stufe ab dem nächsten User-Turn und lässt das frühere Präfix im Cache.",{"type":127,"content":441},[442],"Steuerung per Prompt ist der dritte Hebel. Anthropic dokumentiert Formulierungen wie \"Answer directly without deliberating.\" für Routine-Turns, warnt aber, dass das wortlautabhängig und weniger verlässlich als Effort ist; bei Haiku 5.5 hat die bremsende Formulierung das Thinking nicht zuverlässig reduziert. Ich nutze das erst, wenn die Stufe stimmt.",{"type":147,"level":148,"id":117,"text":118},{"type":127,"content":445},[446,447,449,450,452,453,456],"In einem Agenten wird aus einer User-Nachricht eine Reihe von Anfragen, und ",{"tag":131,"children":448},[144]," begrenzt nur jede einzelne Anfrage, nicht den ganzen Turn. Aktuelle Modelle denken automatisch zwischen Tool-Calls. Anthropic hält fest, dass die erste Anfrage nach neuer User-Eingabe meist den Großteil des Reasonings trägt und Folgeanfragen, die nur Tool-Ergebnisse verarbeiten, das Denken selbst bei ",{"tag":131,"children":451},[203]," auslassen können. OpenAI verlangt, Reasoning-Items mit den Function-Call-Ausgaben zurückzugeben, per ",{"tag":131,"children":454},[455],"previous_response_id"," oder mit den vollständigen Output-Items, damit das Modell weiterdenken kann, statt neu anzufangen.",{"type":127,"content":458},[459,460,463,464,467,468,471,472,475,476,284],"Für die ganze Schleife hat Claude Task-Budgets in der Beta (",{"tag":131,"children":461},[462],"task-budgets-2026-03-13","): ",{"tag":131,"children":465},[466],"output_config.task_budget"," mit ",{"tag":131,"children":469},[470],"type: \"tokens\""," und einem ",{"tag":131,"children":473},[474],"total"," von mindestens 20.000. Das Modell sieht einen serverseitigen Countdown und teilt sich die Arbeit ein, um sauber abzuschließen. Das ist eine Empfehlung, keine Durchsetzung, und ein klar zu kleines Budget kann Claude dazu bringen, die Aufgabe zu verkleinern oder abzulehnen. Anthropic schlägt vor, es am p99 der gemessenen Ausgaben pro Aufgabe auszurichten. Effort steuert die Tiefe pro Schritt, das Task-Budget die gesamte Breite. Die Mechanik der Agent-Schleife steht in ",{"tag":302,"to":477,"children":478},"\u002Fblog\u002Fagent-loop-explained",[479],"Der Agent-Loop, erklärt",{"type":147,"level":148,"id":120,"text":121},{"type":127,"content":482},[483,484,487,488,491,492,495,496,499,500,503],"Alle drei APIs weisen Thinking separat aus, Raten ist also unnötig. Claude liefert ",{"tag":131,"children":485},[486],"usage.output_tokens_details.thinking_tokens",", immer kleiner oder gleich ",{"tag":131,"children":489},[490],"output_tokens"," und beim Streaming im letzten ",{"tag":131,"children":493},[494],"message_delta","-Event. OpenAI meldet ",{"tag":131,"children":497},[498],"output_tokens_details.reasoning_tokens",", Gemini ",{"tag":131,"children":501},[502],"total_thought_tokens",". Das Feld an jeden Trace hängen, neben Effort-Stufe und Modell-ID.",{"type":127,"content":505},[506,507,284],"Drei Diagramme reichen: Thinking-Tokens pro Anfrage nach Feature, Abbruchrate nach Effort-Stufe und Qualitäts-Score nach Effort-Stufe aus den Stichproben-Evals. Steigt das Thinking pro Anfrage nach einer Prompt-Änderung, sieht man es am selben Tag statt auf der Rechnung. Die Tracing-Seite steht in ",{"tag":302,"to":508,"children":509},"\u002Fblog\u002Fagent-observability-opentelemetry",[510],"Observability für LLM-Agenten mit OpenTelemetry",{"type":147,"level":148,"id":123,"text":124},{"type":513,"ordered":514,"items":515},"list",true,[516,520,523,526,529,532,535,538],[517],{"tag":518,"href":39,"children":519},"a",[38],[521],{"tag":518,"href":42,"children":522},[41],[524],{"tag":518,"href":45,"children":525},[44],[527],{"tag":518,"href":48,"children":528},[47],[530],{"tag":518,"href":51,"children":531},[50],[533],{"tag":518,"href":54,"children":534},[53],[536],{"tag":518,"href":57,"children":537},[56],[539],{"tag":518,"href":60,"children":540},[59],[542,598,665,722],{"slug":543,"published":5,"minutes":544,"category":7,"tags":545,"keywords":551,"about":565,"sources":573,"cover":592,"og":593,"expertise":63,"locales":594,"lang":66,"title":595,"description":596,"coverAlt":597},"deepseek-v4-1-flash-1017",15,[546,547,548,549,550],"DeepSeek","Open-weight models","KV cache","Mixture of experts","LLM cost",[552,553,554,555,556,557,558,559,560,561,562,563,564],"DeepSeek V4.1 Flash 1017","DeepSeek V4.1 Flash","Causal Encoder-Decoder","Compressed Sparse Attention 2","CSA2","FP4 KV cache","KV cache compression","SWA Bounded Replay","Engram conditional memory","DSpark speculative decoding","DeepSeek pricing","DeepSWE benchmark","open-weight coding model",[566,568,570],{"name":546,"url":567},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FDeepSeek",{"name":549,"url":569},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FMixture_of_experts",{"name":571,"url":572},"Transformer (deep learning architecture)","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FTransformer_(deep_learning_architecture)",[574,577,580,583,586,589],{"title":575,"url":576},"DeepSeek-AI: DeepSeek-V4.1-Flash: Pushing the Limits of KV Cache Compression (arXiv:2609.19969)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2609.19969",{"title":578,"url":579},"Hugging Face: deepseek-ai\u002FDeepSeek-V4.1-Flash-1017 model card","https:\u002F\u002Fhuggingface.co\u002Fdeepseek-ai\u002FDeepSeek-V4.1-Flash-1017",{"title":581,"url":582},"OpenRouter: DeepSeek V4.1 Flash 1017, pricing and providers","https:\u002F\u002Fopenrouter.ai\u002Fdeepseek\u002Fdeepseek-v4.1-flash-1017",{"title":584,"url":585},"The Decoder: Deepseek V4.1 Flash 1017 beats larger rivals in agentic tasks while once again massively cutting per-task costs","https:\u002F\u002Fthe-decoder.com\u002Fdeepseek-v4-1-flash-1017-beats-larger-rivals-in-agentic-tasks-while-once-again-massively-cutting-per-task-costs\u002F",{"title":587,"url":588},"AI Weekly: DeepSeek opens V4.1-Flash-1017 weights and $0.75 Search API","https:\u002F\u002Faiweekly.co\u002Falerts\u002Fdeepseek-opens-v41-flash-1017-weights-and-075-search-api",{"title":590,"url":591},"DeepSeek on X: DeepSeek-V4.1-Flash-1017 announcement","https:\u002F\u002Fx.com\u002Fdeepseek_ai\u002Fstatus\u002F2111375640717033777","\u002Fimages\u002Fblog\u002Fdeepseek-v4-1-flash-1017\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fdeepseek-v4-1-flash-1017\u002Fog.jpg",[65,66,67],"DeepSeek V4.1 Flash 1017: 890 Byte KV-Cache pro Token, und was ein Agent davon hat","Technischer Deep Dive zu DeepSeek V4.1 Flash 1017: Encoder-Decoder-Aufteilung, CSA2-Cache-Sharing, FP4-KV-Cache, Benchmarks und die echten Kosten pro Agenten-Task.","Links ein hoher Stapel dünner Karten, ein Pfeil, rechts dieselben Karten auf ein Viertel der Höhe zusammengepresst.",{"slug":599,"published":5,"minutes":6,"category":7,"tags":600,"keywords":606,"about":618,"sources":628,"cover":659,"og":660,"expertise":63,"locales":661,"lang":66,"title":662,"description":663,"coverAlt":664},"llm-rate-limits-retries-provider-fallback",[601,602,603,604,605],"Rate limits","Retries","Fallback","Reliability","LLM gateway",[607,608,609,610,611,612,613,614,615,616,617],"llm rate limit handling","429 too many requests llm api","exponential backoff with jitter","anthropic 529 overloaded error","openai rate limit retry","llm provider fallback","litellm fallbacks","retry-after header","llm circuit breaker","multi provider llm failover","claude api rate limits",[619,622,625],{"name":620,"url":621},"Token bucket","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FToken_bucket",{"name":623,"url":624},"Exponential backoff","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FExponential_backoff",{"name":626,"url":627},"Circuit breaker design pattern","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FCircuit_breaker_design_pattern",[629,632,635,638,641,644,647,650,653,656],{"title":630,"url":631},"Claude Platform Docs: Rate limits","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fapi\u002Frate-limits",{"title":633,"url":634},"Claude Platform Docs: API errors","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fapi\u002Ferrors",{"title":636,"url":637},"OpenAI API Docs: Rate limits","https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Frate-limits",{"title":639,"url":640},"AWS Builders Library: Timeouts, retries and backoff with jitter","https:\u002F\u002Fbuilder.aws.com\u002Fcontent\u002F3EumjoZascWd1oZiEgL8ORlv3qE\u002Ftimeouts-retries-and-backoff-with-jitter",{"title":642,"url":643},"MDN: Retry-After header","https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FHTTP\u002FReference\u002FHeaders\u002FRetry-After",{"title":645,"url":646},"Martin Fowler: Circuit Breaker (2014)","https:\u002F\u002Fmartinfowler.com\u002Fbliki\u002FCircuitBreaker.html",{"title":648,"url":649},"LiteLLM Docs: Router, retries and cooldowns","https:\u002F\u002Fdocs.litellm.ai\u002Fdocs\u002Frouting",{"title":651,"url":652},"LiteLLM Docs: Proxy fallbacks and reliability","https:\u002F\u002Fdocs.litellm.ai\u002Fdocs\u002Fproxy\u002Freliability",{"title":654,"url":655},"OpenRouter Docs: Model fallbacks","https:\u002F\u002Fopenrouter.ai\u002Fdocs\u002Fguides\u002Frouting\u002Fmodel-fallbacks",{"title":657,"url":658},"AI SDK Docs: Settings (maxRetries, timeout)","https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Fai-sdk-core\u002Fsettings","\u002Fimages\u002Fblog\u002Fllm-rate-limits-retries-provider-fallback\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fllm-rate-limits-retries-provider-fallback\u002Fog.jpg",[65,66,67],"LLM-Rate-Limits in Produktion: Retries, Backoff und Provider-Fallback","Wie LLM-Rate-Limits funktionieren, welche Fehler man wiederholt, Backoff mit Jitter, Retries in nur einer Schicht und Fallback-Ketten ohne kaputte Ausgaben.","Kleine Quadrate steigen drei Stufen zu einem breiten Rechteck, dahinter zwei weitere in einer Reihe.",{"slug":666,"published":5,"minutes":667,"category":7,"tags":668,"keywords":672,"about":683,"sources":691,"cover":716,"og":717,"expertise":63,"locales":718,"lang":66,"title":719,"description":720,"coverAlt":721},"prompt-versioning-management",8,[669,670,11,13,671],"Prompt management","Versioning","Langfuse",[673,674,675,676,677,678,679,680,681,682],"prompt versioning","prompt management","prompt registry","version control for prompts","langfuse prompt management","mlflow prompt registry","prompts in git","openai prompt object deprecation","prompt rollback production","prompt ci evaluation",[684,685,688],{"name":34,"url":35},{"name":686,"url":687},"Version control","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FVersion_control",{"name":689,"url":690},"Continuous integration","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FContinuous_integration",[692,695,698,701,704,707,710,713],{"title":693,"url":694},"OpenAI API Docs: Migrate from prompt objects","https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fprompting\u002Fmigrate-from-prompt-object",{"title":696,"url":697},"OpenAI API Docs: Prompt engineering (reusable prompts deprecation note)","https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fprompt-engineering",{"title":699,"url":700},"Langfuse Docs: Prompt version control","https:\u002F\u002Flangfuse.com\u002Fdocs\u002Fprompt-management\u002Ffeatures\u002Fprompt-version-control",{"title":702,"url":703},"Langfuse Docs: Prompt caching in the SDKs","https:\u002F\u002Flangfuse.com\u002Fdocs\u002Fprompt-management\u002Ffeatures\u002Fcaching",{"title":705,"url":706},"Langfuse Docs: Link prompts to traces","https:\u002F\u002Flangfuse.com\u002Fdocs\u002Fprompt-management\u002Ffeatures\u002Flink-to-traces",{"title":708,"url":709},"MLflow Docs: Prompt Registry","https:\u002F\u002Fmlflow.org\u002Fdocs\u002Flatest\u002Fgenai\u002Fprompt-registry\u002F",{"title":711,"url":712},"Promptfoo Docs: GitHub Action","https:\u002F\u002Fwww.promptfoo.dev\u002Fdocs\u002Fintegrations\u002Fgithub-action\u002F",{"title":714,"url":715},"Claude Platform Docs: Prompt caching","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fbuild-with-claude\u002Fprompt-caching","\u002Fimages\u002Fblog\u002Fprompt-versioning-management\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fprompt-versioning-management\u002Fog.jpg",[65,66,67],"Prompt-Versionierung in Produktion: Git, Registries, Labels und Rollbacks","Prompts in Produktion versionieren: was zu einer Version gehört, Git oder Prompt-Registry, Labels und Rollbacks, Eval-Gates in CI und Folgen für Caches.","Fünf aufrechte Karten in einer Reihe, die dritte schwenkt an einem Bogenpfeil zurück, ein Tor vor der letzten.",{"slug":723,"published":5,"minutes":724,"category":7,"tags":725,"keywords":729,"about":740,"sources":748,"cover":769,"og":770,"expertise":63,"locales":771,"lang":66,"title":772,"description":773,"coverAlt":774},"llm-batch-api-offline-workloads",9,[726,12,11,727,728],"Batch API","Prompt caching","Data pipelines",[730,731,732,733,734,735,736,737,738,739],"llm batch api","anthropic message batches api","openai batch api","gemini batch mode","batch inference llm cost","batch api 50 percent discount","openai flex processing","bedrock batch inference","llm offline processing","batch api prompt caching",[741,744,747],{"name":742,"url":743},"Batch processing","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FBatch_processing",{"name":745,"url":746},"JSON Lines","https:\u002F\u002Fjsonlines.org\u002F",{"name":31,"url":32},[749,752,754,755,758,761,763,766],{"title":750,"url":751},"Claude Platform Docs: Batch processing","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fbuild-with-claude\u002Fbatch-processing",{"title":753,"url":631},"Claude Platform Docs: Rate limits (Message Batches API)",{"title":714,"url":715},{"title":756,"url":757},"OpenAI API Docs: Batch API","https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fbatch",{"title":759,"url":760},"OpenAI API Docs: Flex processing","https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fflex-processing",{"title":762,"url":637},"OpenAI API Docs: Rate limits (batch queue limits)",{"title":764,"url":765},"Google AI for Developers: Gemini Batch API","https:\u002F\u002Fai.google.dev\u002Fgemini-api\u002Fdocs\u002Fbatch-api",{"title":767,"url":768},"Amazon Bedrock User Guide: Batch inference","https:\u002F\u002Fdocs.aws.amazon.com\u002Fbedrock\u002Flatest\u002Fuserguide\u002Fbatch-inference.html","\u002Fimages\u002Fblog\u002Fllm-batch-api-offline-workloads\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fllm-batch-api-offline-workloads\u002Fog.jpg",[65,66,67],"LLM-Batch-APIs: Inferenz zum halben Preis für Arbeit, die warten kann","Wann sich die Batch-APIs von Anthropic, OpenAI und Gemini lohnen, wie Limits, Zuordnung und Fehler funktionieren und wie sich Rabatte mit Caching addieren.","Eine breite Kiste mit acht kleinen Quadraten, Zulauf von links, ein langer Pfeil kehrt zurück.",1792245342452]