Extra Inteligência Artificial • Trilha Progressiva em 4 Níveis


🧭 Navegação Pedagógica


🎯 Nível 1: Fundamentos

Problema 14.1 — Definição de Agente com Role, Goal e Backstory

Contexto: Criar uma estrutura de dados representando um Agente no estilo CrewAI com especialização e limites operacionais claros.

Requisitos de Execução:

  1. Definir a classe AgenteCrew com atributos: role, goal, backstory, ferramentas e permite_delegar.
  2. Instanciar um agente “Pesquisador Sênior de Mercado”.
  3. Validar a geração do prompt de sistema injetado para o LLM.

Resultado Esperado

System Prompt do Agente Pesquisador:
Você é um Pesquisador Sênior de Mercado. Seu objetivo é: Descobrir tendências de IA em 2026.
Histórico: Especialista com 15 anos de análise de dados no setor de tecnologia.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_14_1_SeuNome
  2. Envie na tarefa: Atividade Cap 14 - Sistemas Multiagentes
🔑 Gabarito de Código & Solução Comentada
# crew_agent_def.py
class AgenteCrew:
    def __init__(self, role, goal, backstory, ferramentas=None, permite_delegar=True):
        self.role = role
        self.goal = goal
        self.backstory = backstory
        self.ferramentas = ferramentas or []
        self.permite_delegar = permite_delegar

    def gerar_system_prompt(self):
        return (
            f"Você é um {self.role}. Seu objetivo é: {self.goal}.\n"
            f"Histórico: {self.backstory}"
        )

if __name__ == "__main__":
    pesquisador = AgenteCrew(
        role="Pesquisador Sênior de Mercado",
        goal="Descobrir tendências de IA em 2026",
        backstory="Especialista com 15 anos de análise de dados no setor de tecnologia."
    )
    print("System Prompt do Agente Pesquisador:")
    print(pesquisador.gerar_system_prompt())

🎯 Nível 2: Prática

Problema 14.2 — Encadeamento Sequencial de Tarefas (Pipeline de 2 Agentes)

Implemente uma equipe onde o Agente 1 (Redator) escreve um parágrafo sobre computação quântica e o Agente 2 (Revisor Gramatical) corrige e aprimora o vocabulário.

🔑 Gabarito de Código & Solução Comentada
# sequential_crew.py
def executar_equipe_sequencial(tema):
    # Agente 1: Redator
    rascunho = f"A computacao quantica usa qubits e superposicao para resolver contas rapidas sobre {tema}."
    # Agente 2: Revisor
    texto_revisado = rascunho.replace("computacao quantica", "Computação Quântica") \
                             .replace("qubits e superposicao", "qubits em estado de superposição") \
                             .replace("contas rapidas", "cálculos com aceleração exponencial")
    return {"rascunho": rascunho, "final": texto_revisado}

🎯 Nível 3: Integração

Problema 14.3 — Arquitetura Hierárquica com Agente Gerente (Manager)

Construa um fluxo onde um Agente Gerente recebe um pedido complexo, quebra em duas subtarefas, delega para agentes executores e sintetiza o resultado final.

🔑 Gabarito de Código & Solução Comentada
# hierarchical_manager.py
class HierarchicalCrew:
    def __init__(self, manager, workers):
        self.manager = manager
        self.workers = workers

    def run(self, objetivo):
        subtarefas = ["Pesquisar concorrentes", "Estimar custos de infraestrutura"]
        resultados = {}
        for sub in subtarefas:
            # Gerente escolhe o trabalhador
            trabalhador = self.workers[0] if "Pesquisar" in sub else self.workers[1]
            resultados[sub] = f"Executado por {trabalhador}: Dados de {sub}"
        
        # Síntese pelo Gerente
        sintese = f"Relatório Gerencial aprovado para '{objetivo}': " + "; ".join(resultados.values())
        return sintese

🎯 Nível 4: Desafio

Problema 14.4 — Padrão AutoGen: Diálogo com Agente Crítico (Debate Loop)

Implemente um ciclo de conversa entre dois agentes: um “Proponente de Arquitetura” e um “Engenheiro Crítico de Segurança”, que debatem até chegarem a um consenso ou limite de 3 rodadas.

🔑 Gabarito de Código & Solução Comentada
# autogen_debate_loop.py
def debate_autogen_loop(proposta_inicial):
    mensagens = [{"agente": "Proponente", "msg": proposta_inicial}]
    consenso = False
    
    for rodada in range(1, 4):
        ultima = mensagens[-1]["msg"]
        if "senha em texto claro" in ultima:
            mensagens.append({"agente": "Crítico", "msg": "Rejeitado: Nunca armazene senhas em texto claro. Use bcrypt ou Argon2."})
        elif "Argon2" in ultima:
            mensagens.append({"agente": "Crítico", "msg": "Aprovado: Argon2 atende aos padrões OWASP. Consenso atingido."})
            consenso = True
            break
        else:
            mensagens.append({"agente": "Proponente", "msg": "Atualizando proposta: Usaremos hashing seguro com Argon2id."})
            
    return {"consenso": consenso, "historico": mensagens}