Claude Codeのトレース
MLflow Tracingは、Claude Agent SDK を使用して作成された Claude Code の会話とエージェントを自動的にトレースし、ユーザー プロンプト、AI 応答、ツールの使用状況、タイミング、セッション メタデータをキャプチャします。
MLflow は、Claude Code トレースの 2 つのアプローチをサポートしています。
- CLI トレース : MLflow CLI を介してトレースを構成して、対話型 Claude Code セッションを自動的にトレースします (MLflow 3.4 以降)
- SDK トレース : Claude Agent SDK (MLflow 3.5+) を使用して、Python アプリケーションのトレースをプログラムで有効にします。
要件
- SDK tracing
- CLI tracing
Claude Agent SDK トレースには以下が必要です:
- Claude Agent SDK 0.1.0またはそれ以降
- MLflow 3.5 以降(Databricks 追加機能付き)
pip install --upgrade "mlflow[databricks]>=3.5" "claude-agent>=0.1.0"
Claude Code CLI トレースには以下が必要です。
- Claude Code CLI
- MLflow 3.4 以降(Databricks extra付き)
pip install --upgrade "mlflow[databricks]>=3.4"
Claude のコードを Databricks にトレースする
- SDK tracing
- CLI tracing
-
Databricks と Anthropic の環境変数を設定します。
Bashexport DATABRICKS_HOST="https://your-workspace.cloud.databricks.com"
export DATABRICKS_TOKEN="your-personal-access-token"
export ANTHROPIC_API_KEY="your-anthropic-api-key"本番運用環境の場合は、安全なAPIキー管理のためにMosaic AI GatewayまたはDatabricksシークレットを使用します。
-
Claude Agent SDK の自動ログ記録を有効にして、すべての Claude Agent SDK のインタラクションを追跡します。
MLflow はqueryへの直接呼び出しのトレースをサポートしていません。MLflow は、 ClaudeSDKClient使用するトレース インタラクションのみをサポートします。
import asyncio
import mlflow.anthropic
from claude_agent_sdk import ClaudeSDKClient
# Enable autologging
mlflow.anthropic.autolog()
# Optionally configure MLflow experiment
mlflow.set_experiment("my_claude_app")
async def main():
async with ClaudeSDKClient() as client:
await client.query("What is the capital of France?")
async for message in client.receive_response():
print(message)
if __name__ == "__main__":
asyncio.run(main())
自動ログを無効にするには、 mlflow.anthropic.autolog(disable=True)を呼び出します。
3. DatabricksワークスペースのMLflowエクスペリメント UIでトレースを表示します。
-
Claude Code フックを構成します。プロジェクト ディレクトリ内の
.claude/settings.jsonファイルでフックを構成するには、mlflow autolog claude使用します。Bash# Set up tracing in your project directory
mlflow autolog claude ~/my-project
# Or set up tracing in current directory
mlflow autolog claude -
追加の構成オプション:
Bash# Specify experiment by name
mlflow autolog claude -n "My AI Project"
# Specify experiment by ID
mlflow autolog claude -e 123456789
# Use local file-based tracking instead of Databricks
mlflow autolog claude -u file://./custom-mlruns
mlflow autolog claude -u sqlite:///mlflow.db
トレースを無効にするには、 mlflow autolog claude --disableを実行します。これにより、 .claude/settings.jsonからトレース構成が削除されます。
-
Databricks 環境変数を追加します。
mlflow autolog claudeによって作成されたフックは独自の環境で実行され、シェルの環境変数を継承しません。Databricks にトレースするには、.claude/settings.json内の各フックのenvセクションに必要な環境変数を追加します。JSON{
"hooks": {
"ConversationStart": [
{
"type": "command",
"command": "python -m mlflow.anthropic.autolog.claude.init_span",
"timeout": 30000,
"env": {
"MLFLOW_CLAUDE_TRACING_ENABLED": "true",
"MLFLOW_TRACKING_URI": "databricks",
"DATABRICKS_HOST": "https://your-workspace.cloud.databricks.com",
"DATABRICKS_TOKEN": "your-databricks-token"
}
}
],
"ConversationTurn": [
{
"type": "command",
"command": "python -m mlflow.anthropic.autolog.claude.end_span",
"timeout": 30000,
"env": {
"MLFLOW_CLAUDE_TRACING_ENABLED": "true",
"MLFLOW_TRACKING_URI": "databricks",
"DATABRICKS_HOST": "https://your-workspace.cloud.databricks.com",
"DATABRICKS_TOKEN": "your-databricks-token"
}
}
],
"Stop": [
{
"type": "command",
"command": "python -m mlflow.anthropic.autolog.claude.end_span --end-trace",
"timeout": 30000,
"env": {
"MLFLOW_CLAUDE_TRACING_ENABLED": "true",
"MLFLOW_TRACKING_URI": "databricks",
"DATABRICKS_HOST": "https://your-workspace.cloud.databricks.com",
"DATABRICKS_TOKEN": "your-databricks-token"
}
}
]
}
}your-workspace.cloud.databricks.comDatabricksワークスペースの URL に置き換え、your-databricks-token個人のアクセス場所に置き換えます。 -
使用するMLflow拡張機能を指定するには、各フックの
envセクションにMLFLOW_EXPERIMENT_NAMEまたはMLFLOW_EXPERIMENT_IDを追加します。JSON"env": {
"MLFLOW_CLAUDE_TRACING_ENABLED": "true",
"MLFLOW_TRACKING_URI": "databricks",
"DATABRICKS_HOST": "https://your-workspace.cloud.databricks.com",
"DATABRICKS_TOKEN": "your-databricks-token",
"MLFLOW_EXPERIMENT_NAME": "/Users/your-email@company.com/my-claude-traces"
} -
プロジェクト ディレクトリに移動し、Claude Code を通常どおり使用します。会話は自動的に Databricks に追跡されます。
Bashcd ~/my-project
claude "help me refactor this Python function to be more efficient" -
DatabricksワークスペースのMLflowエクスペリメント UIでトレースを表示します。
上級: 評価付き SDK トレース
MLflow の GenAI 評価フレームワークで SDK トレースを使用できます。
import asyncio
import pandas as pd
from claude_agent_sdk import ClaudeSDKClient
import mlflow.anthropic
from mlflow.genai import evaluate, scorer
from mlflow.genai.judges import make_judge
mlflow.anthropic.autolog()
async def run_agent(query: str) -> str:
"""Run Claude Agent SDK and return response"""
async with ClaudeSDKClient() as client:
await client.query(query)
response_text = ""
async for message in client.receive_response():
response_text += str(message) + "\n\n"
return response_text
def predict_fn(query: str) -> str:
"""Synchronous wrapper for evaluation"""
return asyncio.run(run_agent(query))
relevance = make_judge(
name="relevance",
instructions=(
"Evaluate if the response in {{ outputs }} is relevant to "
"the question in {{ inputs }}. Return either 'pass' or 'fail'."
),
model="openai:/gpt-4o",
)
# Create evaluation dataset
eval_data = pd.DataFrame(
[
{"inputs": {"query": "What is machine learning?"}},
{"inputs": {"query": "Explain neural networks"}},
]
)
# Run evaluation with automatic tracing
mlflow.set_experiment("claude_evaluation")
evaluate(data=eval_data, predict_fn=predict_fn, scorers=[relevance])
トラブルシューティング
- SDK tracing
- CLI tracing
トレースが失われている:
- 作成前に
mlflow.anthropic.autolog()が呼び出されていることを確認してくださいClaudeSDKClient - 環境変数(
DATABRICKS_HOST、DATABRICKS_TOKEN)が正しく設定されていることを確認してください - Databricksの有効期限が切れていないことを確認してください
プロジェクトで CLI トレースが有効になっていることを確認します。
mlflow autolog claude --status
これには、現在のトレース構成と、それが Claude Code CLI に対してアクティブかどうかが表示されます。
トレースが機能しない:
- 設定されたディレクトリにいることを確認してください
.claude/settings.jsonが存在することを確認してください- ログインを確認する
.claude/mlflow/claude_tracing.log
トレースが失われている:
- 設定に
MLFLOW_CLAUDE_TRACING_ENABLED=trueが含まれているか確認してください - トラッキングURIにアクセスできることを確認する
- ログインを確認する
.claude/mlflow/claude_tracing.log
Databricks 接続の問題:
- 各フックの
envセクションでMLFLOW_TRACKING_URI、DATABRICKS_HOST、DATABRICKS_TOKENが設定されていることを確認します。.claude/settings.json - シェル環境変数はClaude Codeフックに渡されません。変数は設定ファイル内になければなりません。
- Databricksの有効期限が切れていないことを確認してください
- ワークスペース URL が正しいことを確認してください (例:
https://your-workspace.cloud.databricks.com)