Avaliar conversas
A avaliação de conversas permite analisar sessões de conversação inteiras, em vez de turnos individuais. Isso é essencial para avaliar sistemas AI conversacional, nos quais a qualidade emerge ao longo de múltiplas interações, como padrões de frustração do usuário, completude da conversa ou coerência geral do diálogo.
A avaliação em múltiplas etapas é experimental. A API e o comportamento podem mudar em versões futuras.
Pré-requisitos
Instale o MLflow 3.10.0 ou mais tarde:
pip install --upgrade 'mlflow[databricks]>=3.10'
Seu agente deve estar configurado para rastrear IDs de sessão nos rastreamentos. Consulte a seção Rastrear usuários e sessões para saber como definir IDs de sessão em seus rastreamentos.
Duas abordagens
O MLflow suporta duas abordagens para avaliar conversas:
-
Avaliar conversas pré-geradas : Avaliar conversas existentes que já foram rastreadas. Utilize esta abordagem quando tiver:
- Dados de conversação de produção para análise
- Conversas de teste pré-gravadas de controle de qualidade ou estudos de usuários.
- Conversas de uma versão anterior do agente para comparação.
-
Simule conversas durante a avaliação : Gere novas conversas simulando interações do usuário com seu agente. Utilize essa abordagem quando quiser:
- Teste sistematicamente uma nova versão do agente com cenários consistentes.
- Gere diversos cenários de teste em escala.
- Teste a resistência do seu agente com comportamentos de usuário específicos e casos extremos.
Visão geral
A avaliação tradicional de turno único avalia a resposta de cada agente de forma independente. No entanto, os agentes conversacionais exigem avaliação em nível de sessão para capturar:
- Frustração do usuário : O usuário ficou frustrado? O problema foi resolvido?
- Completude da conversa : Todas as perguntas do usuário foram respondidas até o final da conversa?
- Retenção de conhecimento : O agente se lembra de informações do início da conversa?
- Coerência do diálogo : A conversa flui naturalmente?
A avaliação multiturn atende a essas necessidades agrupando os registros em sessões de conversa e aplicando avaliadores que analisam toda a história da conversa.
Avaliar conversas pré-geradas
Avalie as conversas que já foram rastreadas. Isso é útil para avaliar dados de produção ou conversas de teste pré-gravadas.
o passo 1: marcar rastros com IDs de sessão
Ao criar seu agente, defina IDs de sessão nos rastreamentos para agrupá-los em conversas:
import mlflow
@mlflow.trace
def my_chatbot(question, session_id):
mlflow.update_current_trace(
tags={"mlflow.trace.session": session_id}
)
# ... your chatbot logic
Para obter documentação completa sobre como acompanhar sessões, consulte Rastrear usuários e sessões.
o passo 2: Recuperar e avaliar sessões
Obtenha os traços do seu experimento e passe-os para mlflow.genai.evaluate. O MLflow agrupa automaticamente os rastreamentos por ID de sessão:
from mlflow.genai.scorers import ConversationCompleteness, UserFrustration
# Get traces from your experiment
traces = mlflow.search_traces(
filter_string="attributes.status = 'OK'",
return_type="list",
)
# Evaluate the conversations
# MLflow automatically groups traces by their session ID tag
results = mlflow.genai.evaluate(
data=traces,
scorers=[
ConversationCompleteness(), # Did the agent answer all questions?
UserFrustration(), # Did the user become frustrated?
],
)
Você também pode recuperar sessões completas diretamente usando mlflow.search_sessions:
import mlflow
# Get complete sessions (each session is a list of traces)
sessions = mlflow.search_sessions(
locations=["<your-experiment-id>"],
max_results=50,
)
# Flatten for evaluation
all_traces = [trace for session in sessions for trace in session]
results = mlflow.genai.evaluate(
data=all_traces,
scorers=[ConversationCompleteness(), UserFrustration()],
)
Simule conversas durante a avaliação.
Gere novas conversas simulando interações do usuário. Isso permite testar diferentes versões de agentes com objetivos e perfis consistentes.
import mlflow
from mlflow.genai.simulators import ConversationSimulator
from mlflow.genai.scorers import ConversationCompleteness, Safety
# Define test scenarios
simulator = ConversationSimulator(
test_cases=[
{"goal": "Successfully set up experiment tracking"},
{"goal": "Identify the root cause of a deployment error"},
{
"goal": "Understand how to implement model versioning",
"persona": "You are a beginner who needs detailed explanations",
},
],
max_turns=5,
)
# Your agent's predict function
def predict_fn(input: list[dict], **kwargs) -> str:
# input is the conversation history
response = your_agent.chat(input)
return response
# Simulate conversations and evaluate
results = mlflow.genai.evaluate(
data=simulator,
predict_fn=predict_fn,
scorers=[
ConversationCompleteness(),
Safety(),
],
)
Para obter documentação completa sobre simulação de conversação, incluindo definição de casos de teste, interfaces de funções de previsão e opções de configuração, consulte Simulação de conversação.
Juízes de múltiplas voltas
juízas integradas
MLflow oferece avaliadores integrados de múltiplas interações para avaliar a qualidade da conversa. Para obter a lista completa e a documentação detalhada, consulte a documentação dos avaliadores predefinidos do MLflow e a página Avaliadores e juízes de LLM .
Juízes personalizados
Crie juízes personalizados de múltiplas voltas usando make_judge. Use a variável {{ conversation }} padrão para acessar a história completa da conversa:
from mlflow.genai.judges import make_judge
from typing import Literal
# Create a custom multi-turn judge
politeness_judge = make_judge(
name="politeness",
judge_prompt=(
"Evaluate whether the assistant maintained a polite and professional "
"tone throughout this conversation:\n\n{{ conversation }}\n\n"
"Rate as 'consistently_polite', 'mostly_polite', or 'impolite'."
),
feedback_value_type=Literal["consistently_polite", "mostly_polite", "impolite"],
)
# Get traces from your experiment
traces = mlflow.search_traces(
filter_string="attributes.status = 'OK'",
return_type="list",
)
# Use in evaluation
results = mlflow.genai.evaluate(
data=traces,
scorers=[politeness_judge],
)
A variável {{ conversation }} insere o histórico completo da conversa em um formato legível para o juiz analisar.
A variável {{ conversation }} só pode ser usada com {{ expectations }}, não com {{ inputs }}, {{ outputs }} ou {{ trace }}.
Como as avaliações são armazenadas
As avaliações de múltiplas interações são armazenadas no primeiro registro (cronologicamente) de cada sessão. Este projeto garante:
- As avaliações permanecem estáveis mesmo com a adição de novas etapas a uma conversa.
- Você pode encontrar facilmente avaliações em nível de conversa analisando os registros de início de sessão.
- A interface de usuário de Sessões pode exibir métricas de conversação de forma eficiente.
As avaliações incluem metadados que as identificam como sendo de nível conversacional:
session_idO ID da sessão que vincula a avaliação à conversa completa.
Trabalhando com sessões específicas
Para avaliar uma sessão específica, use mlflow.search_traces com strings de filtro:
import mlflow
from mlflow.genai.scorers import ConversationCompleteness, UserFrustration
# Get traces for a specific session using filter
traces = mlflow.search_traces(
filter_string="tags.`mlflow.trace.session` = '<your-session-id>'",
return_type="list",
)
# Evaluate the session
results = mlflow.genai.evaluate(
data=traces,
scorers=[ConversationCompleteness(), UserFrustration()],
)
Próximos passos
- Simulação de Conversas - Gere conversas sintéticas para testar seu agente em diversos cenários e comportamentos de usuários.
- Marcadores predefinidos - Referência completa para todos os marcadores integrados de uma ou várias voltas.
- Juízes personalizados - Crie juízes LLM personalizados usando
make_judgepara avaliar critérios específicos de conversação. - Monitore usuários e sessões - Aprenda como configurar seu agente com IDs de sessão.