Módulo 8 · Módulo Final · Cursinho de IA

Arquitetura de
Agentes e Claude
Code na Prática

O módulo final. Padrões arquiteturais de agentes, orquestração multi-agente, Claude Code avançado, Computer Use, agente end-to-end completo, observabilidade e o que está por vir.

🤖 ReAct / Plan-Execute 🕸️ Multi-agent 💻 Claude Code 🖥️ Computer Use 🏭 End-to-end 🔭 Futuro
Seção 01 · Definição

O que define um agente de IA

Todo mundo fala de "agentes", mas a maioria do que chamam de agente é apenas um chatbot com tool use. Um agente real tem quatro propriedades que o diferenciam: planeja, executa, observa e adapta — em loop, com graus variáveis de autonomia.

🧠
PLANEJA
Decompõe o objetivo em sub-tarefas. Decide sequência e ferramentas necessárias.
⚙️
EXECUTA
Chama ferramentas, escreve código, acessa banco, navega na web ou opera um PC.
👁️
OBSERVA
Processa o resultado da ação. Detecta erros, resultados inesperados, novos dados.
🔄
ADAPTA
Revisa o plano com base nas observações. Repete o ciclo até completar o objetivo.

Chatbot vs. Agente — a diferença prática

Um chatbot responde perguntas. Um agente executa tarefas. "Qual o saldo da conta 123?" → chatbot com tool use. "Reconcilia todas as contas do mês de março, identifica divergências acima de R$500 e gera relatório em PDF" → agente (múltiplas etapas, decisões intermediárias, output concreto).

Espectro de autonomia de agentes

NívelDescriçãoExemploRiscoUso ideal
L1 — Assistido Gera rascunhos, humano executa tudo Claude sugere e-mail, humano envia Nenhum Conteúdo, análise
L2 — Semiautônomo Executa ações reversíveis, humano aprova irreversíveis Cria rascunho de PR, humano faz merge Baixo Coding, documentação
L3 — Supervisionado Executa fluxo completo, humano monitora e pode intervir Processa 100 notas fiscais, humano revisa anomalias Médio Processos operacionais
L4 — Autônomo Executa e monitora sozinho, humano só vê relatório Agente de monitoramento de infra 24/7 Alto Baixo impacto, reversível
🎯

Regra de ouro para 2026

Comece no nível mais baixo de autonomia que resolve o problema. A maioria dos casos de negócio que parece precisar de L4 é resolvida melhor com L2–L3. Autonomia tem custo: erros em escala, audit trail complexo, custo de tokens, e risco reputacional.

Seção 02 · Design Patterns

Padrões arquiteturais de agentes

Assim como design patterns em software (Factory, Observer, Strategy), agentes LLM têm padrões consolidados. Escolher o padrão certo antes de codar economiza semanas de retrabalho.

⚡ ReAct MAIS COMUM

Reasoning + Acting. A cada passo: pensa (Thought), age (Action), observa resultado (Observation). Loop até completar. Padrão de facto para agentes com ferramentas. Toda chamada de tool use do Claude usa implicitamente ReAct.

Quando usar: tarefas exploratórias, pesquisa, análise de dados. O agente "descobre" o que precisa fazer durante a execução.
📋 Plan-and-Execute DETERMINÍSTICO

Fase 1 — Planner: LLM decompõe objetivo em lista de sub-tarefas. Fase 2 — Executor: executa cada sub-tarefa em sequência. Mais previsível que ReAct, melhor para auditoria. Planner pode ser modelo maior, Executor pode ser menor/mais rápido.

Quando usar: processos de negócio com etapas definidas (onboarding, reconciliação, geração de relatório). Você quer saber o plano antes de executar.
🕸️ Multi-agent / Supervisor PODEROSO

Orchestrator recebe o objetivo, decompõe e delega para sub-agentes especializados. Cada sub-agente tem ferramentas específicas (agente fiscal, agente de RH, agente de código). Orquestrador consolida resultados.

Quando usar: tarefas que cruzam domínios (ex: auditoria que precisa de dados fiscais + RH + TI). Paralelismo real entre sub-agentes.
🔄 Reflexion QUALIDADE

Agente gera resposta inicial, depois um Critic LLM avalia e fornece feedback, o agente revisa. Ciclo de N iterações. Melhora significativamente qualidade em tarefas criativas e de raciocínio. Custo: 2–3× tokens por resposta.

Quando usar: geração de código crítico, relatórios formais, contratos. Qualidade supera custo adicional.

Implementação: Plan-and-Execute com Claude

Python — plan_execute_agent.py
import anthropic, json
from typing import List

client = anthropic.Anthropic()

