Pular para o conteúdo principal

Arnês de avaliação

A função mlflow.genai.evaluate() função testa sistematicamente a qualidade do aplicativo GenAI, executando-o em dados de teste (conjunto de dados de avaliação) e aplicando pontuadores.

Referência rápida

Para obter detalhes, consulte mlflow.genai.evaluate().

Parâmetro

Tipo

Descrição

data

MLflow EvaluationDataset, List[Dict], Pandas DataFrame, Spark DataFrame

Dados de teste

predict_fn

Pode ser chamado

Seu aplicativo (somente avaliação direta)

scorers

Lista [Marcador]

Qualidade métricas

model_id

str

Versão opcional acompanhamento

Como funciona

  1. Execute seu aplicativo em entradas de teste, capturando rastreamentos.
  2. Aplica pontuadores para avaliar a qualidade, criando feedback.
  3. Armazena os resultados em uma execução de avaliação.

Pré-requisitos

  1. Instale o site MLflow e o pacote necessário.

    Bash
    pip install --upgrade "mlflow[databricks]>=3.1.0" openai "databricks-connect>=16.1"
  2. Crie um experimento MLflow seguindo o início rápido de configuração do ambiente.

Modos de avaliação

Há dois modos de avaliação:

Avaliação direta (recomendada)

O MLflow chama seu aplicativo GenAI diretamente para gerar e avaliar traços. O senhor pode passar o ponto de entrada do seu aplicativo envolvido em uma função Python (predict_fn) ou, se o seu aplicativo for implantado como um Databricks servindo o modelo endpoint, passar esse endpoint envolvido em to_predict_fn.

Ao chamar seu aplicativo diretamente, esse modo permite que o senhor reutilize os avaliadores definidos para a avaliação off-line no monitoramento da produção, pois os traços resultantes serão idênticos.

Como a avaliação funciona com o rastreamento

O código a seguir mostra um exemplo de como executar a avaliação:

Python
import mlflow
from mlflow.genai.scorers import RelevanceToQuery, Safety

# Your GenAI app with MLflow tracing
@mlflow.trace
def my_chatbot_app(question: str) -> dict:
# Your app logic here
if "MLflow" in question:
response = "MLflow is an open-source platform for managing ML and GenAI workflows."
else:
response = "I can help you with MLflow questions."

return {"response": response}

# Evaluate your app
results = mlflow.genai.evaluate(
data=[
{"inputs": {"question": "What is MLflow?"}},
{"inputs": {"question": "How do I get started?"}}
],
predict_fn=my_chatbot_app,
scorers=[RelevanceToQuery(), Safety()]
)

Em seguida, é possível acessar os resultados na interface do usuário em “ view ” (Exportar resultados).

Resultados da avaliação

Avaliação da folha de respostas

Quando não for possível executar seu aplicativo GenAI diretamente, é possível fornecer rastreamentos existentes ou resultados pré-calculados para avaliação. Exemplos de casos de uso incluem testar saídas de sistemas externos, avaliar traços históricos e comparar resultados em diferentes plataformas.

important

Se o senhor usar uma folha de respostas com traços diferentes dos do seu ambiente de produção, talvez seja necessário reescrever as funções do avaliador para usá-las no monitoramento da produção.

Como funciona a avaliação com a folha de respostas

Exemplo de uso de entradas e saídas

O código a seguir mostra um exemplo de como executar a avaliação:

Python
import mlflow
from mlflow.genai.scorers import Safety, RelevanceToQuery

# Pre-computed results from your GenAI app
results_data = [
{
"inputs": {"question": "What is MLflow?"},
"outputs": {"response": "MLflow is an open-source platform for managing machine learning workflows, including tracking experiments, packaging code, and deploying models."},
},
{
"inputs": {"question": "How do I get started?"},
"outputs": {"response": "To get started with MLflow, install it using 'pip install mlflow' and then run 'mlflow ui' to launch the web interface."},
}
]

# Evaluate pre-computed outputs
evaluation = mlflow.genai.evaluate(
data=results_data,
scorers=[Safety(), RelevanceToQuery()]
)

Em seguida, é possível acessar os resultados na interface do usuário em “ view ” (Exportar resultados).

Resultados da avaliação

Exemplo de uso de traços existentes

O código a seguir demonstra como executar a avaliação utilizando traços existentes:

Python
import mlflow

