0Pricing
AI Prompt Engineering · Lektion

Abwägung von Kosten und Latenz

Budgets für Thinking-Tokens, Inferenzkosten und hybride Routing-Strategien.

Abwägung von Kosten und Latenz ist eine kostenlose AI Prompt Engineering-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des AI Prompt Engineering-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der AI Prompt Engineering-Kurs umfasst insgesamt 4 Lektionen.

Das Dreieck aus Kosten, Qualität und Latenz

Beim Design von LLM-Systemen gibt es ein grundlegendes Dreieck aus Kosten, Qualität und Latenz. Sie können zu einem bestimmten Zeitpunkt höchstens zwei dieser drei Faktoren optimieren.

  • Niedrige Kosten + hohe Qualität = langsam (Reasoning-Modelle, langsame Generierung)
  • Niedrige Kosten + geringe Latenz = geringere Qualität (kleine und schnelle Modelle)
  • Hohe Qualität + geringe Latenz = teuer (Reasoning-Modell mit Streaming)

Jede Architekturentscheidung ist ein Zielkonflikt innerhalb dieses Dreiecks.

Preisgestaltung für Reasoning-Modelle

Thinking-Tokens kosten zusätzlich zu den standardmäßigen Input- und Output-Tokens. Die Kosten eines Aufrufs eines Reasoning-Modells umfassen: Input-Tokens + Thinking-Tokens + Output-Tokens.

Im Vergleich zu schnellen oder kleinen Modellen ist o3 pro Token ungefähr 20-mal teurer als GPT-4o-mini. Claude Opus mit erweitertem Thinking ist pro Output-Token ungefähr 10- bis 15-mal teurer als Claude Haiku.

# Rough cost estimates (2025 pricing, may change)
# Source: provider pricing pages

PRICING = {
    # (input $/1M tokens, output $/1M tokens)
    'gpt-4o-mini':       (0.15,   0.60),
    'gpt-4o':            (2.50,  10.00),
    'o3-mini':           (1.10,   4.40),
    'o3':                (10.0,  40.00),
    'claude-haiku-4-5':  (0.25,   1.25),
    'claude-sonnet-4-5': (3.00,  15.00),
    'claude-opus-4-5':   (15.0,  75.00),
}

def estimate_cost(model, input_tokens, output_tokens, thinking_tokens=0):
    inp_price, out_price = PRICING[model]
    # Thinking tokens billed as output tokens
    total_out = output_tokens + thinking_tokens
    cost = (input_tokens / 1e6 * inp_price) + (total_out / 1e6 * out_price)
    return cost

# A single hard question with 8000 thinking tokens:
cost = estimate_cost('claude-opus-4-5', 500, 300, thinking_tokens=8000)
print(f'Cost per call: ${cost:.4f}')

Overhead durch Thinking-Tokens

Thinking-Tokens sind oft deutlich umfangreicher als Output-Tokens. Eine prägnante Antwort mit 200 Wörtern kann auf 5.000 bis 15.000 Thinking-Tokens basieren. Diese Thinking-Tokens kosten genauso viel wie Output-Tokens.

Deshalb wird der Kostenmultiplikator bei Reasoning-Modellen vor allem durch Thinking-Tokens bestimmt, nicht durch die Länge der Antwort.

import anthropic

client = anthropic.Anthropic(api_key='sk-ant-...')

def analyze_token_breakdown(question, budget_tokens):
    response = client.messages.create(
        model='claude-opus-4-5',
        max_tokens=budget_tokens + 2000,
        thinking={'type': 'enabled', 'budget_tokens': budget_tokens},
        messages=[{'role': 'user', 'content': question}]
    )

    # Usage breakdown
    usage = response.usage
    print(f'Input tokens:  {usage.input_tokens:,}')
    print(f'Output tokens: {usage.output_tokens:,}')

    # Thinking tokens are in cache_creation_input_tokens on some APIs
    # or can be estimated from thinking block content length
    thinking_blocks = [b for b in response.content if b.type == 'thinking']
    est_thinking = sum(len(b.thinking.split()) * 1.3 for b in thinking_blocks)
    print(f'Est. thinking tokens: {int(est_thinking):,}')
    answer = next(b.text for b in response.content if b.type == 'text')
    print(f'Answer words: {len(answer.split())}')