class PlanExecuteAgent:
    """
    Fase 1: Opus 4.6 cria plano detalhado
    Fase 2: Sonnet 4.6 executa cada etapa
    Resultado: mais barato e mais auditável que ReAct puro
    """

    def plan(self, objective: str, available_tools: list) -> List[dict]:
        # Planner usa modelo mais capaz para raciocínio
        tools_desc = json.dumps([t["name"] for t in available_tools])
        response = client.messages.create(
            model="claude-opus-4-6",   # Modelo mais poderoso para planejamento
            max_tokens=2048,
            messages=[{
                "role": "user",
                "content": f"""Crie um plano de execução detalhado para:
                
OBJETIVO: {objective}

FERRAMENTAS DISPONÍVEIS: {tools_desc}

Responda APENAS com JSON válido:
{{
  "plano": [
    {{
      "etapa": 1,
      "descricao": "descrição clara da etapa",
      "tool": "nome_da_tool_ou_null",
      "input_esperado": "o que esta etapa precisa de entrada",
      "output_esperado": "o que esta etapa deve produzir",
      "pode_falhar": true/false,
      "acao_se_falhar": "retry/skip/abort"
    }}
  ]
}}"""
            }]
        )
        plan_data = json.loads(response.content[0].text)
        return plan_data["plano"]

    def execute(self, plan: List[dict], tools: list) -> dict:
        results = {}
        execution_log = []

        for step in plan:
            print(f"▶ Etapa {step['etapa']}: {step['descricao']}")

            # Construir contexto com resultados anteriores
            context = json.dumps({
                k: v for k, v in results.items()
            })

            try:
                # Executor usa modelo mais rápido/barato
                response = client.messages.create(
                    model="claude-sonnet-4-6",
                    max_tokens=1024,
                    tools=tools,
                    messages=[{
                        "role": "user",
                        "content": f"""Execute esta etapa do plano:

ETAPA: {step['descricao']}
RESULTADO ESPERADO: {step['output_esperado']}
CONTEXTO (etapas anteriores): {context}

Execute a etapa usando as ferramentas disponíveis."""
                    }]
                )
                # Processar tool calls se necessário
                result = self._process_response(response, tools)
                results[f"etapa_{step['etapa']}"] = result
                execution_log.append({"etapa": step["etapa"], "status": "ok", "result": result})

            except Exception as e:
                if step.get("acao_se_falhar") == "abort":
                    raise RuntimeError(f"Etapa {step['etapa']} falhou (abort): {e}")
                execution_log.append({"etapa": step["etapa"], "status": "failed", "error": str(e)})

        return {"results": results, "log": execution_log}

    def _process_response(self, response, tools):
        # Processar tool calls (mesmo padrão do M7)
        if response.stop_reason == "end_turn":
            return response.content[0].text
        # ... loop de tool use (ver M7)
        return "[tool result processado]"
Seção 03 · Orquestração

Orquestração de múltiplos agentes

Sistemas multi-agente são a próxima fronteira de 2026. Um agente supervisor decompõe, delega para agentes especializados e consolida resultados — com paralelismo real e domínios isolados que reduzem o risco de contaminação entre contextos.

Padrão Supervisor-Worker — Auditoria Corporativa
🧠 Supervisor Agent
Claude Opus 4.6
Decompõe objetivo + consolida
↓ delega ↓
📊 Agente Fiscal
Sonnet 4.6
tools: DB2, NF-e API, SPED
👥 Agente RH
Sonnet 4.6
tools: HRIS, folha, ponto
💻 Agente TI
Haiku 4.5
tools: logs, infra, tickets
📝 Agente Docs
Haiku 4.5
tools: RAG, files API
↑ resultados ↑
📋 Relatório Final Consolidado
Markdown / PDF / Dashboard
Python — multi_agent_supervisor.py
import anthropic, asyncio, json
from dataclasses import dataclass
from typing import Dict, Any

client = anthropic.Anthropic()

@dataclass
class SubAgent:
    name: str
    model: str
    system_prompt: str
    tools: list

# Definição dos sub-agentes especializados
AGENTS = {
    "fiscal": SubAgent(
        name="Agente Fiscal",
        model="claude-sonnet-4-6",
        system_prompt="Especialista em análise fiscal, NF-e e obrigações tributárias.",
        tools=FISCAL_TOOLS  # definidos no projeto
    ),
    "rh": SubAgent(
        name="Agente RH",
        model="claude-sonnet-4-6",
        system_prompt="Especialista em folha de pagamento, CLT e gestão de pessoas.",
        tools=RH_TOOLS
    ),
    "docs": SubAgent(
        name="Agente Documentação",
        model="claude-haiku-4-5",  # Haiku para tarefas simples = economia
        system_prompt="Recupera e sumariza documentos corporativos.",
        tools=DOC_TOOLS
    ),
}

async def run_subagent(agent_key: str, task: str) -> Dict[str, Any]:
    """Executa um sub-agente de forma assíncrona."""
    agent = AGENTS[agent_key]

    # Em produção: usar asyncio com httpx ou anthropic async client
    response = client.messages.create(
        model=agent.model,
        max_tokens=2048,
        system=agent.system_prompt,
        tools=agent.tools,
        messages=[{"role": "user", "content": task}]
    )
    return {
        "agent": agent.name,
        "result": response.content[0].text,
        "tokens_used": response.usage.input_tokens + response.usage.output_tokens
    }

