Prompt-Caching mit Claude: 90 % Token-Einsparung in der Praxis
Ein mittelgrosses Agent-System zahlt ohne Prompt-Caching fast das 10-fache. Hier die Architektur die wir in der Praxis einsetzen, die Zahlen dazu, und die zwei Fallen die dich die Einsparung wieder kosten.
Warum Prompt-Caching der grösste Kosten-Hebel ist
Ein produktiver Agent hat typisch drei Teile im Context pro Turn:
- System-Prompt (Rolle, Instructions, Output-Format, Guardrails) — meist 2-5k Tokens, ändert sich selten
- Tool-Definitionen (JSON-Schemas für alle Tool-Calls) — meist 3-10k Tokens, ändern sich selten
- Gesprächs-Historie + aktueller Turn — variabel, wächst pro Konversation
In normaler API-Nutzung zahlst du für 1 + 2 + 3 bei jedem Turn. Die meisten Agent-Sessions haben 10-50 Turns. Rechnen wir:
- System + Tools: 8k Tokens × 50 Turns = 400k Tokens nur für fixes Schema
- Bei claude-opus-4-7 Input-Preis (~15 USD / 1M Tokens) = 6 USD pro Session allein für den unveränderlichen Teil
Mit Prompt-Caching wird der unveränderliche Teil einmal bezahlt und danach um ~90 % billiger wiederverwendet.
Die konkrete Architektur
const response = await anthropic.messages.create({
model: "claude-opus-4-7",
max_tokens: 2048,
system: [
{
type: "text",
text: SYSTEM_PROMPT,
cache_control: { type: "ephemeral" }
}
],
tools: tools.map(t => ({
...t,
cache_control: { type: "ephemeral" }
})),
messages: conversationHistory
});
Der Trick: die ersten 4 cache_control-Blöcke im Request werden gecached. Platziere sie an den Stellen mit maximaler Token-Länge und minimaler Änderungsrate.
Die Zahlen aus der Praxis
Ein Multi-Agent-System mit 4 spezialisierten Agents, average 20 Turns pro Session:
| Szenario | Input-Tokens / Tag | Kosten / Tag (Opus) |
|---|---|---|
| Ohne Caching | 2.4M | ~36 USD |
| Mit Caching (72 % Hit-Rate) | 0.34M effective + 2.06M cache | ~9 USD |
Einsparung: ~75 %. Bei 99 % Cache-Hit-Rate (möglich bei stabilem System-Prompt) ~90 %.
Auf Monats-Sicht: 1.100 USD → 270 USD. Der Unterschied zwischen produktiv und unökonomisch.
Die zwei Fallen
Falle 1: Cache-Invalidation durch versehentliche Änderung
Der Cache wird auf Exact-String-Match gemacht. Ein einziges Byte mehr im System-Prompt und dein Cache-Hit-Rate fällt auf 0 %.
Ursachen in der Praxis:
- Dynamische Timestamps im System-Prompt (
"Today is ...") - User-spezifische Werte im System statt in Messages
- Automatische Formatter die Whitespace normalisieren
Fix: System-Prompt und Tool-Definitionen in Konstanten einfrieren. Dynamische Werte gehen in die messages-Array, nicht in system.
Falle 2: Cache-TTL läuft ab
Der Ephemeral-Cache hat eine TTL von 5 Minuten ohne Aktivität. Bei lang-pausierten Sessions (Nutzer macht Pause) verfällt der Cache und die nächste Anfrage zahlt wieder voll.
Fix: Bei langer Pause entweder
- Cache-Warming per Heartbeat-Request
- Oder erwartete Kosten akzeptieren und Session-Budget nicht unterschätzen
Was du heute tun kannst
- Dein System-Prompt und Tool-Definitionen in separate Konstanten extrahieren. Keine Dynamik drin.
cache_control: { type: "ephemeral" }auf System-Prompt und Tools setzen.- Ein Dashboard bauen das Cache-Hit-Rate pro Agent-Type misst (via API-Response-Metadata).
- Budget pro Session-Klasse festlegen und Alert wenn Cache-Hit-Rate unter 60 % fällt.
Referenz
In einem unserer Electron-basierten Multi-Agent-Projekte hat die Prompt-Caching-Integration die Kosten um ~75 % gesenkt bei identischer Antwortqualität. Eval-Suite zeigt keine Regression auf 140 Ground-Truth-Cases. Cache-Hit-Rate stabilisiert sich nach ~30 Turns auf 72 %.