Ottimizzazione, Debugging e Failure Analysis per Agenti AI
Gli agenti AI possono fallire in modi prevedibili e categorizzabili. Comprendere queste categorie permette di prevenire i problemi e reagire rapidamente quando si verificano.
Cause comuni:
Contromisure:
Cause comuni:
Contromisure:
Contromisure:
Contromisure:
Contromisure:
Il debugging dei prompt richiede un approccio metodico, simile al debugging del software tradizionale.
Confronta due varianti dello stesso prompt per identificare quale produce risultati migliori.
Quando un prompt fallisce, applica la tecnica dei 5 perche':
Problema: L'agente ha generato codice con bug Perche' 1: Il codice non gestisce i casi edge Perche' 2: Il prompt non specificava i casi edge Perche' 3: I requisiti non erano espliciti Perche' 4: Non c'era una checklist nel prompt Perche' 5: Il template del prompt non include una sezione "vincoli" -> Soluzione: Aggiungere una sezione [VINCOLI] al template con casi edge obbligatori
Analizza ogni componente del prompt per identificare i colli di bottiglia:
| Componente | Verifica | Azione se fallisce |
|---|---|---|
| Ruolo | L'agente adotta il ruolo? | Rinforzare con esempi |
| Contesto | Le info sono sufficienti? | Aggiungere dati rilevanti |
| Istruzione | E' chiara e non ambigua? | Semplificare e spezzare |
| Formato | L'output rispetta il formato? | Aggiungere esempio output |
| Vincoli | Sono rispettati tutti? | Prioritizzare e ridurre |
[RUOLO] Sei un senior Java developer con 10 anni di esperienza in Spring Boot. [CONTESTO] Sto migrando un monolite a microservizi. Il servizio attuale gestisce ordini e pagamenti nello stesso modulo. [ISTRUZIONE] Proponi una strategia di decomposizione che: - Separi ordini e pagamenti in due servizi - Mantenga la consistenza transazionale - Minimizzi il downtime durante la migrazione [FORMATO] Rispondi con: (1) Architettura proposta (diagramma ASCII), (2) Step di migrazione numerati, (3) Rischi e mitigazioni [EDGE CASES] Considera: rollback parziali, ordini in-flight durante la migrazione, retry dei pagamenti falliti
[TASK] Analizza questo log di errore e identifica la root cause. [CONTEXT] Applicazione Spring Boot 3.2 con PostgreSQL. L'errore si verifica solo sotto carico (>100 req/s). Il connection pool e' configurato a 10 connessioni. [FORMAT] Rispondi con: causa probabile, evidenze dal log, fix suggerito con codice.
Per ogni step del problema: 1. THOUGHT: Ragiona su cosa sai e cosa ti serve 2. ACTION: Esegui un'azione concreta (cerca, calcola, verifica) 3. OBSERVATION: Analizza il risultato dell'azione 4. Ripeti finche' non hai la risposta finale Esempio: THOUGHT: Devo capire perche' l'API ritorna 503. Potrebbe essere il circuit breaker. ACTION: Controllo i log del servizio negli ultimi 5 minuti. OBSERVATION: Ci sono 15 timeout consecutivi verso il database. THOUGHT: Il circuit breaker si e' aperto per troppi timeout DB. ACTION: Verifico lo stato del connection pool. OBSERVATION: Pool esaurito: 10/10 connessioni attive, 25 in attesa. ANSWER: Il circuit breaker si e' aperto perche' il connection pool DB e' esaurito.
Forza il ragionamento step-by-step per problemi complessi:
Risolvi questo problema passo dopo passo. Mostra OGNI passaggio del tuo ragionamento. Non saltare alla conclusione. [PROBLEMA] Un e-commerce ha 3 server. Ogni server gestisce 1000 req/s. Il bilanciatore ha un overhead del 5%. Durante il Black Friday il traffico quadruplica. Quanti server servono per mantenere latenza < 200ms?
Esplora piu' percorsi di soluzione in parallelo e seleziona il migliore:
Per questo problema, genera 3 approcci diversi. Per ogni approccio: - Descrivi la strategia in 2 frasi - Elenca pro e contro - Stima la complessita' (bassa/media/alta) - Dai un punteggio di fattibilita' da 1 a 10 Poi scegli l'approccio migliore e sviluppalo nel dettaglio.
L'agente si pone sotto-domande per scomporre problemi complessi:
Prima di rispondere alla domanda principale, poniti e rispondi a queste sotto-domande: 1. Quali sono i prerequisiti per rispondere? 2. Quali informazioni mi mancano? 3. Posso scomporre il problema in parti piu' piccole? 4. Ci sono assunzioni implicite da rendere esplicite? Solo dopo aver risposto a tutte, formula la risposta finale.
PromptOps applica le pratiche DevOps alla gestione dei prompt: versionamento, testing, deployment e monitoraggio.
Tratta i prompt come codice sorgente:
prompt/
customer-support/
v1.0.0.md # Prompt originale
v1.1.0.md # Aggiunto tone of voice
v2.0.0.md # Ristrutturato con DEPTH
CHANGELOG.md # Storia delle modifiche
code-review/
v1.0.0.md
...
Definisci test case per ogni prompt critico:
| Test Case | Input | Output Atteso | Criterio |
|---|---|---|---|
| Happy path | Richiesta standard | Risposta completa | Tutti i requisiti presenti |
| Edge case | Input vuoto/ambiguo | Richiesta chiarimento | Non inventa dati |
| Adversarial | Prompt injection | Rifiuto educato | Non esegue istruzioni malevole |
| Performance | Input molto lungo | Risposta entro limiti | Tempo e token nel budget |
Schema per A/B testing strutturato:
Esperimento: Tono formale vs informale nel customer support Variante A: "Gentile cliente, la informiamo che..." Variante B: "Ciao! Ecco cosa puoi fare..." Metriche: - Soddisfazione utente (1-5 stelle) - Tasso di risoluzione al primo contatto - Tempo medio di conversazione - Escalation rate Durata: 2 settimane, minimo 500 interazioni per variante Decisione: Variante con p-value < 0.05 su metrica primaria
Quando un agente AI fallisce, e' fondamentale avere strategie di recupero predefinite.
Livello 1: Riprova lo stesso prompt (errori transienti) Livello 2: Riformula il prompt con piu' contesto Livello 3: Scomponi il task in sotto-task piu' semplici Livello 4: Cambia strategia/framework completamente Livello 5: Escalation a operatore umano
Definisci risposte di fallback per ogni tipo di errore:
| Errore | Fallback | Azione |
|---|---|---|
| API timeout | Risposta cached | Retry in background |
| Risposta incoerente | Template statico | Log per review |
| Rate limit | Coda con priorita' | Notifica utente |
| Context overflow | Summarize e retry | Trim automatico |
Applica il pattern Circuit Breaker alle chiamate AI:
Questa applicazione implementa gia' questo pattern nel servizio HttpResilience.
Prompt che si auto-correggono:
Dopo aver generato la risposta, esegui questi controlli: 1. La risposta contiene TUTTI gli elementi richiesti? Se no, integra. 2. Ci sono affermazioni non supportate da fatti noti? Se si', rimuovi o segnala. 3. Il tono e' coerente con le istruzioni? Se no, riscrivi. 4. La lunghezza rispetta i limiti? Se no, taglia o espandi. Se hai dovuto correggere qualcosa, mostra solo la versione corretta.
| Metrica | Descrizione | Target |
|---|---|---|
| Accuracy Rate | % risposte corrette / totale | > 95% |
| Completeness | % requisiti soddisfatti per risposta | > 90% |
| Latency P95 | Tempo di risposta al 95esimo percentile | < 5s |
| Hallucination Rate | % risposte con info false | < 2% |
| User Satisfaction | Rating medio utenti (1-5) | > 4.0 |
| Fallback Rate | % risposte che usano fallback | < 5% |
Elementi essenziali per una dashboard AI:
Implementa un ciclo di miglioramento continuo: