DevTurtle logo DevTurtle

LangSmith – Come monitorare un’applicazione LangChain?

guide/ Guida GenAI con LangChain

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:

Python
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:

Bash
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”:

LangSmith console - API keys
LangSmith console – 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.

LangSmith console
LangSmith console

Cliccando sulla scheda “Projects” e poi selezionando il progetto da analizzare sarà possibile visualizzare e consultare le singole traces:

LangSmith projects
LangSmith projects

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:

LangSmith traces
LangSmith traces

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:

Python
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:

LangSmith Traceable
LangSmith Traceable

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à.