Pular para o conteúdo principal

Rastreando LangGraph

Rastreamento de LangChain via autolog

O LangGraph é uma biblioteca de código aberto para a criação de aplicativos multiatores com LLMs, usados para criar fluxos de trabalho de agentes e multiagentes.

O MLflow Tracing fornece o recurso de rastreamento automático para o LangGraph, como uma extensão de sua integração com o LangChain. Ao ativar o rastreamento automático para LangChain chamando a função mlflow.langchain.autolog, MLflow irá capturar automaticamente a execução do gráfico em um rastreamento e log enviá-lo para a experiência MLflow ativa.

Python
import mlflow

mlflow.langchain.autolog()

Pré-requisitos

Para usar o MLflow Tracing com o LangGraph, o senhor precisa instalar o MLflow e o pacote LangGraph e LangChain relevantes (por exemplo, langgraph, langchain_core, langchain_openai).

Para ambientes de desenvolvimento, instale o pacote MLflow completo com Databricks extras e LangGraph/LangChain pacote:

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

O pacote completo do mlflow[databricks] inclui todos os recursos para desenvolvimento local e experimentação no Databricks.

nota

O MLflow 3 é altamente recomendado para obter a melhor experiência de rastreamento com o LangGraph, pois ele depende da integração de autologging do LangChain.

Antes de executar os exemplos, você precisará configurar seu ambiente:

Para usuários fora do Databricks Notebook : Defina seu Databricks variável de ambiente:

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

Para usuários do Databricks Notebook : Essas credenciais são definidas automaticamente para o senhor.

API chave : Verifique se a chave do provedor LLM API está definida:

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

Uso

A execução do código a seguir gerará um rastreamento para o gráfico, conforme mostrado no videoclipe acima.

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?"}]}
)

Adicionar extensões em um nó ou ferramenta

Combinando o rastreamento automático com o rastreamento manual APIs, o senhor pode adicionar vãos filhos dentro de um nó ou ferramenta para obter percepções mais detalhadas da etapa.

Vamos usar o tutorial do Code Assistant do LangGraph como exemplo. Na verdade, o nó check_code consiste em duas validações diferentes para o código gerado. Talvez você queira adicionar um intervalo para cada validação para ver quais validações foram executadas. Para fazer isso, basta criar extensões manuais dentro da função do nó.

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",
}

Dessa forma, a extensão do nó check_code terá extensões secundárias, que registram se cada validação falhou ou não, com seus detalhes de exceção.

LangGraph | Infância

Desativar o rastreamento automático

O rastreamento automático do LangGraph pode ser desativado globalmente chamando mlflow.langchain.autolog(disable=True) ou mlflow.autolog(disable=True).