analyze_token_breakdown(
    'Explain the trade-offs between REST and GraphQL APIs.',
    budget_tokens=5000
)

Latenz: Was Sie erwarten können

Beobachtete Latenzbereiche für verschiedene Modellkonfigurationen. Sie variieren je nach Auslastung und Schwierigkeit der Aufgabe erheblich:

  • Claude Haiku: 0,5–2 Sekunden
  • Claude Sonnet: 2–8 Sekunden
  • Claude Opus (ohne Thinking): 5–15 Sekunden
  • Claude Opus (Thinking 5K): 15–40 Sekunden
  • Claude Opus (Thinking 16K): 40–90 Sekunden
  • o3 (hoher Aufwand): 30–120 Sekunden
import time
import anthropic

client = anthropic.Anthropic(api_key='sk-ant-...')

def benchmark_latency(prompt, model, budget_tokens=None):
    kwargs = {
        'model': model,
        'max_tokens': 2000,
        'messages': [{'role': 'user', 'content': prompt}]
    }
    if budget_tokens:
        kwargs['thinking'] = {'type': 'enabled', 'budget_tokens': budget_tokens}
        kwargs['max_tokens'] = budget_tokens + 2000

    start = time.time()
    response = client.messages.create(**kwargs)
    elapsed = time.time() - start
    answer = response.content[-1].text
    print(f'{model} (budget={budget_tokens}): {elapsed:.1f}s')
    return elapsed, answer

benchmark_latency('Name 3 planets', 'claude-haiku-4-5')
benchmark_latency('Solve x^2 - 5x + 6 = 0', 'claude-opus-4-5', 3000)
benchmark_latency('Design a fault-tolerant payment system', 'claude-opus-4-5', 10000)

Time-to-First-Token beim Streaming

Obwohl die Gesamtlatenz bei Reasoning-Modellen hoch ist, kann die Time-to-First-Token (TTFT) beim Streaming deutlich geringer sein. Das Modell beginnt unmittelbar nach Abschluss des Thinkings, die Antwort zu streamen. Sorgen Sie durch Streaming dafür, dass Nutzer schnell etwas sehen.

import anthropic
import time

client = anthropic.Anthropic(api_key='sk-ant-...')

def stream_with_timing(prompt):
    start = time.time()
    first_token_time = None
    full_text = ''

    with client.messages.stream(
        model='claude-opus-4-5',
        max_tokens=10000,
        thinking={'type': 'enabled', 'budget_tokens': 5000},
        messages=[{'role': 'user', 'content': prompt}]
    ) as stream:
        in_answer = False
        for text_chunk in stream.text_stream:
            if not in_answer:
                in_answer = True
                first_token_time = time.time() - start
                print(f'Time to first answer token: {first_token_time:.1f}s')
            full_text += text_chunk
            print(text_chunk, end='', flush=True)

    total_time = time.time() - start
    print(f'\nTotal time: {total_time:.1f}s')

stream_with_timing('List 5 key benefits of microservices.')

Das hybride Architekturmuster

Ein praxisnahes Produktionsmuster besteht darin, zunächst ein schnelles Standardmodell zu verwenden. Wenn das Ergebnis zufriedenstellend ist, was Sie anhand Ihrer Qualitätsmetrik prüfen, geben Sie es sofort zurück. Andernfalls stufen Sie auf ein Reasoning-Modell hoch. So erhalten Sie eine niedrige durchschnittliche Latenz und geringe Kosten bei hoher Genauigkeit in schwierigen Fällen.

import anthropic

client = anthropic.Anthropic(api_key='sk-ant-...')

def hybrid_query(question, quality_threshold=0.7):
    # Step 1: Try fast model first
    r_fast = client.messages.create(
        model='claude-haiku-4-5',
        max_tokens=300,
        messages=[{'role': 'user', 'content': question}]
    )
    fast_answer = r_fast.content[0].text

    # Step 2: Quick confidence check
    confidence_check = client.messages.create(
        model='claude-haiku-4-5',
        max_tokens=20,
        messages=[{
            'role': 'user',
            'content': (
                f'Q: {question}\nA: {fast_answer}\n'
                f'Rate answer quality 0.0-1.0. Number only:'
            )
        }]
    )
    try:
        quality = float(confidence_check.content[0].text.strip())
    except ValueError:
        quality = 0.5

    if quality >= quality_threshold:
        return fast_answer, 'fast'

    # Step 3: Escalate to reasoning model
    r_slow = client.messages.create(
        model='claude-opus-4-5',
        max_tokens=8000,
        thinking={'type': 'enabled', 'budget_tokens': 6000},
        messages=[{'role': 'user', 'content': question}]
    )
    return next(b.text for b in r_slow.content if b.type == 'text'), 'reasoning'

