Criar um conjunto de dados de avaliação e avaliadores (pré-visualização)

Importante

O Agent Optimizer está atualmente em pré-visualização. Esta pré-visualização é fornecida sem um acordo de nível de serviço, e não a recomendamos para trabalhos em produção. Certas funcionalidades podem não ser suportadas ou podem ter capacidades limitadas. Para mais informações, consulte Termos Suplementares de Utilização para Microsoft Azure Previews.

O otimizador de agentes avalia o seu agente com base num conjunto de dados – uma coleção de tarefas – avaliadas pelos avaliadores. Pode gerar ambos automaticamente a partir da CLI ou criar manualmente um conjunto de dados para controlo 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 avaliar cada resposta. Avaliadores fracos produzem pontuações ruidosas que levam a má otimização, por isso investe tanto em avaliadores fortes como em tarefas representativas.

Criar estes recursos é o segundo passo no fluxo de otimização, depois de preparar o seu agente para otimização. O otimizador usa-os para pontuar a sua linha de base e classificar candidatos.

Pré-requisitos

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

azd ai agent eval generate

Por defeito, gera:

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

Para o assistente interativo, as opções não interativas e os detalhes sobre os recursos gerados, consulte Inicializar recursos de avaliação.

Após a geração, azd ai agent optimize deteta automaticamente eval.yaml:

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; veja Configurar a execução de otimização.

Personalizar avaliadores (avançado)

Os avaliadores avaliam a resposta de cada agente. O otimizador suporta dois tipos:

  • Avaliadores incorporados, como builtin.task_adherence, que pontuam cada critério ao nível da tarefa como aprovado ou reprovado.
  • Avaliadores de rubricas personalizados, que avaliam respostas em várias dimensões de qualidade adaptadas ao seu agente. azd ai agent eval generate cria um automaticamente como ficheiro editável rubric_dimensions.json .

Para a maioria dos agentes, o avaliador de rubricas gerado dá as pontuações mais significativas porque é adaptado ao seu domínio. Edita o gerado rubric_dimensions.json para refinar as dimensões e depois executa azd ai agent eval update para registar as alterações como uma nova versão. Para detalhes sobre geração, edição e versionamento de avaliadores, consulte Inicializar ativos de avaliação.

Para ligar avaliadores à sua configuração de execução, veja Configurar a execução de otimização.

Criar um conjunto de dados personalizado (avançado)

Crie um conjunto de dados personalizado quando precisar de controlo preciso sobre cenários de teste ou quando tiver dados de produção para usar diretamente. A abordagem recomendada é iterar a partir do conjunto de dados inicial que azd ai agent eval generate produz—refiná-lo até obter um conjunto de dados local, ou apontar para outro conjunto de dados já registado no seu projeto Foundry.

Escolha uma fonte de conjunto de dados

Um conjunto de dados pode provir de uma de duas fontes:

  • Conjunto de dados Foundry — um conjunto de dados já registado no seu projeto Foundry. Referencia-o em eval.yaml por name e version.
  • Conjunto de dados local — um ficheiro JSONL que cria e mantém no seu projeto. Faça referência a isso em eval.yaml através de local_uri.

Ambas as fontes utilizam o mesmo esquema de tarefas descrito na secção seguinte. Para a cablagem de eval.yaml, consulte Configurar a execução da otimização.

Esquema de conjunto de dados

Um conjunto de dados utiliza o formato JSONL (JSON Lines). 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, criteria ao nível da 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 único de tarefa (por exemplo, "greeting", "math_test").
query Sim A mensagem enviada ao agente.
ground_truth No Resposta esperada, usada por avaliadores que apoiam uma referência.
criteria No Verificações opcionais ao nível da tarefa. Ver Adicionar critérios ao nível da tarefa.

Quando 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 ao nível da tarefa

Os critérios são opcionais. Os avaliadores que configuras eval.yaml aplicam-se a todas as tarefas do conjunto de dados. Adicione criteria em cada tarefa apenas quando uma tarefa específica necessitar de verificações além das efetuadas por esses avaliadores partilhados. Quando presente, as tarefas criteria são pontuadas e agregadas juntamente com os avaliadores partilhados para produzir a pontuação global da tarefa.

Campo Obrigatório Description
criteria[].name Sim Nome abreviado 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 apoio ao cliente mostra tarefas com critérios ao nível da 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 excepcionais

Teste para além do cenário ideal. Inclui:

  • Pedidos fora do âmbito — Entradas que o seu agente deve recusar ou redirecionar
  • Consultas ambíguas — Tarefas onde o agente deve pedir esclarecimentos
  • Inputs adversariais — Tentativas de levar o agente a comportar-se mal
  • Tarefas em vários passos — Pedidos complexos que requerem raciocínio estruturado

Diretrizes de tamanho

Tamanho do conjunto de dados Compromisso
3–5 tarefas Iteração rápida, sinal limitado
5–10 tarefas Bom equilíbrio entre velocidade e cobertura
10–20 tarefas Avaliação abrangente, corridas mais longas
20+ tarefas Minucioso mas lento — considera para validação final

Conjuntos de dados maiores oferecem uma cobertura mais ampla, mas demoram mais tempo a ser avaliados.

Forneça dados de referência quando útil

O ground_truth campo fornece aos avaliadores uma resposta de referência para comparar. Não é obrigatório – os avaliadores também podem avaliar as respostas apenas com base nas suas instruções e em quaisquer critérios ao 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"}]}

Escrever pedidos como utilizadores reais

Use mensagens reais dos seus utilizadores, se possível. Os prompts reais captam o vocabulário e o contexto que o seu agente enfrenta na produção, o que também o ajuda a escrever critérios realistas ao nível da tarefa.

Seja específico nos critérios

Critérios vagos levam a pontuações inconsistentes. Torne cada critério específico e testável.

Fraco:

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

Bom:

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

Troubleshooting

Problema Motivo Corrigir
dataset not found Caminho incorreto em eval.yaml Para dataset.local_uri, use um caminho relativo à localização do ficheiro de configuração. Para um conjunto de dados Foundry, verifique dataset.name e dataset.version.
invalid JSON on line N JSONL malformado Valida que cada linha é JSON válida. Verifique se há vírgulas finais.
As pontuações são inconsistentes entre as corridas Critérios vagos Crie critérios específicos e testáveis.