Skip to content

Roteiro de Entrevista Técnica — iFriend Agents

Duração: 60-90 min. Dividido em 4 blocos. O candidato já deve ter entregue o desafio técnico.

Estrutura da Entrevista

Bloco Duração Tópico
1 15 min Correção do desafio técnico
2 20 min Arquitetura multi-agent e ADK
3 15 min Python e engenharia de software
4 15 min LLMs e engenharia de prompt
5 10 min Cenários práticos e system design

Bloco 1 — Correção do Desafio Técnico (15 min)

Peça para o candidato compartilhar a tela e explicar a solução.

Perguntas

  1. "Me explique como você estruturou o prompt do feedback_agent. Quais decisões tomou?"
  2. Avalia: clareza, compreensão do fluxo, regra de escape
  3. Esperado: role definition, steps, transfer rule, conciseness

  4. "Por que usou disallow_transfer_to_peers=True?"

  5. Esperado: sub-agents só transferem ao root_agent, não entre si

  6. "Como você decidiu onde registrar o agente (always-on vs feature flag)?"

  7. Esperado: feedback é funcionalidade básica, não justifica feature flag

  8. "Se o usuário desse uma nota inválida, como o agente deveria reagir?"

  9. Esperado: pedir novamente de forma amigável, não quebrar o fluxo

  10. "Como você testaria esse agente manualmente?"

  11. Avalia: capacidade de pensar em cenários de conversa, não só unit tests

Bloco 2 — Arquitetura Multi-Agent e ADK (20 min)

Perguntas

  1. "Explique a diferença entre LLM-driven transfer (sub_agents) e call-and-return (AgentTool) no ADK. Quando usar cada um?"
  2. Esperado (Pleno): sub_agents para fluxos multi-turn onde o agente responde ao usuário; AgentTool para invocações pontuais onde o resultado volta ao orquestrador
  3. Esperado (Senior): citar exemplos concretos do projeto (discovery_agent vs research_agent), explicar impacto na experiência do usuário

  4. "Como funciona o roteamento de intenções no root_agent? O que acontece se dois agentes podem atender a mesma intenção?"

  5. Esperado: ADK usa o description do agente + o prompt do orquestrador para decidir. A ordem dos sub_agents importa. O prompt do orquestrador tem ROUTING_HINTS que guiam a decisão.

  6. "Qual a diferença entre sub_agents e AgentTool? Quando usar cada um?"

  7. Esperado: sub_agents = LLM-driven transfer (multi-turn, agente responde direto ao usuário). AgentTool = call-and-return (resultado volta ao orquestrador). Ex: discovery_agent vs research_agent.

  8. "Como as feature flags funcionam no AgentBuilder? Dê um exemplo de dependência entre flags."

  9. Esperado: flags lidas de env vars, validadas (ex: ENABLE_PAYMENT requer ENABLE_BOOKING), montam lista dinâmica de sub-agentes e geram prompt condicional

  10. "O que é disallow_transfer_to_peers e por que é importante?"

  11. Esperado: impede que sub-agents transfiram entre si; só transferem ao root_agent. Essencial para manter o orquestrador como único ponto de roteamento.

  12. "Como o ADK decide para qual sub-agent transferir quando o root_agent recebe uma mensagem?"

  13. Esperado: ADK usa o description do agente + o prompt do orquestrador (ROUTING_HINTS) para decidir. A ordem dos sub_agents também influencia.

  14. "O que é static_instruction e qual sua vantagem?"

  15. Esperado: instrução que não muda entre turnos, cacheável pelo Gemini. Reduz tokens em conversas longas. Ex: booking_agent com payloads JSON.

  16. "Como funciona a sanitização de dados no projeto? Quais camadas existem?"

  17. Esperado: L1 = tool-level (sanitize.py com strip_sensitive, whitelists), L2 = prompt guardrails. Campos como email, phone, CPF são removidos antes de chegar ao LLM.

  18. "O que é o LoopGuard e como ele protege o sistema?"

  19. Esperado: 4 camadas (message dedup, circuit breaker, repetição textual, hard turn limit). Protege contra loops bot-to-bot.

  20. "Como você depuraria um agente que está transferindo para o agente errado?"

    • Esperado: verificar description do agente, verificar ROUTING_HINTS no prompt do orquestrador, verificar se disallow_transfer_to_peers está configurado, logs do ADK

Bloco 3 — Python e Engenharia de Software (15 min)

