AI Prompt Engineering · Lektion

Prompt-Performance in Produktion überwachen

Latenz, Kosten, Qualitätswerte und Fehlerraten pro Prompt-Version verfolgen.

Lektion 4 von 413 Schritte

Prompt-Performance in Produktion überwachen 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.

Warum sollte man die Prompt-Performance überwachen?

Ein in der Produktion bereitgestellter Prompt ist nicht „fertig“. Das Verhalten des Modells verändert sich durch Updates, Nutzereingaben wandeln sich im Laufe der Zeit, und die Kosten können unerwartet stark steigen. Kontinuierliche Überwachung erkennt Regressionen, bevor sie sich negativ auf Nutzer auswirken, und hält die Ausgaben planbar.

Wichtige Kennzahlen pro Prompt-Version

Erfassen Sie in der Produktion für jede Prompt-Version diese fünf Kennzahlen:

  • Durchschnittliche Latenz: Zeit von der Anfrage bis zur vollständigen Antwort (P50, P95, P99)
  • Kosten pro Aufruf: Eingabe-Token × Preis + Ausgabe-Token × Preis
  • Qualitätsbewertung: automatisierte Evaluierung (LLM-as-judge oder Aufgabenmetrik)
  • Fehlerquote: API-Fehler + Parsing-Fehler bei fehlerhaft formatierten Ausgaben
  • Nutzerzufriedenheit: Daumenbewertung, Wiederholungsrate, Sitzungsabbruch

Instrumentierung: Kennzahlen erfassen

Instrumentieren Sie jeden LLM-Aufruf so, dass alle wichtigen Kennzahlen in einem Zeitreihenspeicher oder einer Datenbank für spätere Analysen und Alarmierungen erfasst werden.

import time
import openai

client = openai.OpenAI(api_key='YOUR_API_KEY')

def instrumented_call(prompt_id, version, messages, model):
    start = time.time()
    error = False
    response = None
    try:
        response = client.chat.completions.create(
            model=model,
            messages=messages
        )
    except Exception as e:
        error = True
        raise
    finally:
        latency_ms = (time.time() - start) * 1000
        usage = response.usage if response else None
        record_metric({
            'prompt_id': prompt_id,
            'version': version,
            'latency_ms': latency_ms,
            'input_tokens': usage.prompt_tokens if usage else 0,
            'output_tokens': usage.completion_tokens if usage else 0,
            'error': error,
            'timestamp': time.time()
        })
    return response

Kosten pro Aufruf berechnen

Kosten pro Aufruf = Eingabe-Token × Eingabepreis + Ausgabe-Token × Ausgabepreis. Durch das Speichern der rohen Token-Anzahlen können Sie die Kosten bei jeder Preisänderung neu berechnen.

# pricing.py — model pricing table (per 1M tokens)
PRICING = {
    'gpt-4o': {'input': 2.50, 'output': 10.00},
    'gpt-4o-mini': {'input': 0.15, 'output': 0.60},
    'claude-3-5-sonnet-20241022': {'input': 3.00, 'output': 15.00},
}

def cost_usd(model, input_tokens, output_tokens):
    p = PRICING.get(model)
    if not p:
        return None
    cost = (input_tokens / 1_000_000) * p['input'] \
         + (output_tokens / 1_000_000) * p['output']
    return round(cost, 6)

# Example
c = cost_usd('gpt-4o-mini', input_tokens=800, output_tokens=200)
print(f'Cost per call: ${c}')   # Cost per call: $0.000240

# Daily cost estimate
calls_per_day = 50_000
print(f'Daily cost: ${round(c * calls_per_day, 2)}')  # $12.00

Automatisierte Qualitätsbewertung

Bewerten Sie die Ausgabequalität mithilfe eines LLM-Judges automatisch im Produktionsmaßstab. Erfassen Sie für die Qualitätsbewertung 5–10 % der Aufrufe, damit die Kosten überschaubar bleiben.

import random

JUDGE_SAMPLE_RATE = 0.05  # score 5% of calls

JUDGE_PROMPT = '''Rate the quality of this AI response on a scale of 1-5.
1=Very poor, 3=Acceptable, 5=Excellent.
Return only the integer score.

User input: {input}
AI response: {output}'''

def maybe_score_quality(user_input, ai_output, model='gpt-4o-mini'):
    if random.random() > JUDGE_SAMPLE_RATE:
        return None  # not sampled

    judge_messages = [{'role': 'user', 'content':
        JUDGE_PROMPT.format(input=user_input, output=ai_output)}]
    response = client.chat.completions.create(
        model=model, messages=judge_messages, max_tokens=5
    )
    try:
        score = int(response.choices[0].message.content.strip())
        return max(1, min(5, score))  # clamp to 1-5
    except ValueError:
        return None

Kennzahlen in einer Zeitreihen-Datenbank speichern

Zeitreihen-Datenbanken (InfluxDB, TimescaleDB oder sogar eine einfache PostgreSQL-Tabelle mit einem Zeitstempelindex) speichern Kennzahlen pro Aufruf effizient und unterstützen Aggregationsabfragen für Dashboards.