Kosten im großen Maßstab: Rechnen Sie nach

Reasoning-Modelle, die beim Testen erschwinglich wirken, können im großen Maßstab erhebliche Kosten verursachen. Projizieren Sie die Kosten immer, bevor Sie sich für eine Architektur entscheiden.

def project_monthly_cost(daily_queries, model_config):
    """
    Project monthly API costs for different configurations.
    model_config: dict with 'cost_per_query' key
    """
    monthly_queries = daily_queries * 30
    monthly_cost = monthly_queries * model_config['cost_per_query']

    print(f'Daily queries: {daily_queries:,}')
    print(f'Monthly queries: {monthly_queries:,}')
    print(f'Cost per query: ${model_config["cost_per_query"]:.4f}')
    print(f'Monthly cost: ${monthly_cost:,.2f}')
    return monthly_cost

# Compare configurations at 10,000 queries/day
configs = [
    {'name': 'All Haiku', 'cost_per_query': 0.0005},
    {'name': 'All Sonnet', 'cost_per_query': 0.015},
    {'name': 'All Opus+Thinking', 'cost_per_query': 0.85},
    {'name': 'Hybrid (90% Haiku, 10% Opus)', 'cost_per_query': 0.9*0.0005 + 0.1*0.85},
]

for config in configs:
    print(f'\n--- {config["name"]} ---')
    project_monthly_cost(10_000, config)

Prompt-Caching zur Kostensenkung

Verwenden Sie bei Aufrufen von Reasoning-Modellen mit langen, wiederholten System-Prompts oder Kontexten Prompt-Caching. Gecachte Tokens kosten 90 % weniger als nicht gecachte. Das ist besonders wirkungsvoll, wenn derselbe große Kontext, etwa Dokumente oder Code, wiederholt gesendet wird.

import anthropic

client = anthropic.Anthropic(api_key='sk-ant-...')

LONG_CONTEXT = 'A' * 50000  # Simulated large document

# With prompt caching: mark large context as cacheable
response = client.messages.create(
    model='claude-opus-4-5',
    max_tokens=10000,
    thinking={'type': 'enabled', 'budget_tokens': 6000},
    system=[
        {
            'type': 'text',
            'text': f'You are analyzing this document: {LONG_CONTEXT}',
            'cache_control': {'type': 'ephemeral'}  # Cache this prefix
        }
    ],
    messages=[{
        'role': 'user',
        'content': 'What are the main themes in this document?'
    }]
)

usage = response.usage
print(f'Cache read tokens: {getattr(usage, "cache_read_input_tokens", 0):,}')
print(f'Cache creation tokens: {getattr(usage, "cache_creation_input_tokens", 0):,}')
# Second call with same system content costs ~90% less on cached tokens

Batch-Verarbeitung für Kosteneffizienz

OpenAI und Anthropic bieten beide Batch-APIs mit einem Kostenrabatt von 50 % für nicht zeitkritische Anfragen an. Wenn Sie große Abfragemengen haben, die mehrere Stunden auf Ergebnisse warten können, ist Batch-Verarbeitung die kostengünstigste Option.

import anthropic
import json

client = anthropic.Anthropic(api_key='sk-ant-...')

# Batch API: 50% cheaper, 24-hour turnaround
requests = [
    {
        'custom_id': f'query_{i}',
        'params': {
            'model': 'claude-opus-4-5',
            'max_tokens': 1024,
            'messages': [{'role': 'user', 'content': f'Analyze dataset row {i}'}]
        }
    }
    for i in range(100)  # 100 queries in one batch
]

# Submit batch
batch = client.messages.batches.create(requests=requests)
print(f'Batch ID: {batch.id}')
print(f'Status: {batch.processing_status}')
print(f'Requests: {batch.request_counts}')
# Poll batch.id for results when processing_status == 'ended'

Optimierung des Token-Budgets