class SupervisorAgent:
    def run(self, objective: str) -> str:
        # 1. Supervisor decompõe o objetivo em tarefas por agente
        decomp = client.messages.create(
            model="claude-opus-4-6",
            max_tokens=1024,
            messages=[{
                "role": "user",
                "content": f"""Decomponha este objetivo em tarefas para agentes especializados.
                
OBJETIVO: {objective}
AGENTES DISPONÍVEIS: fiscal (NF-e, SPED), rh (folha, CLT), docs (documentos)

Responda APENAS com JSON:
{{"tarefas": [{{"agente": "fiscal|rh|docs", "tarefa": "descrição precisa"}}]}}"""
            }]
        )
        tarefas = json.loads(decomp.content[0].text)["tarefas"]

        # 2. Executar sub-agentes em paralelo
        loop = asyncio.new_event_loop()
        tasks = [run_subagent(t["agente"], t["tarefa"]) for t in tarefas]
        results = loop.run_until_complete(asyncio.gather(*tasks))

        # 3. Supervisor consolida todos os resultados
        results_text = json.dumps(results, ensure_ascii=False, indent=2)
        final = client.messages.create(
            model="claude-opus-4-6",
            max_tokens=4096,
            messages=[{
                "role": "user",
                "content": f"""Consolide os resultados dos agentes em relatório executivo.

OBJETIVO ORIGINAL: {objective}
RESULTADOS DOS AGENTES:
{results_text}

Produza um relatório claro, destacando achados importantes e recomendações."""
            }]
        )
        return final.content[0].text
💡

Otimização de custo em multi-agente

Use modelos diferentes para diferentes papéis: Opus para Supervisor (raciocínio complexo), Sonnet para Workers especializados (execução), Haiku para tasks simples (busca, formatação, sumarização). Redução típica de custo: 40–60% vs. usar Opus em tudo.

Seção 04 · Claude Code

Claude Code avançado: sessões longas e sub-agentes

Além do uso básico, Claude Code tem capacidades avançadas que transformam como você trabalha com bases de código legado, realiza refatorações complexas e gerencia projetos de longa duração com múltiplas sessões.

Modos de operação do Claude Code

💬

Interativo

Conversa direta no terminal. Claude lê arquivos, edita, executa comandos. Ideal para exploração e tarefas pontuais. Cada sessão: contexto novo.

Non-interactive (-p)

Passa tarefa via flag e Claude executa automaticamente. Ideal para CI/CD, scripts, pipelines. claude -p "Adicione testes para funções sem coverage"

🤖

Sub-agentes

Claude Code pode spawnar instâncias de si mesmo para tarefas paralelas. Usa Task tool internamente. Cada sub-agente tem seu próprio contexto e ferramentas.

CLAUDE.md avançado com hooks e configurações

CLAUDE.md — configuração avançada para projeto COBOL legado
# CLAUDE.md — FP-MAIN v2 — Configuração Avançada

## Contexto do Projeto
Sistema de folha IBM z/OS 2.5, COBOL IBM Enterprise 6.3, DB2 v13.
Python 3.11 (FastAPI) como camada de integração.

## Comandos Customizados (slash commands)
- /analisa-cobol [arquivo] → Analisa programa COBOL, lista divisões e paragraphs
- /gera-teste [programa]  → Gera casos de teste para programa COBOL
- /doc-cobol [arquivo]    → Gera documentação Markdown do programa
- /diff-seguro            → Mostra diff e pede confirmação antes de salvar

## Hooks de Segurança
ANTES de qualquer edição em *.cbl ou *.cpy:
  1. Verificar se arquivo tem backup recente (git status)
  2. Alertar se arquivo é chamado por mais de 5 programas (alto impacto)
  3. NUNCA editar arquivos em PROD — verificar se estamos no branch correto

## Regras de Edição COBOL
- Manter colunas 1-6 em branco (área de sequência)
- Indicador na coluna 7 (* para comentário)
- Código nas colunas 8-72 (área A e B)
- Colunas 73-80: identificação (reservadas, não tocar)
- Todo novo PARAGRAPH deve ter comentário de propósito

## Sub-agentes Disponíveis
Para tarefas grandes, spawnar sub-agentes:
- Análise: "analise todos os programas com GOTO e liste refatorações"
- Testes: "gere testes unitários para os 20 programas sem cobertura"
- Docs: "documente todos os copybooks do diretório /copybooks"

## Workflow de Sessão Longa
1. Ao iniciar: ler docs/decisoes/ADRs-recentes.md
2. A cada 10 ações: resumir progresso em .claude/session-progress.md
3. Ao finalizar: atualizar docs/changelog-ai.md com o que foi feito

Claude Code + CI/CD — automação real

.github/workflows/ai-review.yml
name: AI Code Review

on:
  pull_request:
    types: [opened, synchronize]

jobs:
  ai-review:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with: {fetch-depth: 0}

      - name: Install Claude Code
        run: npm install -g @anthropic-ai/claude-code

      - name: AI Review do diff
        env:
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
        run: |
          # Gerar diff do PR
          git diff origin/main...HEAD > /tmp/pr.diff

          # Claude Code revisa e gera comentários
          claude -p "Revise este diff de código COBOL/Python. \
            Identifique: (1) bugs potenciais, (2) violações das \
            convenções do CLAUDE.md, (3) edge cases não tratados. \
            Formate como lista de comentários com linha e severidade." \
            --input /tmp/pr.diff \
            --output /tmp/review.md

      - name: Post review como comentário no PR
        uses: actions/github-script@v7
        with:
          script: |
            const review = require('fs').readFileSync('/tmp/review.md', 'utf8');
            github.rest.issues.createComment({
              issue_number: context.issue.number,
              owner: context.repo.owner,
              repo: context.repo.repo,
              body: `## 🤖 AI Code Review\n\n${review}`
            });
