AI Prompt Engineering · Lektion

Strategien für Deployment und Rollback

Blue-Green-Prompt-Deployment, Feature Flags und Rollback bei Regressionen.

Lektion 3 von 413 Schritte

Strategien für Deployment und Rollback ist eine kostenlose AI Prompt Engineering-Lektion auf CoddyKit. Dies ist Lektion 3 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.

Herausforderungen bei der Prompt-Bereitstellung

Die Bereitstellung einer neuen Prompt-Version in der Produktion birgt reale Risiken — eine Änderung, die die durchschnittliche Qualität verbessert, kann Randfälle verschlechtern, Latenzspitzen verursachen oder Benutzer verwirren. Kontrollierte Bereitstellungsstrategien reduzieren dieses Risiko, indem sie den Wirkungsbereich begrenzen und ein schnelles Zurücksetzen ermöglichen.

Blue-Green-Prompt-Bereitstellung

Bei einer Blue-Green-Bereitstellung werden zwei Umgebungen betrieben: blue (aktuelle Produktion) und green (neue Version). Nach der Validierung wird der Traffic atomar von blue zu green umgeschaltet. Wenn green fehlschlägt, wird die Umschaltung sofort zurückgesetzt.

  • Umschaltungen ohne Ausfallzeit
  • Beide Versionen bleiben gleichzeitig bereit
  • Rollback ist eine einzelne Konfigurationsänderung, keine erneute Bereitstellung
# prompt_router.py — blue/green traffic control
class PromptRouter:
    def __init__(self):
        self.slots = {
            'blue': None,   # {'prompt_id': ..., 'version': ...}
            'green': None,
        }
        self.active_slot = 'blue'

    def load_slot(self, slot, prompt_id, version, template):
        self.slots[slot] = {
            'prompt_id': prompt_id,
            'version': version,
            'template': template
        }
        print(f'Loaded {prompt_id}@{version} into {slot} slot')

    def switch_to(self, slot):
        if not self.slots[slot]:
            raise ValueError(f'Slot {slot} is empty')
        self.active_slot = slot
        info = self.slots[slot]
        print(f'Traffic now routed to {slot}: {info["prompt_id"]}@{info["version"]}')

    def get_active_template(self):
        return self.slots[self.active_slot]['template']

Traffic-Aufteilung für einen schrittweisen Rollout

Statt den gesamten Traffic auf einmal umzuschalten, erhöhen Sie schrittweise den Anteil, der an die neue Version gesendet wird. Ein üblicher Ramp-up ist: 1 % → 5 % → 10 % → 25 % → 50 % → 100 %, mit Qualitätsüberwachung bei jedem Schritt.

import random

class TrafficSplitter:
    def __init__(self):
        # version_weights: {version_id: percentage}
        self.version_weights = {
            'v1.1.0': 90,
            'v1.2.0': 10
        }

    def select_version(self):
        versions = list(self.version_weights.keys())
        weights = list(self.version_weights.values())
        return random.choices(versions, weights=weights, k=1)[0]

    def update_split(self, new_weights):
        assert sum(new_weights.values()) == 100, 'Weights must sum to 100'
        self.version_weights = new_weights
        print(f'Traffic split updated: {new_weights}')

# Usage
splitter = TrafficSplitter()
for _ in range(5):
    print(splitter.select_version())

# Ramp to 25%
splitter.update_split({'v1.1.0': 75, 'v1.2.0': 25})

Feature-Flags für den Prompt-Rollout

Mit Feature-Flags können Sie eine neue Prompt-Version zunächst für bestimmte Benutzer oder Segmente (Beta-Benutzer, interne Mitarbeiter) aktivieren, bevor der vollständige Rollout erfolgt. Dadurch wird die Sicherheit eines schrittweisen Rollouts mit gezielten Tests in realen Anwendungsfällen kombiniert.

# Feature flag-based prompt selection
BETA_USER_IDS = {'user_123', 'user_456', 'user_789'}

def select_prompt_version(user_id, prompt_id, registry):
    # Check if user is in beta cohort
    if user_id in BETA_USER_IDS:
        # Try to get a beta version tagged for this prompt
        beta = registry.get_version_by_tag(prompt_id, tag='beta')
        if beta:
            return beta
    # Default: serve active (stable) version
    return registry.get_active(prompt_id)

# Example: LaunchDarkly-style flag check
def select_prompt_ld(user_id, ld_client, registry):
    use_new = ld_client.variation(
        'use-summarize-v2', {'key': user_id}, default=False
    )
    version = 'v2.0.0' if use_new else 'v1.1.0'
    return registry.get_version(prompt_id='summarize-article', version=version)

Qualität der neuen Version überwachen

Nachdem Sie den Traffic auf eine neue Version geleitet haben, überwachen Sie diese Signale in Echtzeit:

  • Fehlerrate: API-Fehler, fehlerhafte Ausgaben, Parsing-Fehler
  • Latenz: P95-Antwortzeit (neue Prompts können länger und langsamer sein)
  • Qualitätswert: automatisierter Evaluierungswert eines LLM-Bewerters oder einer Metrik
  • Benutzersignale: Rate negativer Bewertungen, Wiederholungsrate, Abbruchrate von Sitzungen
