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 |
---|---|---|
| MLflow EvaluationDataset, List[Dict], Pandas DataFrame, Spark DataFrame | Dados de teste |
| Pode ser chamado | Seu aplicativo (somente avaliação direta) |
| Lista [Marcador] | Qualidade métricas |
| str | Versão opcional acompanhamento |
Como funciona
- Execute seu aplicativo em entradas de teste, capturando rastreamentos.
- Aplica pontuadores para avaliar a qualidade, criando feedback.
- Armazena os resultados em uma execução de avaliação.
Pré-requisitos
-
Instale o site MLflow e o pacote necessário.
Bashpip install --upgrade "mlflow[databricks]>=3.1.0" openai "databricks-connect>=16.1"
-
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 acessa seu aplicativo diretamente para gerar rastreamentos para avaliação.
- Avaliação da folha de respostas. O cliente fornece resultados pré-calculados ou traços existentes para 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.
O código a seguir mostra um exemplo de como executar a avaliação:
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).
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.
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.
Exemplo de uso de entradas e saídas
O código a seguir mostra um exemplo de como executar a avaliação:
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).
Exemplo de uso de traços existentes
O código a seguir demonstra como executar a avaliação utilizando traços existentes:
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
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 |
---|---|---|---|---|
|
| Um | Obrigatório |
|
|
| Um | Não deve ser fornecido, gerado pelo MLflow a partir do Trace. |
|
|
| Um | Opcional | Opcional |
|
| O objeto de rastreamento da solicitação. Se o | Não deve ser fornecido, gerado pelo MLflow a partir do Trace. |
|
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
emdata
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 |
---|---|---|
| ✅ | Dicionário passado para o seu |
| 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 |
---|---|---|
| ✅ | Entradas originais para seu aplicativo GenAI |
| ✅ | Pré-computar os resultados de seu aplicativo |
| Opcional | Verdade básica opcional para marcadores |
Opção B - Forneça traços existentes:
campo | Obrigatório | Descrição |
---|---|---|
| ✅ | Objetos de rastreamento do MLflow com entradas/saídas |
| 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.
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.
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.
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.
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.
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 ).
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.
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.
- Model Serving chat
- Agent Framework
- Custom endpoint
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).
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()]
)
O endpoint do Agent Framework pode ter diferentes interfaces de entrada. O exemplo a seguir mostra um input
key:
import mlflow
from mlflow.genai.scorers import RelevanceToQuery
# Create a predict function for a Knowledge Assistant agent endpoint
predict_fn = mlflow.genai.to_predict_fn("endpoints:/ka-56a301ab-endpoint")
# Evaluate the agent endpoint
results = mlflow.genai.evaluate(
data=[{"inputs": {"input": [{"role": "user", "content": "How do I use the Models from Code feature in MLflow?"}]}}],
predict_fn=predict_fn,
scorers=[RelevanceToQuery()]
)
Os pontos finais personalizados podem ter padrões de acesso totalmente diferentes para o envio de dados. Certifique-se de que o formato de entrada data
é compatível com o endpoint utilizado para avaliação.
Se o formato dos dados de avaliação for incompatível com o seu endpoint, envolva a interface do modelo. Uma camada de tradução pode garantir que a carga útil correta seja enviada para o e endpoint e de avaliação.
import mlflow
from mlflow.genai.scorers import RelevanceToQuery
def custom_predict_fn(inputs):
# Transform inputs to match your endpoint's expected format
# For example, if your endpoint expects a 'query' key instead of 'messages'
transformed_inputs = {
"query": inputs["messages"][0]["content"],
"context": inputs.get("context", "")
}
# Call your endpoint with the transformed data
original_predict_fn = mlflow.genai.to_predict_fn("endpoints:/my-custom-endpoint")
return original_predict_fn(transformed_inputs)
# Use your wrapper function for evaluation
results = mlflow.genai.evaluate(
data=[{"inputs": {"messages": [{"role": "user", "content": "What is machine learning?"}], "context": "technical documentation"}}],
predict_fn=custom_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.
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
- Avalie seu aplicativo - Guia passo a passo para realizar sua primeira avaliação.
- logs Criar um conjunto de dados de avaliação - Crie dados de teste estruturados a partir de dados de produção ou do zero.
- Defina avaliadores personalizados - Crie métricas adaptadas ao seu caso específico.