1. Parti dalle domande operative, non dai campi
L’osservabilità di un’applicazione di IA consiste nel poter ricostruire il suo comportamento a partire da segnali correlati: quale richiesta è arrivata, quali fasi sono state eseguite, che cosa è andato storto e quanto è durata ogni parte. In un’applicazione che già chiama un modello tramite API, strumentare non significa copiare ogni input e risposta in un registro. Significa raccogliere abbastanza contesto per rispondere alle domande operative in modo ripetibile, con un ambito e una politica sui dati ben definiti.
Prima di scegliere una libreria o creare una dashboard, metti per iscritto le domande a cui il team deve poter rispondere durante un incidente. Per esempio: quale versione dell’applicazione e del prompt ha gestito questa richiesta? Il modello è stato chiamato una volta o ci sono stati tentativi successivi? Quale strumento è stato eseguito e quanto è durato? Il ritardo si è verificato nell’applicazione, nella rete, nel modello o in uno strumento? Quale uso ha comunicato l’API? Queste domande definiscono il progetto: i campi che non aiutano a rispondere non dovrebbero essere aggiunti per abitudine.
È utile distinguere l’osservabilità dalla valutazione dei contenuti. Questo articolo si concentra sul percorso tecnico e operativo di una richiesta: errori, latenza, tentativi successivi e consumi comunicati. Non propone un metodo per decidere se una risposta è vera, scegliere un fornitore o progettare un flusso conversazionale. Mantenere chiaro questo confine aiuta a contenere i registri ed evita di presentare un segnale tecnico come prova di qualità.
Domande diagnostiche e segnali minimi
Usa questa tabella per giustificare ogni campo o dashboard. Se un segnale non supporta una decisione o un’indagine concreta, valuta se ometterlo.
| Domanda | Segnali utili | Possibile decisione |
|---|---|---|
| Che cosa è successo a una richiesta specifica? | ID della richiesta, stato finale, fasi e timestamp | Analizzare una richiesta specifica |
| Dove si concentra la latenza? | Durata totale e durata di ogni fase | Esaminare la fase più lenta |
| C’è stato un nuovo tentativo? | Numero del tentativo, motivo e risultato di ogni tentativo | Correggere limiti, politica dei tentativi o dipendenze |
| Che cosa ha comunicato l’API sull’uso? | Campi di utilizzo disponibili nella risposta, conservati come dati segnalati | Confrontare i consumi osservati senza confonderli con la fatturazione |
| Sono stati esposti dati sensibili? | Esito della redazione o della classificazione, senza conservare il dato sensibile | Adeguare filtri e controlli di accesso |
2. Disegna il ciclo e definisci come correlare gli eventi
Una richiesta che nell’interfaccia sembra una singola chiamata può includere diverse operazioni: convalida dell’input, costruzione del prompt, chiamata al modello, elaborazione della risposta e, talvolta, chiamata a uno strumento. Se ci sono nuovi tentativi, ciascuno deve risultare visibile come operazione distinta. Il registro deve permettere di riunire questi eventi senza dipendere da identificativi che l’API esterna non garantisce.
Genera un identificativo della richiesta nella tua applicazione quando questa viene ricevuta e propagalo tra i componenti che controlli. Aggiungi identificativi secondari o numeri di fase per distinguere le chiamate al modello e agli strumenti. Se il fornitore restituisce un identificativo della richiesta, conservalo come campo aggiuntivo per facilitare eventuali verifiche o richieste di assistenza, ma non usarlo come unico collegamento: potrebbe non essere disponibile per tutti gli errori o i percorsi di esecuzione.
Definisci anche i limiti temporali di ogni misurazione. La durata totale inizia quando l’applicazione accetta la richiesta e termina quando la risposta viene consegnata o viene registrato l’errore finale. La durata di una chiamata al modello va dall’avvio della chiamata alla ricezione della risposta o dell’errore. Una chiamata a uno strumento ha i propri tempi di inizio e fine. Registrare millisecondi senza precisare questi limiti produce dati che non possono essere confrontati con sicurezza.
Mappa minima del percorso
Applica questo schema a una richiesta semplice e amplialo solo se l’applicazione include davvero altre fasi.
- 01Crea request_id al confine di ingresso dell’applicazione e registra l’ora di inizio.
- 02Convalida e prepara la richiesta; associa una versione del prompt senza salvarne automaticamente il contenuto.
- 03Registra ogni chiamata al modello come una fase, con numero del tentativo, modello richiesto, configurazione rilevante e tempi.
- 04Se viene chiamato uno strumento, registra il nome, l’eventuale versione dello schema, la durata, lo stato e un risultato normalizzato.
- 05Registra la risposta finale o l’errore terminale, l’ora di chiusura e la durata complessiva.
3. Definisci uno schema minimo e registra ciò che l’API restituisce davvero
Uno schema minimo deve distinguere i dati generati dalla tua applicazione dai campi ricevuti dal fornitore. Tra i campi interni possono esserci l’identificativo della richiesta, la fase, il numero del tentativo, lo stato, i timestamp e le versioni del codice e del prompt. Il modello richiesto, la configurazione e l’identificativo restituito dal fornitore possono aiutare a ricostruire l’esecuzione, ma la loro origine deve essere indicata chiaramente.
L’uso comunicato da un’API non è un dato universale. Può variare a seconda dell’endpoint, del modello, della modalità, della versione o del tipo di risposta; può inoltre mancare in caso di errori o risposte parziali. La documentazione disponibile per questa guida non identifica un fornitore specifico e non consente di affermare che esista un elenco universale di campi. Implementa quindi un adattatore per ogni API e consulta la relativa documentazione primaria aggiornata per verificare nomi, unità e condizioni. Memorizza il risultato come «uso segnalato dall’API», indicando quali campi erano presenti; non trasformare un valore mancante in zero senza distinguerlo.
Separa anche il tempo misurato dall’applicazione dall’eventuale durata comunicata dal fornitore. Il primo misura il percorso nel tuo sistema; il secondo, se esiste, segue la definizione del fornitore. Indica sempre le unità, per esempio millisecondi per le durate, e stabilisci se i timestamp sono salvati in UTC. Convenzioni costanti permettono di confrontare le richieste e individuare variazioni senza mescolare orologi o intervalli diversi.
Schema iniziale per richiesta e fase
I campi di utilizzo del fornitore variano: conserva soltanto quelli offerti dalla risposta documentata dell’API per la configurazione utilizzata.
| Gruppo | Campi consigliati | Origine |
|---|---|---|
| Correlazione | request_id interno; stage_id o numero della fase | Applicazione |
| Versioni | versione dell’applicazione; versione del prompt; modello richiesto | Applicazione e configurazione |
| Tempo | inizio, fine e durata totale; durata per fase; unità | Applicazione |
| Stato | risultato finale normalizzato; categoria di errore; tentativo | Applicazione |
| Fornitore | ID della richiesta restituito, se disponibile; modello effettivo, se documentato | Risposta API |
| Uso | campi di utilizzo documentati dall’API per quella specifica operazione; indicazione dei campi mancanti | Risposta API |
| Strumenti | nome, versione rilevante, stato e durata | Applicazione |
4. Strumenta eventi strutturati dall’inizio alla fine
I registri strutturati sono più semplici da filtrare e raggruppare rispetto ai messaggi in prosa. Definisci nomi stabili per eventi, stati e campi; evita che ogni componente usi un’etichetta diversa per lo stesso concetto. Per iniziare non serve scegliere una piattaforma di osservabilità specifica: puoi emettere eventi JSON dall’applicazione ed esportarli nella piattaforma già usata dal team.
Un modello utile consiste nell’emettere un evento di inizio e uno di fine per ogni fase, oppure un solo evento di chiusura che includa inizio, fine ed esito quando la fase è breve e non occorre un aggiornamento in tempo reale. Per le operazioni lunghe, l’evento finale deve mantenere il collegamento con la richiesta originaria. Se utilizzi tracce distribuite, propaga il relativo contesto attraverso i servizi e le code che controlli; verifica che l’identificativo non vada perso nel passaggio da un’attività sincrona a una asincrona.
L’esempio seguente è pseudocodice schematico, non un’integrazione eseguibile con un’API: i nomi dei campi per risposte ed errori dipendono dall’SDK e dal fornitore. Nell’implementazione effettiva, adatta l’estrazione dei dati di utilizzo e degli errori alla documentazione aggiornata e assicurati che il blocco delle eccezioni non registri automaticamente contenuti che potrebbero includere dati sensibili.
Sequenza di strumentazione
Integra la telemetria nel punto in cui l’applicazione dispone del contesto completo e adatta ogni risposta esterna prima di inviarla al sistema di registrazione.
- 01Crea l’identificativo interno della richiesta e associa ambiente e versione dell’applicazione.
- 02Apri un evento o uno span per ogni operazione importante; includi l’ID della richiesta e quello della fase.
- 03Misura inizio, fine e durata usando la stessa unità e un orologio monotono per gli intervalli.
- 04Normalizza stati e categorie di errore; conserva separatamente il codice esterno, se disponibile e consentito.
- 05Estrai soltanto i campi di utilizzo documentati per quella specifica operazione e indica esplicitamente quelli mancanti.
- 06Applica la redazione prima di esportare gli eventi e verifica il risultato con dati sintetici.
5. Riduci al minimo i dati sensibili prima di salvarli o esportarli
L’osservabilità non richiede di conservare prompt completi, risposte integrali o argomenti degli strumenti per ogni richiesta. Questi contenuti possono includere dati personali, segreti, informazioni commerciali o materiale non necessario per rispondere a domande operative. Inizia con metadati e segnali derivati: identificativi opachi, versioni, lunghezze, categorie di errore, stati e tempi.
Decidi, campo per campo, quale trattamento applicare: escludere, redigere, trasformare oppure conservare con accesso limitato e tempi di conservazione ridotti. Per correlare un evento a un’entità aziendale può bastare una chiave pseudonimizzata o un riferimento interno che solo un sistema autorizzato può risolvere. Un hash non garantisce l’anonimato se il valore originale è prevedibile o confrontabile con un elenco: non considerarlo automaticamente una soluzione di privacy.
Verifica la redazione prima di abilitare la registrazione in produzione. Usa esempi sintetici che includano casi tipici e varianti: un indirizzo email nell’input, un token in un’intestazione o un dato riservato nella risposta di uno strumento. Controlla sia l’evento in uscita dall’applicazione sia quello che arriva all’archivio: una regola applicata soltanto nella dashboard, o dopo l’esportazione, lascia i dati esposti durante il trasferimento.
Scelte di minimizzazione per tipo di dato
La classificazione dipende dal contesto legale, contrattuale e di sicurezza dell’organizzazione; questa tabella è una guida progettuale, non una valutazione giuridica.
| Dato | Trattamento iniziale | Motivo |
|---|---|---|
| Identificativo interno della richiesta | Conservarlo con accesso operativo controllato | Serve per correlare gli eventi |
| Versione del prompt o dell’applicazione | Conservarla come etichetta stabile | Permette di confrontare le esecuzioni |
| Testo completo dell’input o dell’output | Escluderlo per impostazione predefinita; se indispensabile, limitarne accesso e conservazione | Può contenere informazioni sensibili |
| Credenziali e token di accesso | Non registrarli; bloccarli o redigerli al confine di raccolta | La loro esposizione può consentire accessi non autorizzati |
| Identificativo del cliente | Usare un riferimento pseudonimizzato, se sufficiente per la diagnosi | Riduce l’esposizione diretta |
| Codice di errore e stato normalizzati | Conservarli senza includere il corpo grezzo della risposta | Supportano la diagnosi con un rischio minore |
Verifica della redazione prima della produzione
Includi test automatizzati nel codice che prepara o esporta gli eventi.
- 01Prepara input e risposte sintetici con dati sensibili fittizi.
- 02Esegui la strumentazione e acquisisci l’evento immediatamente prima dell’esportazione.
- 03Verifica che i campi vietati siano assenti o redatti e che non compaiano nei messaggi di errore.
- 04Ripeti la prova con eccezioni, nuovi tentativi e chiamate agli strumenti, non soltanto con la risposta finale.
- 05Controlla chi può consultare i registri e stabilisci tempi di conservazione coerenti con l’uso operativo.
6. Crea dashboard e avvisi per indagare, non per accumulare grafici
Una dashboard utile risponde a una domanda e chiarisce quale azione può seguirne. Inizia con tre viste: stato delle richieste, distribuzione della latenza e uso segnalato. Per lo stato, mostra richieste completate, fallite e prive di esito finale, suddivise per categoria di errore. Per la latenza, mostra la durata totale e quella di ogni fase, usando percentili oltre alle medie, perché una media può nascondere una coda di richieste lente. Per l’uso, mostra soltanto i campi disponibili e suddividi i dati per modello, versione o tipo di richiesta quando ciò aiuta a individuare variazioni.
Gli avvisi devono rappresentare condizioni che qualcuno può indagare o correggere. Un tasso di errore che supera il livello abituale per un intervallo definito può giustificare un avviso; un singolo errore può rimanere nel registro senza richiedere l’intervento immediato di un team. Le soglie dipendono dal volume e dalle aspettative del servizio, quindi non è opportuno fissare un valore universale senza dati. Aggiungi la finestra di osservazione, il responsabile e il collegamento alla query o alla procedura di risposta.
Non presentare come importo fatturato una stima di costo basata sull’uso segnalato. Per una stima interna, moltiplica le unità disponibili per i prezzi e le regole applicabili allo specifico account e alla relativa configurazione; etichetta il risultato come stima. Gli importi effettivi possono dipendere da condizioni che non si ricavano dal solo evento di risposta: per qualsiasi riconciliazione, verifica la documentazione ufficiale aggiornata e i dati di fatturazione del fornitore pertinente.
Dashboard diagnostica iniziale
Aggiungi dimensioni soltanto quando aiutano a individuare una causa senza esporre inutilmente informazioni personali.
| Vista | Misure | Utilità diagnostica |
|---|---|---|
| Stato | richieste totali, completate, fallite e categoria di errore | Rilevare variazioni nel tasso di errore |
| Latenza | durata totale e per fase; mediana e percentili | Individuare fasi lente e code lunghe |
| Nuovi tentativi | tentativi per richiesta, motivo ed esito | Rilevare errori nascosti o chiamate eccessive |
| Uso comunicato | valori presenti per API, modello e versione | Osservare variazioni nell’uso segnalato |
| Qualità della telemetria | eventi senza ID, eventi senza chiusura, campi attesi mancanti | Individuare una strumentazione incompleta |
7. Analizza una richiesta non riuscita in modo riproducibile
Quando arriva una segnalazione, individua prima l’ID interno della richiesta e verifica che corrisponda all’ambiente e al periodo corretti. Raccogli gli eventi e ordinali per orario e fase. Prima di interpretare il risultato, verifica che la traccia sia completa: sono presenti gli eventi di inizio e chiusura? Mancano fasi relative agli strumenti? Il registro indica un errore terminale o soltanto un tentativo fallito? Un’esecuzione incompleta può sembrare un errore del modello quando, in realtà, è semplicemente mancata la registrazione dei dati.
Ricostruisci poi versioni e sequenza: codice dell’applicazione, versione del prompt, modello richiesto ed eventuale modello effettivamente osservato, numero di tentativi, strumenti e relativi stati. Confronta la durata totale con la somma delle fasi, tenendo conto dell’elaborazione locale, delle code e dei tempi non strumentati. Se la somma non torna, annotalo come lacuna della telemetria, non come prova di una causa.
Infine, separa i fatti dalle ipotesi. Un timeout del fornitore può essere registrato come esito di un tentativo, ma da solo non dimostra perché si sia verificato. Uno strumento lento può spiegare una parte del tempo misurato, ma non necessariamente il risultato finale. Registra ciò che si sa, ciò che manca e quale verifica permetterebbe di distinguere le diverse ipotesi. Questo metodo evita di attribuire cause che il registro non dimostra.
Procedura di indagine
Segui lo stesso ordine per ogni incidente, così da mantenere una ricostruzione verificabile.
- 01Cerca il request_id interno e verifica ambiente, data e versione dell’applicazione.
- 02Ordina gli eventi per inizio e fase; controlla la presenza di lacune o chiusure mancanti.
- 03Ricostruisci prompt, modello, configurazione, tentativi e strumenti a partire da versioni e identificativi registrati.
- 04Confronta la durata totale con quella delle singole fasi e individua la parte non spiegata.
- 05Esamina stati, categorie di errore e campi di utilizzo disponibili, distinguendo un dato assente da un valore pari a zero.
- 06Separa i fatti osservati dalle ipotesi; esegui un’ulteriore verifica prima di dichiarare una causa.
- 07Documenta il campo o l’evento mancante e aggiungi un test per verificare che la strumentazione copra quel caso.
8. Verifica la strumentazione e ampliala per fasi
Anche la strumentazione richiede test: l’applicazione può funzionare pur perdendo gli ID, omettendo l’evento di chiusura o registrando dati che avrebbero dovuto essere redatti. Esegui test controllati per esito positivo, errore, timeout, nuovo tentativo e chiamata a uno strumento. Per ciascun caso, controlla l’intera sequenza dall’evento in ingresso all’esito finale, oltre ai permessi e alla redazione prima dell’esportazione.
Inizia con un percorso di produzione circoscritto e verifica che le query rispondano a domande reali. Controlla il volume generato e verifica che il team riesca a trovare una richiesta senza cercare manualmente in sistemi diversi. Adegua la selezione degli eventi e i tempi di conservazione prima di estendere la copertura. L’obiettivo non è massimizzare il volume della telemetria, ma mantenere evidenze sufficienti e consultabili per gestire il sistema.
Le convenzioni di telemetria e i campi di utilizzo delle API possono cambiare. Assegna una versione al tuo schema interno e convalida gli adattatori quando cambiano SDK, API o configurazione. Se il fornitore modifica una risposta, il livello di normalizzazione dovrebbe consentire di adattarsi senza obbligare ogni dashboard e query a dipendere dai nomi esterni. I principi generali di osservabilità possono aiutare a organizzare segnali e tracce, ma non sostituiscono la documentazione tecnica primaria per i campi o la fatturazione di uno specifico fornitore.
Lista di controllo per l’accettazione
Non considerare completa la strumentazione prima di avere verificato eventi e privacy con casi di test controllati.
| Caso | Verifica | Risultato atteso |
|---|---|---|
| Esito positivo | Richiesta e fasi sono correlate | Un ID interno permette di ricostruire il percorso |
| Errore API | Stato, categoria e chiusura sono registrati | L’errore non viene confuso con un evento mancante |
| Nuovo tentativo | Ogni tentativo è distinto e ordinato | Il tentativo fallito non scompare se poi si verifica un successo |
| Strumento | Nome, durata e stato vengono registrati | La fase si distingue dalla chiamata al modello |
| Uso assente | Campo non restituito dall’API | È indicato come non comunicato, non come zero |
| Dato sintetico sensibile | Evento ispezionato prima dell’esportazione | Il valore non compare nel registro esportato |
Questioni aperte
- Non è specificato un fornitore né una specifica API; quindi non è possibile affermare quali campi di utilizzo o errore restituisca, né in quali condizioni possano mancare.
- La guida generale non definisce prezzi, condizioni dell’account o addebiti finali. Per qualsiasi stima occorre verificare la documentazione ufficiale aggiornata e la fatturazione del fornitore e del periodo pertinenti.
- I tempi di conservazione, i controlli di accesso e il trattamento dei dati devono essere determinati in base al contesto legale, contrattuale e di sicurezza di ciascuna organizzazione.
Continua a esplorare
Fonti consultate
Correzioni e trasparenza
Se trovi un dato errato o non aggiornato, inviaci la pagina e la fonte da verificare.
Proponi una correzione