Traçage de LangChain

LangChain est un framework open source pour la création d'applications basées sur des LLM.
MLflow Tracing offre une capacité de traçage automatique pour LangChain. Vous pouvez activer le traçage pour LangChain en appelant la fonction mlflow.langchain.autolog, et les traces imbriquées sont automatiquement enregistrées dans l’Expérience MLflow active lors de l’invocation des chaînes.
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 LangChain, vous devez installer MLflow et les packages LangChain pertinents (par exemple, langchain, langchain-openai).
- Development
- Production
Pour les environnements de développement, installez le package complet MLflow avec les extras Databricks et les packages LangChain :
pip install --upgrade "mlflow[databricks]>=3.1" langchain langchain-openai
# Add other langchain community/core packages if needed
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 LangChain :
pip install --upgrade mlflow-tracing langchain langchain-openai
# Add other langchain community/core packages if needed
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 LangChain. Veuillez consulter l'exemple ci-dessous pour connaître les versions compatibles spécifiques des packages LangChain si vous rencontrez des problèmes.
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
Exemple d'utilisation
import mlflow
import os
from langchain.prompts import PromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain_openai import ChatOpenAI
# 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 autolog for LangChain will enable trace logging.
mlflow.langchain.autolog()
# Set up MLflow tracking to Databricks
mlflow.set_tracking_uri("databricks")
mlflow.set_experiment("/Shared/langchain-tracing-demo")
llm = ChatOpenAI(model="gpt-4o-mini", temperature=0.7, max_tokens=1000)
prompt_template = PromptTemplate.from_template(
"Answer the question as if you are {person}, fully embodying their style, wit, personality, and habits of speech. "
"Emulate their quirks and mannerisms to the best of your ability, embracing their traits—even if they aren't entirely "
"constructive or inoffensive. The question is: {question}"
)
chain = prompt_template | llm | StrOutputParser()
# Let's test another call
chain.invoke(
{
"person": "Linus Torvalds",
"question": "Can I just set everyone's access to sudo to make things easier?",
}
)
Cet exemple ci-dessus a été confirmé comme fonctionnant avec les versions requises suivantes :
pip install openai==1.30.5 langchain==0.2.1 langchain-openai==0.1.8 langchain-community==0.2.1 mlflow==2.14.0 tiktoken==0.7.0
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.
APIs prises en charge
Les APIs suivantes sont prises en charge par l'auto-traçage pour LangChain.
invokebatchstreamainvokeabatchastreamget_relevant_documents(pour les récupérateurs)__call__(pour les chaînes et les AgentExecutors)
Personnaliser le comportement de traçage
Parfois, vous souhaiterez peut-être personnaliser les informations enregistrées dans les traces. Vous pouvez y parvenir en créant un gestionnaire de rappel personnalisé qui hérite de mlflow.langchain.langchain_tracer.MlflowLangchainTracer. MlflowLangchainTracer est un gestionnaire de rappel qui est injecté dans le processus d'inférence du modèle langchain pour enregistrer automatiquement les traces. Il start une nouvelle étendue à la suite d'un ensemble d'actions de la chaîne telles que on_chain_start, on_llm_start, et la conclut lorsque l'action est terminée. Diverses métadonnées telles que le type de portée, le nom de l'action, l'entrée, la sortie, la latence sont automatiquement enregistrées dans la portée.
L'exemple suivant montre comment enregistrer un attribut supplémentaire au span lorsqu'un modèle de chat start à s'exécuter.
from mlflow.langchain.langchain_tracer import MlflowLangchainTracer
class CustomLangchainTracer(MlflowLangchainTracer):
# Override the handler functions to customize the behavior. The method signature is defined by LangChain Callbacks.
def on_chat_model_start(
self,
serialized: Dict[str, Any],
messages: List[List[BaseMessage]],
*,
run_id: UUID,
tags: Optional[List[str]] = None,
parent_run_id: Optional[UUID] = None,
metadata: Optional[Dict[str, Any]] = None,
name: Optional[str] = None,
**kwargs: Any,
):
"""Run when a chat model starts running."""
attributes = {
**kwargs,
**metadata,
# Add additional attribute to the span
"version": "1.0.0",
}
# Call the _start_span method at the end of the handler function to start a new span.
self._start_span(
span_name=name or self._assign_span_name(serialized, "chat model"),
parent_run_id=parent_run_id,
span_type=SpanType.CHAT_MODEL,
run_id=run_id,
inputs=messages,
attributes=kwargs,
)
Désactiver le suivi automatique
Le traçage automatique pour LangChain peut être désactivé globalement en appelant mlflow.langchain.autolog(disable=True) ou mlflow.autolog(disable=True).