from collections import defaultdict
import time

class VersionMonitor:
    def __init__(self):
        self.metrics = defaultdict(lambda: {
            'calls': 0, 'errors': 0,
            'latency_sum': 0, 'quality_sum': 0
        })

    def record(self, version, latency_ms, quality_score, error=False):
        m = self.metrics[version]
        m['calls'] += 1
        m['latency_sum'] += latency_ms
        m['quality_sum'] += quality_score
        if error:
            m['errors'] += 1

    def report(self, version):
        m = self.metrics[version]
        n = m['calls'] or 1
        return {
            'version': version,
            'calls': m['calls'],
            'error_rate': round(m['errors'] / n, 3),
            'avg_latency_ms': round(m['latency_sum'] / n),
            'avg_quality': round(m['quality_sum'] / n, 2)
        }

Automatisches Zurücksetzen bei Qualitätsrückgang

Ein manuelles Zurücksetzen ist bei Vorfällen in der Produktion zu langsam. Definieren Sie Rollback-Auslöser — Schwellenwerte, bei deren Überschreitung automatisch auf die vorherige Version zurückgesetzt wird.

ROLLBACK_THRESHOLDS = {
    'error_rate': 0.05,      # > 5% errors trigger rollback
    'avg_latency_ms': 10000, # > 10s avg latency triggers rollback
    'avg_quality': 3.5       # < 3.5 quality score triggers rollback
}

def check_and_rollback(monitor, registry, version, previous_version):
    report = monitor.report(version)
    triggers = []

    if report['error_rate'] > ROLLBACK_THRESHOLDS['error_rate']:
        triggers.append(f'error_rate={report["error_rate"]}')
    if report['avg_latency_ms'] > ROLLBACK_THRESHOLDS['avg_latency_ms']:
        triggers.append(f'latency={report["avg_latency_ms"]}ms')
    if report['avg_quality'] < ROLLBACK_THRESHOLDS['avg_quality']:
        triggers.append(f'quality={report["avg_quality"]}')

    if triggers:
        print(f'ROLLBACK TRIGGERED: {triggers}')
        registry.activate_version('summarize-article', previous_version)
        alert_oncall(f'Prompt auto-rolled back to {previous_version}: {triggers}')
        return True
    return False

Canary-Bereitstellungsmuster

Ein Canary ist ein sehr kleiner Traffic-Anteil (1–5 %), der zuerst die neue Prompt-Version erhält. Wenn der Canary nach einer Stabilisierungszeit fehlerfrei läuft, wird der Traffic schrittweise umgeleitet. Andernfalls waren nur die Canary-Benutzer betroffen.

import time

def canary_deploy(registry, splitter, monitor, new_version, prev_version,
                  soak_minutes=30, stages=[1, 5, 25, 50, 100]):
    for pct in stages:
        splitter.update_split({
            prev_version: 100 - pct,
            new_version: pct
        })
        print(f'Stage: {pct}% canary. Soaking for {soak_minutes} min...')
        time.sleep(soak_minutes * 60)  # wait soak period

        should_rollback = check_and_rollback(
            monitor, registry, new_version, prev_version
        )
        if should_rollback:
            splitter.update_split({prev_version: 100})
            print('Canary aborted. Fully reverted to', prev_version)
            return False
        print(f'Stage {pct}% passed quality check.')

    print(f'Canary complete. {new_version} now at 100%.')
    return True

Orchestrierung der Bereitstellungspipeline

Eine vollständige Prompt-Bereitstellungspipeline umfasst Validierung, Canary-Start, Überwachungsschleife und die abschließende Freigabe oder das Zurücksetzen — alles automatisiert und mit Genehmigungsschritten durch Menschen an wichtigen Stellen.

# deploy_prompt.py — full pipeline
import argparse

def deploy(prompt_id, new_version, prev_version, dry_run=False):
    print(f'=== Deploying {prompt_id}: {prev_version} -> {new_version} ===')

    # 1. Validate new version exists in registry
    artifact = registry.get_version(prompt_id, new_version)
    print(f'Found artifact: {artifact["version"]}')

    # 2. Run offline eval suite
    score = run_eval_suite(artifact['template'])
    if score < 0.90:
        raise RuntimeError(f'Eval score {score} below threshold 0.90')
    print(f'Eval passed: {score}')

    if dry_run:
        print('Dry run complete. Not deploying.')
        return

    # 3. Canary deploy with automatic rollback
    success = canary_deploy(
        registry, splitter, monitor,
        new_version, prev_version,
        soak_minutes=15, stages=[1, 5, 25, 100]
    )

    print('Deployment', 'SUCCEEDED' if success else 'FAILED')

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('--new', required=True)
    parser.add_argument('--prev', required=True)
    parser.add_argument('--dry-run', action='store_true')
    args = parser.parse_args()
    deploy('summarize-article', args.new, args.prev, args.dry_run)

