Como Avaliar Agentes de IA para Produção com Strands Evals: Guia Prático e Passo a Passo

A transição de agentes de inteligência artificial (IA) do protótipo para a produção apresenta desafios que os testes tradicionais não conseguem resolver. Agentes de IA são flexíveis, adaptativos e sensíveis ao contexto, características que dificultam avaliações sistemáticas baseadas em resultados determinísticos. Para superar essa barreira, o Strands Evals oferece um framework estruturado para avaliação de agentes construídos com o Strands Agents SDK, combinando avaliadores baseados em modelos de linguagem, simulações multi-turno e relatórios detalhados.
Por que Avaliar Agentes de IA é Diferente?
Ao perguntar a um agente "Como está o tempo em Tóquio?", existem múltiplas respostas válidas, como apresentar temperatura em Celsius ou Fahrenheit, incluir ou não informações sobre umidade e vento. Testes tradicionais baseados em resultados fixos não capturam essa variabilidade. Além disso, agentes não apenas geram texto, mas também executam ações, como chamadas a ferramentas externas, tornando insuficiente avaliar apenas a resposta final.
Outro desafio é a conversa multi-turno, onde respostas anteriores influenciam as seguintes, exigindo avaliação da manutenção da coerência e do contexto ao longo do tempo. Por isso, Strands Evals utiliza modelos de linguagem (LLMs) como avaliadores para julgar aspectos qualitativos como utilidade, coerência e fidelidade, que não podem ser verificados mecanicamente.
Conceitos Fundamentais do Strands Evals
O framework adapta o padrão de testes unitários para a avaliação baseada em julgamento, com três elementos centrais:
- Cases: Cenários de teste individuais contendo a entrada do usuário, saídas esperadas, sequências de ferramentas (trajectórias) e metadados.
- Experiments: Conjuntos de Cases avaliados por um ou mais avaliadores, semelhantes a suítes de teste tradicionais.
- Evaluators: Os "juízes" que analisam as respostas e trajetórias do agente, principalmente usando LLMs para avaliações qualitativas.
Exemplo básico de um Case em Python:
from strands_evals import Case
case = Case(
name="Consulta do Tempo",
input="Como está o tempo em Tóquio?",
expected_output="Deve incluir temperatura e condições climáticas",
expected_trajectory=["weather_api"]
)
Função de Tarefa (Task Function): Ligando o Agente à Avaliação
A Task Function é uma função que recebe um Case e retorna o resultado da execução do agente para aquele cenário, incluindo resposta e trajetória. Existem dois padrões principais:
- Avaliação Online: Invoca o agente em tempo real para cada caso, recomendada durante desenvolvimento e integração contínua.
- Avaliação Offline: Utiliza dados históricos de sessões gravadas, útil para análise de tráfego em produção e comparações entre versões.
Exemplo de Task Function online:
from strands import Agent
def online_task(case):
agent = Agent(tools=[search_tool, calculator_tool])
result = agent(case.input)
return {
"output": str(result),
"trajectory": agent.session
}
Avaliadores Embutidos para Avaliação Abrangente
Strands Evals oferece 10 avaliadores prontos para uso, divididos em três categorias:
- Rubric-based: Permitem definir critérios customizados via rubricas em linguagem natural, como OutputEvaluator para respostas finais, TrajectoryEvaluator para sequências de ações, e InteractionsEvaluator para sistemas multi-agente.
- Semânticos: Avaliadores especializados para dimensões comuns, como HelpfulnessEvaluator (utilidade), FaithfulnessEvaluator (fidelidade às fontes), e HarmfulnessEvaluator (segurança e conteúdo nocivo).
- Nível de Ferramenta: Avaliam a seleção e parâmetros das chamadas a ferramentas, com ToolSelectionAccuracyEvaluator e ToolParameterAccuracyEvaluator.
- Nível de Sessão: Avaliam o sucesso global da conversa, como o GoalSuccessRateEvaluator, que mede se o usuário alcançou seu objetivo.
Exemplo de OutputEvaluator com rubrica personalizada:
from strands_evals.evaluators import OutputEvaluator
output_evaluator = OutputEvaluator(
rubric="Score 1.0 se a resposta estiver correta e bem estruturada. "
"Score 0.5 se parcialmente correta. Score 0.0 se incorreta ou irrelevante."
)
Simulação de Usuários para Testes Multi-turno
Testar conversas com múltiplas interações é complexo, pois usuários reais não seguem scripts fixos. O ActorSimulator do Strands Evals cria usuários simulados baseados em LLMs, com perfis realistas, personalidades e objetivos específicos, que interagem com o agente de forma dinâmica.
Exemplo básico de uso do ActorSimulator:
from strands_evals import Case, ActorSimulator
from strands import Agent
case = Case(
input="Preciso de ajuda para abrir uma conta bancária",
metadata={"task_description": "Abrir uma conta corrente com sucesso"}
)
user_sim = ActorSimulator.from_case_for_user_simulator(case=case, max_turns=10)
agent = Agent(system_prompt="Você é um assistente bancário útil.")
user_message = case.input
while user_sim.has_next():
agent_response = agent(user_message)
user_result = user_sim.act(str(agent_response))
user_message = str(user_result.structured_output.message)
Após a simulação, a transcrição da conversa pode ser avaliada com o GoalSuccessRateEvaluator para verificar se o agente ajudou o usuário a atingir seu objetivo.
Hierarquia de Avaliação e Verdade de Referência
Strands Evals permite avaliações em diferentes níveis:
- Nível de Sessão: Avalia toda a conversa, incluindo contexto e ações.
- Nível de Turno: Avalia respostas individuais considerando histórico parcial.
- Nível de Ferramenta: Avalia chamadas específicas a ferramentas.
Além disso, o framework suporta ground truth (valores esperados) para comparação, com campos como expected_output e expected_trajectory nos Cases, que ajudam a medir precisão e conformidade.
Fluxo Típico de Avaliação
Um fluxo comum envolve:
- Definir os Cases com cenários e expectativas.
- Implementar a Task Function para executar o agente ou carregar dados históricos.
- Configurar os Evaluators que medirão aspectos essenciais da qualidade.
- Executar o Experiment para orquestrar a avaliação e gerar relatórios.
- Iterar, refinando Cases e avaliações conforme o agente evolui.