Como criar um dataset de avaliação de agentes: tarefas reais, trajetórias e testes de regressão

"OpenAI Evaluation best practices recomenda definir objetivos, coletar um dataset, definir métricas, executar comparações e avaliar continuamente. Dados de teste podem vir de production data, historical data, domain samples e rotulagem humana."
Na semana passada, o agente de relatórios diários ainda gerava relatórios normalmente. Depois de um upgrade de modelo, ele continua retornando um resumo final que parece correto, mas a trajetória pulou a verificação de permissão e a ferramenta de atualização de dados. Um agente de suporte dá a resposta final certa, mas chama a ferramenta de reembolso com argumentos errados; um benchmark público não enxerga esse risco. Em uma retrospectiva de incidente já existem traceId, tool call, approvalId, state event e julgamento humano, mas nada virou teste obrigatório antes do próximo release.
Esse tipo de regressão não se resolve trocando de modelo nem rodando mais uma demo. Um dataset de avaliação de agentes precisa vir da distribuição real de tarefas e das trajetórias de falha em produção: tool calls, formatos de argumento, transições de estado, approval records e human labels. Depois, ele deve entrar no CI como gate de regressão. O foco aqui são casos de falha e cenários reais: como construir um eval dataset sustentável que proteja o limite de qualidade de cada release.
1. Por que benchmarks públicos não bastam
1.1 Limites dos benchmarks públicos
Benchmarks públicos medem capacidade do modelo, não a qualidade das suas tarefas de negócio. Conjuntos como AgentBench e WebArena fornecem tarefas padronizadas, mas não cobrem a toolchain, o modelo de permissões nem a state machine do seu time.
Por exemplo, seu agente de relatórios pode precisar chamar check_permission, refresh_data e generate_report na ordem “verificar → atualizar → gerar”. Um benchmark público não testa esse fluxo, porque não conhece seus tool schemas nem seus limites de permissão.
Um bom score em benchmark público não significa que sua tarefa de negócio não vai regredir. Um dataset de avaliação de agentes deve testar a sua distribuição real de tarefas, não uma capacidade geral de raciocínio.
1.2 Valor principal de um dataset próprio
Um eval dataset próprio captura riscos que benchmarks públicos não enxergam. Veja a comparação:
| Cenário | Benchmark público | Eval dataset próprio |
|---|---|---|
| Agente de relatórios pula verificação de permissão | Não aparece; não existe essa ferramenta nem esse modelo de permissão | Captura a restrição de trajetória: deve chamar check_permission |
| Agente de suporte usa argumento errado de reembolso | Não existe essa ferramenta nem schema de reembolso | Lista esperada de tool calls + restrições de formato de argumento |
| Transições de estado pioram após upgrade de modelo | Não existe essa state machine | Assertion de trajetória de estado: verificar → aprovar → executar |
| Retrospectiva de incidente não vira teste | Não há dados de incidente | Caso de falha entra em negative cases |
Use benchmarks públicos para escolher modelos; use seu dataset próprio para proteger release gates. Eles se complementam, mas não se substituem. Se você já leu Comparativo de benchmarks de avaliação de agentes, sabe quais conjuntos públicos ajudam na escolha. Aqui o foco é construir dados de avaliação a partir do seu próprio ambiente de produção.
2. Campos centrais de um agent eval dataset
2.1 Campos obrigatórios
Um agent eval dataset não é só salvar entrada do usuário e resposta esperada. Ele precisa registrar trajetória de tool calls, transições de estado e julgamento humano. Estes são os campos obrigatórios:
| Campo | Descrição | Fonte |
|---|---|---|
| input | Descrição da tarefa do usuário | Production trace / desenho manual |
| expected output | Resposta final esperada | Anotação humana / golden set |
| expected tool calls | Lista esperada de tool calls | Análise de trajetória, como ["check_permission", "refresh_data"] |
| trajectory assertions | Restrições de trajetória: obrigatório, proibido ou ordenado | State machine + fluxo de aprovação |
| human labels | Julgamento humano: correto, errado ou parcial | Retrospectiva de incidente / fila de rotulagem |
LangSmith, em Evaluation concepts, recomenda que a avaliação de agentes cubra seleção de ferramentas, formato de argumentos e trajetória de execução, não apenas a resposta final. OpenAI Agents SDK Tracing fornece campos como trace_id, workflow_name e span para registrar tool calls e eventos de estado, mas esses campos brutos precisam ser anonimizados e extraídos antes de entrar em um dataset.
2.2 Campos opcionais
Adicione estes campos conforme a necessidade do negócio:
| Campo | Descrição | Uso |
|---|---|---|
| approval records | Registros de aprovação: aprovador, horário e resultado | Tool calls que exigem aprovação no modelo de permissões |
| state transitions | Sequência de transições de estado | Restrições de state machine, como ["init", "check", "approve"] |
| metadata | traceId, ambiente, versão do modelo | Diagnóstico de incidente e comparação de versões |
Se você leu o modelo de permissões de agentes (N157) e o design de aprovação humana (N155), sabe que approval records deve registrar etapa de aprovação, aprovador e resultado, para verificar se uma operação de alto risco passou por aprovação.
2.3 Anonimização e privacidade
Production trace não pode entrar cru no conjunto de avaliação. A documentação de OpenAI Agents SDK Tracing lembra que alguns spans podem capturar entradas/saídas do modelo ou entradas/saídas de function tools; por isso é preciso configurar se dados sensíveis serão incluídos.
Campos que devem ser anonimizados: PII (nome, email, telefone), secrets (API key, senha de banco de dados), dados de cliente (número de pedido, valor de transação).
Campos a manter: traceId, span_id para diagnóstico, workflow_name para classificação, nome da ferramenta e nome do estado para assertions.
Métodos de anonimização incluem substituir por placeholders como <user_id>, aplicar hash ou remover diretamente. A documentação Phoenix Running Evals on Traces mostra que traces podem virar entradas de avaliação, mas ainda precisam de label, score e rubric. Não coloque traces brutos completos diretamente no eval dataset.
3. Do production trace ao eval example
3.1 Fluxo de coleta de dados
Para transformar um production trace em eval example, você precisa de quatro etapas: anonimização, rotulagem, estratificação e armazenamento. Isso não é um projeto único de engenharia, é operação contínua.
Checklist:
- Exportar traces com falha da plataforma de monitoramento (veja Monitoramento de agentes e recuperação de falhas).
- Classificar por tipo de falha: erro de tool call, erro de formato de argumento, erro de transição de estado, erro de resposta final.
- Anonimizar: remover PII/secret/dados de cliente e manter traceId, span_id, workflow_name.
- Adicionar rótulo humano: correto/errado/parcialmente correto + motivo da falha.
- Armazenar por camada: golden set / negative cases / edge cases.
A documentação de Phoenix datasets diz que examples podem ser coletados de production, staging, evaluations ou manual. Produção traz a distribuição real de tarefas; staging ajuda a complementar cenários de borda.
3.2 Critérios de estratificação
| Camada | Critério | Uso |
|---|---|---|
| golden set | 100% correto + tarefas frequentes | Deve passar no release gate; limiar de pass rate |
| negative cases | Padrões típicos de falha | Alertas de regressão; evita repetir o mesmo erro |
| edge cases | Cenários long-tail / de borda | Cobertura complementar, incluir conforme o risco |
Dimensões de rotulagem, alinhadas a uma rubric LLM-as-judge: correção da seleção de ferramentas, correção do formato de argumentos, correção da ordem de execução, qualidade da resposta final e alinhamento com rótulos humanos.
OpenAI Evaluation best practices recomenda dados de teste com typical, edge e adversarial cases, usando human expert labellers. A estratificação acima segue essa lógica, mas enfatiza tarefas frequentes e modos típicos de falha, porque o objetivo é proteger o release gate, não cobrir todos os cenários.
4. Como escrever trajectory assertions
4.1 Tipos de restrições de trajetória
Trajectory assertions definem as regras de tool calls, formato de argumentos, transições de estado e aprovação que o agente deve cumprir. Estes são cinco tipos comuns:
| Tipo de restrição | Exemplo | Condição de falha |
|---|---|---|
| Lista de ferramentas obrigatórias | ["check_permission", "refresh_data", "generate_report"] | Falta qualquer ferramenta obrigatória |
| Lista de ferramentas proibidas | ["delete_user", "drop_table"] | Uma ferramenta proibida foi chamada |
| Restrição de formato de argumentos | {"refund_amount": "number", "user_id": "uuid"} | Tipo do argumento incorreto |
| Ordem de transição de estado | ["init", "check", "approve", "execute"] | Estado salta ou se repete |
| Existência de etapa de aprovação | ["need_approval", "approval_granted"] | Evento de aprovação ausente |
LangSmith Evaluation concepts menciona trajectory, tool selection e argument formatting como partes da avaliação de agentes. Phoenix Running Evals on Traces usa span_id para associar resultados de avaliação a um segmento específico de execução, mostrando que assertions de trajetória podem apontar para o span com falha.
Se você leu avaliação de capacidade de planejamento de agentes (N158) e limites entre state machine e prompt, sabe que campos de trajetória de estado vêm de state/event/checkpoint. Eles verificam se a transição de estado segue a ordem esperada.
4.2 Exemplo de código
Aqui está um pseudocódigo de trajectory assertions para uma avaliação genérica de agentes:
# Exemplo de trajectory assertions
def assert_trajectory_correct(result):
# Extrair a lista de tool calls
tools_called = [call.tool for call in result.tool_calls]
# Ferramentas obrigatórias
required_tools = ["check_permission", "refresh_data"]
for tool in required_tools:
assert tool in tools_called, f"Missing required tool: {tool}"
# Ferramentas proibidas
forbidden_tools = ["delete_user"]
for tool in forbidden_tools:
assert tool not in tools_called, f"Called forbidden tool: {tool}"
# Restrições de formato de argumento
for call in result.tool_calls:
if call.tool == "refund":
assert isinstance(call.args["refund_amount"], (int, float)), "refund_amount must be number"
assert len(call.args["user_id"]) == 36, "user_id must be uuid format"
# Ordem de transição de estado
expected_states = ["init", "check", "approve", "execute"]
actual_states = [event.state for event in result.state_events]
assert actual_states == expected_states, "State transition order mismatch"
# Existência da etapa de aprovação
approval_events = [e for e in result.state_events if e.type == "approval"]
assert len(approval_events) >= 1, "Missing approval step"
Esse código mostra como verificar ferramentas obrigatórias, ferramentas proibidas, formatos de argumentos, ordem de transições de estado e etapas de aprovação. Na prática, você pode usar trajectory assertions do LangSmith ou trace eval do Phoenix, mas a lógica central é a mesma.
Se você leu Avaliação de planejamento de agentes, sabe que trajetórias de planejamento também podem virar amostras de regressão para verificar decomposição de tarefas e autocorreção.
5. Rubric em camadas para LLM-as-judge
5.1 Por que o score total não basta
Se LLM-as-judge retorna apenas um score total, o resultado oscila e é difícil de diagnosticar. Um 80 pode significar que a seleção de ferramentas foi errada, mas a resposta saiu certa por acaso; ou que a resposta foi errada, mas o formato parecia bom. Não dá para saber se o problema está no prompt, no tool schema, no retrieval ou na state machine.
LangSmith Evaluation concepts recomenda definir padrões de qualidade para componentes-chave do agente: correct tool selection, proper argument formatting e trajectory. Ao pontuar cada componente separadamente, fica muito mais rápido localizar regressões depois de mudança de modelo ou prompt.
Se você leu Práticas avançadas de prompt engineering, sabe que DeepEval também enfatiza métricas em camadas como TaskCompletenessMetric, e não só a saída final.
5.2 Tabela de pontuação em camadas
A rubric abaixo divide a avaliação de agentes em cinco dimensões, cada uma com 0-2 pontos:
| Dimensão | 0 pontos | 1 ponto | 2 pontos |
|---|---|---|---|
| Correção da seleção de ferramentas | Ferramenta errada | Parcialmente correta | Totalmente correta |
| Correção do formato de argumentos | Erro de tipo | Alguns campos com erro de formato | Totalmente correta |
| Correção da ordem de execução | Salto de estado | Desvio de ordem | Totalmente correta |
| Qualidade da resposta final | Não atende à necessidade | Atende parcialmente | Atende completamente |
| Alinhamento com rótulo humano | Contradiz julgamento especialista | Parcialmente alinhado | Muito alinhado |
Exemplo de configuração de rubric para LangSmith ou Phoenix:
rubric:
dimensions:
- name: tool_selection
weight: 0.3
criteria:
0: "Chamou a ferramenta errada"
1: "Chamou algumas ferramentas corretas"
2: "Seleção de ferramentas totalmente correta"
- name: argument_formatting
weight: 0.2
criteria:
0: "Tipo de argumento incorreto"
1: "Alguns campos têm erro de formato"
2: "Formato de argumentos totalmente correto"
- name: execution_order
weight: 0.2
criteria:
0: "Transição de estado salta ou se repete"
1: "Ordem de execução com desvios"
2: "Ordem de execução totalmente correta"
- name: final_answer_quality
weight: 0.2
criteria:
0: "Não atende à solicitação do usuário"
1: "Atende parcialmente à solicitação"
2: "Atende completamente à solicitação"
- name: human_alignment
weight: 0.1
criteria:
0: "Contradiz julgamento especialista"
1: "Parcialmente alinhado"
2: "Muito alinhado"
Seleção de ferramentas tem o maior peso (0.3), porque o núcleo de um agente é chamar a ferramenta correta. Alinhamento humano tem o menor peso (0.1), pois serve principalmente para calibrar se LLM-as-judge concorda com o julgamento especialista.
6. Release gates e testes de regressão
6.1 Etapas de integração com CI
O valor de um agent eval dataset aparece quando ele entra no CI como release gate. Use este fluxo:
Checklist:
- Adicionar uma etapa de eval na CI pipeline, como pytest, LangSmith offline eval ou Phoenix experiments.
- Configurar um limiar de pass rate, por exemplo 90%.
- Exigir que o golden set passe completo (100%).
- Configurar regras de alerta para negative cases. Elas podem notificar o time sem bloquear.
- Configurar comparação de versões (improvement/regression) entre baseline e versão atual.
- Definir quando o gate roda: PR / merge / canary.
LangSmith Evaluation concepts menciona que offline evaluations podem ser usadas para regression testing, unit testing e backtesting sobre examples de datasets. A documentação Phoenix experiments explica que é possível comparar mudanças de prompt, LLM ou lógica da aplicação para julgar improvement/regression. DeepEval descreve evals pytest-native que podem rodar em CI/CD ou Python scripts, usando LLMTestCase e TaskCompletenessMetric para pontuar agent traces em camadas.
6.2 Tabela de limiares
| Métrica | Limiar | Ação ao falhar |
|---|---|---|
| pass rate | ≥ 90% | Bloquear merge |
| golden set | 100% aprovado | Bloquear merge |
| negative cases | Dispara alerta | Não bloquear, mas notificar o responsável do time |
| version comparison | Sem regression | Bloquear merge |
Exemplo de configuração de CI:
evaluation:
triggers:
- pull_request
- merge_to_main
- canary_deployment
conditions:
pass_rate: 0.9
golden_set: 1.0
no_regression: true
notifications:
on_failure: ["team-lead", "on-call"]
on_negative_alert: ["team-lead"]
Os gatilhos incluem PR, para impedir código problemático de entrar na main; merge, para garantir que o estado mesclado ainda cumpre as condições; e canary, para validar antes do tráfego de produção. Se você leu controle de custo e roteamento de modelos (N156), sabe que limiares de custo também podem virar condições de gate. Aqui ficamos nos limiares de avaliação.
7. Retrospectiva de um caso real
7.1 Descrição do cenário
O agente de relatório diário funcionava bem na semana passada: chamava check_permission para verificar permissões, refresh_data para atualizar dados e depois generate_report para gerar o relatório. Após o upgrade de modelo, o agente ainda retorna um resumo final que parece correto, mas a trajetória omite check_permission e refresh_data.
O usuário recebe um relatório sem verificação de permissão e com dados desatualizados, mas isso não aparece na superfície. Um benchmark público não detecta esse risco, porque não tem seu tool schema nem sua state machine.
7.2 Localização do problema
Exporte o trace com falha da plataforma de monitoramento (veja Monitoramento de agentes e recuperação de falhas). A análise de trajetória mostra que a lista de tool calls não contém check_permission nem refresh_data, a transição de estado pula de init direto para execute, faltam check e approve, e a resposta final parece correta embora a fonte de dados não tenha sido atualizada.
Rótulo: erro de seleção de ferramentas + salto de transição de estado.
7.3 Atualização do dataset
Adicione o caso de falha a negative cases. Ao mesmo tempo, reforce o golden set: encontre a tarefa de relatório diário bem-sucedida da semana anterior, inclua a sequência completa de tool calls e rotule como caso correto.
Atualize as trajectory assertions: adicione check_permission e refresh_data à required tool list, e defina a assertion de ordem de estados como ["init", "check", "approve", "execute"].
7.4 Interceptação pelo gate de CI
A próxima PR dispara a execução de eval. O negative case gera alerta: falta o tool call check_permission. O golden set passa completo, então o caso de sucesso de referência continua intacto.
A causa está no prompt. Depois do upgrade, o modelo interpreta “gerar relatório” como execução direta e ignora a verificação e a atualização anteriores.
7.5 Correção e regressão
Corrija o prompt, deixando explícito que o agente deve verificar permissões e atualizar dados antes de gerar o relatório. Rode eval novamente: o pass rate sobe de 85% para 95%, o negative case passa sem alerta, o golden set passa completo e a comparação de versões mostra improvement sem regression.
Faça merge e release. O gate de CI segurou essa regressão antes da produção.
7.6 Tabela de mapeamento de campos
| Etapa | Campos usados |
|---|---|
| Localização do problema | traceId, span_id, tool_calls, state_events |
| Atualização do dataset | input, expected tool calls, trajectory assertions, human labels |
| Gate de CI | pass rate, golden set, negative cases |
| Verificação da correção | pass rate, version comparison |
Esse ciclo mostra o caminho completo da falha em produção ao teste de regressão. Depois de cada retrospectiva de incidente, transforme traceId, tool call, approvalId, state event e julgamento humano em eval example. Assim o próximo release não tropeça no mesmo erro.
8. O que ler a seguir
- State machines de agentes e limites do prompt: entender de onde vêm as restrições de transição de estado e os campos de trajectory assertion
- Modelo de permissões de agentes: entender approval records e regras para tool calls de alto risco
- Design de aprovação humana: transformar approval records e fluxos de aprovação em testes duráveis
- Controle de custos e roteamento de modelos: entender como limiares de custo viram condições de gate
- Monitoramento de agentes e recuperação de falhas: exportar failed traces e construir uma retrospectiva de incidentes
Construir um dataset de avaliação de agentes e testes de regressão
Transforme tarefas reais de agentes, traces de produção, casos de falha, trajetórias de tool calls e rótulos humanos em um eval dataset versionado, executado em release gates de CI.
⏱️ Estimated time: 60 min
- 1
Step 1: Coletar tarefas candidatas
Colete tarefas reais de produção, staging, testes manuais e retrospectivas de incidentes. Priorize fluxos frequentes, de alto risco ou que já sofreram regressão. - 2
Step 2: Vincular traces de execução
Vincule cada tarefa a traceId, span_id, state events, tool calls, approval records e saída final, para localizar a falha no ponto correto de execução. - 3
Step 3: Anonimizar dados brutos
Remova ou substitua PII, secrets, dados de clientes, números reais de pedido e campos sensíveis das saídas de ferramentas. Mantenha só as informações estruturadas necessárias para avaliação. - 4
Step 4: Extrair o schema do dataset
Adicione input, expected output, expected tool calls, trajectory assertions, rubric, risk tags, human labels e metadados de versão a cada amostra. - 5
Step 5: Separar por camadas
Divida as amostras em golden set, negative cases, edge cases e regression cases, cada uma com seu próprio limiar de aprovação e regra de alerta. - 6
Step 6: Configurar avaliadores
Use code evaluator, rule evaluator, LLM-as-judge ou human annotation conforme a dimensão avaliada. Não dependa de um único score agregado. - 7
Step 7: Conectar aos release gates
Execute a regression suite no CI antes de upgrades de modelo, mudanças de prompt e alterações de tool schema. - 8
Step 8: Atualizar após incidentes
Depois de cada retrospectiva de incidente, adicione novos cases e registre dataset version, motivo da mudança, escopo e política de retenção de dados.
FAQ
Dá para usar traces de produção diretamente como eval dataset?
Como escrever uma expected trajectory para tool calls de um agente?
Todo caso de falha deve entrar na regression suite?
Como definir limiares de release quando scores LLM-as-judge oscilam?
O dataset deve guardar entradas brutas de usuário e saídas de ferramentas?
Como diagnosticar rápido uma tarefa antiga que piora após upgrade de modelo?
Qual é a relação entre um eval dataset próprio e benchmarks públicos?
O que fazer se a OpenAI Evals platform for encerrada?
14 min de leitura · Publicado em: 21 out 2026
Guia de engenharia de AI Agents
Se você chegou pela busca, o caminho mais rápido é ir para o post anterior ou próximo desta série.
Anterior
Design de máquina de estados para agentes de IA: por que workflows complexos não podem depender só do prompt
Guia prático para criar workflows de agentes de IA recuperáveis com state, event, guard, action, checkpoint, retry, compensation, approval pause e terminal state, sem guardar o progresso apenas no prompt.
Parte 22 de 24
Próximo
Checklist de produção para agentes de IA: logs, monitoramento, alertas, rollback e canary release
Uma checklist prática para levar agentes de IA à produção: traces, tool calls, guardrails, HITL, eval regression, orçamento de custo, secrets, monitoramento canary, rollback e feature flags.
Parte 24 de 24



Comentários
Entre com GitHub para comentar