0Pricing
AI Prompt Engineering · Lección

Monitorización del rendimiento de prompts en producción

Realice un seguimiento de la latencia, el coste, las puntuaciones de calidad y las tasas de error de cada versión del prompt.

Monitorización del rendimiento de prompts en producción es una lección gratuita de AI Prompt Engineering en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de AI Prompt Engineering, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de AI Prompt Engineering incluye 4 lecciones en total.

¿Por qué supervisar el rendimiento de los prompts?

Un prompt desplegado en producción no está «terminado». El comportamiento del modelo cambia gradualmente con las actualizaciones, las entradas de los usuarios cambian con el tiempo y los costes pueden aumentar inesperadamente. La supervisión continua detecta las regresiones antes de que perjudiquen a los usuarios y mantiene predecible el gasto.

Métricas clave por versión del prompt

Haga seguimiento de estas cinco métricas por versión del prompt en producción:

  • Latencia media: tiempo desde la solicitud hasta la respuesta completa (P50, P95, P99)
  • Coste por llamada: tokens de entrada × precio + tokens de salida × precio
  • Puntuación de calidad: evaluación automatizada (LLM-as-judge o métrica de la tarea)
  • Tasa de errores: errores de API + fallos al analizar salidas malformadas
  • Satisfacción del usuario: valoración con pulgar, tasa de reintentos y abandono de sesión

Instrumentación: registro de métricas

Envuelva cada llamada a LLM con instrumentación que registre todas las métricas clave en un almacén de series temporales o una base de datos para su posterior análisis y para activar alertas.

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

Cálculo del coste por llamada

Coste por llamada = tokens de entrada × precio de entrada + tokens de salida × precio de salida. Almacenar los recuentos de tokens sin procesar permite recalcular el coste cada vez que cambien los precios.

# 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

Puntuación automatizada de calidad

Use un LLM evaluador para puntuar automáticamente la calidad de las salidas a escala de producción. Muestree entre el 5 % y el 10 % de las llamadas para evaluar su calidad y mantener los costes bajo control.

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

Almacenamiento de métricas en una base de datos de series temporales

Las bases de datos de series temporales (InfluxDB, TimescaleDB o incluso una tabla sencilla de PostgreSQL con un índice de marcas de tiempo) almacenan las métricas de cada llamada de forma eficiente y admiten consultas de agregación para los paneles.

-- 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;

Creación de un panel de métricas

Los paneles muestran las cinco métricas clave en tiempo real. Use Grafana (con TimescaleDB como fuente de datos) o un panel web personalizado. Paneles clave:

  • Latencia P50/P95/P99 a lo largo del tiempo, por versión
  • Tendencia del coste por llamada (diaria/semanal)
  • Porcentaje de errores
  • Media móvil de la puntuación de calidad
  • Puntuación de satisfacción del usuario
# 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()

Detección de anomalías en regresiones de prompts

La revisión manual de los paneles no detecta las regresiones lentas. La detección automatizada de anomalías compara una ventana móvil con una línea base histórica y activa una alerta cuando la desviación supera un umbral.

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

Reglas y umbrales de alerta

Defina las reglas de alerta como código para que estén controladas por versiones y puedan revisarse. Alertas habituales para la supervisión de prompts:

  • Tasa de errores > 5 % durante 5 minutos consecutivos
  • Latencia P95 > 10 s durante 3 minutos
  • Coste diario > 2× el promedio semanal (pico de costes)
  • La puntuación de calidad disminuye > 20 % respecto a la línea base
# 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}'

Indicadores de satisfacción del usuario

Las métricas automatizadas no lo capturan todo. Recopile indicadores explícitos e implícitos de los usuarios para complementar las puntuaciones de calidad:

  • Valoración con pulgar: 👍/👎 explícito sobre las respuestas de IA
  • Tasa de reintentos: el usuario vuelve a enviar inmediatamente la misma consulta (insatisfacción implícita)
  • Tasa de copia/uso: el usuario copia la salida de la IA (satisfacción implícita)
  • Tasa de corrección: el usuario edita la salida de la IA antes de utilizarla
# 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}

Informes de comparación de versiones

Al evaluar si se promociona o se hace rollback de un canary, genere una comparación lado a lado de todas las métricas entre la nueva versión y la línea base. Este informe guía la decisión de promoción.

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

Comprobación rápida

Quiere detectar automáticamente las regresiones de calidad sin revisar manualmente los paneles. ¿Qué enfoque permite lograrlo mejor?

Resumen de la supervisión

La supervisión de prompts en producción requiere hacer seguimiento de cinco dimensiones por versión:

  • Latencia (P50/P95/P99) — experiencia del usuario
  • Coste por llamada — salud financiera
  • Puntuación de calidad — muestreo automatizado con LLM-as-judge
  • Tasa de errores — fiabilidad
  • Satisfacción del usuario — valoración con pulgar y señales de reintento y copia

Almacene las métricas en una base de datos de series temporales, visualícelas en paneles y active alertas cuando se superen los umbrales. Los informes de comparación de versiones sirven para decidir las promociones y los rollbacks.

Preguntas frecuentes

¿La lección «Monitorización del rendimiento de prompts en producción» es gratis?

Sí — el texto completo de «Monitorización del rendimiento de prompts en producción» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de AI Prompt Engineering, actualiza a CoddyKit PRO. El curso de AI Prompt Engineering incluye 4 lecciones en total.

¿Qué aprenderé en «Monitorización del rendimiento de prompts en producción»?

Realice un seguimiento de la latencia, el coste, las puntuaciones de calidad y las tasas de error de cada versión del prompt. Practicas AI Prompt Engineering con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar AI Prompt Engineering?

No se requiere experiencia previa. AI Prompt Engineering en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.

¿Cuánto tiempo toma la lección «Monitorización del rendimiento de prompts en producción»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de AI Prompt Engineering?

Sí. Cada lección de AI Prompt Engineering incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Arquitectura de un registro de prompts
  2. Control de versiones para prompts
  3. Estrategias de despliegue y reversión
  4. Monitorización del rendimiento de prompts en producción
← Volver a AI Prompt Engineering