🧠

Sessões longas: gerenciamento de contexto no Claude Code

Claude Code usa compactação automática quando a janela de contexto fica cheia — sumariza interações antigas para liberar espaço. Para projetos longos, instrua no CLAUDE.md a salvar progresso periodicamente em arquivos (.claude/session-progress.md). Assim, mesmo após compactação, o histórico do que foi feito persiste.

Seção 05 · Computer Use

Computer Use: casos reais, limitações e boas práticas

Computer Use permite que Claude controle um computador — mover cursor, clicar, digitar, tirar screenshots e interpretar o que vê na tela. É uma das capacidades mais poderosas e mais arriscadas. Entender onde funciona bem (e onde não) é crítico.

66%
OSWorld benchmark (abr/2026)
Humano: ~72%. Gap de 6 pontos.
~2s
Latência por ação de tela
Screenshot → processamento → ação. Não use para UIs rápidas.
8,9%
Acerto em relógio analógico
Limitação de percepção visual — jagged intelligence.
✅ L2
Nível de autonomia recomendado
Sempre revisar antes de confirmar ações irreversíveis.

O que funciona bem vs. o que ainda falha

✅ Funciona bem
  • 📋 Preenchimento de formulários repetitivos
  • 📁 Navegação em sistemas de arquivos
  • 📊 Extração de dados de interfaces legadas sem API
  • 🔄 Automação de fluxos em sistemas ERP/CRM sem SDK
  • 🖥️ Operação de terminais 3270 (ISPF, TSO)
  • 🧪 Testes exploratórios de UI
❌ Ainda problemático
  • ⏱️ UIs de tempo real com atualizações rápidas
  • 🖱️ Drag-and-drop complexo e operações precisas de pixel
  • 🔐 CAPTCHAs e verificações anti-bot
  • 📈 Leitura precisa de gráficos e visualizações
  • 🎮 Jogos e interfaces que requerem reflexos rápidos
  • 🔒 Sistemas com MFA e autenticação visual
Python — computer_use_terminal3270.py
import anthropic, base64
from PIL import ImageGrab
import subprocess

client = anthropic.Anthropic()

def screenshot_to_base64() -> str:
    img = ImageGrab.grab()
    import io
    buf = io.BytesIO()
    img.save(buf, format="PNG")
    return base64.b64encode(buf.getvalue()).decode()

def computer_use_agent(task: str, max_steps: int = 20):
    """
    Agente que opera terminal 3270 (ISPF/TSO) via Computer Use.
    Caso de uso real: extrair dados de datasets COBOL sem API disponível.
    """
    messages = []
    steps = 0

    while steps < max_steps:
        # Capturar estado atual da tela
        screen = screenshot_to_base64()

        messages.append({
            "role": "user",
            "content": [
                {
                    "type": "image",
                    "source": {"type": "base64", "media_type": "image/png", "data": screen}
                },
                {"type": "text", "content": task if steps == 0 else "Continue a tarefa."}
            ]
        })

        response = client.beta.messages.create(
            model="claude-opus-4-6",
            max_tokens=1024,
            tools=[{"type": "computer_20250124", "name": "computer",
                    "display_width_px": 1920, "display_height_px": 1080}],
            betas=["computer-use-2025-01-24"],
            messages=messages
        )

        for block in response.content:
            if block.type == "tool_use" and block.name == "computer":
                action = block.input["action"]

                # HITL: aprovar ações que escrevem dados
                if action in ["type", "key"] and "ENTER" in str(block.input):
                    confirm = input(f"⚠️ Claude vai pressionar ENTER. Confirmar? (s/n): ")
                    if confirm.lower() != "s":
                        return "Interrompido pelo usuário."

                # Executar ação via pyautogui ou xdotool
                self._execute_computer_action(block.input)

            elif block.type == "text" and "TAREFA CONCLUÍDA" in block.text:
                return block.text

        steps += 1

    return "Limite de steps atingido"
Seção 06 · Caso Completo

Agente de automação corporativa end-to-end

Tudo junto: Plan-Execute + multi-agente + RAG + memória + HITL. Um agente real que processa a folha de pagamento mensal de forma semi-autônoma — o caso de uso mais complexo e valioso para quem trabalha com sistemas legados COBOL.

🏭

O cenário

Empresa com folha mensal de 5.000 funcionários. Processo atual: 3 analistas gastam 2 dias rodando programas COBOL, conferindo relatórios e fechando a folha. Objetivo: agente semi-autônomo que faz 80% do trabalho, analistas revisam os 20% de exceções.

Arquitetura do agente de folha

Fluxo completo — Fechamento de Folha Semi-autônomo
⏰ Trigger
Cron job dia 20
🧠 Supervisor Agent
Cria plano do mês, verifica pré-requisitos
📋 Plano Aprovado
HITL: analista revisa
📊 Agente Cálculo
Roda FPFOLHA00
via MCP mainframe
🔍 Agente Validação
Confere totais
vs. mês anterior
⚠️ Agente Exceções
Identifica e agrupa
anomalias
📝 Agente Docs
Gera relatórios
e comprovantes
📊 Dashboard de Exceções
Analista revisa apenas casos anômalos — ~20% do trabalho
✅ Aprovação HITL
Analista aprova fechamento
🏦 Pagamento
Crédito via TED/PIX
Python — folha_agent.py (esqueleto completo)
from plan_execute_agent import PlanExecuteAgent
from memory.manager import MemoryManager
from tools.mainframe import MAINFRAME_TOOLS
import anthropic, json

