Définir des nœuds et des arêtes pour des appels de fonctions flexibles

Concevoir des systèmes agentiques avec LangChain

Dilini K. Sumanapala, PhD

Founder & AI Engineer, Genverv, Ltd.

Créer un flux multioutils

   

  • Plusieurs outils disponibles

    • Palindrome
    • Événements historiques
    • Wikipedia

Flux complet du robot conversationnel

Concevoir des systèmes agentiques avec LangChain

Définir les fonctions du flux

   

  • Créer une fonction d'arrêt

Nœuds du robot et des outils dans le flux.

Concevoir des systèmes agentiques avec LangChain

Définir les fonctions du flux

   

  • Créer une fonction d'arrêt

    • Vérifier les appels d'outils

Règles de la fonction d'arrêt en surbrillance.

Concevoir des systèmes agentiques avec LangChain

Définir les fonctions du flux

   

  • Créer une fonction d'arrêt

    • Vérifier les appels d'outils
    • Mettre fin à la conversation s'il n'y en a pas

Règles END en surbrillance dans le flux

Concevoir des systèmes agentiques avec LangChain

Définir les fonctions du flux

   

  • Créer une fonction d'arrêt

    • Vérifier les appels d'outils
    • Mettre fin à la conversation s'il n'y en a pas    
  • Créer un appelant d'outils dynamique

    • Renvoyer la réponse d'un outil si un appel est présent

Règles call_model en surbrillance.

Concevoir des systèmes agentiques avec LangChain

Définir les fonctions du flux

   

  • Créer une fonction d'arrêt

    • Vérifier les appels d'outils
    • Mettre fin à la conversation s'il n'y en a pas    
  • Créer un appelant d'outils dynamique

    • Renvoyer la réponse d'un outil si un appel est présent
    • Appeler le LLM avec seulement le nœud du robot s'il n'y a pas d'appel d'outil

Règles call_model en surbrillance.

Concevoir des systèmes agentiques avec LangChain

Définir les fonctions du flux

   

  • Créer une fonction d'arrêt

    • Vérifier les appels d'outils
    • Mettre fin à la conversation s'il n'y en a pas    
  • Créer un appelant d'outils dynamique

    • Renvoyer la réponse d'un outil si un appel est présent
    • Appeler le LLM avec seulement le nœud du robot s'il n'y a pas d'appel d'outil
  • Compiler le graphe complet

Règles call_model en surbrillance.

Concevoir des systèmes agentiques avec LangChain

Créer une fonction de condition d'arrêt

from langgraph.graph import MessagesState, START, END


# Use MessagesState to define the state of the stopping function def should_continue(state: MessagesState):
# Get the last message from the state last_message = state["messages"][-1]
# Check if the last message includes tool calls if last_message.tool_calls: return "tools"
# End the conversation if no tool calls are present return END
Concevoir des systèmes agentiques avec LangChain

Créer un appelant d'outils dynamique

# Extract the last message from the history
def call_model(state: MessagesState):

last_message = state["messages"][-1]
# If the last message has tool calls, return the tool's response if isinstance(last_message, AIMessage) and last_message.tool_calls:
# Return the messages from the tool call return {"messages": [AIMessage(content=last_message.tool_calls[0]["response"])]}
# Otherwise, proceed with a regular LLM response return {"messages": [model_with_tools.invoke(state["messages"])]}
Concevoir des systèmes agentiques avec LangChain

Créer le graphe

workflow = StateGraph(MessagesState)












Concevoir des systèmes agentiques avec LangChain

Créer le graphe

workflow = StateGraph(MessagesState)


# Add nodes for chatbot and tools workflow.add_node("chatbot", call_model) workflow.add_node("tools", tool_node)

Nœuds du robot et des outils.

Concevoir des systèmes agentiques avec LangChain

Créer le graphe

workflow = StateGraph(MessagesState)


# Add nodes for chatbot and tools workflow.add_node("chatbot", call_model) workflow.add_node("tools", tool_node)
# Connect the START node to the chatbot workflow.add_edge(START, "chatbot")

Ajouter le nœud START au robot.

Concevoir des systèmes agentiques avec LangChain

Créer le graphe

workflow = StateGraph(MessagesState)


# Add nodes for chatbot and tools workflow.add_node("chatbot", call_model) workflow.add_node("tools", tool_node)
# Connect the START node to the chatbot workflow.add_edge(START, "chatbot")
# Define conditions, then loop back to chatbot workflow.add_conditional_edges("chatbot", should_continue, ["tools", END])

Graphe avec conditions ajoutées.

Concevoir des systèmes agentiques avec LangChain

Créer le graphe

workflow = StateGraph(MessagesState)


# Add nodes for chatbot and tools workflow.add_node("chatbot", call_model) workflow.add_node("tools", tool_node)
# Connect the START node to the chatbot workflow.add_edge(START, "chatbot")
# Define conditions, then loop back to chatbot workflow.add_conditional_edges("chatbot", should_continue, ["tools", END])
workflow.add_edge("tools", "chatbot")

Flux du graphe complet.

Concevoir des systèmes agentiques avec LangChain

Ajouter de la mémoire

# Set up memory and compile the workflow
memory = MemorySaver()

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

Flux du graphe complet.

Concevoir des systèmes agentiques avec LangChain

Passons à la pratique !

Concevoir des systèmes agentiques avec LangChain

Preparing Video For Download...