Prompt-Caching macht Self-Consistency für LLM-Prüfungen mit langem Kontext billig
Gemessen an sechs Modellen: Denselben langen Prompt mehrfach zu sampeln kostet mit Caching nur das 1,55- bis 2,5-Fache eines Aufrufs. Dazu die Formel, Vorbehalte und ein Rezept zur Bewertung.
Warum Konsistenzprüfungen nicht das Sechsfache kosten müssen
Einen billigen, portablen Weg, ein unzuverlässiges LLM zu erwischen, gibt es seit Jahren. Man stellt dem Modell dieselbe Frage mehrmals und vergleicht, was zurückkommt. Widersprechen sich die Antworten, traut man keiner davon. Das braucht keine Logprobs, keine Labels und kein Judge-Modell, und jede API, die man zweimal aufrufen kann, unterstützt es. In Produktion sieht man es trotzdem selten, weil alle denselben Einwand bringen: Sechs Samples bedeuten die sechsfache Rechnung.
Tests mit sechs Modellen zeigen ein anderes Bild. Wo Prompt-Caching aktiv ist, landen sechs Samples beim 1,55- bis 2,5-Fachen eines einzelnen Aufrufs. Zur Klarstellung: Die Zahlen sind Verhältnisse, eine bewertete Anfrage kostet also trotzdem mehr als eine einfache. Was sich ändert, ist die Höhe des Aufschlags, rund 55 % statt der 500 %, die man sich vorstellt. Absolute Dollarbeträge stehen in den Tabellen, damit Sie das nachprüfen können.
Ein Workload, für den Caching gebaut wurde
Der Grund ist mechanisch. Eine Anfrage erreicht die API als ein einziger Tokenstrom, zuerst der Kontext, zuletzt die Frage. Das Caching vergleicht diesen Strom ab Byte null mit früheren, und alles Übereinstimmende wird rund 90 % unter dem normalen Input-Preis abgerechnet. Eine Änderung irgendwo früh im Prompt wirft alles dahinter heraus.
Konsistenz-Sampling ändert nie etwas. Es wiederholt exakt denselben Prompt N-mal. Der erste Aufruf zahlt den vollen Preis und füllt den Cache, die übrigen fünf nutzen den Kontext zu einem Zehntel des Preises, sodass die einzige neue Arbeit das Erzeugen der Antworten ist, also genau das, was man vergleichen will. Bei RAG über lange Dokumente oder Agenten mit großem Tool-Kontext, also genau dort, wo Vertrauen am meisten zählt, machen Input-Tokens den Großteil der Kosten aus, und so verschwindet das 6x weitgehend.
Einige Details machen es komplizierter. Das Schreiben in den Cache von Anthropic kostet einmalig einen Aufschlag von 1,25x, und Anthropic ist der einzige der drei Anbieter, der diesen Schreibvorgang ausweist. Gemini cacht in Blöcken von 8.192 Tokens, und in diesen Läufen wurde zwischen etwa 9k und 17k Tokens nichts gecacht. Auch die Mindestgrößen unterscheiden sich: 512 Tokens bei Claude Opus-5, 1024 bei OpenAI und 4.096 bei Gemini.
Der Testaufbau und was er gekostet hat
Als Kontext diente eine Airline-Richtlinie mit rund 21k Tokens, danach eine Frage, die jedem Modell sechsmal geschickt wurde. Nach jedem Aufruf wurde die vom Anbieter gemeldete Zahl gecachter Tokens protokolliert, und vier Anbieter nennen dieses Feld auf vier verschiedene Weisen. Anschließend bewertete der noncontradiction-Scorer von UQLM die sechs Antworten, indem er jede Antwort per NLI-Modell mit den anderen fünf verglich. Dieser Schritt läuft nachträglich lokal und verursacht keine zusätzlichen API-Aufrufe.
Die Volksweisheit lautet 6x. Mit warmem Cache lagen die Kosten einer bewerteten Anfrage geteilt durch die einer unbewerteten bei den meisten Modellen zwischen 1,55x und 2,5x, gemessen am 31. Juli 2026.
Zwei Ergebnisse dämpfen den Optimismus. Qwen meldete bei keinem seiner sechs Aufrufe einen Cache-Treffer und liegt damit bei exakt 6x, für dieses Modell stimmt der Einwand also genau so. Llama cachte 99,4 % des Prompts und sparte trotzdem nichts, weil Together für manche Modelle einen ermäßigten Cache-Preis führt, für dieses aber nicht. Einen Cache-Treffer zu landen ist ein technisches Ereignis, einen Rabatt zu bekommen eine geschäftliche Entscheidung, und beides muss eintreten.
Längerer Kontext, kleinerer Aufschlag
Um die Behauptung zum „langen Kontext“ zu prüfen, lief die Messreihe von 1,4k bis 440k Tokens, drei Aufrufe pro Größe, jede Größe mit eigenem kalten Präfix, damit nichts einen warmen Cache vom vorigen Lauf erbte.
Jede Kurve fällt und pendelt sich dann auf einem Boden ein. Das ist eine echte Asymptote und kein langsamer Rückgang. OpenAI misst 1,51x, 1,51x, 1,50x und 1,50x von 55k bis 440k Tokens, eine Verachtfachung des Kontexts verschiebt das Ergebnis also um ein Hundertstel. Um unter den Boden zu kommen, bräuchte man weniger Samples (drei Samples landen bei 1,20x) oder einen größeren Cache-Rabatt.
Zwei Anbieter weichen auf eigene Weise ab. Anthropic landet bei 1,75x statt 1,50x, weil jeder kalte Aufruf die 1,25x für das Cache-Schreiben zahlt. Die 8.192-Token-Blöcke von Gemini lassen seinen Multiplikator schwanken, sobald das Präfix eine Blockgrenze überschreitet: 2,07x bei 28k, hoch auf 2,31x bei 50k, dann 1,63x bei 84k, alle auf dem Weg zum selben Boden.
Unter etwa 7k Tokens cachte Gemini nichts und blieb konstant bei 6,00x. Damit ist klar, wo das Argument aufhört zu greifen: Bei kleinen Prompts stimmt der übliche Einwand schlicht.
Eine Gleichung deckt alles ab
Alles reduziert sich auf eine Zeile. Für N Samples desselben Prompts:
C cached context tokens
c cached / input rate (~0.1; 1.0 if no cached price)
Q uncached input per call
w write / input rate (1.0; 1.25 on Anthropic)
O output tokens
k output / input price (6 Terra · 5 Opus, Gemini · 2 DeepSeek)
In dieser Formel misst f, welcher Anteil der Anfragekosten auf dem Cache mitfahren kann, und M ist darin linear: gleich N, wenn nichts gecacht ist, und gleich dem Boden, wenn alles gecacht ist. Alle sechs Modelle liegen bis auf 0,005 auf dieser Geraden.
Beachtung verdient die Kostengewichtung. Output-Tokens zählen in f nach Multiplikation mit k, weil sie k-mal mehr kosten und nie gecacht werden. Bei Terra frisst ein einzelnes Output-Token den cachebaren Anteil so schnell auf, wie sechs Kontext-Tokens ihn aufbauen, und das erklärt den Großteil der beobachteten Streuung. DeepSeek kommt selbst bei 99 % Trefferquote auf 1,86x, weil jede Antwort 656 Reasoning-Tokens enthielt. Llama liegt bei f = 0,99 exakt bei 6,00x: Ohne Cache-Preis ist c = 1, und die Gerade lässt keinen Spielraum.
Die Faustregel lautet: Der gecachte Kontext C sollte das k-Fache des Outputs O deutlich übersteigen. Langer Kontext hilft, lange Antworten schaden k-mal so schnell. Eine Fläche über Kontext- und Output-Länge legt den 2x-Break-even dorthin, wo sich diese beiden Kräfte ausgleichen.
Für Ihren eigenen Stack ist das Arithmetik und kein Benchmark:
# pip install r2c2 — Reuse Context, Recheck Consistency
from r2c2 import estimate, required_context
estimate(context_tokens=21_000, output_tokens=40, model="gpt-5.6-terra").multiplier
# 1.56 — matches the 1.55 measured
required_context(output_tokens=40, model="gpt-5.6-terra", threshold=1.8)
# 4060 — under ~4k context tokens, six samples cost more than 1.8x
Die zweite Funktion rechnet die Formel rückwärts. Geben Sie ihr eine Kostenobergrenze, und sie liefert die Kontextgröße, ab der die Bewertung diese Grenze einhält. Sie gibt None zurück, wenn das keine Kontextgröße schafft, was passiert, wenn die Grenze auf oder unter dem Boden des Anbieters liegt.
Was die Mehrkosten aufdecken
Billiges Sampling ist sinnlos, wenn der Score nichts anzeigt, deshalb war die Testfrage schwer. Die Richtlinie erlaubt Erstattungen für nicht erstattbare Tarife innerhalb von 24 Stunden nach der Buchung und sagt nicht, wer storniert hat. Das Szenario: Ein Passagier buchte vor 30 Stunden einen nicht erstattbaren Tarif, dann strich die Airline den Flug. Steht ihm eine Erstattung zu?
Bei einer Kontrollfrage, die die Richtlinie direkt beantwortet, erzielten alle sechs Modelle 0,99 oder mehr. Die Formulierung ändert sich jedes Mal, das Urteil nie, denn Umformulieren ist genau das, was Sampling ist, und zählt nicht als Widerspruch.
Bei der schwierigen Frage, entnommen denselben sechs Aufrufen wie die Kostenzahlen, waren sich die Modelle uneinig. Qwen wechselte Nein, Ja, Nein, Ja, Nein, Ja ab, ein Münzwurf bei einer Erstattungsentscheidung, und erzielte 0,40. Gemini teilte sich 4 zu 2, und seine Ja-Antworten beriefen sich auf „Vorschriften des Verkehrsministeriums“, die im Prompt nirgends vorkommen. Terra und DeepSeek teilten sich jeweils 5 zu 1. Claude Opus 5 antwortete sechsmal von sechs mit Ja, nachdem es plausibel, aber ohne Textgrundlage entschieden hatte, dass die 24-Stunden-Regel nur vom Passagier ausgelöste Stornierungen abdeckt. Llama erreichte perfekte 1,00, indem es sechsmal dieselbe Ausflucht lieferte („kann als Ausnahme gelten ... könnte berechtigt sein“). Konsistentes Ausweichen ist auch ein Signal, aber dieser Scorer markiert es nicht.
Jede der sechsunddreißig Antworten liest sich flüssig und selbstsicher, und jede zitiert die Richtlinie. Bei einer einzelnen Antwort würden Sie nie erfahren, dass das nächste Sample das Gegenteil sagen könnte. Die 0,40 sind die einzige sichtbare Warnung, und wo der Input dominiert, kostet sie etwa einen halben zusätzlichen Aufruf.
Die Aufteilungen schwanken zudem von Lauf zu Lauf. In einem anderen Lauf teilte sich Terra 3 zu 3, und Gemini lehnte alle sechs Male ab. Vorab-Tests können das nicht beheben, und genau das spricht dafür, live zu bewerten statt einmal offline zu prüfen.
In die Praxis umsetzen
Wenn Sie ohnehin N Antworten sampeln, ist die Bewertung selbst kostenlos, denn .score() läuft nachträglich auf Antworten, die Sie schon haben:
from uqlm import BlackBoxUQ
# six answers you already collected; calls 2-6 hit the prompt cache
scorer = BlackBoxUQ(scorers=["noncontradiction"], use_best=False)
result = scorer.score(responses=[answers[0]], sampled_responses=[answers[1:]])
confidence = result.to_df()["noncontradiction"][0] # 0.99 = agrees; 0.40 = coin flip
Der Scorer nutzt ein lokales NLI-Modell (microsoft/deberta-large-mnli), es fallen also keine Gebühren für ein Judge-Modell an. Niedrige Scores können an einen Menschen, an einen weiteren Retrieval-Versuch oder an ein größeres Modell gehen.
Drei Gewohnheiten entscheiden, ob Sie wirklich 1,55x sehen. Schicken Sie den ersten Aufruf allein und fächern Sie den Rest danach auf, denn ein Cache-Eintrag ist erst lesbar, wenn die erste Antwort zu streamen beginnt, und sechs gleichzeitige identische Anfragen würden alle danebengehen. Halten Sie die Samples bis aufs Byte identisch und setzen Sie alles Veränderliche hinter den Kontext, denn ein einziger eingefügter Zeitstempel verdirbt alles, was folgt. Und sampeln Sie mit einer Temperatur über null, sonst liefern sechs identische Antworten einen perfekten Score, der nichts aussagt.
Wohin das führt
Unter den Methoden zur Halluzinationserkennung war Black-Box-Unsicherheitsschätzung schon immer am leichtesten einzusetzen: keine Logprobs, keine Labels, funktioniert überall. Ihr einziger ernster Nachteil war der Preis, und der verblasste, als Anbieter gecachte Reads mit 90 % Rabatt einführten, denn Konsistenz-Sampling schickt per Design identische Bytes erneut. Der Kreislauf lautet: das Gelesene cachen, die Antwort neu sampeln, Übereinstimmung bewerten und niedrige Scores an einen Menschen geben. Auf den Plattformen, über die der meiste Produktionsverkehr läuft, kostet das etwa einen halben zusätzlichen Aufruf.
Nichts davon lässt sich unverändert auf jedes Setup übertragen. Die Zahlen hängen von Kontextgröße, Anbieter und Tokenpreisen ab. Ein 2k-Token-Prompt wird bei Gemini gar nicht gecacht, und ein Chatbot mit kurzen Prompts und langen Antworten kommt nicht auf 1,55x. Die Gleichung liefert Ihren eigenen Multiplikator in einer halben Minute, und das Reproduktions-Repository rechnet alles mit vier API-Keys für rund zwei Dollar nach.
Trotzdem spielt die Entwicklung dieser Technik in die Hände, und der Grund sind Agenten. Ihre Kontexte sind die am schnellsten wachsenden Prompts in Produktion, weil jeder Tool-Aufruf die Historie verlängert und jeder Turn sie komplett erneut schickt, und selbst sorgfältige Kompaktierung hält die Summen nicht vom Steigen ab. Wachstum schwächt das Argument nicht, es schiebt Sie weiter die Kurve entlang. Anbieter haben Prompt-Caching gebaut, weil Agenten riesige Präfixe erneut senden, und Konsistenzbewertung nutzt genau diese Maschinerie. Verifikation wird gerade in den Agenten-Workloads am billigsten, in denen sie am dringendsten gebraucht wird.
Code und Abbildungen: https://github.com/mohitcek/r2c2 (das Reproduktions-Repo) und https://github.com/cvs-health/uqlm (UQLM).