client = anthropic.Anthropic()
memory = MemoryManager()

SYSTEM_FOLHA = """Você é o Agente de Fechamento de Folha da Empresa XYZ.

RESPONSABILIDADES:
- Executar o fechamento mensal seguindo o plano aprovado
- Identificar e escalar exceções para revisão humana
- NUNCA aprovar pagamento sem HITL explícito
- Manter log detalhado de cada ação para auditoria

REGRAS DE SEGURANÇA:
- Ações irreversíveis (pagamento, emissão de DARF) requerem aprovação humana
- Divergências > R$ 1.000 são exceções obrigatórias
- Qualquer SQLCODE de erro: escalar imediatamente"""

class FolhaAgent:
    def run_fechamento(self, competencia: str) -> dict:
        # Recuperar contexto de meses anteriores (memória episódica)
        historico = memory.get_episode_summary("folha_fechamento", last_n=3)

        # Fase 1: Planejamento com contexto histórico
        planner = PlanExecuteAgent()
        objetivo = f"""Fechar folha de pagamento competência {competencia}.
        
Histórico: {historico}

Etapas obrigatórias:
1. Verificar pré-requisitos (pontos lançados, admissões/demissões do mês)
2. Calcular folha via FPFOLHA00 para todos os departamentos
3. Validar totais vs. mês anterior (alertar divergências > 5%)
4. Processar encargos (INSS, FGTS, IRRF) via programas específicos
5. Identificar exceções e agrupar por tipo
6. Gerar relatórios gerenciais
7. AGUARDAR APROVAÇÃO HUMANA antes de qualquer pagamento"""

        plano = planner.plan(objetivo, MAINFRAME_TOOLS)

        # Mostrar plano para aprovação humana (HITL fase 1)
        print("\n📋 PLANO DE FECHAMENTO:")
        for etapa in plano:
            print(f"  {etapa['etapa']}. {etapa['descricao']}")

        confirm = input("\n✅ Aprovar plano? (s/n): ")
        if confirm.lower() != "s":
            return {"status": "cancelado"}

        # Fase 2: Execução — parar em etapas que precisam de HITL
        resultados = planner.execute(plano, MAINFRAME_TOOLS)

        # Fase 3: Análise de exceções
        excecoes = self._analisar_excecoes(resultados)

        if excecoes:
            print(f"\n⚠️ {len(excecoes)} exceções encontradas:")
            for exc in excecoes:
                print(f"  • {exc['descricao']} — {exc['valor']}")
            confirm2 = input("\n✅ Exceções revisadas. Aprovar fechamento? (s/n): ")
            if confirm2.lower() != "s":
                return {"status": "pendente_revisao", "excecoes": excecoes}

        # Fase 4: Pagamento (requer HITL final)
        print("\n🏦 AÇÃO IRREVERSÍVEL: Autorizar pagamento via TED/PIX")
        confirm3 = input("CONFIRMAR PAGAMENTO? Digite 'CONFIRMO': ")
        if confirm3 != "CONFIRMO":
            return {"status": "pagamento_cancelado"}

        # Fase 5: Pagamento + atualizar memória episódica
        resultado_final = self._executar_pagamento(competencia)
        memory.add_episode("folha_fechamento", {
            "competencia": competencia,
            "excecoes": len(excecoes),
            "status": "concluido"
        })

        return resultado_final
Seção 07 · Controle Humano

Human-in-the-Loop: onde colocar o controle humano

HITL não é uma limitação — é uma feature de design. O objetivo não é remover humanos do loop, mas posicioná-los nos pontos de máximo impacto: decisões de alto valor, ações irreversíveis e exceções que fogem do padrão.

👍
Aprovação Pré-execução
Humano aprova o plano antes de começar. Detecta erros de interpretação cedo. Obrigatório para processos críticos.
👁️
Revisão de Exceções
Agente processa e apresenta apenas anomalias para revisão. Humano foca onde realmente importa. Modelo mais eficiente.
🔐
Aprovação de Irreversíveis
Ações que não podem ser desfeitas (pagamento, exclusão, publicação) sempre passam por aprovação explícita. Nunca automatizar.
📊
Monitoramento Contínuo
Dashboard em tempo real do que o agente está fazendo. Humano pode pausar ou intervir a qualquer momento.

Matriz de decisão HITL

Tipo de AçãoReversível?ImpactoPolítica HITLExemplo
Leitura / Análise ✅ Sempre Nenhum 🤖 Automático Consultar DB, ler arquivo
Rascunho / Draft ✅ Sim Baixo 🤖 Automático + revisão opt-in Gerar e-mail, criar arquivo
Escrita em sistemas ⚠️ Parcialmente Médio 👁️ Revisão de exceções Atualizar registro, enviar relatório
Transações financeiras ❌ Não Alto 🔐 Aprovação explícita sempre Pagamento, transferência, DARF
Ações externas ❌ Geralmente não Alto 🔐 Aprovação explícita sempre Enviar e-mail, publicar, integrar API parceiro
Infraestrutura ⚠️ Parcialmente Crítico 🔐 Aprovação + 2ª pessoa Deploy, alteração de permissão, job batch
⚖️