Wählen Sie budget_tokens passend zu Ihrer Problemklasse. Ein Budget von 16K für ein einfaches Problem zu verwenden, verschwendet Tokens und erhöht die Latenz. Erstellen Sie anhand von Schwierigkeitsstufen eine Übersichtstabelle für Budgets.

BUDGET_LOOKUP = {
    'simple_math':        1000,   # Arithmetic, basic algebra
    'medium_code':        3000,   # Function implementation, debugging
    'complex_reasoning':  8000,   # System design, complex analysis
    'research_grade':    16000,   # Proofs, research-level problems
}

def budget_for_query(query):
    q_lower = query.lower()
    if any(kw in q_lower for kw in ['calculate', 'what is', 'how many', 'convert']):
        return BUDGET_LOOKUP['simple_math']
    elif any(kw in q_lower for kw in ['code', 'function', 'bug', 'implement']):
        return BUDGET_LOOKUP['medium_code']
    elif any(kw in q_lower for kw in ['design', 'architecture', 'analyze', 'strategy']):
        return BUDGET_LOOKUP['complex_reasoning']
    else:
        return BUDGET_LOOKUP['medium_code']  # Safe default

print(budget_for_query('What is 15% of 340?'))       # 1000
print(budget_for_query('Implement a trie in Python')) # 3000
print(budget_for_query('Design a CDC pipeline'))      # 8000

SLAs für LLM-Anwendungen festlegen

Bevor Sie sich zwischen Standard- und Reasoning-Modellen entscheiden, definieren Sie die Anforderungen Ihres Anwendungs-Service-Level-Agreements (SLA):

  • P50-Latenz: Typisches Nutzererlebnis
  • P99-Latenz: Nutzererlebnis im Worst Case
  • Token-Budget: Maximale Kosten pro Nutzeranfrage
  • Qualitätsuntergrenze: Mindestens akzeptable Genauigkeit in Ihrem Testsatz

Reasoning-Modelle verletzen P99-Latenz-SLAs für interaktive Anwendungen leicht. Machen Sie sich Ihre Einschränkungen bewusst, bevor Architekturentscheidungen endgültig feststehen.

Wissensprüfung: Kosten von Reasoning-Modellen

Was ist der wichtigste Faktor für die hohen Kosten bei der Verwendung von Reasoning-Modellen im Vergleich zu Standardmodellen?

Zusammenfassung: Abwägung von Kosten und Latenz

Reasoning-Modelle sind teuer: Thinking-Tokens werden als Output-Tokens abgerechnet und können 10- bis 50-mal umfangreicher als die sichtbare Antwort sein. Bei schwierigen Problemen liegt die Latenz zwischen 15 und 120 Sekunden. Gegenmaßnahmen sind das hybride Muster, bei dem zuerst ein schnelles Modell verwendet und nur bei geringer Konfidenz hochgestuft wird, Prompt-Caching für wiederholte große Kontexte mit 90 % Rabatt auf gecachte Tokens, Batch-APIs für Offline-Workloads mit 50 % Rabatt sowie die passende Dimensionierung von budget_tokens entsprechend der Schwierigkeit des Problems. Im großen Maßstab summieren sich selbst geringe Kosten pro Anfrage zu hohen monatlichen Rechnungen. Projizieren Sie die Kosten daher immer, bevor Sie sich auf eine Architektur festlegen.

Häufig gestellte Fragen

Ist die Lektion „Abwägung von Kosten und Latenz“ kostenlos?

Ja — der vollständige Text von „Abwägung von Kosten und Latenz“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des AI Prompt Engineering-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der AI Prompt Engineering-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Abwägung von Kosten und Latenz“?

Budgets für Thinking-Tokens, Inferenzkosten und hybride Routing-Strategien. Du übst AI Prompt Engineering mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um AI Prompt Engineering zu starten?

Keine Vorkenntnisse erforderlich. AI Prompt Engineering auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.

Wie lange dauert die Lektion „Abwägung von Kosten und Latenz“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser AI Prompt Engineering-Lektion Code schreiben und ausführen?

Ja. Jede AI Prompt Engineering-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Wie sich Reasoning-Modelle unterscheiden
  2. Effektive Prompts für Extended Thinking
  3. Wann Reasoning- und wann Standardmodelle einsetzen
  4. Abwägung von Kosten und Latenz
← Zurück zu AI Prompt Engineering