メインコンテンツまでスキップ

LangChain のトレース

オートログによるLangChainトレース

LangChain は、LLMを利用したアプリケーションを構築するためのオープンソースフレームワークです。

MLflow Tracing は、LangChainの自動トレース機能を提供します。mlflow.langchain.autolog 関数を呼び出すことで、LangChainのトレースを有効にすることができ、ネストされたトレースは、チェーンの呼び出し時にアクティブ なMLflow エクスペリメントに自動的に記録されます。

Python
import mlflow

mlflow.langchain.autolog()

前提 条件

LangChainでMLflow Tracingを使用するには、MLflowと関連するLangChain パッケージ (langchainlangchain-openai など) をインストールする必要があります。

開発環境の場合は、Databricks extras と LangChain パッケージを含む完全な MLflow パッケージをインストールします。

Bash
pip install --upgrade "mlflow[databricks]>=3.1" langchain langchain-openai
# Add other langchain community/core packages if needed

フル mlflow[databricks] パッケージには、Databricks でのローカル開発と実験のためのすべての機能が含まれています。

注記

LangChain で最適なトレース エクスペリエンスを得るには、MLflow 3 を強くお勧めします。問題が発生した場合は、LangChainパッケージの特定の互換性のあるバージョンについて、以下の例を確認してください。

例を実行する前に、環境を構成する必要があります。

Databricks ノートブックの外部ユーザーの場合 : Databricks 環境変数を設定します。

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

Databricks ノートブック内のユーザーの場合 : これらの資格情報は自動的に設定されます。

API キー : LLM プロバイダーの API キーが設定されていることを確認します。

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

使用例

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?",
}
)
注記

上記の例は、次の要件バージョンで動作することが確認されています。

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

サポートされている APIs

次の APIs は、 LangChainの自動トレースでサポートされています。

  • invoke
  • batch
  • stream
  • ainvoke
  • abatch
  • astream
  • get_relevant_documents (レトリーバー用)
  • __call__ (チェーンおよびAgentExecutors用)

トレース動作のカスタマイズ

トレースに記録される情報をカスタマイズしたい場合があります。これを実現するには、 mlflow.langchai.langchain_tracer.MlflowLangchainTracerを継承するカスタムコールバックハンドラを作成します。MlflowLangchainTracerは、トレースを自動的にログに記録するためにlangchainモデル推論プロセスに挿入されるコールバックハンドラです。on_chain_start、on_llm_startなどのチェーンの一連のアクションで新しいスパンを開始し、アクションが終了したときに終了します。スパンタイプ、アクション名、入力、出力、遅延などのさまざまなメタデータがスパンに自動的に記録されます。

次の例は、チャットモデルの実行が開始されたときに、スパンに追加の属性を記録する方法を示しています。

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

自動トレースを無効にする

LangChain の自動トレースは、 mlflow.langchain.autolog(disable=True) または mlflow.autolog(disable=True)を呼び出すことでグローバルに無効にできます。