Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Avalie conversas completas de conjuntos de dados no nível de turno ou conversa.
Pré-requisitos
- Conclua os pré-requisitos de avaliação de nuvem e a configuração do cliente.
- Dados de conversa com uma
messagesmatriz. - Avaliadores que oferecem suporte ao nível de avaliação selecionado, como coerência e fundamentação.
Os exemplos usam o cliente SDK configurado em Configurar o cliente SDK.
Avaliar conjuntos de dados de conversa
Avalie conversas completas para avaliar a qualidade do agente em interações inteiras do usuário - não apenas respostas individuais. Use a avaliação no nível da conversa para identificar problemas de qualidade, como resolução incompleta de tarefas, frustração do usuário e regressões em chamadas de ferramentas que a avaliação no nível do rodada não detecta.
Por exemplo, considere um agente de suporte em que o usuário vai ficando frustrado ao longo de várias interações:
Turno 1 — Usuário: "Preciso redefinir minha senha." Agente: "Encontrei sua conta. Enviarei um link de redefinição."
Turno 2 — Usuário: "Não recebi o e-mail." Atendente: "Reenviei o link." Verifique o spam."
Turno 3 — Usuário: "Ainda nada. Você pode simplesmente redefini-lo diretamente?" Agente: "Enviei outro link de redefinição."
Um avaliador em nível de turno atribui pontuação apenas à última resposta — que é educada e adota uma ação —, por isso ela recebe uma boa pontuação. Um avaliador em nível de conversa, que classifica a satisfação do cliente ao longo de toda a conversa, sinaliza que o agente repetiu a mesma ação malsucedida três vezes sem tentar uma alternativa, sem resolver o problema do usuário.
A avaliação em nível de conversa difere da avaliação em nível de turno de várias maneiras:
| Aspeto | De nível de rodada | Nível de conversa |
|---|---|---|
| Scope | Pares de consulta-resposta individuais | Conversas completas com múltiplas interações |
| Métricas | Qualidade e segurança de cada resposta | Resultados em nível de conversa e satisfação do usuário |
| Formato dos dados | JSONL com campos query e response |
JSONL com matriz messages que contém a conversa completa |
| Caso de uso | Testando respostas de modelo individual | Testando experiências completas com agentes |
Escolha o fluxo de trabalho de conversa que corresponde à fonte de dados:
| Workflow | Quando usar | Tipo de fonte de dados |
|---|---|---|
| De conjunto de dados ou em linha | Você tem rastros locais de conversa ou dados de teste |
jsonl com file_id ou file_content |
| Conversas publicadas | Você deseja avaliar conversas específicas ou o tráfego de produção amostrado do Application Insights |
azure_ai_trace_data_source_preview por trace_source |
| Conversas simuladas | Você deseja gerar conversas de teste sintéticas |
azure_ai_target_completions por conversation_gen_preview |
Escolher um nível de avaliação
O parâmetro evaluation_level da execução determina se os avaliadores avaliam turnos individuais ou conversas completas:
| Valor | Behavior |
|---|---|
"turn" |
Os avaliadores pontuam cada turno de forma independente. |
"conversation" |
Os avaliadores pontuam toda a conversa como um todo. |
| (omitido) | Usa "turn" como padrão. |
Importante
Compatibilidade do avaliador: cada avaliador dá suporte a níveis de avaliação específicos. Verifique o campo de supported_evaluation_levels avaliador no catálogo de avaliadores.
-
Avaliadores apenas de turno (por exemplo,
fluency,relevance) não podem ser usados comevaluation_level="conversation". - Atualmente, todos os avaliadores de nível de conversa oferecem suporte aos níveis
"turn"e"conversation".
Erros comuns
| Erro | Cause | Solução |
|---|---|---|
| Nível de avaliação incompatível | Usando evaluation_level="conversation" com um avaliador apenas de rodada |
Remova o avaliador apenas de rodada ou altere para evaluation_level="turn" |
Preparar dados de conversa
Crie um arquivo JSONL em que cada linha contenha uma conversa completa no messages campo. Cada mensagem deve incluir um role (usuário, assistente ou sistema) e content. Para obter um exemplo completo, consulte os exemplos de avaliação de conversação no SDK.
{"messages": [{"role": "user", "content": "What's my account balance?"}, {"role": "assistant", "content": "Your current balance is $1,234.56."}, {"role": "user", "content": "Thanks!"}, {"role": "assistant", "content": "You're welcome! Is there anything else?"}]}
Você também pode incluir definições de ferramentas e chamadas de ferramenta se o agente usar ferramentas:
{"messages": [{"role": "user", "content": "What is the capital/major city of France?"}, {"role": "assistant", "content": "Paris"}]}
{"messages": [{"role": "user", "content": "How do I reverse a string in Python?"}, {"role": "assistant", "content": "You can reverse a string in Python by using slicing: string[::-1]"}]}
{"messages": [{"role": "user", "content": "What are the main causes of climate change?"}, {"role": "assistant", "content": "The main causes of climate change are the increase in greenhouse gases in the atmosphere, primarily due to human activities such as burning fossil fuels and deforestation."}]}
{"messages": [{"role": "user", "content": "What's my account balance?"}, {"role": "assistant", "content": null, "tool_calls": [{"id": "call_abc123", "type": "function", "function": {"name": "get_account_balance", "arguments": "{\"account_id\": \"ACCT-7890\"}"}}]}, {"role": "tool", "tool_call_id": "call_abc123", "content": "{ \"balance\": 1234.56, \"currency\": \"USD\" }"}, {"role": "assistant", "content": "Your current balance is 1,234.56."}, {"role": "user", "content": "Thanks!"}, {"role": "assistant", "content": "You're welcome! Is there anything else?"}], "tool_definitions": [{"name": "get_account_balance", "description": "Retrieves the current balance for a customer account", "parameters": {"type": "object", "properties": {"account_id": {"type": "string"}}, "required": ["account_id"]}}]}
{"messages": [{"role": "user", "content": "Explain the theory of relativity in simple terms."}, {"role": "assistant", "content": "Einstein's theory of relativity shows that space and time are interconnected and relative to the observer's frame of reference."}]}
{"messages": [{"role": "user", "content": "What's the weather in Seattle?"}, {"role": "assistant", "content": null, "tool_calls": [{"id": "call_002", "type": "function", "function": {"name": "get_weather", "arguments": "{\"location\": \"Seattle, WA\"}"}}]}, {"role": "tool", "tool_call_id": "call_002", "content": "{ \"temperature\": 55, \"condition\": \"Cloudy\" }"}, {"role": "assistant", "content": "It's currently 55F and cloudy in Seattle."}], "tool_definitions": [{"name": "get_weather", "description": "Get the current weather for a location", "parameters": {"type": "object", "properties": {"location": {"type": "string"}}, "required": ["location"]}}]}
{"messages": [{"role": "user", "content": "What is the tallest mountain in the world?"}, {"role": "assistant", "content": "Mount Everest is the tallest mountain in the world."}]}
{"messages": [{"role": "user", "content": "Is 4 x 2 = 16?"}, {"role": "assistant", "content": "No, 4 x 2 = 8."}]}
{"messages": [{"role": "user", "content": "What is the best Italian desert?"}, {"role": "assistant", "content": "Tiramisu is a popular Italian dessert."}]}
{"messages": [{"role": "user", "content": "What is the chemical formula for water?"}, {"role": "assistant", "content": "The chemical formula for water is H2O."}]}
Definir o esquema de dados e os avaliadores
Especifique o esquema para seus dados de conversa, "mensagens" e selecione os avaliadores projetados para avaliação em nível de conversa. Os avaliadores no nível da conversa avaliam toda a interação, em vez de cada turno individual.
pip install "azure-ai-projects>=2.2.0"
import os
from openai.types.eval_create_params import DataSourceConfigCustom
from azure.identity import DefaultAzureCredential
from azure.ai.projects import AIProjectClient
from azure.ai.projects.models import TestingCriterionAzureAIEvaluator
endpoint = os.environ["AZURE_AI_PROJECT_ENDPOINT"]
model_deployment_name = os.environ["AZURE_AI_MODEL_DEPLOYMENT_NAME"]
with (
DefaultAzureCredential() as credential,
AIProjectClient(endpoint=endpoint, credential=credential) as project_client,
project_client.get_openai_client() as openai_client,
):
data_source_config = DataSourceConfigCustom(
type="custom",
item_schema={
"type": "object",
"properties": {
"messages": {"type": "array"},
"tool_definitions": {"type": "array"},
},
"required": ["messages"],
},
include_sample_schema=False,
)
testing_criteria = [
TestingCriterionAzureAIEvaluator(
type="azure_ai_evaluator",
name="conversation_coherence",
evaluator_name="builtin.coherence",
initialization_parameters={"model": model_deployment_name},
data_mapping={"messages": "{{item.messages}}"},
),
TestingCriterionAzureAIEvaluator(
type="azure_ai_evaluator",
name="groundedness",
evaluator_name="builtin.groundedness",
initialization_parameters={"model": model_deployment_name},
data_mapping={"messages": "{{item.messages}}"},
),
]
Criar avaliação e executar
Preparação: baixe sample_data_multiturn_conversations.jsonl
from openai.types.evals.create_eval_jsonl_run_data_source_param import (
CreateEvalJSONLRunDataSourceParam,
SourceFileID,
)
# Upload conversation data
data_id = project_client.datasets.upload_file(
name="multiturn-conversation-data",
version="1",
file_path="./sample_data_multiturn_conversations.jsonl",
).id
# Create the evaluation
eval_object = openai_client.evals.create(
name="Multi-turn Conversation Evaluation",
data_source_config=data_source_config,
testing_criteria=testing_criteria,
)
# Create a run with evaluation_level set to "conversation"
eval_run = openai_client.evals.runs.create(
eval_id=eval_object.id,
name="multiturn-conversation-run",
data_source=CreateEvalJSONLRunDataSourceParam(
type="jsonl",
source=SourceFileID(
type="file_id",
id=data_id,
),
),
extra_body={"evaluation_level": "conversation"},
)
Para sondar a conclusão e interpretar os resultados, consulte Obter resultados de avaliação de nuvem.
Para obter um exemplo executável completo, consulte sample_multiturn_conversation_evaluation.py no GitHub.
Próximas Etapas
- Para sondar a conclusão e interpretar os resultados, consulte Obter resultados de avaliação de nuvem.
- Para avaliar rastros de produção, consulte Avaliar conversas do modelo e do agente implantados.
- Para gerar conversas sintéticas, consulte Simular conversas do agente.