Prompt-Performance in Produktion überwachen
Latenz, Kosten, Qualitätswerte und Fehlerraten pro Prompt-Version verfolgen.
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 responseKosten 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.00Automatisierte 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 NoneKennzahlen 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.
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
- Architektur einer Prompt-Registry
- Versionskontrolle für Prompts
- Strategien für Deployment und Rollback
- Prompt-Performance in Produktion überwachen