aicert.study

CCA-F Cenário 1 na prática: construindo um agente de resolução de suporte ao cliente

23 de julho de 2026

CCA-F Cenário 1 na prática: construindo um agente de resolução de suporte ao cliente

A maior parte do material de preparação para o CCA-F trata a prova como uma lista de trivia: decore o que o prompt caching faz, conheça a spec do MCP de nome. Isso cobre talvez metade da prova. A outra metade é baseada em cenários — o exam guide publica 6 cenários completos, e toda prova real sorteia 4 deles, pedindo que você raciocine sobre decisões de arquitetura dentro daquele cenário.

Este é o primeiro de uma série de 6 partes passando por cada um, com uma implementação de referência que você realmente pode rodar — não só um diagrama. Código-fonte completo: aicert-labs/cca-f/scenario-1-customer-support-agent.

O cenário, como está no exam guide

Um agente de suporte construído sobre o Claude Agent SDK lida com devoluções, disputas de cobrança e questões de conta através de tools MCP customizadas — get_customer, process_refund, escalate_to_human — com meta de 80%+ de resolução no primeiro contato.

Ele toca três domínios ao mesmo tempo, e é exatamente por isso que o CCA-F usa cenários em vez de questões isoladas — decisões reais de arquitetura raramente cabem em um único domínio.

DomínioPesoOnde aparece neste cenário
Agentic Architecture & Orchestration27%O loop que deixa o Claude chamar tools, ler resultados estruturados e decidir se continua ou escala
Tool Design & MCP Integration18%Três tools com um servidor MCP real — e especificamente, como process_refund reporta falha
Context Management & Reliability15%O que impede o agente de entrar em loop infinito, e o que o system prompt faz vs. o que a tool garante

A decisão de design que vale a pena estudar

Uma versão ingênua de process_refund recebe um ID de pedido e um valor, e o system prompt diz "só reembolse abaixo de $100". Isso é frágil: depende do modelo ler e obedecer instruções em prosa em toda chamada, sem nada garantindo isso. Suba o limite, ajuste o prompt em outro lugar, ou o modelo simplesmente tenha um dia ruim, e a regra para de valer silenciosamente.

A implementação de referência move a regra pra dentro da própria tool. process_refund não reembolsa-ou-dá-erro — ela retorna um sinal tipado:

{ "needs_escalation": true, "reasonCode": "over_auto_approve_limit", "orderAmountUsd": 219, "priorRefunds": 2 }

O trabalho do agente vira mecânico: viu needs_escalation, chama escalate_to_human. Não tem prosa pra interpretar errado. Essa é a diferença entre "instruir um agente a se comportar" e "desenhar uma tool que ele não consegue usar de forma insegura" — exatamente o tipo de julgamento que as questões de cenário do CCA-F testam.

O que impede o agente de entrar em loop infinito

O segundo modo de falha que este cenário é desenhado pra expor: um agente que chama process_refund, recebe a instrução de escalar, e simplesmente... tenta process_refund de novo. E de novo. Duas coisas na implementação de referência protegem contra isso:

  1. O system prompt é explícito que um resultado needs_escalation: true não é sinal de retry — é sinal de roteamento para escalate_to_human.
  2. agent.ts limita o loop a um número fixo de turnos e registra um aviso se atingir o limite, em vez de rodar indefinidamente. Numa questão real de prova, "o agente não tem lógica de retry limitada" é exatamente o tipo de falha de confiabilidade que se espera que você identifique.

Rode você mesmo

git clone https://github.com/AICERT-STUDY/aicert-labs
cd aicert-labs/cca-f/scenario-1-customer-support-agent
npm install
cp .env.example .env   # adicione sua ANTHROPIC_API_KEY

npm run agent -- cust_1001 ord_9001 "the keyboard arrived with a broken key"   # auto-aprovado
npm run agent -- cust_1002 ord_9002 "these headphones stopped charging"        # força escalonamento

O README dessa pasta tem algumas sugestões de mudanças pra testar (baixar o limite de auto-aprovação, remover o campo tipado needs_escalation e ver o agente se comportar mal) se você quiser ver os modos de falha, não só ler sobre eles.

Teste seus conhecimentos

1. Na implementação de referência, por que process_refund retorna needs_escalation: true em vez de lançar um erro quando o valor está acima do limite?

Resposta: um resultado tipado deixa o agente decidir de forma programática, em vez de depender do modelo interpretar corretamente uma mensagem de erro.

Uma string de erro ainda exige que o modelo leia e reaja corretamente à prosa. Um campo estruturado é algo que o código chamador (ou o próprio raciocínio do modelo sobre a saída estruturada da tool) pode verificar de forma determinística.

2. Qual domínio o limite de 8 turnos em agent.ts endereça principalmente?

Resposta: Context Management & Reliability.

Não é uma decisão de arquitetura/orquestração (isso é o próprio loop de chamada de tools) nem de design de tool (isso é o servidor MCP) — é uma proteção contra um loop agentic sem limite, o que é uma questão de confiabilidade.

3. O cenário pede 80%+ de resolução no primeiro contato. Qual decisão de design de tool sustenta mais diretamente essa meta?

Resposta: exigir get_customer antes de qualquer ação na conta, garantindo que o agente sempre tenha contexto verificado antes de agir.

A resolução no primeiro contato cai bastante quando um agente age sobre dados de conta desatualizados ou errados e precisa voltar atrás. Verificar identidade e puxar o histórico de pedidos logo de início é o que viabiliza a resolução em uma única passada.

4. Um cliente com 2 reembolsos anteriores pede um reembolso de $30 — bem abaixo do limite de auto-aprovação de $100. O que acontece?

Resposta: a tool ainda retorna needs_escalation: true, porque o limiar de reembolsos repetidos é verificado independentemente do valor.

Isso é proposital: um cliente acima do limiar de reembolsos repetidos é roteado para um humano independente do valor, porque o padrão de comportamento — não o valor em dólares — é o sinal que merece revisão humana.

5. Se você trocar o CRM mock do servidor MCP por um real, o que nesta arquitetura precisa mudar?

Resposta: só a implementação dentro de mock-crm.ts — os contratos das tools em mcp-server.ts e o loop do agente em agent.ts continuam iguais.

Esse é o objetivo de colocar a regra de negócio dentro da fronteira da tool: o agente e a interface da tool MCP não sabem nem se importam se o dado vem de um objeto em memória ou de uma API real de CRM.

Simulado gratuito do CCA-F, cobrindo os 5 domínios: aicert.study/certifications/ccaf.

Pronto pra praticar pra Claude Certified Architect — Foundations (CCA-F)?

Faça um simulado de amostra grátis e veja seu desempenho, domínio por domínio.

Testar o simulado