HITL e regulação (EU AI Act / PL Brasil)

Sistemas classificados como "alto risco" pelo EU AI Act obrigatoriamente precisam de supervisão humana e capacidade de intervenção. Isso inclui sistemas de RH, crédito e decisões que afetam pessoas. HITL não é apenas boa prática — pode ser requisito legal. Documente quais aprovações humanas existem no sistema.

Seção 08 · Logs e Traces

Observabilidade de agentes: logs, traces e avaliação

Agentes falham de formas não-determinísticas — um agente que funciona perfeitamente em 99 runs pode tomar uma decisão catastrófica no 100º. Observabilidade é a única forma de detectar, investigar e prevenir essas falhas.

📊 Métricas de Sistema
  • Latência P50/P95/P99 por etapa
  • Taxa de sucesso por tipo de task
  • Tokens consumidos por sessão
  • Custo por tarefa completa
  • Tool call success/failure rate
🔍 Traces de Agente
  • Cada tool call com input/output
  • Raciocínio intermediário do agente
  • Pontos de decisão e alternativas
  • Onde e por quê o agente abortou
  • Timeline completa da sessão
🤖 Avaliação de Qualidade
  • LLM-as-Judge por amostragem
  • Comparação com golden answers
  • Detecção de alucinações
  • Consistência entre sessões
  • Human eval semanal (10% da amostra)
🚨 Alertas e Anomalias
  • Custo acima de threshold por tarefa
  • Loop infinito (muitas iterações sem progresso)
  • Tool call repetida com mesmo erro
  • Resposta fora do formato esperado
  • Tentativa de ação não autorizada
Python — agent_tracer.py
import time, json, uuid
from dataclasses import dataclass, field
from typing import List, Any
from contextlib import contextmanager
import anthropic

@dataclass
class AgentTrace:
    session_id: str = field(default_factory=lambda: str(uuid.uuid4())[:8])
    objective: str = ""
    steps: List[dict] = field(default_factory=list)
    started_at: float = field(default_factory=time.time)
    total_tokens: int = 0
    total_cost_usd: float = 0.0

    def add_step(self, step_type: str, data: Any, duration_ms: float = 0):
        self.steps.append({
            "type": step_type,
            "data": data,
            "timestamp": time.time() - self.started_at,
            "duration_ms": duration_ms
        })

    def to_json(self) -> str:
        return json.dumps({
            "session_id": self.session_id,
            "objective": self.objective,
            "duration_s": round(time.time() - self.started_at, 2),
            "steps_count": len(self.steps),
            "total_tokens": self.total_tokens,
            "total_cost_usd": round(self.total_cost_usd, 4),
            "steps": self.steps
        }, ensure_ascii=False, indent=2)

class TracedAgent:
    """Wrapper que adiciona observabilidade a qualquer agente."""

    COST_PER_MTOK = {  # USD por milhão de tokens (abr/2026)
        "claude-opus-4-6":    {"input": 15.0,  "output": 75.0},
        "claude-sonnet-4-6":  {"input":  3.0,  "output": 15.0},
        "claude-haiku-4-5":   {"input":  0.8,  "output":  4.0},
    }

    def __init__(self, agent_fn, objective: str):
        self.agent_fn  = agent_fn
        self.trace     = AgentTrace(objective=objective)
        self.client    = anthropic.Anthropic()

    def traced_api_call(self, **kwargs):
        t0 = time.time()
        response = self.client.messages.create(**kwargs)
        duration = (time.time() - t0) * 1000

        # Registrar no trace
        model = kwargs.get("model", "unknown")
        costs = self.COST_PER_MTOK.get(model, {"input": 0, "output": 0})
        cost = (response.usage.input_tokens  * costs["input"]  / 1_000_000 +
                response.usage.output_tokens * costs["output"] / 1_000_000)

        self.trace.total_tokens += response.usage.input_tokens + response.usage.output_tokens
        self.trace.total_cost_usd += cost

        self.trace.add_step("api_call", {
            "model": model,
            "input_tokens": response.usage.input_tokens,
            "output_tokens": response.usage.output_tokens,
            "cost_usd": round(cost, 5),
            "stop_reason": response.stop_reason
        }, duration)

        # Alerta de custo anômalo
        if self.trace.total_cost_usd > 1.0:
            print(f"⚠️ CUSTO ALTO: USD {self.trace.total_cost_usd:.3f} na sessão {self.trace.session_id}")

        return response

    def save_trace(self, path: str = None):
        path = path or f"traces/{self.trace.session_id}.json"
        with open(path, "w") as f:
            f.write(self.trace.to_json())
        print(f"📊 Trace salvo: {path}")
Seção 09 · Enterprise

Casos de uso enterprise: agentes reais em 2026

Três arquiteturas de agentes que representam o estado da arte em implantações corporativas reais — com stack, ROI estimado e lições aprendidas.

🧑‍💼

Agente de Onboarding

