Definire nodi e archi per chiamate di funzione flessibili

Progettare sistemi agentici con LangChain

Dilini K. Sumanapala, PhD

Founder & AI Engineer, Genverv, Ltd.

Creare un workflow multi-strumento

   

  • Più strumenti disponibili

    • Palindrome
    • Eventi storici
    • Wikipedia

Flusso completo del chatbot

Progettare sistemi agentici con LangChain

Definire funzioni del workflow

   

  • Crea una funzione di arresto

Nodi chatbot e strumenti del workflow.

Progettare sistemi agentici con LangChain

Definire funzioni del workflow

   

  • Crea una funzione di arresto

    • Controlla le chiamate agli strumenti

Regole della funzione di arresto evidenziate.

Progettare sistemi agentici con LangChain

Definire funzioni del workflow

   

  • Crea una funzione di arresto

    • Controlla le chiamate agli strumenti
    • Termina la conversazione se assenti

Regole END evidenziate nel workflow

Progettare sistemi agentici con LangChain

Definire funzioni del workflow

   

  • Crea una funzione di arresto

    • Controlla le chiamate agli strumenti
    • Termina la conversazione se assenti    
  • Crea un chiamante di strumenti dinamico

    • Restituisce la risposta di uno strumento se presente una chiamata

Regole di Call_model evidenziate.

Progettare sistemi agentici con LangChain

Definire funzioni del workflow

   

  • Crea una funzione di arresto

    • Controlla le chiamate agli strumenti
    • Termina la conversazione se assenti    
  • Crea un chiamante di strumenti dinamico

    • Restituisce la risposta di uno strumento se presente una chiamata
    • Invoca l'LLM con solo il nodo chatbot se non ci sono chiamate

Regole di Call_model evidenziate.

Progettare sistemi agentici con LangChain

Definire funzioni del workflow

   

  • Crea una funzione di arresto

    • Controlla le chiamate agli strumenti
    • Termina la conversazione se assenti    
  • Crea un chiamante di strumenti dinamico

    • Restituisce la risposta di uno strumento se presente una chiamata
    • Invoca l'LLM con solo il nodo chatbot se non ci sono chiamate
  • Compila il grafo completo

Regole di Call_model evidenziate.

Progettare sistemi agentici con LangChain

Crea una funzione di condizione di arresto

from langgraph.graph import MessagesState, START, END


# Usa MessagesState per definire lo stato della funzione di arresto def should_continue(state: MessagesState):
# Ottieni l'ultimo messaggio dallo stato last_message = state["messages"][-1]
# Verifica se l'ultimo messaggio include chiamate agli strumenti if last_message.tool_calls: return "tools"
# Termina la conversazione se non ci sono chiamate agli strumenti return END
Progettare sistemi agentici con LangChain

Crea un chiamante di strumenti dinamico

# Estrai l'ultimo messaggio dalla cronologia
def call_model(state: MessagesState):

last_message = state["messages"][-1]
# Se l'ultimo messaggio ha chiamate agli strumenti, restituisci la risposta dello strumento if isinstance(last_message, AIMessage) and last_message.tool_calls:
# Restituisci i messaggi dalla chiamata allo strumento return {"messages": [AIMessage(content=last_message.tool_calls[0]["response"])]}
# Altrimenti, procedi con una normale risposta dell'LLM return {"messages": [model_with_tools.invoke(state["messages"])]}
Progettare sistemi agentici con LangChain

Crea il grafo

workflow = StateGraph(MessagesState)












Progettare sistemi agentici con LangChain

Crea il grafo

workflow = StateGraph(MessagesState)


# Aggiungi i nodi per chatbot e strumenti workflow.add_node("chatbot", call_model) workflow.add_node("tools", tool_node)

Nodi chatbot e strumenti.

Progettare sistemi agentici con LangChain

Crea il grafo

workflow = StateGraph(MessagesState)


# Aggiungi i nodi per chatbot e strumenti workflow.add_node("chatbot", call_model) workflow.add_node("tools", tool_node)
# Collega il nodo START al chatbot workflow.add_edge(START, "chatbot")

Aggiungi il nodo START al chatbot.

Progettare sistemi agentici con LangChain

Crea il grafo

workflow = StateGraph(MessagesState)


# Aggiungi i nodi per chatbot e strumenti workflow.add_node("chatbot", call_model) workflow.add_node("tools", tool_node)
# Collega il nodo START al chatbot workflow.add_edge(START, "chatbot")
# Definisci le condizioni, poi torna al chatbot workflow.add_conditional_edges("chatbot", should_continue, ["tools", END])

Grafo con condizioni aggiunte.

Progettare sistemi agentici con LangChain

Crea il grafo

workflow = StateGraph(MessagesState)


# Aggiungi i nodi per chatbot e strumenti workflow.add_node("chatbot", call_model) workflow.add_node("tools", tool_node)
# Collega il nodo START al chatbot workflow.add_edge(START, "chatbot")
# Definisci le condizioni, poi torna al chatbot workflow.add_conditional_edges("chatbot", should_continue, ["tools", END])
workflow.add_edge("tools", "chatbot")

Workflow del grafo completo.

Progettare sistemi agentici con LangChain

Aggiungere la memoria

# Configura la memoria e compila il workflow
memory = MemorySaver()

app = workflow.compile( checkpointer=memory)
display(Image(app.get_graph() .draw_mermaid_png()))

Workflow del grafo completo.

Progettare sistemi agentici con LangChain

Esercitiamoci!

Progettare sistemi agentici con LangChain

Preparing Video For Download...