
⚡MLflow 3実践入門⚡ AI Agentの実行を可視化!Manual TracingとAutologの基本実装
📚 参考書籍
※この記事は書籍の一部をベースに再構成しています。もう少し踏み込んだ内容(設計や具体例)は書籍の中でまとめているので、気になる方はそちらもどうぞ。
####『ゼロから触ってわかった!AI Agent Observability入門― MLflow・Databricksで実践するAIエージェントの評価・監視・安全性・説明可能性』
本書は、AI Agentを「作って動かす」だけでなく、その品質をどう観測し、どう評価し、どう守り、どう説明可能にするかを体系的に学ぶための入門書です。
####『ゼロから触ってわかった!Databricks Agent Engineering実務入門 ~AI Gatewayでつなぎ、Agent Skillsで標準化・量産し、MLflowで運用する ~』
AI Gatewayでつなぎ、Agent Skillsで企業の仕事を標準化し、Pipeline Factoryで量産し、MLflowで評価・改善する。
その一連のライフサイクルを、データパイプライン開発という具体的な題材を通して理解することが本書のゴールです。
####『ゼロから触ってわかった!AI Gateway入門 ― LiteLLMで学ぶ、LLM・AIエージェント・MCPを安全につなぐための基礎知識』
⚡MLflow 3実践入門⚡ AI Agentの実行を可視化!Manual TracingとAutologの基本実装
AI Agentの品質を改善するには、最終回答だけでなく、内部で何が起きたのかを把握する必要があります。
MLflow 3では、TracingによってAgentの実行過程を記録・可視化できます。
代表的な実装方法は次の2つです。
Manual Tracing:任意のPython関数を明示的に記録
Automatic Tracing:LLM SDKやAgent Frameworkの処理を自動記録
今回は、それぞれの実装と組み合わせ方を解説します。
1. @mlflow.traceで関数を記録する
最も基本的な方法が、Python関数へ@mlflow.traceデコレータを付与する方法です。
例えば、次のように記述します。
[
import mlflow
@mlflow.trace
def generate_answer(question: str):
return f"質問を受け取りました: {question}"
generate_answer("在宅勤務の申請期限を教えてください")
]
この関数を実行すると、MLflowはSpanとして次の情報を記録します。
Input:関数へ渡された引数
Output:関数の戻り値
Latency:実行時間
Status:実行状態
Error:例外情報
つまり、既存のPython関数にデコレータを追加するだけで、Tracingを開始できます。
2. 複数の関数を親子関係で記録する
実際のRAG Agentでは、RetrieverやLLMなど複数の処理が連携します。
例えば、次のように実装できます。
[
@mlflow.trace
def retrieve_documents(question: str):
return ["在宅勤務は3営業日前までに申請します。"]
@mlflow.trace
def generate_answer(question: str, documents: list[str]):
return documents[0]
@mlflow.trace
def run_agent(question: str):
documents = retrieve_documents(question)
return generate_answer(question, documents)
run_agent("在宅勤務の申請期限は?")
]
この場合、Traceは次の階層構造になります。
Trace
└─ run_agent
├─ retrieve_documents
└─ generate_answer
MLflowは関数呼び出しの親子関係を認識し、Agent全体と内部処理を1つのTraceとして可視化します。
これにより、どの処理で時間がかかったのか、どこでエラーが発生したのかを追跡できます。
3. AutologでLLM呼び出しを自動記録する
LLM SDKやAgent Frameworkでは、すべての関数へ手動でTracingを追加する必要はありません。
MLflowにはAutomatic Tracingが用意されています。
例えばOpenAI SDKの場合、次のように記述します。
[
import mlflow
from openai import OpenAI
mlflow.set_experiment("agent-observability")
mlflow.openai.autolog()
client = OpenAI()
response = client.responses.create(
model="gpt-4o-mini",
input="MLflow Tracingとは何ですか?"
)
]
mlflow.openai.autolog()を有効化すると、対応するAPI呼び出しから次の情報を自動取得できます。
Prompt / Response
Model
Token Usage
Latency
Error
2026年10月現在、MLflowはOpenAI Responses APIにも対応しており、StreamingやAsync、Function CallingなどもTracingできます。
さらに、LangChain、LangGraph、OpenAI Agents SDKなど40種類以上のライブラリ・フレームワークとの自動連携が提供されています。
4. Manual TracingとAutologを組み合わせる
実務では、2つの方法を組み合わせると効率的です。
Agent全体:Manual Tracing
LLM呼び出し:Autolog
独自業務処理:Manual Tracing
例えば、次のように実装します。
[
import mlflow
from openai import OpenAI
mlflow.openai.autolog()
client = OpenAI()
@mlflow.trace
def run_agent(question: str):
response = client.responses.create(
model="gpt-4o-mini",
input=question
)
return response.output_text
run_agent("MLflow Tracingとは?")
]
この場合、概念的には次の構成になります。
Trace
└─ run_agent
└─ OpenAI Call
├─ Input / Output
├─ Model
├─ Token Usage
└─ Latency
業務処理の流れとLLM内部の呼び出し情報を、一つのTraceで確認できることが大きなメリットです。
5. すべてをTraceする必要はない
Tracingでは、あらゆる関数を記録することが目的ではありません。
重要なのは、障害解析や品質評価に必要な処理を追跡できることです。
Agent全体
Retriever
LLM Call
Tool Call
重要な業務処理
などを中心に記録します。
また、Tracingには入力や出力が保存されるため、個人情報や機密情報の取り扱いにも注意が必要です。
現在のMLflowでは、Span Processorを利用して機密情報を保存前にマスキングする仕組みも提供されています。
まとめると
MLflow Tracingの基本は、Manual TracingとAutomatic Tracingの適切な使い分けです。
@mlflow.traceで独自処理を記録する
AutologでLLM呼び出しを自動記録する
親子SpanでAgent全体を可視化する
必要な処理に絞ってTracingする
機密情報の記録を制御する
ただし、Traceは「何が起きたか」を示す実行証跡であり、「回答が正しいか」を判定する評価とは異なります。
Tracingで実行過程を把握し、Evaluationで品質を評価する。
この組み合わせが、AI Agentの継続的な品質改善を支える基本になります。