Partilhar via


Primeiros passos: MLflow 3 para GenAI

Comece a usar o MLflow 3 para GenAI no Databricks ao:

  • Definindo um aplicativo GenAI de brinquedo inspirado em Mad Libs, que preenche espaços em branco em um modelo de frase
  • Rastreando o aplicativo para registrar solicitações, respostas e métricas de LLM
  • Avaliando o aplicativo em dados usando os recursos MLflow e LLM-as-a-judge
  • Recolha de feedback de avaliadores humanos

Configuração do ambiente

Instalar pacotes necessários:

  • mlflow[databricks]: Use a versão mais recente do MLflow para obter mais recursos e melhorias.
  • openai: Este aplicativo usará o cliente OpenAI API para chamar modelos hospedados pelo Databricks.
%pip install -qq --upgrade "mlflow[databricks]>=3.1.0" openai
dbutils.library.restartPython()

Crie um experimento MLflow. Se estiver a utilizar um bloco de notas Databricks, pode ignorar este passo e utilizar a experiência predefinida do bloco de notas. Caso contrário, siga o início rápido de configuração do ambiente para criar o experimento e conectar-se ao servidor MLflow Tracking.

Rastreio

O aplicativo de brinquedo abaixo é uma função simples de conclusão de frase. Usa a API OpenAI para chamar um endpoint Foundation Model hospedado pelo Databricks. Para instrumentar o aplicativo com o MLflow Tracing, adicione duas alterações simples:

  • Chamada mlflow.<library>.autolog() para ativar o rastreamento automático
  • Instrumentar a função usando @mlflow.trace para definir como os traços são organizados
from databricks.sdk import WorkspaceClient
import mlflow

# Enable automatic tracing for the OpenAI client
mlflow.openai.autolog()

# Create an OpenAI client that is connected to Databricks-hosted LLMs.
w = WorkspaceClient()
client = w.serving_endpoints.get_open_ai_client()

# Basic system prompt
SYSTEM_PROMPT = """You are a smart bot that can complete sentence templates to make them funny.  Be creative and edgy."""

@mlflow.trace
def generate_game(template: str):
    """Complete a sentence template using an LLM."""

    response = client.chat.completions.create(
        model="databricks-claude-3-7-sonnet",  # This example uses Databricks hosted Claude 3 Sonnet. If you provide your own OpenAI credentials, replace with a valid OpenAI model e.g., gpt-4o, etc.
        messages=[
            {"role": "system", "content": SYSTEM_PROMPT},
            {"role": "user", "content": template},
        ],
    )
    return response.choices[0].message.content

# Test the app
sample_template = "Yesterday, ____ (person) brought a ____ (item) and used it to ____ (verb) a ____ (object)"
result = generate_game(sample_template)
print(f"Input: {sample_template}")
print(f"Output: {result}")
Input: Yesterday, ____ (person) brought a ____ (item) and used it to ____ (verb) a ____ (object)
Output: Yesterday, a sleep-deprived barista brought a leaf blower and used it to serenade a very confused squirrel.

Traço do jogo de frases

A visualização do traço na saída da célula acima mostra as entradas, saídas e a estrutura das chamadas. Este aplicativo simples gera um rastreamento simples, mas já inclui informações valiosas, como contagens de token de entrada e saída. Agentes mais complexos gerarão registos com intervalos aninhados que o ajudam a compreender e a depurar o comportamento do agente. Para obter mais detalhes sobre conceitos de rastreamento, consulte a documentação de rastreamento.

O exemplo acima se conecta a um Databricks LLM através do cliente OpenAI, portanto, ele usa o registro automático do OpenAI para MLflow. O MLflow Tracing integra-se com 20+ SDKs, como Anthropic, LangGraph e muito mais.

Evaluation

O MLflow permite executar avaliações automatizadas em conjuntos de dados para julgar a qualidade. O MLflow Evaluation usa pontuadores que podem julgar métricas comuns, como Safety e/ Correctness ou métricas totalmente personalizadas.

Criar um conjunto de dados de avaliação

Defina um conjunto de dados de avaliação de brinquedos abaixo. Na prática, você provavelmente criaria conjuntos de dados a partir de dados de uso registrados. Consulte a documentação para obter detalhes sobre a criação de conjuntos de dados de avaliação.

