Criar um conjunto de dados de avaliação e avaliadores (versão prévia)

Importante

O Otimizador de Agente está atualmente em versão prévia. Essa versão prévia é fornecida sem um contrato de nível de serviço e não recomendamos isso para cargas de trabalho de produção. Alguns recursos podem não ter suporte ou podem ter restrição de recursos. Para obter mais informações, consulte Termos de Uso Complementares para Versões Prévias do Microsoft Azure.

O otimizador do agente avalia seu agente em relação a um conjunto de dados - uma coleção de tarefas - pontuado pelos avaliadores. Você pode gerar ambos automaticamente da CLI ou criar um conjunto de dados manualmente para controle total.

Ambas as partes são essenciais para uma boa otimização: o conjunto de dados define o que testar e os avaliadores definem como julgar cada resposta. Avaliadores fracos produzem pontuações barulhentas que levam a uma otimização ruim, portanto, invista em avaliadores fortes tanto quanto em tarefas representativas.

A criação desses ativos é a segunda etapa no fluxo de trabalho de otimização, depois que você prepara o otimizador do agente. O otimizador os usa para pontuar sua linha de base e classificar candidatos.

Pré-requisitos

A maneira mais rápida de criar ativos de avaliação é com azd ai agent eval generate. O comando detecta automaticamente seu agente e gera tudo o que o otimizador precisa:

azd ai agent eval generate

Por padrão, ele gera:

  • Um conjunto de dados inicial de tarefas adaptadas ao domínio do seu agente.
  • Avaliadores que pontuam respostas - um avaliador interno (como builtin.task_adherence) mais um avaliador de rubrica personalizado adaptado ao seu agente.
  • Um executável eval.yaml que os conecta entre si.

Para o assistente interativo, sinalizadores não interativos e detalhes sobre os artefatos gerados, consulte Inicializar ativos de avaliação.

Após a geração, azd ai agent optimize detecta eval.yamlautomaticamente:

azd ai agent optimize

Para personalizar os ativos gerados, consulte Personalizar avaliadores e criar um conjunto de dados personalizado. Para alterar as opções de execução, edite eval.yaml; consulte Configurar a execução de otimização.

Personalizar avaliadores (avançado)

Os avaliadores pontuam cada resposta do agente. O otimizador dá suporte a dois tipos:

  • Avaliadores internos, como builtin.task_adherence, que pontuam cada critério de nível de tarefa como pass ou fail.
  • Avaliadores personalizados por critérios de avaliação, que atribuem pontuações às respostas em várias dimensões de qualidade adaptadas ao seu agente. azd ai agent eval generate cria um automaticamente como um arquivo editável rubric_dimensions.json .

Para a maioria dos agentes, o avaliador de rubrica gerado fornece as pontuações mais significativas porque é adaptado ao seu domínio. Edite o gerado rubric_dimensions.json para refinar dimensões e, em seguida, execute azd ai agent eval update para registrar as alterações como uma nova versão. Para obter detalhes sobre como gerar, editar e controlar a versão de avaliadores, consulte Inicializar recursos de avaliação.

Para conectar os avaliadores à configuração de execução, consulte Configurar a execução da otimização.

Criar um conjunto de dados personalizado (avançado)

Crie um conjunto de dados personalizado quando precisar de controle preciso sobre cenários de teste ou tiver dados de produção a serem usados diretamente. A abordagem recomendada é iterar a partir do conjunto de dados inicial que azd ai agent eval generate produz—transformá-lo em um conjunto de dados local ou apontar para outro conjunto de dados já registrado no seu projeto Foundry.

Escolher uma fonte de conjunto de dados

Um conjunto de dados pode vir de uma das duas fontes:

  • dataset do Foundry — um conjunto de dados já registrado em seu projeto Foundry. Faça referência a isso em eval.yaml usando name e version.
  • Conjunto de dados local – um arquivo JSONL que você cria e mantém em seu projeto. Faça referência a ele em eval.yaml usando local_uri.

Ambas as fontes usam o mesmo esquema de tarefa descrito na próxima seção. Para a eval.yaml fiação, consulte Configurar a execução de otimização.

Esquema de conjunto de dados

Um conjunto de dados usa o formato JSONL (Linhas JSON). Cada linha é um objeto JSON que representa uma única tarefa de avaliação: um cenário individual. Uma tarefa tem um prompt (query) e, opcionalmente, nível criteriade tarefa.