Manuelles Zurücksetzen

Wenn kein automatisches Zurücksetzen ausgelöst wird, aber ein Mensch Qualitätsprobleme feststellt, sorgt ein manuelles Rollback-Runbook für schnelles und einheitliches Handeln.

# RUNBOOK: Manual Prompt Rollback
# Estimated time to execute: 2-3 minutes

# Step 1: Identify current and target versions
python manage.py prompt list-versions --prompt-id summarize-article
# Output:
#   v1.2.0  [ACTIVE]  2024-08-15  alice
#   v1.1.0  [stable]  2024-07-01  alice

# Step 2: Activate previous stable version
python manage.py prompt activate --prompt-id summarize-article --version v1.1.0
# Output: Activated summarize-article@v1.1.0

# Step 3: Verify traffic is serving old version
python manage.py prompt verify --prompt-id summarize-article
# Output: Active version: v1.1.0  Serving: 100%

# Step 4: Log the incident
python manage.py incident create \
  --title 'Prompt rollback: summarize-article v1.2.0 -> v1.1.0' \
  --severity P2 \
  --reason 'Quality score dropped from 4.1 to 3.2 after v1.2.0 deploy'

Bereitstellungskonfiguration als Code

Definieren Sie die Bereitstellungskonfiguration in versionskontrollierten Dateien, damit alle Bereitstellungsentscheidungen überprüfbar und reproduzierbar sind.

# deployments/summarize-article.yaml
prompt_id: summarize-article
current_stable: '1.1.0'
canary_config:
  stages: [1, 5, 25, 50, 100]
  soak_minutes_per_stage: 15
rollback_thresholds:
  error_rate_max: 0.05
  latency_p95_max_ms: 8000
  quality_score_min: 3.5
feature_flags:
  beta_group: [user_123, user_456]
alerts:
  pagerduty_key: 'PD_KEY_PLACEHOLDER'
  slack_channel: '#prompt-alerts'

# Load and apply with a deploy script
import yaml

with open('deployments/summarize-article.yaml') as f:
    config = yaml.safe_load(f)

print('Deploying with config:', config['canary_config'])

On-Call-Runbooks und Post-Mortems

Schreiben Sie nach jedem Rollback oder Incident ein Post-Mortem, in dem Sie dokumentieren, was passiert ist, die Grundursache, den zeitlichen Ablauf und die erforderlichen Maßnahmen. Runbooks sollten auf das Post-Mortem verweisen und um die daraus gewonnenen Erkenntnisse ergänzt werden.

# Post-mortem template (stored in docs/post-mortems/)

## Incident: summarize-article v1.2.0 quality regression
## Date: 2024-08-15
## Severity: P2
## Duration: 47 minutes (09:15 - 10:02 UTC)

### What happened
Deployed v1.2.0 of summarize-article. At 5% canary, quality score dropped
from 4.1 to 3.0 for articles over 2000 words.

### Root cause
New prompt template removed the explicit length constraint instruction.
Long articles caused the model to generate overly verbose summaries.

### Timeline
09:15  v1.2.0 deployed to 5% canary
09:28  Quality monitor detected avg_quality < 3.5
09:29  Auto-rollback triggered to v1.1.0
09:32  Incident acknowledged by on-call
10:02  Post-mortem drafted

### Action items
- [ ] Add length regression test to eval suite
- [ ] Update canary monitoring to separate metrics by article length
- [ ] Add changelog requirement: 'length behavior' field

Kurzer Check

Was passiert bei einem Blue-Green-Prompt-Deployment, wenn der Green-Slot die Qualitätsprüfungen nicht besteht?

Zusammenfassung der Deployment-Strategien

Das Deployment von Prompts in der Produktion erfordert strukturierte Strategien zur Risikosteuerung:

  • Blue-Green: zwei aktive Umgebungen, sofortiges atomares Umschalten
  • Canary: Traffic-Steigerung von 1 % → 5 % → 25 % → 100 % mit Qualitätsprüfungen in jeder Phase
  • Feature-Flags: Zuerst Beta-Nutzer ansprechen, bevor der Rollout ausgeweitet wird
  • Automatischer Rollback: durch Schwellenwerte ausgelöstes Zurücksetzen (Fehlerquote, Latenz, Qualität)
  • Runbooks: dokumentierte manuelle Rollback-Verfahren für On-Call-Engineers
  • Post-Mortems: kontinuierliche Verbesserung nach jedem Incident
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 „Strategien für Deployment und Rollback“ kostenlos?

Ja — der vollständige Text von „Strategien für Deployment und Rollback“ 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 „Strategien für Deployment und Rollback“?

Blue-Green-Prompt-Deployment, Feature Flags und Rollback bei Regressionen. 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 3 von 4.

Wie lange dauert die Lektion „Strategien für Deployment und Rollback“?

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