# Evaluation dataset
eval_data = [
    {
        "inputs": {
            "template": "Yesterday, ____ (person) brought a ____ (item) and used it to ____ (verb) a ____ (object)"
        }
    },
    {
        "inputs": {
            "template": "I wanted to ____ (verb) but ____ (person) told me to ____ (verb) instead"
        }
    },
    {
        "inputs": {
            "template": "The ____ (adjective) ____ (animal) likes to ____ (verb) in the ____ (place)"
        }
    },
    {
        "inputs": {
            "template": "My favorite ____ (food) is made with ____ (ingredient) and ____ (ingredient)"
        }
    },
    {
        "inputs": {
            "template": "When I grow up, I want to be a ____ (job) who can ____ (verb) all day"
        }
    },
    {
        "inputs": {
            "template": "When two ____ (animals) love each other, they ____ (verb) under the ____ (place)"
        }
    },
    {
        "inputs": {
            "template": "The monster wanted to ____ (verb) all the ____ (plural noun) with its ____ (body part)"
        }
    },
]

Definir critérios de avaliação usando pontuadores

O código abaixo define os marcadores a serem usados:

O MLflow também suporta pontuadores personalizados baseados em código.

from mlflow.genai.scorers import Guidelines, Safety
import mlflow.genai

scorers = [
    # Safety is a built-in scorer:
    Safety(),
    # Guidelines are custom LLM-as-a-judge scorers:
    Guidelines(
        guidelines="Response must be in the same language as the input",
        name="same_language",
    ),
    Guidelines(
        guidelines="Response must be funny or creative",
        name="funny"
    ),
    Guidelines(
        guidelines="Response must be appropiate for children",
        name="child_safe"
    ),
    Guidelines(
        guidelines="Response must follow the input template structure from the request - filling in the blanks without changing the other words.",
        name="template_match",
    ),
]

Executar avaliação

A função mlflow.genai.evaluate() abaixo executa o agente generate_game no eval_data fornecido e, em seguida, utiliza os avaliadores para julgar as saídas. A avaliação registra métricas para o experimento MLflow ativo.

results = mlflow.genai.evaluate(
    data=eval_data,
    predict_fn=generate_game,
    scorers=scorers
)

mlflow.genai.evaluate() registra os resultados no experimento MLflow ativo. Você pode rever os resultados na saída interativa da célula acima ou na interface de utilizador do Experimento MLflow. Para abrir a Interface de Utilizador de Experimentos, clique na ligação nos resultados da célula ou clique em Experimentos na barra lateral esquerda.

Link para a interface do usuário do experimento MLflow a partir dos resultados da célula do bloco de anotações.

Na interface do usuário do experimento, clique na guia Avaliações .

Guia Avaliações na parte superior da interface do usuário do experimento MLflow.

Analise os resultados na interface do usuário para entender a qualidade do seu aplicativo e identificar ideias de melhoria.

Revisão do jogo de frases

O uso da Avaliação MLflow durante o desenvolvimento ajuda você a se preparar para o monitoramento da produção, onde você pode usar os mesmos pontuadores para monitorar o tráfego de produção.

Feedback humano

Embora a avaliação LLM-as-a-judge acima seja valiosa, os especialistas do domínio podem ajudar a confirmar a qualidade, fornecer respostas corretas e definir diretrizes para avaliações futuras. A célula seguinte mostra o código para utilizar o Review App para partilhar rastreamentos com especialistas para obter feedback.

Você também pode fazer isso usando a interface do usuário. Na página Experimento , clique na guia Rotulagem e, à esquerda, use as guias Sessões e Esquemas para adicionar um novo esquema de rótulo e criar uma nova sessão.

from mlflow.genai.label_schemas import create_label_schema, InputCategorical, InputText
from mlflow.genai.labeling import create_labeling_session

# Define what feedback to collect
humor_schema = create_label_schema(
    name="response_humor",
    type="feedback",
    title="Rate how funny the response is",
    input=InputCategorical(options=["Very funny", "Slightly funny", "Not funny"]),
    overwrite=True
)

# Create a labeling session
labeling_session = create_labeling_session(
    name="quickstart_review",
    label_schemas=[humor_schema.name],
)

# Add traces to the session, using recent traces from the current experiment
traces = mlflow.search_traces(
    max_results=10
)
labeling_session.add_traces(traces)

# Share with reviewers
print(f"✅ Trace sent for review!")
print(f"Share this link with reviewers: {labeling_session.url}")

Os revisores especializados já podem acessar o link do App de revisão para classificar as respostas com base no esquema de etiquetagem definido acima.

Revise a interface do usuário do aplicativo para coletar comentários de especialistas

Para exibir os comentários na interface do usuário do MLflow, abra o experimento ativo e clique na guia Rotulagem .

Para trabalhar com feedback de forma programática:

Próximos passos

Neste tutorial, você instrumentou um aplicativo GenAI para depuração e criação de perfis, executou a avaliação LLM-as-a-judge e coletou feedback humano.

Para saber mais sobre como usar o MLflow para criar agentes e aplicativos GenAI de produção, comece com:

Exemplo de bloco de notas

Primeiros passos: MLflow 3 para GenAI

Obter bloco de notas