\n\n\n\n Osservabilità per le applicazioni LLM: Uno studio di caso pratico - AgntLog \n

Osservabilità per le applicazioni LLM: Uno studio di caso pratico

📖 11 min read2,150 wordsUpdated Apr 4, 2026

La crescita delle applicazioni LLM e la necessità di osservabilità

Il campo dello sviluppo software è stato radicalmente trasformato dalla rivoluzione dei modelli di linguaggio di grandi dimensioni (LLM). Dai chatbot sofisticati e generatori di contenuti intelligenti agli assistenti di codifica e strumenti di analisi dei dati, gli LLM sono integrati in un numero sempre crescente di applicazioni. Questa rapida adozione, sebbene entusiasmante, introduce una nuova classe di sfide, in particolare per ciò che riguarda la comprensione e la manutenzione di questi sistemi in produzione. Gli strumenti di monitoraggio tradizionali, progettati per software deterministici e basati su regole, spesso faticano a cogliere le sottigliezze del comportamento degli LLM.

Qui entra in gioco l’osservabilità. L’osservabilità, nel contesto delle applicazioni LLM, è la capacità di comprendere lo stato interno di un sistema alimentato da un LLM attraverso le sue uscite esterne. Va oltre i semplici controlli di salute per fornire approfondimenti su come l’LLM interpreta le richieste, genera risposte, gestisce il contesto e interagisce con strumenti o fonti di dati esterne. Senza un’osservabilità solida, il debug dei problemi di performance, garantire l’equità, identificare le allucinazioni o ottimizzare i costi possono diventare compiti scoraggianti, se non addirittura quasi impossibili. Questo articolo presenta uno studio di caso pratico sull’implementazione dell’osservabilità per un’applicazione LLM, dimostrando principi e strumenti chiave.

Studio di caso: ‘DocuChat’ – Un assistente di base di conoscenza interna

Consideriamo un’applicazione ipotetica chiamata ‘DocuChat’. DocuChat è un assistente di base di conoscenza interna progettato per aiutare i dipendenti a trovare rapidamente risposte all’interno di una vasta collezione di documenti interni (pagine Confluence, archivi Slack, wiki interni, ecc.). Utilizza un’architettura di generazione aumentata dalla ricerca (RAG):

  1. Richiesta utente: Un dipendente pone una domanda (per esempio, “Come richiedere un nuovo laptop?”).
  2. Ricerca: Il sistema cerca in un database vettoriale (popolato con embeddings di documenti interni) per trovare pezzi di documenti pertinenti.
  3. Aumento: Questi pezzi recuperati, insieme alla richiesta originale dell’utente, vengono forniti come contesto a un LLM.
  4. Generazione: L’LLM sintetizza una risposta basata sul contesto fornito e sulla richiesta dell’utente.

DocuChat utilizza GPT-4 di OpenAI per la generazione e un modello di embedding auto-ospitato per la ricerca. È costruito utilizzando Python, LangChain e un database vettoriale come Pinecone o Weaviate. Inizialmente, il team di sviluppo si è concentrato sulla funzionalità, ma man mano che l’applicazione guadagnava utenti, si sono presentate numerose domande operative:

  • Perché alcune risposte sono lente?
  • L’LLM allucina, oppure fallisce la ricerca?
  • Gli utenti sono soddisfatti delle risposte?
  • Quanto ci costa ogni richiesta?
  • Raggiungiamo i limiti di tasso dell’API?
  • Quali tipi di domande gli utenti pongono più frequentemente?

Queste domande evidenziano il bisogno critico di osservabilità.

Pilastri dell’osservabilità LLM per DocuChat

Per DocuChat, ci concentreremo sui tre pilastri tradizionali dell’osservabilità, adattati per le applicazioni LLM:

  1. Log: Registrazioni strutturate di eventi.
  2. Metrica: Misure numeriche aggregate nel tempo.
  3. Trace: Visualizzazioni di fine-a-fine delle richieste attraverso sistemi distribuiti.

Inoltre, considereremo un quarto pilastro cruciale per gli LLM: Feedback / Valutazione.

1. Log: Il ‘Cosa è successo’

I log delle applicazioni tradizionali sono vitali, ma per le applicazioni LLM, devono catturare dettagli specifici incentrati sull’LLM. Per DocuChat, abbiamo strumentato varie fasi del pipeline RAG per emettere log strutturati.

Esempio di struttura di log (JSON):

