Aller au contenu principal

Traçage LangGraph

LangChain Tracing à l'aide de l'autolog

LangGraph est une bibliothèque open source permettant de créer des applications multi-acteurs, avec état, basées sur des LLM, utilisées pour créer des workflows d’agents et multi-agents.

MLflow Tracing offre une capacité de traçage automatique pour LangGraph, en tant qu'extension de son intégration LangChain. En activant le traçage automatique pour LangChain en appelant la fonction mlflow.langchain.autolog, MLflow capturera automatiquement l'exécution du Graphe dans une trace et l'enregistrera dans l'Experimentation MLflow active.

Python
import mlflow

mlflow.langchain.autolog()
remarque

Sur les clusters de compute serverless, l'autologging n'est pas activé automatiquement. Vous devez appeler explicitement mlflow.langchain.autolog() pour activer le traçage automatique de cette intégration.

Prérequis

Pour utiliser MLflow Tracing avec LangGraph, vous devez installer MLflow et les packages LangGraph et LangChain pertinents (par exemple, langgraph, langchain_core, langchain_openai).

Pour les environnements de développement, installez le package MLflow complet avec les extras Databricks et les packages LangGraph/LangChain :

Bash
pip install --upgrade "mlflow[databricks]>=3.1" langgraph langchain_core langchain_openai
# Add other langchain packages if needed by your graph

Le package mlflow[databricks] complet inclut toutes les fonctionnalités pour le développement local et l’expérimentation sur Databricks.

remarque

MLflow 3 est fortement recommandé pour une expérience de traçage optimale avec LangGraph, car il repose sur l'intégration d'autologging LangChain.

Avant d'exécuter les exemples, vous devrez configurer votre environnement :

Pour les utilisateurs en dehors des notebooks Databricks : Définissez vos variables d'environnement Databricks :

Bash
export DATABRICKS_HOST="https://your-workspace.cloud.databricks.com"
export DATABRICKS_TOKEN="your-personal-access-token"

Pour les utilisateurs dans les Notebooks Databricks : ces identifiants sont définis automatiquement pour vous.

Clés API : Assurez-vous que les clés API de votre fournisseur LLM sont configurées. Pour les environnements de production, utilisez AI Gateway ou les secrets Databricks au lieu de valeurs codées en dur pour une gestion sécurisée des clés API.

Bash
export OPENAI_API_KEY="your-openai-api-key"
# Add other provider keys as needed

Utilisation

L'exécution du code suivant générera une trace pour le graphe, comme illustré dans le clip vidéo ci-dessus.

Python
from typing import Literal
import os
import mlflow

from langchain_core.messages import AIMessage, ToolCall
from langchain_core.outputs import ChatGeneration, ChatResult
from langchain_core.tools import tool
from langchain_openai import ChatOpenAI
from langgraph.prebuilt import create_react_agent

# Ensure your OPENAI_API_KEY (or other LLM provider keys) is set in your environment
# os.environ["OPENAI_API_KEY"] = "your-openai-api-key" # Uncomment and set if not globally configured

# Enabling tracing for LangGraph (LangChain)
mlflow.langchain.autolog()

# Set up MLflow tracking to Databricks
mlflow.set_tracking_uri("databricks")
mlflow.set_experiment("/Shared/langgraph-tracing-demo")


@tool
def get_weather(city: Literal["nyc", "sf"]):
"""Use this to get weather information."""
if city == "nyc":
return "It might be cloudy in nyc"
elif city == "sf":
return "It's always sunny in sf"


llm = ChatOpenAI(model="gpt-4o-mini")
tools = [get_weather]
graph = create_react_agent(llm, tools)

# Invoke the graph
result = graph.invoke(
{"messages": [{"role": "user", "content": "what is the weather in sf?"}]}
)

Ajout de segments au sein d'un nœud ou d'un outil

En combinant l'auto-traçage avec les APIs de traçage manuel, vous pouvez ajouter des spans enfants à l'intérieur d'un nœud ou d'un outil, pour obtenir des informations plus détaillées sur l'étape.

Prenons l'exemple du tutoriel Code Assistant de LangGraph. Le nœud check_code se compose en fait de deux validations différentes pour le code généré. Vous voudrez peut-être ajouter une étendue pour chaque validation afin de voir quelles validations ont été exécutées. Pour ce faire, il suffit de créer des étendues manuelles au sein de la fonction de nœud.

Python
def code_check(state: GraphState):
# State
messages = state["messages"]
code_solution = state["generation"]
iterations = state["iterations"]

# Get solution components
imports = code_solution.imports
code = code_solution.code

# Check imports
try:
# Create a child span manually with mlflow.start_span() API
with mlflow.start_span(name="import_check", span_type=SpanType.TOOL) as span:
span.set_inputs(imports)
exec(imports)
span.set_outputs("ok")
except Exception as e:
error_message = [("user", f"Your solution failed the import test: {e}")]
messages += error_message
return {
"generation": code_solution,
"messages": messages,
"iterations": iterations,
"error": "yes",
}

# Check execution
try:
code = imports + "\n" + code
with mlflow.start_span(name="execution_check", span_type=SpanType.TOOL) as span:
span.set_inputs(code)
exec(code)
span.set_outputs("ok")
except Exception as e:
error_message = [("user", f"Your solution failed the code execution test: {e}")]
messages += error_message
return {
"generation": code_solution,
"messages": messages,
"iterations": iterations,
"error": "yes",
}

# No errors
return {
"generation": code_solution,
"messages": messages,
"iterations": iterations,
"error": "no",
}

De cette façon, l'étendue du nœud check_code aura des étendues enfants, qui enregistrent si chaque validation échoue ou non, avec les détails de leurs exceptions.

Span enfant LangGraph

attention

Pour les environnements de production, utilisez AI Gateway ou les secrets Databricks au lieu de valeurs codées en dur pour la gestion sécurisée des clés API.

Désactiver le suivi automatique

Le traçage automatique pour LangGraph peut être désactivé globalement en appelant mlflow.langchain.autolog(disable=True) ou mlflow.autolog(disable=True).