# Retrieve traces from production
traces = mlflow.search_traces(
filter_string="trace.status = 'OK'",
)

# Evaluate problematic traces
evaluation = mlflow.genai.evaluate(
data=traces,
scorers=[Safety(), RelevanceToQuery()]
)

parâmetros-chave

Python
def mlflow.genai.evaluate(
data: Union[pd.DataFrame, List[Dict], mlflow.genai.datasets.EvaluationDataset],
scorers: list[mlflow.genai.scorers.Scorer],
predict_fn: Optional[Callable[..., Any]] = None,
model_id: Optional[str] = None,
) -> mlflow.models.evaluation.base.EvaluationResult:

data

A avaliação dataset deve estar em um dos seguintes formatos:

  • EvaluationDataset (recomendado).
  • Lista de dicionários, Pandas DataFrame ou Spark DataFrame.

Se o argumento de dados for fornecido como um DataFrame ou lista de dicionários, ele deverá seguir o esquema a seguir. Isso é consistente com o esquema usado pelo EvaluationDataset. Databricks Recomenda-se utilizar um EvaluationDataset, pois ele impõe a validação do esquema, além de acompanhar a linhagem de cada registro.

campo

Tipo de dados

Descrição

Uso com avaliação direta

Use com folha de respostas

inputs

dict[Any, Any]

Um dict que é passado para seu predict_fn usando **kwargs. Deve ser serializável em JSON. Cada key deve corresponder a um argumento nomeado em predict_fn.

Obrigatório

inputs + outputs ou trace são obrigatórios. Não consigo ultrapassar os dois. Derivado de trace se não for fornecido.

outputs

dict[Any, Any]

Um dict com as saídas do seu aplicativo GenAI para o input correspondente. Deve ser serializável em JSON.

Não deve ser fornecido, gerado pelo MLflow a partir do Trace.

inputs + outputs ou trace são obrigatórios. Não consigo ultrapassar os dois. Derivado de trace se não for fornecido.

expectations

dict[str, Any]

Um dict com rótulo de verdade correspondente a input. Usado por scorers para verificar a qualidade. Deve ser JSON serializável e cada key deve ser um str.

Opcional

Opcional

trace

mlflow.entities.Trace

O objeto de rastreamento da solicitação. Se o trace for fornecido, o expectations poderá ser fornecido como Assessments no trace em vez de como uma coluna separada.

Não deve ser fornecido, gerado pelo MLflow a partir do Trace.

inputs + outputs ou trace são obrigatórios. Não consigo ultrapassar os dois.

predict_fn

O ponto de entrada do aplicativo GenAI. Esse parâmetro só é usado com avaliação direta. predict_fn deve atender aos seguintes requisitos:

  • Aceite a chave do dicionário inputs em data como argumentos de palavra-chave.
  • Retorna um dicionário serializável em JSON.
  • Seja equipado com o MLflow Tracing.
  • Emita exatamente um rastreamento por chamada.

scorers

Lista de métricas de qualidade a serem aplicadas. Você pode fornecer:

Consulte Marcadores para obter mais detalhes.

model_id

Identificador de modelo opcional para vincular os resultados à versão do seu aplicativo (por exemplo, "models:/my-app/1"). Consulte a versão acompanhamento para obter mais detalhes.

Formatos de dados

Para avaliação direta

campo

Obrigatório

Descrição

inputs

Dicionário passado para o seu predict_fn

expectations

Opcional

Verdade básica opcional para marcadores

Para avaliação da folha de respostas

Opção A - Forneça entradas e saídas:

campo

Obrigatório

Descrição

inputs

Entradas originais para seu aplicativo GenAI

outputs

Pré-computar os resultados de seu aplicativo

expectations

Opcional

Verdade básica opcional para marcadores

Opção B - Forneça traços existentes:

campo

Obrigatório

Descrição

trace

Objetos de rastreamento do MLflow com entradas/saídas

expectations

Opcional

Verdade básica opcional para marcadores

Padrões comuns de entrada de dados

Avalie utilizando um conjunto de dados de avaliação do MLflow (recomendado).

MLflow O conjunto de dados de avaliação fornece controle de versão, acompanhamento de linhagem e integração com Unity Catalog para avaliação pronta para produção. São úteis quando é necessário controle de versão e acompanhamento de linhagem para seus dados de avaliação, e quando é necessário converter traços em registros de avaliação.

Python
import mlflow
from mlflow.genai.scorers import Correctness, Safety
from my_app import agent # Your GenAI app with tracing