Perguntas

  1. "Como você estrutura um projeto Python médio? O que considera essencial?"
  2. Esperado: type hints, testes, lint (ruff), requirements.txt, .env.example, docker-compose para dev

  3. "Como você lidaria com uma tool que faz uma chamada de API externa que pode falhar?"

  4. Esperado: try/except, retry com backoff, timeout, logging, fallback, mensagem amigável pro LLM

  5. "O que é Pydantic e como usamos no projeto?"

  6. Esperado: validação de dados, serialização/deserialização, usado em tools e payloads

  7. "Como você estrutura testes para uma tool que chama uma API externa?"

  8. Esperado: mock da chamada HTTP, testar casos de sucesso e erro, testar timeouts, não chamar API real em testes unitários

  9. "O que é strip_sensitive e por que é importante?"

  10. Esperado: função que remove campos sensíveis (email, phone, CPF) de respostas de API antes de retornar ao LLM. Proteção de PII/LGPD.

Bloco 4 — LLMs e Engenharia de Prompt (15 min)

Perguntas

  1. "Como você estrutura o prompt de um agente para minimizar alucinações?"
  2. Esperado: instruções claras e específicas, few-shot examples, restrições explícitas ("nunca invente preços"), validação via tools (não confiar no LLM para cálculos)

  3. "O que é static_instruction no ADK e qual sua vantagem?"

  4. Esperado: instrução que não muda entre turnos, cacheável pelo Gemini. Reduz custo de tokens. Ex: booking_agent com payloads JSON.

  5. "Como você evitaria que o LLM invente dados (alucinação) em uma tool de busca de produtos?"

  6. Esperado: validação na tool (não confiar no LLM), instruções explícitas no prompt, retornar dados reais da API, nunca permitir que o LLM gere IDs

  7. "O que é o PreloadMemoryTool e como ele funciona?"

  8. Esperado: carrega memórias automaticamente a cada LLM request via FULLTEXT search (MATCH AGAINST). Busca pela query real do usuário. Condicional via ENABLE_MEMORY.

  9. "Como você faria para que o agente suportasse múltiplos idiomas?"

  10. Esperado: prompts em português com instrução para responder no idioma do usuário, ou prompts multi-idioma. O Gemini 2.5 Flash lida bem com detecção de idioma.

Bloco 5 — Cenários Práticos e System Design (15 min)

Perguntas

  1. "Se precisássemos adicionar suporte a um novo canal de mensageria (ex: Instagram DM), quais passos você seguiria?"
  2. Esperado: criar adapter implementando a interface do BaseAdapter, tratar formato específico da plataforma, mapear MessageType, configurar webhook, testar em stage

  3. "O sistema está em produção e um agente começa a transferir para o agente errado. Como você debuga?"

  4. Esperado: verificar description do agente, verificar ROUTING_HINTS no prompt, logs do ADK, testar com mensagens específicas, verificar se disallow_transfer_to_peers está configurado

  5. "Precisamos adicionar um novo canal de mensageria (ex: Instagram DM). Quais passos você seguiria?"

  6. Esperado: criar adapter implementando BaseAdapter, tratar formato específico, mapear MessageType, configurar webhook, testes de integração, deploy em stage

  7. "Como você garantiria que dados sensíveis (CPF, telefone) nunca cheguem ao LLM?"

  8. Esperado: camada L1 (tool-level com strip_sensitive), camada L2 (prompt guardrails), whitelists (safe_booking_summary, safe_user_summary), testes de integração

  9. "O sistema está lento. Como você investiga?"

  10. Esperado: logs do ADK, latência das tools (API externa), cold start do Cloud Run, tokens do prompt (muita história), verificar se static_instruction está sendo cacheada

Critérios de Avaliação por Senioridade

Pleno

  • Responde corretamente 60% das perguntas técnicas
  • Demonstra capacidade de seguir documentação e padrões
  • Consegue explicar o desafio técnico com clareza
  • Identifica problemas básicos de segurança e performance

Senior

  • Responde corretamente 80%+ das perguntas
  • Vai além da resposta esperada, citando trade-offs e alternativas
  • Demonstra experiência com sistemas em produção
  • Faz perguntas relevantes sobre o projeto
  • Identifica gaps na arquitetura e sugere melhorias
  • Consegue explicar conceitos complexos de forma simples

Observações para o Entrevistador

  • O candidato pode não conhecer o ADK — isso é esperado. Avalie a capacidade de aprender com a documentação
  • Para candidatos sem experiência com LLMs, foque mais no Bloco 3 (Python) e Bloco 5 (cenários)
  • Para candidatos com experiência em IA, aprofunde nos Blocos 2 e 4
  • Anote não apenas as respostas corretas, mas como o candidato pensa e se recupera de não saber algo
  • O desafio técnico é o principal filtro; a entrevista serve para validar e aprofundar