-- TimescaleDB / PostgreSQL schema for prompt metrics
CREATE TABLE prompt_metrics (
  ts              TIMESTAMPTZ NOT NULL DEFAULT NOW(),
  prompt_id       VARCHAR(100),
  version         VARCHAR(20),
  model           VARCHAR(50),
  latency_ms      FLOAT,
  input_tokens    INT,
  output_tokens   INT,
  cost_usd        FLOAT,
  quality_score   FLOAT,   -- NULL if not sampled
  error           BOOLEAN DEFAULT FALSE
);

-- Convert to hypertable (TimescaleDB)
SELECT create_hypertable('prompt_metrics', 'ts');

-- Query: hourly P95 latency by version
SELECT
  date_trunc('hour', ts) AS hour,
  version,
  PERCENTILE_CONT(0.95) WITHIN GROUP (ORDER BY latency_ms) AS p95_latency
FROM prompt_metrics
WHERE prompt_id = 'summarize-article'
  AND ts > NOW() - INTERVAL '24 hours'
GROUP BY 1, 2
ORDER BY 1;

Ein Kennzahlen-Dashboard erstellen

Dashboards machen die fünf wichtigsten Kennzahlen in Echtzeit sichtbar. Verwenden Sie Grafana (mit TimescaleDB als Datenquelle) oder ein eigenes Web-Dashboard. Wichtige Ansichten:

  • Latenz P50/P95/P99 im Zeitverlauf, nach Version
  • Trend der Kosten pro Aufruf (täglich/wöchentlich)
  • Fehlerquote in Prozent
  • Gleitender Durchschnitt der Qualitätsbewertung
  • Nutzerzufriedenheitswert
# Simple dashboard query aggregation in Python
def get_dashboard_stats(conn, prompt_id, hours=24):
    with conn.cursor() as cur:
        cur.execute('''
            SELECT
              version,
              COUNT(*) AS calls,
              AVG(latency_ms) AS avg_latency,
              PERCENTILE_CONT(0.95)
                WITHIN GROUP (ORDER BY latency_ms) AS p95_latency,
              AVG(cost_usd) AS avg_cost,
              AVG(quality_score) FILTER (WHERE quality_score IS NOT NULL) AS avg_quality,
              SUM(error::int)::float / COUNT(*) AS error_rate
            FROM prompt_metrics
            WHERE prompt_id = %s
              AND ts > NOW() - INTERVAL %s
            GROUP BY version
            ORDER BY MAX(ts) DESC
        ''', (prompt_id, f'{hours} hours'))
        return cur.fetchall()

Anomalieerkennung bei Prompt-Regressionen

Die manuelle Prüfung von Dashboards übersieht schleichende Regressionen. Eine automatische Anomalieerkennung vergleicht ein gleitendes Zeitfenster mit einer historischen Baseline und löst einen Alarm aus, wenn die Abweichung einen Schwellenwert überschreitet.

import statistics

def detect_anomaly(recent_values, baseline_values, threshold_std=2.0):
    if len(baseline_values) < 10:
        return False  # not enough data
    baseline_mean = statistics.mean(baseline_values)
    baseline_std = statistics.stdev(baseline_values)
    recent_mean = statistics.mean(recent_values)

    if baseline_std == 0:
        return False
    z_score = abs(recent_mean - baseline_mean) / baseline_std
    return z_score > threshold_std

# Example: detect quality regression
baseline_quality = [4.1, 4.0, 4.2, 4.1, 4.0, 3.9, 4.1, 4.2, 4.0, 4.1]
recent_quality   = [3.2, 3.1, 3.4, 3.0]

if detect_anomaly(recent_quality, baseline_quality):
    print('ALERT: Quality score anomaly detected!')
    # fire_pagerduty_alert(...)
else:
    print('Quality within normal range')

Alarmierungsregeln und Schwellenwerte

Definieren Sie Alarmierungsregeln als Code, damit sie versionskontrolliert und überprüfbar sind. Häufige Alarme für die Prompt-Überwachung:

  • Fehlerquote > 5 % während 5 aufeinanderfolgender Minuten
  • P95-Latenz > 10 s während 3 Minuten
  • Kosten pro Tag > 2× Wochendurchschnitt (Kostenanstieg)
  • Qualitätsbewertung sinkt gegenüber der Baseline um > 20 %
# alerts.yaml (Grafana alerting or custom)
alerts:
  - name: HighErrorRate
    condition: error_rate > 0.05
    for: 5m
    severity: critical
    message: 'Prompt {prompt_id} error rate {error_rate:.1%} exceeds 5%'

  - name: HighLatencyP95
    condition: p95_latency_ms > 10000
    for: 3m
    severity: warning
    message: 'P95 latency {p95_latency_ms}ms exceeds 10s for {prompt_id}'

  - name: CostSpike
    condition: daily_cost_usd > weekly_avg_daily_cost * 2
    for: 1h
    severity: warning
    message: 'Daily cost ${daily_cost_usd:.2f} is 2x the weekly average'

  - name: QualityRegression
    condition: rolling_quality_avg < baseline_quality_avg * 0.80
    for: 15m
    severity: critical
    message: 'Quality dropped {pct_drop:.0%} for prompt {prompt_id}'

