Traçage LangGraph

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.
import mlflow
mlflow.langchain.autolog()
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).
- Development
- Production
Pour les environnements de développement, installez le package MLflow complet avec les extras Databricks et les packages LangGraph/LangChain :
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.
Pour les déploiements en production, installez mlflow-tracing et les packages LangGraph/LangChain :
pip install --upgrade mlflow-tracing langgraph langchain_core langchain_openai
# Add other langchain packages if needed by your graph
Le mlflow-tracing package est optimisé pour une utilisation en production.
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 :
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.
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.
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.
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.

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