Rastreando LangGraph
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.
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
).
- Development
- Production
Para ambientes de desenvolvimento, instale o pacote MLflow completo com Databricks extras e LangGraph/LangChain pacote:
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.
Para implantações de produção, instale mlflow-tracing
e LangGraph/LangChain pacote:
pip install --upgrade mlflow-tracing langgraph langchain_core langchain_openai
# Add other langchain packages if needed by your graph
O pacote mlflow-tracing
é otimizado para uso na produção.
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:
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:
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.
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ó.
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.
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)
.