Last chance! 50% off DataCamp Premium
Sale ends in
Immagina di creare un'applicazione LLM complessa e multi-agent. È entusiasmante, ma porta con sé delle sfide: gestire lo stato dei vari agent, coordinare le loro interazioni e gestire gli errori in modo efficace. È qui che LangGraph può aiutarti.
LangGraph è una libreria dell'ecosistema LangChain progettata per affrontare queste sfide in modo diretto. LangGraph fornisce un framework per definire, coordinare ed eseguire più agent LLM (o chain) in modo strutturato.
Semplifica lo sviluppo consentendo la creazione di grafi ciclici, fondamentali per sviluppare runtime per agent. Con LangGraph possiamo creare facilmente sistemi multi-agent robusti, scalabili e flessibili.
Se vuoi saperne di più sull'ecosistema LangChain, ti consiglio questa introduzione a LangChain. Puoi anche dare un'occhiata al nostro video tutorial su LangGraph qui sotto.
LangGraph ci permette di creare applicazioni stateful e multi-attore che utilizzano LLM nel modo più semplice possibile. Estende le capacità di LangChain, introducendo la possibilità di creare e gestire grafi ciclici, fondamentali per sviluppare runtime di agent sofisticati. I concetti chiave di LangGraph includono: struttura del grafo, gestione dello stato e coordinamento.
Immagina la tua applicazione come un grafo diretto. In LangGraph, ogni nodo rappresenta un agent LLM e gli archi sono i canali di comunicazione tra questi agent. Questa struttura consente flussi di lavoro chiari e gestibili, in cui ogni agent svolge compiti specifici e passa le informazioni ad altri agent quando necessario.
Una delle funzionalità di spicco di LangGraph è la gestione automatica dello stato. Questa funzione ci permette di tracciare e mantenere le informazioni attraverso più interazioni. Man mano che gli agent svolgono i loro compiti, lo stato viene aggiornato dinamicamente, garantendo che il sistema mantenga il contesto e risponda in modo appropriato ai nuovi input.
LangGraph assicura che gli agent vengano eseguiti nell'ordine corretto e che le informazioni necessarie vengano scambiate senza soluzione di continuità. Questo coordinamento è vitale per applicazioni complesse in cui più agent devono lavorare insieme per raggiungere un obiettivo comune. Gestendo il flusso di dati e la sequenza delle operazioni, LangGraph consente agli sviluppatori di concentrarsi sulla logica di alto livello delle loro applicazioni invece che sulle complessità del coordinamento tra agent.
Come accennato sopra, LangGraph offre diversi vantaggi significativi per gli sviluppatori che lavorano con applicazioni LLM complesse. Ecco alcuni benefici reali che LangGraph offre.
LangGraph astrae le complessità associate alla gestione dello stato e al coordinamento degli agent. Ciò significa che gli sviluppatori possono definire flussi di lavoro e logica senza preoccuparsi dei meccanismi sottostanti che garantiscono la coerenza dei dati e il corretto ordine di esecuzione. Questa semplificazione accelera lo sviluppo e riduce la probabilità di errori. È una svolta!
Con LangGraph, gli sviluppatori hanno la flessibilità di definire la propria logica degli agent e i protocolli di comunicazione. Questo permette applicazioni altamente personalizzate, su misura per casi d'uso specifici. Che tu abbia bisogno di un chatbot in grado di gestire vari tipi di richieste utente o di un sistema multi-agent che esegue compiti complessi, LangGraph fornisce gli strumenti per costruire esattamente ciò che ti serve. Si tratta di darti il potere di creare.
LangGraph è progettato per supportare l'esecuzione di applicazioni multi-agent su larga scala. La sua architettura robusta può gestire un alto volume di interazioni e flussi di lavoro complessi, consentendo lo sviluppo di sistemi scalabili che possono crescere con le tue esigenze. Questo lo rende adatto ad applicazioni di livello enterprise e a scenari in cui prestazioni e affidabilità sono fondamentali.
L'affidabilità è una considerazione centrale nel design di LangGraph. La libreria include meccanismi per gestire gli errori in modo graduale, assicurando che la tua applicazione possa continuare a funzionare anche quando singoli agent incontrano problemi. Questa tolleranza ai guasti è essenziale per mantenere stabilità e robustezza in sistemi multi-agent complessi. La tranquillità è a portata di funzionalità.
Vediamo come impostare LangGraph e quali sono i concetti di base.
Per installare LangGraph, puoi usare pip:
pip install -U langgraph
Nodi: i nodi rappresentano unità di lavoro all'interno del tuo LangGraph. In genere sono funzioni Python che svolgono un compito specifico, come:
In LangGraph, puoi aggiungere nodi usando la sintassi graph.add_node(name, value).
Archi: gli archi sono canali di comunicazione tra nodi. Definiscono il flusso di informazioni e l'ordine di esecuzione. Puoi aggiungere archi usando la sintassi graph.add_edge(node1, node2).
Stato: lo stato è un oggetto centrale aggiornato nel tempo dai nodi del grafo. Gestisce lo stato interno della tua applicazione e può essere sovrascritto o esteso, a seconda dei requisiti. Lo stato può contenere elementi come:
Ecco un esempio passo-passo per creare un chatbot di base con LangGraph.
Definisci un oggetto StateGraph per strutturare il chatbot come una macchina a stati. State è una classe definita con una singola chiave messages di tipo List e usa la funzione add_messages() per aggiungere nuovi messaggi invece di sovrascriverli.
from typing import Annotated
from typing_extensions import TypedDict
from langgraph.graph import StateGraph
from langgraph.graph.message import add_messages
class State(TypedDict):
# messages have the type "list".
# The add_messages function appends messages to the list, rather than overwriting them
messages: Annotated[list, add_messages]
graph_builder = StateGraph(State)
Qui inizializziamo il modello AzureChatOpenAI e creiamo una semplice funzione di chatbot che prende come input i messaggi dello stato e genera una risposta (che viene poi aggiunta allo stato).
Questa funzione chatbot viene aggiunta come nodo chiamato “chatbot” al grafo.
from langchain_openai import AzureChatOpenAI
llm = AzureChatOpenAI(
openai_api_version=os.environ["AZURE_OPENAI_API_VERSION"],
azure_deployment=os.environ["AZURE_OPENAI_CHAT_DEPLOYMENT_NAME"],
)
def chatbot(state: State):
return {"messages": [llm.invoke(state["messages"])]}
‘’’The first argument is the unique node name
# The second argument is the function or object that will be called whenever the node is used.’’’
graph_builder.add_node("chatbot", chatbot)
Dato che stiamo costruendo un semplice chatbot, impostiamo il nodo chatbot sia come punto di ingresso sia come punto di uscita del grafo per indicare dove iniziare e terminare il processo.
# Set entry and finish points
graph_builder.set_entry_point("chatbot")
graph_builder.set_finish_point("chatbot")
Passaggio 4: compila e visualizza il grafo
Compila il grafo per creare un oggetto CompiledGraph e, facoltativamente, puoi visualizzare la struttura del grafo usando il codice seguente:
graph = graph_builder.compile()
from IPython.display import Image, display
try:
display(Image(graph.get_graph().draw_mermaid_png()))
except Exception:
pass