{"name": "task_1", "query": "Your prompt here"}
{"name": "task_2", "query": "Another prompt", "ground_truth": "Expected answer"}
Campo Obrigatório Description
name Sim Identificador de tarefa exclusivo (por exemplo, "greeting", ). "math_test"
query Sim A mensagem enviada ao agente.
ground_truth No Resposta esperada, usada por avaliadores que dão suporte a uma referência.
criteria No Verificações opcionais no nível da tarefa. Consulte Adicionar critérios de nível de tarefa.

Ao usar um conjunto de dados local, valide a sintaxe JSONL antes de executar a otimização:

python -c "import json; [json.loads(l) for l in open('eval.jsonl')]"

Adicionar critérios de nível de tarefa

Os critérios são opcionais. Os avaliadores em eval.yaml que você configura se aplicam a cada tarefa no conjunto de dados. Adicione por tarefa criteria somente quando uma tarefa específica precisar de verificações além desses avaliadores compartilhados. Quando presentes, os criteria de uma tarefa são pontuados e agregados junto com os avaliadores compartilhados para gerar a pontuação geral da tarefa.

Campo Obrigatório Description
criteria[].name Sim Nome curto para o critério (por exemplo, "is_polite").
criteria[].instruction Sim O que o avaliador verifica. Seja específico e testável.

O seguinte conjunto de dados de suporte ao cliente mostra tarefas com critérios de nível de tarefa:

{"name": "refund_policy", "query": "What is your refund policy?", "criteria": [{"name": "mentions_30_days", "instruction": "Response must mention the 30-day refund window"}, {"name": "polite_tone", "instruction": "Response must be professional and empathetic"}]}
{"name": "order_status", "query": "Where is my order #12345?", "criteria": [{"name": "asks_for_details", "instruction": "Agent should ask for email or order details to look up the order"}, {"name": "no_hallucination", "instruction": "Agent must NOT make up a fake order status"}]}
{"name": "out_of_scope", "query": "Can you help me fix my car?", "criteria": [{"name": "polite_decline", "instruction": "Agent should politely explain this is outside its scope"}, {"name": "redirect", "instruction": "Agent should suggest contacting an appropriate service"}]}

Dicas para escrever bons conjuntos de dados

Incluir casos extremos

Teste além do bom caminho. Inclua:

  • Solicitações fora do escopo — as entradas que seu agente deve recusar ou redirecionar
  • Consultas ambíguas – tarefas em que o agente deve pedir esclarecimentos
  • Entradas adversariais — Tentativas de enganar o agente a se comportar mal
  • Tarefas de várias etapas – solicitações complexas que exigem raciocínio estruturado

Diretrizes de tamanho

Tamanho do conjunto de dados Compromisso
3 a 5 tarefas Iteração rápida, sinal limitado
5 a 10 tarefas Bom equilíbrio de velocidade e cobertura
10 a 20 tarefas Avaliação abrangente, execuções mais longas
Mais de 20 tarefas Completo, mas lento – considere a validação final

Conjuntos de dados maiores oferecem uma cobertura mais ampla, mas levam mais tempo para serem avaliados.

Fornecer a verdade básica quando útil

O ground_truth campo fornece aos avaliadores uma resposta de referência para comparar. Não é necessário - os avaliadores também podem julgar as respostas com base em suas instruções e apenas em quaisquer critérios no nível da tarefa.

{"name": "geography_fact", "query": "What is the largest city in France by population?", "ground_truth": "Paris", "criteria": [{"name": "correct_answer", "instruction": "Response must state that Paris is the largest city in France by population"}]}

Escreva prompts como usuários reais

Use mensagens reais de seus usuários, se possível. Os prompts reais capturam o vocabulário e o contexto que seu agente enfrenta na produção, o que também ajuda você a escrever critérios realistas no nível da tarefa.

Ser específico em critérios

Critérios vagos levam a pontuação inconsistente. Torne cada critério específico e testável.

Ruim:

{"name": "good_answer", "instruction": "The response should be good"}

Bom:

{"name": "mentions_30_days", "instruction": "Response must explicitly mention the 30-day refund window"}

Solução de problemas

Problema Cause Corrigir
dataset not found Caminho errado em eval.yaml Para dataset.local_uri, use um caminho relativo ao local do arquivo de configuração. Para um conjunto de dados do Foundry, verifique dataset.name e dataset.version.
invalid JSON on line N JSONL malformado Valide se cada linha é JSON válida. Verifique se há vírgulas finais.
As pontuações são inconsistentes entre execuções Critérios vagos Torne os critérios específicos e testáveis.