Novo funcionário chega no primeiro dia. Agente semi-autônomo cria contas em 12 sistemas, gera contratos, agenda treinamentos e responde dúvidas sobre benefícios.

Stack: Multi-agente supervisor (RH, TI, Facilities) + MCP Servers por sistema + RAG em manual do funcionário
HITL: Aprovação de criação de acessos privilegiados, validação do contrato
ROI: 4h de trabalho de RH → 30min de revisão. Payback: 2 meses.
💰

Agente Fiscal

Processa 10.000 NF-e por mês, cruza com ERP, identifica divergências, calcula PIS/COFINS/ICMS-ST, gera SPED Fiscal e EFD-Contribuições. Analistas revisam apenas exceções.

Stack: Plan-Execute + MCP para ERP/SEFAZ + RAG em legislação tributária + Computer Use para portais estaduais sem API
HITL: Toda transmissão para SEFAZ, divergências acima de R$5K
ROI: Redução de 70% do tempo de compliance fiscal. Multas: zero nos últimos 6 meses.
🔧

Agente de DevOps

Monitora alertas de produção, diagnostica causa raiz nos logs, sugere e (com aprovação) aplica hotfixes em código Python/COBOL, reabre jobs de batch falhados e documenta incidentes automaticamente.

Stack: ReAct + MCP para PagerDuty/Splunk/GitHub + Claude Code para geração de patch + memória episódica de incidentes
HITL: Qualquer alteração em código de produção, restart de jobs de folha
ROI: MTTR de 4h para 35min. On-call noturno: 80% dos alertas resolvidos sem acordar ninguém.
📐

As 5 lições mais comuns de projetos agênticos em produção

(1) Comece menor do que você pensa ser necessário — agentes simples em produção > agentes complexos em staging.
(2) O maior tempo é na integração com sistemas legados, não no LLM.
(3) Evals antes do deploy, sempre — sem eles você não sabe o que mudou.
(4) HITL nos pontos certos reduz resistência de stakeholders e auditorias.
(5) Custo real de tokens é menor do que o previsto se você rotear modelos corretamente.

Seção 10 · Horizontes

O futuro dos agentes: o que está por vir

O módulo final termina com o mapa do que está sendo construído agora nos labs e que chegará ao mercado nos próximos 12–24 meses. Não como especulação — como tendências com roadmaps públicos e evidências concretas.

🧠 Memória persistente nativa nos modelos 2026–27
Modelos que mantêm contexto de semanas/meses sem re-injeção externa. Anthropic e OpenAI têm research ativo em "persistent memory architectures". Quando chegar, vai simplificar radicalmente a engenharia de contexto do M6.
⚡ Agentes em tempo real (<100ms) 2026
Modelos menores e especializados para latência ultra-baixa. Já existe com Haiku 4.5 (~250ms), mas o target é <100ms para agentes de voz e automação física. Habilita casos como co-piloto de atendimento ao vivo.
🤝 Padrão de comunicação entre agentes 2026–27
MCP está evoluindo para suportar comunicação agente-a-agente padronizada. Agentes de diferentes empresas (seu agente fiscal + agente da SEFAZ) se comunicando diretamente. Anthropic e Google estão convergindo em padrões.
🎯 Fine-tuning acessível para domínios específicos 2026
Fine-tuning de modelos menores em dados específicos da empresa (ex: Haiku treinado em 10 anos de histórico de suporte) viabilizando performance de Opus com custo de Haiku. Anthropic prometeu acesso em 2026.
🔭 Interpretabilidade prática 2027+
Research de "mechanistic interpretability" da Anthropic avança para explicar por que o modelo tomou uma decisão específica. Quando virar produto, vai revolucionar compliance, auditoria e confiança em decisões de IA de alto impacto.
🏭 Agentes especializados por vertical 2026
Modelos pré-treinados em domínios: medicina, direito, finanças, engenharia. Já existe Harvey (direito) e Abridge (medicina). Próximos: COBOL/mainframe, fiscal brasileiro, agronegócio. Consultores que conhecem esses domínios constroem sobre eles.
🎓

Mensagem final do cursinho

Você chegou ao módulo 8 com conhecimento real sobre como a IA funciona, como construir sistemas com ela, como integrá-la a legado COBOL, e como estar preparada para o que está vindo. O diferencial não é saber usar o ChatGPT — é saber construir sistemas que resolvem problemas reais com IA. Isso é o que este cursinho entregou.

Seção 11 · Referência Completa

Glossário Mestre — Módulos M1 a M8

Todos os termos-chave do cursinho em um único lugar, com referência ao módulo de origem. Use como cheat sheet em consultorias.

Termos do Módulo 8

