Rastreando o OpenAI
O MLflow Tracing fornece o recurso de rastreamento automático para o OpenAI. Ao ativar o rastreamento automático
para o OpenAI chamando a função mlflow.openai.autolog
, MLflow capturará os rastreamentos da invocação LLM e log os enviará para a experiência MLflow ativa.
MLflow O rastreamento captura automaticamente as seguintes informações sobre as chamadas do OpenAI:
- Solicitações e respostas de conclusão
- Latências
- Nome do modelo
- Metadados adicionais, como
temperature
,max_tokens
, se especificados. - Chamada de função se retornada na resposta
- Qualquer exceção, se levantada
Pré-requisitos
Para usar o MLflow Tracing com o OpenAI, o senhor precisa instalar o MLflow e o OpenAI SDK.
- Development
- Production
Para ambientes de desenvolvimento, instale o pacote completo do MLflow com os extras do Databricks e openai
:
pip install --upgrade "mlflow[databricks]>=3.1" openai
O pacote completo do mlflow[databricks]
inclui todos os recursos para desenvolvimento local e experimentação no Databricks.
Para implantações de produção, instale mlflow-tracing
e openai
:
pip install --upgrade mlflow-tracing openai
O pacote mlflow-tracing
é otimizado para uso na produção.
O MLflow 3 é altamente recomendado para obter a melhor experiência de rastreamento com o OpenAI.
Antes de executar os exemplos, você precisará configurar seu ambiente:
Para usuários fora do Databricks Notebook : Defina seu Databricks variável de ambiente:
export DATABRICKS_HOST="https://your-workspace.cloud.databricks.com"
export DATABRICKS_TOKEN="your-personal-access-token"
Para usuários do Databricks Notebook : Essas credenciais são definidas automaticamente para o senhor.
API chave : Certifique-se de que o OpenAI API key esteja configurado:
export OPENAI_API_KEY="your-openai-api-key"
APIs suportadas
O MLflow oferece suporte ao rastreamento automático para as seguintes APIs da OpenAI:
Conclusão do bate-papo | Incorporações | Chamada de função | Saídas estruturadas | transmissão | Assíncrono | Imagem | Áudio |
---|---|---|---|---|---|---|---|
✅ | ✅ | ✅ | ✅ (*1) | ✅ (*2) | ✅ (*1) |
(*1) O suporte à transmissão foi adicionado em MLflow 2.15.0.
(*2) A saída assíncrona e estruturada suportada foi adicionada no MLflow 2.21.0.
Para solicitar suporte para APIs adicionais, abra uma solicitação de recurso no GitHub.
Exemplo básico
import openai
import mlflow
import os
# Ensure your OPENAI_API_KEY is set in your environment
# os.environ["OPENAI_API_KEY"] = "your-openai-api-key" # Uncomment and set if not globally configured
# Enable auto-tracing for OpenAI
mlflow.openai.autolog()
# Set up MLflow tracking to Databricks
mlflow.set_tracking_uri("databricks")
mlflow.set_experiment("/Shared/openai-tracing-demo")
openai_client = openai.OpenAI()
messages = [
{
"role": "user",
"content": "What is the capital of France?",
}
]
response = openai_client.chat.completions.create(
model="gpt-4o-mini",
messages=messages,
temperature=0.1,
max_tokens=100,
)
transmissão
MLflow Tracing suporta a transmissão API da OpenAI SDK. Com a mesma configuração de rastreamento automático, o site MLflow rastreia automaticamente a resposta de transmissão e renderiza a saída concatenada na UI do span. Os blocos reais na transmissão da resposta também podem ser encontrados no site Event
tab .
import openai
import mlflow
import os
# Ensure your OPENAI_API_KEY is set in your environment
# os.environ["OPENAI_API_KEY"] = "your-openai-api-key" # Uncomment and set if not globally configured
# Enable trace logging
mlflow.openai.autolog()
# Set up MLflow tracking to Databricks if not already configured
# mlflow.set_tracking_uri("databricks")
# mlflow.set_experiment("/Shared/openai-streaming-demo")
client = openai.OpenAI()
stream = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "user", "content": "How fast would a glass of water freeze on Titan?"}
],
stream=True, # Enable streaming response
)
for chunk in stream:
print(chunk.choices[0].delta.content or "", end="")
Assíncrono
O MLflow Tracing oferece suporte à API assíncrona do OpenAI SDK desde o MLflow 2.21.0. O uso é igual ao da API síncrona.
import openai
import mlflow
import os
# Ensure your OPENAI_API_KEY is set in your environment
# os.environ["OPENAI_API_KEY"] = "your-openai-api-key" # Uncomment and set if not globally configured
# Enable trace logging
mlflow.openai.autolog()
# Set up MLflow tracking to Databricks if not already configured
# mlflow.set_tracking_uri("databricks")
# mlflow.set_experiment("/Shared/openai-async-demo")
client = openai.AsyncOpenAI()
response = await client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "user", "content": "How fast would a glass of water freeze on Titan?"}
],
# Async streaming is also supported
# stream=True
)
Chamada de função
O MLflow Tracing captura automaticamente a resposta de chamada de função dos modelos OpenAI. A instrução da função na resposta será destacada na interface do usuário de rastreamento. Além disso, o senhor pode anotar a função da ferramenta com o decorador @mlflow.trace
para criar um intervalo para a execução da ferramenta.
O exemplo a seguir implementa um agente de chamada de função simples usando o OpenAI Function Calling e o MLflow Tracing for OpenAI.
import json
from openai import OpenAI
import mlflow
from mlflow.entities import SpanType
import os
# Ensure your OPENAI_API_KEY is set in your environment
# os.environ["OPENAI_API_KEY"] = "your-openai-api-key" # Uncomment and set if not globally configured
# Set up MLflow tracking to Databricks if not already configured
# mlflow.set_tracking_uri("databricks")
# mlflow.set_experiment("/Shared/openai-function-agent-demo")
# Assuming autolog is enabled globally or called earlier
# mlflow.openai.autolog()
client = OpenAI()
# Define the tool function. Decorate it with `@mlflow.trace` to create a span for its execution.
@mlflow.trace(span_type=SpanType.TOOL)
def get_weather(city: str) -> str:
if city == "Tokyo":
return "sunny"
elif city == "Paris":
return "rainy"
return "unknown"
tools = [
{
"type": "function",
"function": {
"name": "get_weather",
"parameters": {
"type": "object",
"properties": {"city": {"type": "string"}},
},
},
}
]
_tool_functions = {"get_weather": get_weather}
# Define a simple tool calling agent
@mlflow.trace(span_type=SpanType.AGENT)
def run_tool_agent(question: str):
messages = [{"role": "user", "content": question}]
# Invoke the model with the given question and available tools
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=messages,
tools=tools,
)
ai_msg = response.choices[0].message
messages.append(ai_msg)
# If the model request tool call(s), invoke the function with the specified arguments
if tool_calls := ai_msg.tool_calls:
for tool_call in tool_calls:
function_name = tool_call.function.name
if tool_func := _tool_functions.get(function_name):
args = json.loads(tool_call.function.arguments)
tool_result = tool_func(**args)
else:
raise RuntimeError("An invalid tool is returned from the assistant!")
messages.append(
{
"role": "tool",
"tool_call_id": tool_call.id,
"content": tool_result,
}
)
# Sent the tool results to the model and get a new response
response = client.chat.completions.create(
model="gpt-4o-mini", messages=messages
)
return response.choices[0].message.content
# Run the tool calling agent
question = "What's the weather like in Paris today?"
answer = run_tool_agent(question)
Desativar o rastreamento automático
O rastreamento automático do OpenAI pode ser desativado globalmente ligando para mlflow.openai.autolog(disable=True)
ou mlflow.autolog(disable=True)
.