{
 "timestamp": "2023-10-27T10:30:00Z",
 "service": "docuchat-rag-api",
 "level": "INFO",
 "event_type": "user_query",
 "session_id": "abcd-1234-efgh",
 "user_id": "user_123",
 "query": "How do I request a new laptop?",
 "metadata": {
 "user_agent": "Mozilla/5.0...",
 "ip_address": "192.168.1.10"
 }
},
{
 "timestamp": "2023-10-27T10:30:01Z",
 "service": "docuchat-rag-api",
 "level": "INFO",
 "event_type": "retrieval_start",
 "session_id": "abcd-1234-efgh",
 "query": "How do I request a new laptop?",
 "vector_db_query": "laptop request policy",
 "k_value": 5
},
{
 "timestamp": "2023-10-27T10:30:02Z",
 "service": "docuchat-rag-api",
 "level": "INFO",
 "event_type": "retrieval_complete",
 "session_id": "abcd-1234-efgh",
 "retrieved_docs_count": 3,
 "retrieved_docs": [
 {"id": "doc-456", "source": "confluence/laptop-policy", "score": 0.89},
 {"id": "doc-789", "source": "slack/it-announcements", "score": 0.81}
 ],
 "retrieval_duration_ms": 1000
},
{
 "timestamp": "2023-10-27T10:30:03Z",
 "service": "docuchat-rag-api",
 "level": "INFO",
 "event_type": "llm_generation_start",
 "session_id": "abcd-1234-efgh",
 "model_name": "gpt-4",
 "temperature": 0.7,
 "prompt_tokens": 500,
 "system_prompt_hash": "abc123def456" 
},
{
 "timestamp": "2023-10-27T10:30:08Z",
 "service": "docuchat-rag-api",
 "level": "INFO",
 "event_type": "llm_generation_complete",
 "session_id": "abcd-1234-efgh",
 "response": "To request a new laptop, please visit the IT portal...",
 "completion_tokens": 150,
 "total_tokens": 650,
 "llm_duration_ms": 5000,
 "finish_reason": "stop"
},
{
 "timestamp": "2023-10-27T10:30:09Z",
 "service": "docuchat-rag-api",
 "level": "INFO",
 "event_type": "response_sent",
 "session_id": "abcd-1234-efgh",
 "total_request_duration_ms": 9000
}

Centralizzando questi log (ad esempio, utilizzando ELK Stack, Splunk, Datadog), il team può:

  • Filtrare per session_id per ricostruire un’interazione intera.
  • Identificare le chiamate di recupero o LLM lente.
  • Analizzare le richieste comuni e i loro risultati.
  • Debuggare i problemi esaminando l’esatto prompt fornito all’LLM e i documenti recuperati.

2. Metriche: Il ‘Quanto’ e ‘A quale velocità’

Le metriche forniscono approfondimenti aggregati e quantificabili sulle performance e l’utilizzo del sistema. Per DocuChat, seguiamo le metriche chiave utilizzando Prometheus e le visualizziamo con Grafana.

Metriche chiave specifiche per gli LLM:

  • Latencia:
    • docuchat_total_request_duration_seconds_sum/_count (tempo di risposta complessivo del sistema)
    • docuchat_retrieval_duration_seconds_sum/_count
    • docuchat_llm_api_duration_seconds_sum/_count
  • Utilizzo dei token & Costo:
    • docuchat_llm_prompt_tokens_total (contatore)
    • docuchat_llm_completion_tokens_total (contatore)
    • docuchat_llm_total_tokens_cost_usd_total (calcolato in base al prezzo del modello)
  • Stato dell’API:
    • docuchat_llm_api_calls_total (contatore, etichettato da model_name, status_code)
    • docuchat_vector_db_queries_total (contatore, etichettato da status_code)
    • docuchat_llm_api_rate_limit_errors_total (contatore)
  • Performance di recupero:
    • docuchat_retrieved_documents_count_sum/_count (media di documenti recuperati per richiesta)
    • docuchat_retrieved_documents_avg_score (gauge/sintesi)
  • Coinvolgimento degli utenti:
    • docuchat_successful_responses_total (contatore)
    • docuchat_failed_responses_total (contatore)

Queste metriche consentono al team di:

  • Impostare avvisi per alta latenza o un aumento dei tassi di errore.
  • Monitorare il costo finanziario dell’utilizzo degli LLM in tempo reale.
  • Identificare i colli di bottiglia nel pipeline RAG (ad esempio, recupero lento contro LLM lento).
  • Comprendere la distribuzione dei punteggi dei documenti recuperati, indicando l’efficacia del recupero.

3. Tracce: Il ‘Percorso seguito’