ReAct M8
Reasoning + Acting. Padrão de agente onde o modelo alterna entre raciocinar (Thought), agir (Action) e observar (Observation) em loop até completar a tarefa.
Plan-and-Execute M8
Padrão de agente com fase separada de planejamento (modelo maior) e execução (modelo menor/mais rápido). Mais previsível e auditável que ReAct puro.
Supervisor-Worker M8
Padrão multi-agente onde um Supervisor decompõe objetivos e delega para sub-agentes especializados. Consolida resultados e apresenta ao humano.
Reflexion M8
Padrão onde um Critic LLM avalia a resposta gerada e fornece feedback para refinamento iterativo. Melhora qualidade com custo adicional de 2–3× tokens.
Human-in-the-Loop (HITL) M8
Padrão de design onde humanos supervisionam, validam ou aprovam decisões de sistemas de IA em pontos críticos — especialmente ações irreversíveis ou de alto impacto.
Observabilidade de Agentes M8
Capacidade de entender o comportamento interno de um agente através de logs, traces, métricas e avaliações. Fundamental para detectar falhas não-determinísticas em produção.
Agent Trace M8
Registro detalhado de uma sessão de agente: cada tool call, raciocínio, decisão, duração e custo. Permite reproduzir, auditar e depurar comportamentos inesperados.
MTTR (Mean Time to Recover) M8
Tempo médio de recuperação após um incidente. Agentes de DevOps com IA reduzem MTTR ao automatizar diagnóstico e aplicação de soluções conhecidas.
Computer Use M8
Capacidade do Claude de operar um computador visualmente — tirar screenshots, interpretar a tela, mover cursor, clicar e digitar. Útil para sistemas sem API.
Mechanistic Interpretability M8
Campo de pesquisa que busca entender como redes neurais realizam computações internamente. Anthropic lidera esta área — objetivo: explicar decisões do modelo.

Termos essenciais — M1 a M7

Token M1
Unidade básica de texto para LLMs (~¾ de palavra em inglês, ~½ em português). Toda cobrança da API é por tokens.
Alucinação M1
Quando o LLM gera informações falsas com aparente confiança. Não é um bug — é consequência da geração probabilística de tokens.
RAG M2
Retrieval-Augmented Generation. Recupera documentos relevantes de base externa e os injeta no contexto antes da geração. Evita fine-tuning para knowledge updates.
Transformer M2
Arquitetura de rede neural base de todos os LLMs modernos. Mecanismo de self-attention permite processar relações entre tokens independentemente da distância.
Prompt Engineering M3
Arte e ciência de estruturar inputs para LLMs de forma a obter outputs de maior qualidade. Inclui técnicas como few-shot, chain-of-thought e role prompting.
Chain-of-Thought M3
Técnica que instrui o modelo a "pensar passo a passo" antes de responder. Melhora raciocínio em problemas complexos. Base do Extended Thinking do Claude.
Prompt Cache M4
Feature da Anthropic que cacheia prefixos de prompt repetidos. Reduz custo em 90% e latência em 85% para system prompts longos reutilizados.
Extended Thinking M4
Mode do Claude (Opus/Sonnet) que usa tokens de "thinking" internos para raciocínio explícito antes de responder. Melhora performance em problemas difíceis.
AGI M5
Artificial General Intelligence — sistema que iguala humanos em qualquer tarefa cognitiva. Não existe ainda. GPT-5 estima ~57% do caminho por uma definição rigorosa.
Alignment M5
Campo de pesquisa focado em garantir que sistemas de IA poderosos ajam de acordo com valores humanos. Problema técnico e filosófico central da Anthropic.
Vector Database M6
Banco de dados otimizado para armazenar e buscar embeddings por similaridade semântica. Ex: pgvector, Pinecone, Qdrant, Weaviate.
Embedding M6
Representação vetorial de texto onde proximidade geométrica = similaridade semântica. Base técnica do RAG e busca semântica.
Tool Use M7
Mecanismo pelo qual o LLM solicita execução de funções externas. Claude decide quando chamar, sua app executa e retorna o resultado. Base de qualquer agente.
MCP Server M7
Servidor que expõe tools, resources e prompts via Model Context Protocol. Padrão aberto da Anthropic para integrar LLMs com qualquer sistema externo.
Prompt Injection M7
Ataque onde instruções maliciosas no input do usuário tentam sobrescrever o system prompt. Equivalente ao SQL injection para sistemas LLM.
LLM-as-Judge M7
Usar um LLM para avaliar a qualidade de respostas de outro LLM. Escala evals para milhares de casos. Requer calibração com anotações humanas.
Todas as tags do cursinho
TokenAlucinaçãoTemperatura Fine-tuningRAGTransformer AttentionEmbeddingMultimodal Prompt EngineeringChain-of-ThoughtFew-shot System PromptXML TagsPrompt Cache Extended ThinkingClaude CodeMCP AGIASIAlignmentSafety Frontier ModelBenchmarkArena Elo Vector DBpgvectorChunking Hybrid RetrievalRerankingHNSW CLAUDE.mdFiles APITool Use MCP ServerStreamingCircuit Breaker EvalsPrompt InjectionLLM-as-Judge ReActPlan-ExecuteMulti-agent Supervisor-WorkerHITLComputer Use Agent TraceObservabilidadeCOMP-3
🎓 Cursinho Concluído

Parabéns — você completou os 8 módulos.

De fundamentos de IA até arquitetura de agentes, você percorreu todo o stack necessário para construir, consultar e implantar sistemas de IA em empresas reais — com ênfase em ambientes legados e mainframe que a maioria dos cursos ignora completamente.

M1 Fundamentos ✅
M2 LLMs ✅
M3 Prompts ✅
M4 Anthropic ✅
M5 Estado IA ✅
M6 Memória ✅
M7 API ✅
M8 Agentes ✅
↑ Voltar ao início do M8 📖 Glossário Mestre