Pular para o conteúdo principal

Rastreamento de extensão com gerenciadores de contexto

O gerenciador de contexto mlflow.start_span permite criar intervalos para blocos de código arbitrários. Pode ser útil para capturar interações complexas dentro do seu código com mais detalhes do que é possível capturando os limites de uma única função.

O rastreamento de trechos de código com gerenciadores de contexto oferece controle preciso sobre qual código será rastreado:

  • Blocos de código arbitrários : Rastreie qualquer bloco de código, não apenas funções inteiras.
  • Limites flexíveis : Defina pontos iniciais e finais exatos para os vãos.
  • Gerenciamento automático de contexto : o MLflow lida com relacionamentos pai-filho e limpeza.
  • Funciona com decoradores de função : combine com @mlflow.trace para abordagens híbridas.
  • Tratamento de exceções : Captura automática de erros, como decoradores.

Pré-requisitos

Esta página requer o seguinte pacote:

  • mlflow[databricks] 3.1 e versões superiores: Funcionalidade principal MLflow com recurso GenAI e conectividade com Databricks .
  • openai 1.0.0 e versões superiores: (Opcional) Somente se o seu código personalizado interagir com OpenAI; substitua por outros SDKs, se necessário.

Instale os requisitos básicos:

Python
%pip install --upgrade "mlflow[databricks]>=3.1"
# %pip install --upgrade openai>=1.0.0 # Install if needed

API do Gerenciador de Contexto

De forma semelhante ao decorador, o gerenciador de contexto captura automaticamente a relação pai-filho, exceções, tempo de execução e funciona com rastreamento automático. No entanto, o nome, as entradas e as saídas do intervalo devem ser fornecidos manualmente. Você pode configurá-los usando o objeto mlflow.entities.Span que é retornado pelo gerenciador de contexto.

Python
with mlflow.start_span(name="my_span") as span:
span.set_inputs({"x": 1, "y": 2})
z = x + y
span.set_outputs(z)

abaixo está um exemplo um pouco mais complexo que usa o gerenciador de contexto mlflow.start_span em conjunto com o decorador e o rastreamento automático para OpenAI.

Python
import mlflow
import openai
from mlflow.entities import SpanType

# Enable auto-tracing for OpenAI
mlflow.openai.autolog()

# Create OpenAI client
client = openai.OpenAI()

@mlflow.trace(span_type=SpanType.CHAIN)
def start_session():
messages = [{"role": "system", "content": "You are a friendly chat bot"}]
while True:
with mlflow.start_span(name="User") as span:
span.set_inputs(messages)
user_input = input(">> ")
span.set_outputs(user_input)

if user_input == "BYE":
break

messages.append({"role": "user", "content": user_input})

response = client.chat.completions.create(
model="gpt-4o-mini",
max_tokens=100,
messages=messages,
)
answer = response.choices[0].message.content
print(f"Assistant: {answer}")

messages.append({"role": "assistant", "content": answer})


start_session()

Próximos passos