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
\n
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.
\n
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?”.
\n
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.
\n\n
ActorSimulator: Simulação Estruturada de Usuários para Avaliação Automatizada
\n
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.
\n\n
Características Fundamentais do Usuário Simulado
\n
- \n
- 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.
\n
\n
\n
\n\n
Funcionamento do ActorSimulator
\n
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.
\n
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.
\n
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.
\n
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.
\n\n
Exemplo Prático: Avaliação de Assistente de Viagens
\n
Para iniciar, instale o SDK com:
\n
pip install strands-agents-evals
\n
Em seguida, defina um caso de teste, crie o agente e o simulador, e execute a conversa multi-turno:
\n
from strands import Agent\nfrom strands_evals import ActorSimulator, Case\n\ncase = Case(\n input="Quero planejar uma viagem para Tóquio com hotel e atividades",\n metadata={"task_description": "Pacote de viagem completo"}\n)\n\nagent = Agent(system_prompt="Você é um assistente de viagens útil.", callback_handler=None)\n\nuser_sim = ActorSimulator.from_case_for_user_simulator(case=case, max_turns=5)\n\nuser_message = case.input\nconversation_history = []\n\nwhile user_sim.has_next():\n agent_response = agent(user_message)\n agent_message = str(agent_response)\n conversation_history.append({"role": "assistant", "content": agent_message})\n\n user_result = user_sim.act(agent_message)\n user_message = str(user_result.structured_output.message)\n conversation_history.append({"role": "user", "content": user_message})\n\nprint(f"Conversa concluída em {len(conversation_history) // 2} turnos")\n
\n
A conversa prossegue até que o simulador indique término por sucesso, falha ou limite de turnos.
\n\n
Integração com Pipelines de Avaliação e Telemetria
\n
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.
\n
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.
\n\n
Perfis Customizados para Testes Específicos
\n
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.
\n
from strands_evals.types.simulation import ActorProfile\nfrom strands_evals import ActorSimulator\nfrom strands_evals.simulation.prompt_templates.actor_system_prompt import DEFAULT_USER_SIMULATOR_PROMPT_TEMPLATE\n\nactor_profile = ActorProfile(\n traits={\n "personality": "analítico e detalhista",\n "communication_style": "direto e técnico",\n "expertise_level": "especialista",\n "patience_level": "baixo"\n },\n context="Viajante de negócios experiente com status elite que valoriza eficiência",\n actor_goal="Reservar voo em classe executiva com assento específico e acesso à sala VIP"\n)\n\nuser_sim = ActorSimulator(\n actor_profile=actor_profile,\n initial_query="Preciso reservar um voo em classe executiva para Londres na próxima terça",\n system_prompt_template=DEFAULT_USER_SIMULATOR_PROMPT_TEMPLATE,\n max_turns=10\n)\n
\n\n
Boas Práticas para Avaliação com Simulação
\n
- \n
- 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.
\n
\n
\n
\n
\n\n\n
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.
\n\n
Links Úteis
\n
Deixe um comentário