Signale zur Nutzerzufriedenheit

Automatisierte Kennzahlen erfassen nicht alles. Erfassen Sie explizite und implizite Nutzersignale als Ergänzung zu den Qualitätsbewertungen:

  • Daumenbewertung: explizites 👍/👎 für KI-Antworten
  • Wiederholungsrate: Nutzer sendet dieselbe Anfrage sofort erneut (implizite Unzufriedenheit)
  • Kopier-/Nutzungsrate: Nutzer kopiert die KI-Ausgabe (implizite Zufriedenheit)
  • Korrekturrate: Nutzer bearbeitet die KI-Ausgabe, bevor er sie verwendet
# feedback_collector.py
def record_feedback(prompt_id, version, call_id, signal_type, value):
    '''
    signal_type: 'thumbs' | 'retry' | 'copy' | 'edit'
    value: for thumbs: 1 (up) or -1 (down); others: 1 (occurred)
    '''
    db.execute(
        'INSERT INTO prompt_feedback '
        '(prompt_id, version, call_id, signal_type, value, ts) '
        'VALUES (%s, %s, %s, %s, %s, NOW())',
        (prompt_id, version, call_id, signal_type, value)
    )

# Aggregate satisfaction score
def satisfaction_score(prompt_id, version):
    rows = db.fetch(
        'SELECT signal_type, AVG(value) as avg_val FROM prompt_feedback '
        'WHERE prompt_id=%s AND version=%s GROUP BY signal_type',
        (prompt_id, version)
    )
    return {r['signal_type']: round(r['avg_val'], 3) for r in rows}

Berichte zum Versionsvergleich

Wenn Sie bewerten, ob Sie einen Canary freigeben oder zurückrollen sollten, erstellen Sie einen direkten Vergleich aller Kennzahlen zwischen der neuen Version und der Baseline. Dieser Bericht bildet die Grundlage für die Freigabeentscheidung.

def version_comparison_report(prompt_id, version_a, version_b, hours=48):
    stats_a = get_dashboard_stats_for_version(prompt_id, version_a, hours)
    stats_b = get_dashboard_stats_for_version(prompt_id, version_b, hours)

    print(f'=== Comparison: {version_a} vs {version_b} ===')
    metrics = ['avg_latency', 'p95_latency', 'avg_cost', 'avg_quality', 'error_rate']
    for m in metrics:
        va = stats_a.get(m, 0)
        vb = stats_b.get(m, 0)
        delta = vb - va
        pct = (delta / va * 100) if va else 0
        direction = '+' if delta > 0 else ''
        print(f'{m:20s}: {va:.4f} -> {vb:.4f}  ({direction}{pct:.1f}%)')

# Example output:
# avg_latency         : 1234.5000 -> 1189.2000  (-3.7%)
# p95_latency         : 3210.0000 -> 3050.0000  (-5.0%)
# avg_cost            : 0.000240 -> 0.000255  (+6.2%)
# avg_quality         : 4.1000 -> 4.3000  (+4.9%)
# error_rate          : 0.0120 -> 0.0080  (-33.3%)

Kurzer Check

Sie möchten Qualitätsregressionen automatisch erkennen, ohne Dashboards manuell zu prüfen. Welcher Ansatz erreicht dieses Ziel am besten?

Zusammenfassung der Überwachung

Die Überwachung von Prompts in der Produktion erfordert die Erfassung von fünf Dimensionen pro Version:

  • Latenz (P50/P95/P99) — Nutzererfahrung
  • Kosten pro Aufruf — finanzielle Kontrolle
  • Qualitätsbewertung — automatisiertes Sampling mit LLM-Judge
  • Fehlerquote — Zuverlässigkeit
  • Nutzerzufriedenheit — Daumenbewertungen, Wiederholungs- und Kopiersignale

Speichern Sie die Kennzahlen in einer Zeitreihen-Datenbank, visualisieren Sie sie in Dashboards und lösen Sie Alarme aus, wenn Schwellenwerte überschritten werden. Berichte zum Versionsvergleich unterstützen Entscheidungen über Freigabe und Rollback.

Kostenlos starten

Lerne AI Prompt Engineering mit einem KI-Tutor — kostenlos

Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.

Kurse
53
Lektionen
199

Häufig gestellte Fragen

Ist die Lektion „Prompt-Performance in Produktion überwachen“ kostenlos?

Ja — der vollständige Text von „Prompt-Performance in Produktion überwachen“ 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 „Prompt-Performance in Produktion überwachen“?

Latenz, Kosten, Qualitätswerte und Fehlerraten pro Prompt-Version verfolgen. 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 „Prompt-Performance in Produktion überwachen“?

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. Architektur einer Prompt-Registry
  2. Versionskontrolle für Prompts
  3. Strategien für Deployment und Rollback
  4. Prompt-Performance in Produktion überwachen
← Zurück zu AI Prompt Engineering