Nel campo dell'intelligenza artificiale, il successo di un modello non si misura solo dalla sua capacità di risolvere un problema specifico, ma anche dalla sua affidabilità e dalla coerenza delle sue prestazioni nel tempo. In un contesto in cui l'AI viene sempre più integrata in applicazioni critiche, il monitoraggio continuo dei modelli è diventato un elemento imprescindibile. LangSmith è una piattaforma che fornisce agli sviluppatori tutti gli strumenti di cui necessitano per la problem determination o per le analisi di performance sulle loro applicazioni integrate con NPL.
In questo articolo vedremo come sia possibile integrare LangSmith in una qualsiasi applicazione LangChain e analizzeremo le potenzialità del tool.
Come funziona LangSmith?
LangSmith si basa su due concetti basilari: logging e traces. Questi due elementi combinati permettono di avere una visione profonda del comportamento del modello al fine di monitorare ogni decisione presa per identificare rapidamente eventuali anomalie o comportamenti inattesi.
Il termine “traces” si riferisce a registrazioni dettagliate delle operazioni eseguite internamente dal sistema. Queste tracce forniscono informazioni su come il programma si è comportato in in base al contesto (dati forniti in input), permettendo agli sviluppatori di analizzare il funzionamento interno, di identificare eventuali anomalie o di valutarne le performance.
Nel caso dei modelli NPL, le traces possono registrare le decisioni prese durante l’elaborazione. Questo include non solo l’output finale, ma anche tutte le fasi intermedie del processo decisionale.
Prerequisiti
Per questo tutorial partiremo dal codice che abbiamo già implementato nel nostro precedente articolo su LangChain nel quale abbiamo visto come generare output strutturati. Questo programmino molto semplice utilizza il modello GPT per generare dei post da pubblicare sui social.
Per comodità riportiamo di seguito il codice:
from langchain_openai import ChatOpenAI
from langchain_core.pydantic_v1 import BaseModel, Field
class SocialPost(BaseModel):
"""Posts for social media"""
tags: str = Field(description="Post tags")
text: str = Field(description="Plain text of the post")
llm = ChatOpenAI(model="gpt-3.5-turbo")
structured_llm = llm.with_structured_output(SocialPost)
response = structured_llm.invoke("Can you write a post about a beach holiday?")
print(response)
Prima di proseguire con il tutorial è necessario registrarsi alla console di LangSmith: https://smith.langchain.com. Il tool può essere utilizzato gratuitamente purché non si sfori il limite massimo di 5k traces al mese. Per maggiori info sui costi è possibile consultare la seguente pagina: https://docs.smith.langchain.com/pricing.
Configurazione di LangSmith
Fortunatamente LangChain è nativamente integrato con LangSmith quindi per iniziare a raccogliere le metriche è sufficiente configurare le seguenti variabili d’ambiente:
export LANGCHAIN_API_KEY='...'
export LANGCHAIN_TRACING_V2='true'
export LANGCHAIN_PROJECT='social-post'
Il valore della variabile LANGCHAIN_API_KEY
deve contenere la chiave per autenticarsi a LangSmith che può essere generata dalla console web cliccando sulla voce di menù “Settings” e poi accedendo alla sezione “API Keys”:
Le API Key possono essere lette e salvate solo al momento della creazione. Successivamente sarà possibile cancellarle e ricrearle ma non sarà più possibile visualizzare il codice della chiave.
Mediante la variabile LANGCHAIN_TRACING_V2
sarà invece possibile abilitare e disabilitare la funzionalità di tracing. Per iniziare a utilizzare il tool è quindi necessario impostarla a “true”.
Infine la variabile LANGCHAIN_PROJECT
è opzionale e serve per specificare il nome del progetto per il quale si stanno raccogliendo le traces. Se non valorizzata, assumerà il valore “default”.
Una volta valorizzate queste tre variabili sarà già possibile iniziare a raccogliere dati eseguendo il programma python.
Analisi delle traces
Accedendo alla console di LangSmith sarà possibile consultare le tracce che risulteranno raccolte all’interno del progetto definito in precedenza.
Cliccando sulla scheda “Projects” e poi selezionando il progetto da analizzare sarà possibile visualizzare e consultare le singole traces:
Già in questa schermata, per ogni traccia, sono disponibili alcune informazioni molto utili:
- Input/Output
- Tempo di esecuzione (Latency)
- Token consumati
- Stima del costo
E’ inoltre possibile visualizzare nella barra di sinistra le informazioni aggregate sul totale.
Per maggiori dettagli è possibile cliccare sulla singola traccia:
Se la traccia si compone di più operazioni eseguite in sequenza, sarà possibile visualizzare i dettagli di ogni singolo step navigandoli mediante il menù sulla destra.
Il decoratore @traceable
Per un monitoraggio più preciso è possibile isolarle alcune porzioni di codice mediante il decoratore @traceable
per ottenere una tracciatura dettagliata delle esecuzioni. Ad esempio:
from langchain_openai import ChatOpenAI
from langchain_core.pydantic_v1 import BaseModel, Field
from langsmith import traceable
class SocialPost(BaseModel):
"""Posts for social media"""
tags: str = Field(description="Post tags")
text: str = Field(description="Plain text of the post")
llm = ChatOpenAI(model="gpt-3.5-turbo")
structured_llm = llm.with_structured_output(SocialPost)
@traceable
def invoke_llm():
response = structured_llm.invoke("Can you write a post about a beach holiday?")
return response
@traceable
def print_output(output):
print(output)
@traceable
def execute():
response = invoke_llm()
print_output(response)
execute()
Il risultato sarà il seguente:
Come si può vedere dall’immagine, ogni volta che è stato utilizzato il decoratore è stata registrata una tracciatura ad-hoc all’interno dello stack. Nel caso specifico, è possibile anche apprezzare la possibilità di definire una gerarchia tra le tracce (ad esempio dentro la funzione “execute” sono state invocate sia la funzione “invoke_llm” che la “print_output”). In questo modo è possibile individuare facilmente cosa ha generato anomalie o eventuali colli di bottiglia di performance.
Con i suoi strumenti di debugging avanzati e un’interfaccia user-friendly, LangSmith si posiziona come una delle piattaforme più promettenti nel campo del monitoraggio dei modelli e consente di produrre un software affidabile e di qualità.