Regression testing pra agents: evitar regredir por mudança
⏱ 13 min·⭐ 55 XP
Pré-requisitos (0/1)0%
- ⬜🔀 A/B testing de prompt em produção(LLM Evals Profissional)
Recomendamos completar os pré-requisitos antes de seguir, mas nada te impede de continuar.
Anatomia de test case agent
| Componente do caso | Por que precisa estar ali |
|---|---|
| Entrada exata do usuário | Reproduzir é a base; parafrasear muda o teste |
| Ferramentas esperadas, em ordem | Agente que chega ao resultado certo pelo caminho errado vai falhar no caso seguinte |
| Argumentos esperados | Chamar a ferramenta certa com argumento errado é falha silenciosa |
| Resultado final aceitável | Rubrica, não texto exato — a saída é aberta |
| Limite de passos | Chegar em quarenta voltas ao que devia levar três é regressão |
| Origem do caso | Falha de produção vale mais que caso inventado — e a proporção importa |
Componente do casoEntrada exata do usuário
Por que precisa estar aliReproduzir é a base; parafrasear muda o teste
Componente do casoFerramentas esperadas, em ordem
Por que precisa estar aliAgente que chega ao resultado certo pelo caminho errado vai falhar no caso seguinte
Componente do casoArgumentos esperados
Por que precisa estar aliChamar a ferramenta certa com argumento errado é falha silenciosa
Componente do casoResultado final aceitável
Por que precisa estar aliRubrica, não texto exato — a saída é aberta
Componente do casoLimite de passos
Por que precisa estar aliChegar em quarenta voltas ao que devia levar três é regressão
Componente do casoOrigem do caso
Por que precisa estar aliFalha de produção vale mais que caso inventado — e a proporção importa
# tests/agent_regression/case_001_multi_tool.yaml
name: "User asks for weather + books — uses 2 tools"
input: "Qual é o tempo em SP agora e me indique 3 livros de sci-fi"
expected:
tools_used:
- { text: "get_weather", args_contains: { city: "São Paulo" } }
- { text: "search_books", args_contains: { genre: "sci-fi", count: 3 } }
output_must_contain: ["temperatura", "sci-fi"]
output_judge_rubric: |
Response should:
1. State current weather in São Paulo
2. Recommend 3 sci-fi books with titles
3. Be in Portuguese
max_steps: 5
max_cost_usd: 0.05Harness em TS exemplo
import { runAgent } from './agent';
import { loadCases, judge } from './eval-lib';
describe('Agent regression', () => {
const cases = loadCases('tests/agent_regression/*.yaml');
it.each(cases)('$name', async (testCase) => {
const result = await runAgent(testCase.input, {
maxSteps: testCase.expected.max_steps,
toolReplay: 'record', // replay cached tool calls
});
// Check tools
for (const expected of testCase.expected.tools_used) {
const match = result.trace.find(s => s.tool === expected.name);
expect(match).toBeDefined();
// validate args subset
}
// Check output via LLM judge
const verdict = await judge(result.output, testCase.expected.output_judge_rubric);
expect(verdict.pass).toBe(true);
// Cost cap
expect(result.totalCost).toBeLessThanOrEqual(testCase.expected.max_cost_usd);
});
});Quiz rápido
O que um caso de teste de regressão para agente precisa conter, além da entrada e da saída esperada?
Workflow em produção
✅
Production failure → Langfuse trace → convert to test case → review com team → merge ao suite. Agent core team: 5-10 regression cases/week ongoing. Suite cresce pra ~100-300 cases em 6 meses. Confiança pra iterar rápido sem break silencioso.
Perguntas frequentes
❓ Como testar agente sem depender de saída exata?
Testando a trajetória: quais ferramentas foram chamadas, em que ordem, com que argumentos, e se o estado final satisfaz o critério. O texto varia; a sequência de decisão é o que precisa se manter. É isso que transforma teste de agente em algo reprodutível.
❓ Como isolar o agente do mundo real no teste?
Com dublês de ferramenta que devolvem respostas fixas — inclusive as respostas ruins: vazio, erro, ambiguidade. Testar só o caminho felizmente evita justamente o que provoca laço infinito em produção. Cada dublê de falha vira um caso de regressão permanente.
❓ O que registrar quando o agente falha em produção?
A trajetória completa com identificador único: contexto de entrada, cada chamada de ferramenta, cada retorno e a decisão seguinte. Sem isso, "o agente errou" não é investigável — e a maioria dos incidentes de agente é de trajetória, não de resposta final.
Fixando
Quiz rápido
Por que regressão de agente precisa rodar em integração contínua, e não sob demanda?
Quiz rápido
Qual é o desafio específico de manter esses testes estáveis?
Terminou de ler?
Marcar como concluído registra o XP, mantém sua sequência e coloca 3 cartas deste módulo na fila de revisão espaçada.
Próximos passos sugeridos
Temas deste módulo
Discussão
Carregando comentários…