Infine, implementiamo un ciclo che richiede continuamente l'input dell'utente, lo elabora attraverso il grafo e stampa la risposta dell'assistente. Il ciclo termina quando l'utente digita "quit", "exit" o "q".
# Run the chatbot
while True:
user_input = input("User: ")
if user_input.lower() in ["quit", "exit", "q"]:
print("Goodbye!")
break
for event in graph.stream({"messages": [("user", user_input)]}):
for value in event.values():
print("Assistant:", value["messages"][-1].content)
Ora che abbiamo visto le basi, diamo un'occhiata ad alcune funzionalità avanzate.
LangGraph ti permette di creare tipi di nodo personalizzati per implementare logiche di agent complesse. Questo offre flessibilità e controllo sul comportamento della tua applicazione.
from typing import Annotated
from langchain_anthropic import ChatAnthropic
from langgraph.graph import StateGraph
from langgraph.graph.message import add_messages
class MyCustomNode:
def __init__(self, llm):
self.llm = llm
def __call__(self, state):
# Implement your custom logic here
# Access the state and perform actions
messages = state["messages"]
response = self.llm.invoke(messages)
return {"messages": [response]}
graph_builder = StateGraph(State)
llm = ChatAnthropic(model="claude-3-haiku-20240307")
custom_node = MyCustomNode(llm)
graph_builder.add_node("custom_node", custom_node)
Qui definiamo una classe MyCustomNode che incapsula la logica personalizzata e interagisce con l'LLM. Questo fornisce un modo più strutturato e manutenibile per implementare comportamenti di nodo complessi.
LangGraph supporta diversi tipi di archi per gestire vari schemi di comunicazione tra nodi. Un tipo utile è l'arco condizionale, che consente di prendere decisioni in base all'output di un nodo.
Per creare un arco condizionale, servono tre componenti:
Ecco un esempio in pseudocodice:
graph.add_conditional_edge(
"model",
should_continue,
{
"end": END,
"continue": "tools"
}
)
Qui, dopo la chiamata al nodo “model”, possiamo uscire dal grafo (“end”) e tornare all'utente, oppure possiamo continuare (“continue”) e chiamare uno strumento, a seconda di ciò che decide l'utente!
LangGraph offre potenti tecniche di gestione dello stato, che includono l'uso di database esterni come SQLite, PostgreSQL e MongoDB, o soluzioni di storage cloud come Amazon S3, Google Cloud Storage e Azure Blob Storage per archiviare e recuperare lo stato dei tuoi agent, abilitando affidabilità e scalabilità.
Ecco un esempio di utilizzo di un database SQLite per la gestione dello stato:
from langgraph.checkpoint.sqlite import SqliteSaver
# Connect to the SQLite database
memory = SqliteSaver.from_conn_string(":memory:")
# Compile the graph with the checkpointer
graph = graph_builder.compile(checkpointer=memory)
LangGraph fornisce anche meccanismi per la gestione degli errori:
LangGraph può essere utilizzato per creare un'ampia gamma di applicazioni.
LangGraph è ideale per sviluppare chatbot sofisticati in grado di gestire un'ampia gamma di richieste degli utenti. Sfruttando più agent LLM, questi chatbot possono elaborare richieste in linguaggio naturale, fornire risposte accurate e passare senza problemi tra diversi argomenti di conversazione. La capacità di gestire lo stato e coordinare le interazioni assicura che il chatbot mantenga il contesto e offra un'esperienza coerente.
Per applicazioni che richiedono decisioni autonome, LangGraph consente di creare agent in grado di svolgere compiti in modo indipendente sulla base degli input dell'utente e di una logica predefinita.
Questi agent possono eseguire flussi di lavoro complessi, interagire con altri sistemi e adattarsi dinamicamente a nuove informazioni. Il framework strutturato di LangGraph assicura che ogni agent operi in modo efficiente ed efficace, rendendolo adatto per attività come assistenza clienti automatizzata, elaborazione dati e monitoraggio di sistemi.
LangGraph eccelle nella creazione di applicazioni in cui più agent collaborano per raggiungere un obiettivo comune. Ad esempio, in un sistema di gestione della supply chain, agent diversi possono gestire l'inventario, elaborare gli ordini e coordinare le consegne. Le capacità di coordinamento di LangGraph assicurano che ogni agent comunichi in modo efficace, condividendo informazioni e prendendo decisioni in modo sincronizzato. Questo porta a operazioni più efficienti e a migliori prestazioni complessive del sistema.
Con LangGraph, automatizzare processi e workflow aziendali diventa semplice. È possibile progettare agent intelligenti per gestire attività come l'elaborazione di documenti, i flussi di approvazione e l'analisi dei dati. Definendo flussi di lavoro chiari e sfruttando la gestione dello stato di LangGraph, questi strumenti possono eseguire sequenze complesse di azioni senza intervento umano, riducendo gli errori e aumentando la produttività.
I sistemi di raccomandazione personalizzati possono trarre grande vantaggio dalle funzionalità di LangGraph. Impiegando più agent per analizzare il comportamento degli utenti, le preferenze e i dati contestuali, questi sistemi possono offrire suggerimenti su misura per prodotti, contenuti o servizi. La flessibilità di LangGraph consente di integrare diverse fonti di dati e algoritmi, migliorando l'accuratezza e la pertinenza delle raccomandazioni.
Nelle piattaforme educative, LangGraph può essere usato per creare ambienti di apprendimento adattivi, adatti agli stili e alle esigenze individuali. Più agent possono valutare i progressi di uno studente, fornire esercizi personalizzati e offrire feedback in tempo reale. La natura stateful di LangGraph assicura che il sistema conservi informazioni sulle prestazioni e le preferenze di ciascun discente, abilitando un'esperienza educativa più personalizzata ed efficace.
LangGraph semplifica notevolmente lo sviluppo di applicazioni LLM complesse fornendo un framework strutturato per gestire lo stato e coordinare le interazioni tra agent.
Gli sviluppi futuri per LangGraph potrebbero includere l'integrazione con altri componenti di LangChain, il supporto a nuovi modelli LLM e l'introduzione di runtime di agent più avanzati provenienti dal mondo accademico.
Se vuoi approfondire lo sviluppo di applicazioni all'interno dell'ecosistema LangChain, ti consiglio questo corso su sviluppare applicazioni LLM con LangChain.
Ryan è un lead data scientist specializzato nello sviluppo di applicazioni di IA con LLM. È dottorando in Elaborazione del Linguaggio Naturale e Knowledge Graph all’Imperial College London, dove ha anche conseguito la laurea magistrale in Informatica. Oltre alla data science, scrive una newsletter settimanale su Substack, The Limitless Playbook, in cui condivide un’idea pratica dei migliori pensatori al mondo e, di tanto in tanto, scrive sui concetti fondamentali dell’IA.
Impara l'IA con questi corsi!
{count, plural, one {Corso} other {Corsi}}
{count, plural, one {Corso} other {Corsi}}
{count, plural, one {Corso} other {Corsi}}

{count, plural, one {blog} other {blogs}}
Abid Ali Awan
10 min
{count, plural, one {blog} other {blogs}}
Tim Lu
12 min

{count, plural, one {blog} other {blogs}}
Abid Ali Awan
15 min