# Load versioned evaluation dataset
dataset = mlflow.genai.datasets.get_dataset("catalog.schema.eval_dataset_name")

# Run evaluation
results = mlflow.genai.evaluate(
data=dataset,
predict_fn=agent,
scorers=[Correctness(), Safety()],
)

Para criar um conjunto de dados a partir de rastreamentos ou do zero, consulte Criar conjunto de dados de avaliação.

Avalie usando uma lista de dicionários

Utilize uma lista simples de dicionários para prototipagem rápida sem criar uma avaliação formal dataset. Isso é útil para prototipagem rápida, pequenos conjuntos de dados (menos de 100 exemplos) e testes de desenvolvimento informais.

Python
import mlflow
from mlflow.genai.scorers import Correctness, RelevanceToQuery
from my_app import agent # Your GenAI app with tracing

# Define test data as a list of dictionaries
eval_data = [
{
"inputs": {"question": "What is MLflow?"},
"expectations": {"expected_facts": ["open-source platform", "ML lifecycle management"]}
},
{
"inputs": {"question": "How do I track experiments?"},
"expectations": {"expected_facts": ["mlflow.start_run()", "log metrics", "log parameters"]}
},
{
"inputs": {"question": "What are MLflow's main components?"},
"expectations": {"expected_facts": ["Tracking", "Projects", "Models", "Registry"]}
}
]

# Run evaluation
results = mlflow.genai.evaluate(
data=eval_data,
predict_fn=agent,
scorers=[Correctness(), RelevanceToQuery()],
)

Para produção, converta para um conjunto de dados de avaliaçãoMLflow.

Avalie utilizando um Pandas DataFrame

Utilize Pandas DataFrames para avaliação ao trabalhar com arquivos CSV ou fluxo de trabalho de ciência de dados existente. Isso é útil para prototipagem rápida, pequenos conjuntos de dados (menos de 100 exemplos) e testes de desenvolvimento informais.

Python
import mlflow
import pandas as pd
from mlflow.genai.scorers import Correctness, Safety
from my_app import agent # Your GenAI app with tracing

# Create evaluation data as a Pandas DataFrame
eval_df = pd.DataFrame([
{
"inputs": {"question": "What is MLflow?"},
"expectations": {"expected_response": "MLflow is an open-source platform for ML lifecycle management"}
},
{
"inputs": {"question": "How do I log metrics?"},
"expectations": {"expected_response": "Use mlflow.log_metric() to log metrics"}
}
])

# Run evaluation
results = mlflow.genai.evaluate(
data=eval_df,
predict_fn=agent,
scorers=[Correctness(), Safety()],
)

Avalie utilizando um Spark DataFrame

Utilize Spark DataFrames para avaliações em grande escala ou quando os dados já estiverem no Delta Lake ou no Unity Catalog. Isso é útil quando os dados já existem em Delta Lake ou Unity Catalog, ou se você precisar filtrar os registros em um conjunto de dados de avaliação MLflow antes de executar a avaliação.

DataFrame Os comentários devem estar em conformidade com o esquema de avaliação dataset.

Python
import mlflow
from mlflow.genai.scorers import Safety, RelevanceToQuery
from my_app import agent # Your GenAI app with tracing

# Load evaluation data from a Delta table in Unity Catalog
eval_df = spark.table("catalog.schema.evaluation_data")

# Or load from any Spark-compatible source
# eval_df = spark.read.parquet("path/to/evaluation/data")

# Run evaluation
results = mlflow.genai.evaluate(
data=eval_df,
predict_fn=agent,
scorers=[Safety(), RelevanceToQuery()],
)

Padrões predict_fn comuns

Ligue diretamente para seu aplicativo

Passe seu aplicativo diretamente como predict_fn quando os nomes dos parâmetros corresponderem à sua chave de avaliação dataset. Isso é útil para aplicativos que possuem nomes de parâmetros que correspondem ao inputs em sua avaliação dataset.

Python
import mlflow
from mlflow.genai.scorers import RelevanceToQuery, Safety

# Your GenAI app that accepts 'question' as a parameter
@mlflow.trace
def my_chatbot_app(question: str) -> dict:
# Your app logic here
response = f"I can help you with: {question}"
return {"response": response}

# Evaluation data with 'question' key matching the function parameter
eval_data = [
{"inputs": {"question": "What is MLflow?"}},
{"inputs": {"question": "How do I track experiments?"}}
]

