Simulação de Usuários Realistas para Avaliação de Agentes de IA em Conversas Multi-turno com Strands Evals

Introdução: Desafios na Avaliação de Agentes de IA em Interações Multi-turno
A avaliação de agentes de inteligência artificial (IA) em interações de turno único é um processo relativamente direto, onde um input é fornecido, a resposta do agente é coletada e avaliada. Frameworks como o Strands Evaluation SDK sistematizam essa avaliação por meio de métricas como helpfulness (utilidade), faithfulness (fidelidade) e uso correto de ferramentas.
No entanto, conversas reais com usuários geralmente envolvem múltiplos turnos, nos quais perguntas de seguimento, mudanças de contexto e expressões de frustração são comuns. Por exemplo, um assistente de viagens que responde adequadamente a "Reserve um voo para Paris" pode não lidar bem com perguntas subsequentes como "Na verdade, podemos ver trens?" ou "E hotéis próximos à Torre Eiffel?".
Esses padrões dinâmicos demandam avaliações que vão além de casos estáticos e roteirizados, exigindo escalabilidade para centenas de conversas multi-turno. A avaliação manual é impraticável nesse cenário, e roteiros fixos não capturam a complexidade do comportamento humano.
ActorSimulator: Simulação Estruturada de Usuários para Avaliação Automatizada
O ActorSimulator, componente do Strands Evaluation SDK, oferece uma solução automatizada para simular usuários realistas e orientados por objetivos, capazes de interagir naturalmente com agentes em múltiplos turnos. Essa ferramenta integra-se facilmente a pipelines de avaliação automatizadas, tornando possível escalar testes complexos.
Características Fundamentais do Usuário Simulado
- Consistência de Persona: Mantém características estáveis de comunicação, expertise e personalidade durante toda a conversa, garantindo confiabilidade nos dados de avaliação.
- Comportamento Orientado a Objetivos: O usuário simulado possui metas explícitas, persiste até seu alcance, adapta estratégias conforme respostas do agente e reconhece a conclusão da tarefa.
- Adaptação Dinâmica: Responde de forma contextualizada às respostas do agente, realizando perguntas de seguimento, esclarecendo dúvidas e redirecionando a conversa conforme necessário.
Funcionamento do ActorSimulator
O processo inicia com a geração automática de um perfil do usuário, elaborado por um modelo de linguagem (LLM) a partir de um caso de teste que inclui uma consulta inicial e uma descrição da tarefa. Por exemplo, para a entrada "Preciso de ajuda para reservar um voo para Paris" com a tarefa "Reserva de voo dentro do orçamento", o simulador pode criar um perfil de viajante econômico com experiência iniciante e estilo casual.
Durante a conversa, o ActorSimulator mantém o histórico completo e gera respostas alinhadas ao perfil e aos objetivos do usuário simulado. Quando o agente responde parcialmente, o simulador formula perguntas de seguimento coerentes; se o agente pede esclarecimentos, o simulador responde condizente com a persona.
O sistema incorpora uma ferramenta interna para avaliação da conclusão da meta, encerrando a interação ao atingir o objetivo, detectar incapacidade do agente ou atingir o limite máximo de turnos configurado.
Cada resposta do usuário simulado inclui um raciocínio estruturado que explica a escolha da fala, facilitando análises detalhadas para identificação de pontos fortes e falhas do agente.
Exemplo Prático: Avaliação de Assistente de Viagens
Para iniciar, instale o SDK com:
pip install strands-agents-evals
Em seguida, defina um caso de teste, crie o agente e o simulador, e execute a conversa multi-turno:
from strands import Agent
from strands_evals import ActorSimulator, Case
case = Case(
input="Quero planejar uma viagem para Tóquio com hotel e atividades",
metadata={"task_description": "Pacote de viagem completo"}
)
agent = Agent(system_prompt="Você é um assistente de viagens útil.", callback_handler=None)
user_sim = ActorSimulator.from_case_for_user_simulator(case=case, max_turns=5)
user_message = case.input
conversation_history = []
while user_sim.has_next():
agent_response = agent(user_message)
agent_message = str(agent_response)
conversation_history.append({"role": "assistant", "content": agent_message})
user_result = user_sim.act(agent_message)
user_message = str(user_result.structured_output.message)
conversation_history.append({"role": "user", "content": user_message})
print(f"Conversa concluída em {len(conversation_history) // 2} turnos")
A conversa prossegue até que o simulador indique término por sucesso, falha ou limite de turnos.
Integração com Pipelines de Avaliação e Telemetria
Para avaliações em ambiente de produção, é essencial capturar métricas detalhadas da interação. O ActorSimulator integra-se com a coleta de telemetria via OpenTelemetry, permitindo rastrear chamadas a ferramentas, invocações de modelo e tempos de resposta em cada turno.
Esses dados são organizados em sessões estruturadas que alimentam avaliadores como GoalSuccessRateEvaluator e HelpfulnessEvaluator, possibilitando análises completas da conversa em vez de avaliações isoladas por turno.
Perfis Customizados para Testes Específicos
Além da geração automática, o ActorSimulator permite definir perfis manuais para simular diferentes tipos de usuários, como especialistas impacientes ou iniciantes técnicos, possibilitando identificar pontos fortes e limitações do agente em variados contextos.
from strands_evals.types.simulation import ActorProfile
from strands_evals import ActorSimulator
from strands_evals.simulation.prompt_templates.actor_system_prompt import DEFAULT_USER_SIMULATOR_PROMPT_TEMPLATE
actor_profile = ActorProfile(
traits={
"personality": "analítico e detalhista",
"communication_style": "direto e técnico",
"expertise_level": "especialista",
"patience_level": "baixo"
},
context="Viajante de negócios experiente com status elite que valoriza eficiência",
actor_goal="Reservar voo em classe executiva com assento específico e acesso à sala VIP"
)
user_sim = ActorSimulator(
actor_profile=actor_profile,
initial_query="Preciso reservar um voo em classe executiva para Londres na próxima terça",
system_prompt_template=DEFAULT_USER_SIMULATOR_PROMPT_TEMPLATE,
max_turns=10
)
Boas Práticas para Avaliação com Simulação
- Configure
max_turnsconforme a complexidade da tarefa: 3-5 para tarefas específicas, 8-10 para fluxos multi-etapas. - Utilize descrições claras da tarefa para que o simulador avalie a conclusão com precisão.
- Combine perfis gerados automaticamente para ampla cobertura e perfis customizados para reproduzir padrões reais observados em produção.
- Analise tendências gerais na suíte de testes em vez de focar em transcrições isoladas.
O ActorSimulator no Strands Evaluation SDK oferece uma abordagem estruturada e escalável para avaliação de agentes de IA em conversas multi-turno. Ao simular usuários realistas com perfis consistentes, objetivos explícitos e comportamento adaptativo, é possível gerar dados de avaliação que refletem melhor os desafios enfrentados em ambientes reais, facilitando a identificação precisa de melhorias e regressões no desempenho dos agentes.