Rastreando o código de Claude
MLflow Tracing rastreia automaticamente conversas e agentes do Claude Code criados com o Claude Agent SDK, capturando prompts do usuário, respostas AI , uso de ferramentas, tempo e metadados da sessão.
O MLflow suporta duas abordagens para o rastreamento do Código Claude:
- Rastreamento via CLI : Configure o rastreamento através da CLI do MLflow para rastrear automaticamente sessões interativas do Claude Code (MLflow 3.4+).
- Rastreamento do SDK : Habilite o rastreamento programaticamente para aplicativos Python usando o SDK do Agente Claude (MLflow 3.5+).
Requisitos
- SDK tracing
- CLI tracing
O rastreamento do SDK do Agente Claude requer:
- SDK do Agente Claude 0.1.0 ou mais tarde
- MLflow 3.5 ou posterior com extras do Databricks
pip install --upgrade "mlflow[databricks]>=3.5" "claude-agent>=0.1.0"
O rastreamento da CLI do Claude Code requer:
- CLI do Claude Code
- MLflow 3.4 ou posterior com extras do Databricks
pip install --upgrade "mlflow[databricks]>=3.4"
Rastrear o código de Claude até o Databricks
- SDK tracing
- CLI tracing
-
Defina Databricks e variável Anthropic de ambiente:
Bashexport DATABRICKS_HOST="https://your-workspace.cloud.databricks.com"
export DATABRICKS_TOKEN="your-personal-access-token"
export ANTHROPIC_API_KEY="your-anthropic-api-key"Para ambientes de produção, utilize Mosaic AI Gateway ou os segredos Databricks para um gerenciamento seguro key API .
-
Ative o registro automático para o SDK do Agente Claude para rastrear todas as interações do SDK do Agente Claude:
O MLflow não suporta o rastreamento de chamadas diretas para query. O MLflow suporta apenas o rastreamento de interações que usam 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())
Para desativar o registro automático, chame mlflow.anthropic.autolog(disable=True).
3. Visualize seus rastreamentos na interface do usuário do experimentoMLflow em seu workspace Databricks .
-
Configure os hooks do Claude Code. Use
mlflow autolog claudepara configurar hooks em um arquivo.claude/settings.jsonno diretório do seu projeto:Bash# Set up tracing in your project directory
mlflow autolog claude ~/my-project
# Or set up tracing in current directory
mlflow autolog claude -
Opções de configuração adicionais:
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
Para desativar o rastreio, execute mlflow autolog claude --disable. Isso remove a configuração de rastreamento de .claude/settings.json.
-
Adicione a variável de ambiente Databricks . Os hooks criados pela execução de
mlflow autolog claudeem seu próprio ambiente e não herdam variáveis de ambiente shell . Para rastrear até Databricks, adicione a variável de ambiente necessária à seçãoenvde cada gancho em.claude/settings.json: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"
}
}
]
}
}Substitua
your-workspace.cloud.databricks.compelo URL do seu workspace Databricks eyour-databricks-tokenpelo seu access tokenpessoal. -
Para especificar qual experimento do MLflow usar, adicione
MLFLOW_EXPERIMENT_NAMEouMLFLOW_EXPERIMENT_IDà seçãoenvde cada gancho: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"
} -
Acesse o diretório do seu projeto e utilize o Claude Code normalmente. Suas conversas são rastreadas automaticamente até o Databricks:
Bashcd ~/my-project
claude "help me refactor this Python function to be more efficient" -
Visualize seus rastreamentos na interface do usuário do experimentoMLflow em seu workspace Databricks .
Avançado: Rastreamento do SDK com avaliação
Você pode usar o rastreamento do SDK com a estrutura de avaliação GenAI do MLflow:
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])
Solução de problemas
- SDK tracing
- CLI tracing
Vestígios desaparecidos:
- Verifique se
mlflow.anthropic.autolog()foi chamado antes de criar oClaudeSDKClient - Verifique se as variáveis de ambiente (
DATABRICKS_HOST,DATABRICKS_TOKEN) estão definidas corretamente - Verifique se seus tokens Databricks não expiraram.
Verifique se o rastreamento da CLI está ativado para o seu projeto:
mlflow autolog claude --status
Esta opção exibe a configuração de rastreamento atual e se ela está ativa para a CLI do Claude Code.
O rastreamento não está funcionando:
- Certifique-se de estar no diretório configurado.
- Verifique se
.claude/settings.jsonexiste. - Revisar login
.claude/mlflow/claude_tracing.log
Vestígios desaparecidos:
- Verifique se
MLFLOW_CLAUDE_TRACING_ENABLED=trueestá na sua configuração. - Verifique se o URI de acompanhamento está acessível.
- Revisar login
.claude/mlflow/claude_tracing.log
Problemas de conexão com o Databricks:
- Verifique se
MLFLOW_TRACKING_URI,DATABRICKS_HOSTeDATABRICKS_TOKENestão definidos na seçãoenvde cada gancho em.claude/settings.json - As variáveis de ambiente do shell não são passadas para os hooks do Claude Code; as variáveis devem estar no arquivo de configurações.
- Verifique se seus tokens Databricks não expiraram.
- Verifique se o URL do seu workspace está correto (por exemplo,
https://your-workspace.cloud.databricks.com).