# Pass your app directly since parameter names match
results = mlflow.genai.evaluate(
data=eval_data,
predict_fn=my_chatbot_app, # Direct reference, no wrapper needed
scorers=[RelevanceToQuery(), Safety()]
)

Embrulhe seu aplicativo em um aplicativo que pode ser chamado

Se o seu aplicativo espera nomes de parâmetros ou estruturas de dados diferentes dos do seu dataset's inputs, envolva-os em uma função chamável. Isso é útil quando há incompatibilidades entre os nomes dos parâmetros do seu aplicativo e os parâmetros de avaliação dataset input key (por exemplo, user_input vs question), ou quando são necessárias conversões de formato de dados (por exemplo, strings para lista ou análise de JSON ).

Python
import mlflow
from mlflow.genai.scorers import RelevanceToQuery, Safety

# Your existing GenAI app with different parameter names
@mlflow.trace
def customer_support_bot(user_message: str, chat_history: list = None) -> dict:
# Your app logic here
context = f"History: {chat_history}" if chat_history else "New conversation"
return {
"bot_response": f"Helping with: {user_message}. {context}",
"confidence": 0.95
}

# Wrapper function to translate evaluation data to your app's interface
def evaluate_support_bot(question: str, history: str = None) -> dict:
# Convert evaluation dataset format to your app's expected format
chat_history = history.split("|") if history else []

# Call your app with the translated parameters
result = customer_support_bot(
user_message=question,
chat_history=chat_history
)

# Translate output to standard format if needed
return {
"response": result["bot_response"],
"confidence_score": result["confidence"]
}

# Evaluation data with different key names
eval_data = [
{"inputs": {"question": "Reset password", "history": "logged in|forgot email"}},
{"inputs": {"question": "Track my order"}}
]

# Use the wrapper function for evaluation
results = mlflow.genai.evaluate(
data=eval_data,
predict_fn=evaluate_support_bot, # Wrapper handles translation
scorers=[RelevanceToQuery(), Safety()]
)

Avaliar um endpoint implantado

Utilize a função to_predict_fn para avaliar Mosaic AI Agent Framework, servindo modelo chat endpoint e endpoint personalizado.

Esta função cria uma função de previsão compatível com esses pontos de extremidade e extrai automaticamente rastreamentos do ponto de extremidade habilitado para rastreamento para observabilidade completa.

nota

endpointA função “ to_predict_fn ” (Transferir para o e-mail do destinatário) realiza uma transferência direta de “ kwargs ” (Transferir para o e-mail do destinatário) para o seu endereço de e Os dados da sua avaliação devem corresponder ao formato de entrada esperado pelo seu endpoint. Se os formatos não corresponderem, a avaliação falhará com uma mensagem de erro sobre uma chave de entrada não reconhecida.

Ao servir o endpoint de chat modelo, são necessários dados formatados com o padrão de entrada de dados de chat ( messages key).

Python
import mlflow
from mlflow.genai.scorers import RelevanceToQuery

# Create predict function for a chat endpoint
predict_fn = mlflow.genai.to_predict_fn("endpoints:/my-chatbot-endpoint")

# Evaluate the chat endpoint
results = mlflow.genai.evaluate(
data=[{"inputs": {"messages": [{"role": "user", "content": "How does MLflow work?"}]}}],
predict_fn=predict_fn,
scorers=[RelevanceToQuery()]
)

Avaliar um modelo registrado

Wrap logs MLflow modelos para traduzir entre os parâmetros nomeados da avaliação e a interface de parâmetro único do modelo.

A maioria dos modelos registrados (como aqueles que utilizam PyFunc ou variantes de registro como LangChain) aceitam um único parâmetro de entrada (por exemplo, model_inputs para PyFunc), enquanto predict_fn espera parâmetros nomeados que correspondam à chave em sua avaliação dataset.

Python
import mlflow
from mlflow.genai.scorers import Safety

# Make sure to load your logged model outside of the predict_fn so MLflow only loads it once!
model = mlflow.pyfunc.load_model("models:/chatbot/staging")

def evaluate_model(question: str) -> dict:
return model.predict({"question": question})

results = mlflow.genai.evaluate(
data=[{"inputs": {"question": "Tell me about MLflow"}}],
predict_fn=evaluate_model,
scorers=[Safety()]
)

Próximas etapas