0Pricing
AI Prompt Engineering · Aula

Estratégias de implantação e reversão

Implantação azul-verde de prompts, sinalizadores de funcionalidades e reversão em caso de regressão.

Estratégias de implantação e reversão é uma aula grátis de AI Prompt Engineering no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de AI Prompt Engineering, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de AI Prompt Engineering inclui 4 aulas no total.

Desafios da implantação de prompts

Implantar uma nova versão de prompt em produção envolve riscos reais — uma alteração que melhora a qualidade média pode prejudicar casos extremos, causar picos de latência ou confundir os usuários. Estratégias de implantação controlada gerenciam esse risco ao limitar o raio de impacto e permitir um rollback rápido.

Implantação azul-verde de prompts

A implantação azul-verde mantém dois ambientes: azul (a produção atual) e verde (a nova versão). Após a validação, o tráfego é transferido atomicamente do azul para o verde. Se o verde falhar, a transferência é revertida instantaneamente.

  • Transferências sem tempo de inatividade
  • As duas versões permanecem prontas simultaneamente
  • O rollback é uma única alteração de configuração, não uma nova implantação
# 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']

Divisão de tráfego para lançamento gradual

Em vez de transferir 100% do tráfego de uma só vez, aumente gradualmente a parcela enviada para a nova versão. Uma progressão comum é: 1% → 5% → 10% → 25% → 50% → 100%, com monitoramento da qualidade em cada etapa.

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})

Sinalizadores de funcionalidade para lançamento de prompts

Os sinalizadores de funcionalidade permitem habilitar uma nova versão de prompt para usuários ou segmentos específicos (usuários beta ou equipe interna) antes do lançamento completo. Isso combina a segurança de um lançamento gradual com testes direcionados em casos de uso do mundo real.

# 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)

Monitorando a qualidade da nova versão

Depois de direcionar o tráfego para uma nova versão, monitore estes sinais em tempo real:

  • Taxa de erros: erros de API, saídas malformadas e falhas de análise
  • Latência: tempo de resposta P95 (os novos prompts podem ser mais longos e lentos)
  • Pontuação de qualidade: pontuação de avaliação automática de um avaliador LLM ou de uma métrica
  • Sinais dos usuários: taxa de avaliações negativas, taxa de novas tentativas e abandono de sessão
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)
        }

Rollback automático em caso de regressão de qualidade

O rollback manual é lento demais para incidentes em produção. Defina gatilhos de rollback — limites que revertam automaticamente para a versão anterior quando forem ultrapassados.

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

Padrão de implantação canário

Um canário é uma pequena parcela do tráfego (1–5%) que recebe primeiro a nova versão do prompt. Se o canário estiver saudável após um período de observação, o tráfego será transferido gradualmente. Caso contrário, somente os usuários do canário serão afetados.

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

Orquestração do fluxo de implantação

Um fluxo completo de implantação de prompts integra validação, início do canário, ciclo de monitoramento e promoção final ou rollback — tudo automatizado, com etapas de aprovação humana nos momentos principais.

# 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)

Procedimento de rollback manual

Quando o rollback automático não é acionado, mas uma pessoa percebe problemas de qualidade, um guia operacional de rollback garante uma ação rápida e consistente.

# 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'

Configuração de implantação como código

Defina a configuração de implantação em arquivos sob controle de versões para que todas as decisões de implantação possam ser auditadas e reproduzidas.

# 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'])

Guias operacionais de plantão e análises pós-incidente

Após qualquer reversão ou incidente, redija uma análise pós-incidente que documente: o que aconteceu, a causa raiz, a linha do tempo e os itens de ação. Os manuais operacionais devem fazer referência à análise pós-incidente e ser atualizados com as lições aprendidas.

# 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

Verificação rápida

Em uma implantação azul-verde de instruções, o que acontece quando o ambiente verde não passa nas verificações de qualidade?

Resumo da estratégia de implantação

A implantação de instruções em produção exige estratégias estruturadas para gerenciar os riscos:

  • Azul-verde: dois ambientes ativos, com troca atômica instantânea
  • Canário: aumento gradual do tráfego de 1% → 5% → 25% → 100%, com verificações de qualidade em cada etapa
  • Sinalizadores de funcionalidades: direcionamento a usuários beta antes da disponibilização ampla
  • Reversão automática: retorno acionado por limiar (taxa de erros, latência, qualidade)
  • Manuais operacionais: procedimentos documentados de reversão manual para engenheiros de plantão
  • Análises pós-incidente: melhoria contínua após cada incidente

Perguntas Frequentes

A aula “Estratégias de implantação e reversão” é grátis?

Sim — o texto completo de “Estratégias de implantação e reversão” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de AI Prompt Engineering, atualize para CoddyKit PRO. O curso de AI Prompt Engineering inclui 4 aulas no total.

O que vou aprender em “Estratégias de implantação e reversão”?

Implantação azul-verde de prompts, sinalizadores de funcionalidades e reversão em caso de regressão. Você pratica AI Prompt Engineering com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar AI Prompt Engineering?

Nenhuma experiência prévia é necessária. AI Prompt Engineering no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.

Quanto tempo leva a aula “Estratégias de implantação e reversão”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de AI Prompt Engineering?

Sim. Cada aula de AI Prompt Engineering inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Arquitetura de registro de prompts
  2. Controle de versões para prompts
  3. Estratégias de implantação e reversão
  4. Monitorando o desempenho dos prompts em produção
← Voltar para AI Prompt Engineering