0Pricing
AI Prompt Engineering · Lezione

Monitoraggio delle prestazioni dei prompt in produzione

Monitoraggio di latenza, costi, punteggi di qualità e tassi di errore per ogni versione del prompt

Monitoraggio delle prestazioni dei prompt in produzione è una lezione AI Prompt Engineering gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento AI Prompt Engineering, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso AI Prompt Engineering include 4 lezioni in totale.

Perché monitorare le prestazioni dei prompt?

Un prompt distribuito in produzione non è «finito». Il comportamento del modello cambia con gli aggiornamenti, gli input degli utenti variano nel tempo e i costi possono aumentare inaspettatamente. Il monitoraggio continuo rileva le regressioni prima che danneggino gli utenti e mantiene prevedibili le spese.

Metriche chiave per versione del prompt

In produzione, monitori queste cinque metriche per ogni versione del prompt:

  • Latenza media: tempo dalla richiesta alla risposta completa (P50, P95, P99)
  • Costo per chiamata: token di input × prezzo + token di output × prezzo
  • Punteggio di qualità: valutazione automatica (LLM-as-judge o metrica del task)
  • Tasso di errore: errori API + errori di analisi dell'output non valido
  • Soddisfazione degli utenti: valutazioni con il pollice, tasso di ripetizione della richiesta, abbandono della sessione

Strumentazione: registrazione delle metriche

Avvolga ogni chiamata LLM con una strumentazione che registri tutte le metriche chiave in un archivio di serie temporali o in un database, per consentire analisi e avvisi successivi.

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

Calcolo del costo per chiamata

Costo per chiamata = token di input × prezzo dell'input + token di output × prezzo dell'output. La memorizzazione del numero grezzo di token consente di ricalcolare il costo ogni volta che cambiano i prezzi.

# 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

Valutazione automatica della qualità

Utilizzi un LLM judge per valutare automaticamente la qualità dell'output su scala di produzione. Campioni il 5-10% delle chiamate per la valutazione della qualità, così da mantenere i costi sotto controllo.

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

Memorizzazione delle metriche in un database di serie temporali

I database di serie temporali (InfluxDB, TimescaleDB o anche una semplice tabella PostgreSQL con un indice sui timestamp) memorizzano in modo efficiente le metriche di ogni chiamata e supportano query di aggregazione per i dashboard.

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

Creazione di un dashboard delle metriche

I dashboard mostrano in tempo reale le cinque metriche chiave. Utilizzi Grafana (con TimescaleDB come origine dati) o un dashboard web personalizzato. Pannelli principali:

  • Latenza P50/P95/P99 nel tempo, per versione
  • Andamento del costo per chiamata (giornaliero/settimanale)
  • Percentuale del tasso di errore
  • Media mobile del punteggio di qualità
  • Punteggio di soddisfazione degli utenti
# 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()

Rilevamento delle anomalie per le regressioni dei prompt

La revisione manuale dei dashboard non rileva le regressioni lente. Il rilevamento automatico delle anomalie confronta una finestra mobile con una baseline storica e invia un avviso quando la deviazione supera una soglia.

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

Regole e soglie per gli avvisi

Definisca le regole degli avvisi sotto forma di codice, in modo che siano sottoposte al controllo delle versioni e possano essere revisionate. Avvisi comuni per il monitoraggio dei prompt:

  • Tasso di errore > 5% per 5 minuti consecutivi
  • Latenza P95 > 10 s per 3 minuti
  • Costo giornaliero > 2× della media settimanale (picco dei costi)
  • Il punteggio di qualità diminuisce di > 20% rispetto alla baseline
# 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}'

Segnali di soddisfazione degli utenti

Le metriche automatiche non rilevano ogni aspetto. Raccolga segnali espliciti e impliciti dagli utenti per integrare i punteggi di qualità:

  • Valutazione con il pollice: 👍/👎 esplicito sulle risposte dell'IA
  • Tasso di ripetizione: l'utente invia nuovamente la stessa richiesta subito dopo (insoddisfazione implicita)
  • Tasso di copia/utilizzo: l'utente copia l'output dell'IA (soddisfazione implicita)
  • Tasso di correzione: l'utente modifica l'output dell'IA prima di utilizzarlo
# 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}

Report di confronto tra versioni

Quando valuta se promuovere o sottoporre a rollback un canary, generi un confronto affiancato di tutte le metriche tra la nuova versione e la baseline. Questo report guida la decisione di promozione.

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

Verifica rapida

Desidera rilevare automaticamente le regressioni della qualità senza controllare manualmente i dashboard. Quale approccio consente di ottenere al meglio questo risultato?

Riepilogo del monitoraggio

Il monitoraggio dei prompt in produzione richiede il controllo di cinque dimensioni per ogni versione:

  • Latenza (P50/P95/P99) — esperienza dell'utente
  • Costo per chiamata — situazione finanziaria
  • Punteggio di qualità — campionamento automatico tramite LLM judge
  • Tasso di errore — affidabilità
  • Soddisfazione degli utenti — segnali relativi a valutazioni con il pollice, ripetizioni e copie

Memorizzi le metriche in un database di serie temporali, le visualizzi nei dashboard e invii avvisi quando le soglie vengono superate. I report di confronto tra versioni aiutano a decidere le promozioni e i rollback.

Domande Frequenti

La lezione «Monitoraggio delle prestazioni dei prompt in produzione» è gratuita?

Sì — il testo completo di «Monitoraggio delle prestazioni dei prompt in produzione» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso AI Prompt Engineering, passa a CoddyKit PRO. Il corso AI Prompt Engineering include 4 lezioni in totale.

Cosa imparerò in «Monitoraggio delle prestazioni dei prompt in produzione»?

Monitoraggio di latenza, costi, punteggi di qualità e tassi di errore per ogni versione del prompt Eserciti AI Prompt Engineering con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare AI Prompt Engineering?

Non è richiesta alcuna esperienza precedente. AI Prompt Engineering su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.

Quanto tempo richiede la lezione «Monitoraggio delle prestazioni dei prompt in produzione»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione AI Prompt Engineering?

Sì. Ogni lezione AI Prompt Engineering include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Architettura di un prompt registry
  2. Controllo versione dei prompt
  3. Strategie di deployment e rollback
  4. Monitoraggio delle prestazioni dei prompt in produzione
← Torna a AI Prompt Engineering