Le tracce forniscono una panoramica del percorso di una singola richiesta attraverso un sistema distribuito. Per DocuChat, OpenTelemetry viene utilizzato per strumentare il pipeline LangChain e tutte le chiamate API esterne. Ogni fase del processo RAG diventa un range all’interno di una traccia.

Esempio di flusso di traccia per DocuChat:

  1. Range: Richiesta utente (Range radice)
    • Attributi: user_id, query, session_id
  2. Intervallo : Recupero
    • Attributi : vector_db_query, k_value, retrieval_engine
    • Intervallo figlio : Richiesta Vector DB
      • Attributi : query_vector_size, response_time_ms
    • Intervallo figlio : Pretrattamento del documento (se pertinente)
      • Attributi : num_docs_processed
    • Eventi : “3 documenti recuperati”, “Nessun documento pertinente trovato”
  3. Intervallo : Generazione LLM
    • Attributi : model_name, temperature, prompt_tokens, completion_tokens
    • Intervallo figlio : Chiamata API OpenAI
      • Attributi : api_endpoint, status_code, request_id
    • Eventi : “La generazione del LLM è iniziata”, “La generazione del LLM è terminata”, “Allucinazione del LLM rilevata (bassa fiducia)”
  4. Intervallo : Post-trattamento & Risposta
    • Attributi : response_length_chars, sentiment_score

Con un backend di tracciamento (come Jaeger, Honeycomb, Datadog APM), il team può :

  • Ispezionare visivamente la sequenza esatta delle operazioni per una richiesta specifica.
  • Identificare quale fase del pipeline RAG consuma più tempo.
  • Comprendere il contesto trasmesso al LLM (documenti recuperati) per un tracciamento specifico.
  • Identificare errori o comportamenti inattesi in intervalli specifici.

4. Restituzione di Feedback Umano & Valutazione : Il ‘Come Fare Bene’

Gli LLM, per loro natura, sono probabilistici. Mentre i log, le metriche e i tracciati ci informano sui meccanismi del sistema, non ci dicono sempre qual è la qualità dell’uscita del LLM. È qui che il feedback umano e le metriche di valutazione automatizzate diventano cruciali.

Per DocuChat, abbiamo implementato :

  1. Pulsanti di Voto Positivo/Negativo : Meccanismo di feedback semplice su ogni risposta. I voti negativi attivano un avviso per una revisione manuale se viene raggiunta una certa soglia.
  2. Funzionalità “Segnala un Problema” : Permette agli utenti di fornire un feedback in testo libero su allucinazioni, risposte errate o informazioni non pertinenti.
  3. Valutazione di Dataset Golden : Un insieme di domande note con risposte verificate da esperti. Eseguire regolarmente DocuChat contro questo insieme di dati e valutare le risposte utilizzando metriche come :
    • RAGAS : Un framework specificamente per la valutazione RAG, che misura aspetti come fedeltà, rilevanza delle risposte, accuratezza del contesto e richiamo del contesto.
    • Similarità Semantica : Utilizzo di modelli di embedding per confrontare la risposta generata con la risposta di riferimento.
    • Presenza di Parole Chiave : Controlli semplici per la presenza di termini chiave.
  4. LLM-come-Giudice : In alcuni casi, un LLM più potente (ad esempio, GPT-4) può essere utilizzato per valutare l’uscita di un LLM meno potente (ad esempio, GPT-3.5) rispetto a un riferimento o per criteri specifici (ad esempio, concisione, tono).

L’integrazione di questi feedback consente al team di :

  • Misurare direttamente la soddisfazione degli utenti e identificare i problemi.
  • Migliorare iterativamente il pipeline RAG (ad esempio, perfezionare la strategia di segmentazione, migliorare il modello di embedding, aggiustare l’ingegneria delle richieste).
  • Monitorare la performance delle diverse versioni di LLM o degli algoritmi di recupero nel tempo.

Implementazione Pratica e Strumenti

