LangChain のトレース
LangChain は、LLMを利用したアプリケーションを構築するためのオープンソースフレームワークです。
MLflow Tracing は、LangChainの自動トレース機能を提供します。mlflow.langchain.autolog
関数を呼び出すことで、LangChainのトレースを有効にすることができ、ネストされたトレースは、チェーンの呼び出し時にアクティブ なMLflow エクスペリメントに自動的に記録されます。
import mlflow
mlflow.langchain.autolog()
前提 条件
LangChainでMLflow Tracingを使用するには、MLflowと関連するLangChain パッケージ (langchain
、langchain-openai
など) をインストールする必要があります。
- Development
- Production
開発環境の場合は、Databricks extras と LangChain パッケージを含む完全な MLflow パッケージをインストールします。
pip install --upgrade "mlflow[databricks]>=3.1" langchain langchain-openai
# Add other langchain community/core packages if needed
フル mlflow[databricks]
パッケージには、Databricks でのローカル開発と実験のためのすべての機能が含まれています。
本番運用デプロイメントの場合は、 mlflow-tracing
パッケージと LangChain パッケージをインストールします。
pip install --upgrade mlflow-tracing langchain langchain-openai
# Add other langchain community/core packages if needed
mlflow-tracing
パッケージは、本番運用での使用に最適化されています。
LangChain で最適なトレース エクスペリエンスを得るには、MLflow 3 を強くお勧めします。問題が発生した場合は、LangChainパッケージの特定の互換性のあるバージョンについて、以下の例を確認してください。
例を実行する前に、環境を構成する必要があります。
Databricks ノートブックの外部ユーザーの場合 : Databricks 環境変数を設定します。
export DATABRICKS_HOST="https://your-workspace.cloud.databricks.com"
export DATABRICKS_TOKEN="your-personal-access-token"
Databricks ノートブック内のユーザーの場合 : これらの資格情報は自動的に設定されます。
API キー : LLM プロバイダーの API キーが設定されていることを確認します。
export OPENAI_API_KEY="your-openai-api-key"
# Add other provider keys as needed
使用例
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?",
}
)
上記の例は、次の要件バージョンで動作することが確認されています。
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などのチェーンの一連のアクションで新しいスパンを開始し、アクションが終了したときに終了します。スパンタイプ、アクション名、入力、出力、遅延などのさまざまなメタデータがスパンに自動的に記録されます。
次の例は、チャットモデルの実行が開始されたときに、スパンに追加の属性を記録する方法を示しています。
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)
を呼び出すことでグローバルに無効にできます。