Aller au contenu principal

Traçage de LangChain

LangChain Tracing à l'aide de l'autolog

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.

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 LangChain, vous devez installer MLflow et les packages LangChain pertinents (par exemple, langchain, langchain-openai).

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

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

remarque

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 :

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

Exemple d'utilisation

Python
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?",
}
)
remarque

Cet exemple ci-dessus a été confirmé comme fonctionnant avec les versions requises suivantes :

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

APIs prises en charge

Les APIs suivantes sont prises en charge par l'auto-traçage pour LangChain.

  • invoke
  • batch
  • stream
  • ainvoke
  • abatch
  • astream
  • get_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.

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