La stack di osservabilità per DocuChat utilizza una combinazione di strumenti open-source e commerciali :

  • Logging : Il modulo logging di Python, configurato per produrre JSON, inviato a Loki (il sistema di aggregazione dei log di Grafana Labs).
  • Metriche : Prometheus per la raccolta di dati temporali, esposto tramite un endpoint FastAPI personalizzato con prometheus_client. Grafana per la creazione di dashboard e avvisi.
  • Tracciamento : OpenTelemetry Python SDK per l’instrumentazione, inviando tracciati a Jaeger. LangChain offre promemoria integrati che possono essere adattati a OpenTelemetry.
  • Piattaforme Specifiche per LLM : Strumenti come LangSmith (per tracciamento e valutazione con LangChain), Weights & Biases (per monitorare esperimenti e valutare modelli), o Arize AI (per l’osservabilità e il monitoraggio degli LLM) possono semplificare notevolmente il processo, specialmente per casi d’uso avanzati e team numerosi. Per questo studio di caso, abbiamo scelto un approccio più fai-da-te utilizzando componenti open-source per illustrare le basi.
  • Feedback Umano : Elementi di interfaccia utente personalizzati integrati in un servizio di feedback dedicato che registra verso Loki e aggiorna un contatore di metriche.

Benefici e Risultati per DocuChat

L’implementazione di questa strategia di osservabilità approfondita ha comportato vantaggi significativi per il team di DocuChat :

  • Debugging Più Veloce : Quando un utente ha segnalato una risposta errata, gli ingegneri potevano rapidamente risalire alla richiesta, esaminare i documenti recuperati, l’invito esatto e la risposta del LLM, identificando spesso problemi in pochi minuti.
  • Ottimizzazione dei Costi : Monitorando l’utilizzo dei token, il team ha identificato delle opportunità per ridurre la dimensione delle richieste e sperimentare con modelli di LLM più economici per specifici casi d’uso, portando a una riduzione del 15 % dei costi dell’API.
  • Performance Migliorata : Le metriche hanno rivelato che il database vettoriale era a volte lento. Questo ha portato a ottimizzare la strategia di indicizzazione vettoriale e ad ampliare il database, risultando in un miglioramento del 20 % del tempo di risposta medio.
  • Affidabilità Rafforzata : Gli avvisi per errori dell’API del LLM o tassi elevati di allucinazione hanno permesso un intervento proattivo, prevenendo un’insoddisfazione generalizzata tra gli utenti.
  • Iterazione Basata sui Dati : Il feedback umano e le metriche di valutazione hanno fornito prove concrete dei cambiamenti più efficaci da apportare al pipeline RAG o all’ingegneria delle richieste, promuovendo così un miglioramento continuo.
  • Trasparenza : I portatori di interesse hanno avuto una visione migliore delle performance del sistema e del valore che forniva.

Challenge e Lavori Futuri

Sebbene sia stata un successo, l’implementazione non è stata priva di sfide :

  • Volume di Dati : Le interazioni con gli LLM possono generare molti dati (richieste, risposte, contesto). Gestire e archiviare questi dati in modo efficace è cruciale.
  • Comprensione Contestuale : Interpretare le uscite degli LLM richiede ancora spesso un giudizio umano. La valutazione automatizzata sta migliorando ma non è perfetta.
  • Cambiamenti nell’Ingegneria delle Richieste : Cambiamenti frequenti alle richieste richiedono una gestione attenta delle versioni e la certezza che le metriche di valutazione rimangano pertinenti.
  • Rilevazione di Allucinazioni : Anche se alcune metriche (come la fedeltà RAGAS) aiutano, la rilevazione solida e in tempo reale delle allucinazioni rimane un campo di ricerca attivo.

I lavori futuri per DocuChat includono :

  • Integrare rilevazioni avanzate delle anomalie per le uscite degli LLM.
  • Sviluppare framework di test A/B più sofisticati per diverse configurazioni RAG.
  • Esplorare la rilevazione proattiva delle richieste avversariali o dei tentativi di iniezione delle richieste.
  • Utilizzare modelli più piccoli e adattati per compiti specifici per ottimizzare ulteriormente costi e latenza.

Conclusione

L’osservabilità non è semplicemente un vantaggio, ma un requisito fondamentale per costruire applicazioni LLM affidabili, performanti ed economiche. Come dimostra lo studio di caso di DocuChat, una strategia approfondita che incorpora registri strutturati, metriche dettagliate, tracciamenti end-to-end e un feedback umano cruciale fornisce le intuizioni necessarie per navigare nelle complessità uniche dei sistemi alimentati da LLM. Investendo nell’osservabilità sin dall’inizio, i team di sviluppo possono guadagnare fiducia nelle loro applicazioni LLM, risolvere rapidamente i problemi, ottimizzare le prestazioni e, infine, offrire un’esperienza utente superiore.

🕒 Published:

✍️
Written by Jake Chen

AI technology writer and researcher.

Learn more →
Browse Topics: Alerting | Analytics | Debugging | Logging | Observability

Partner Projects

Ai7botAgntapiAgntaiAgntzen
Scroll to Top