05-04-04 — Desafio: diagrama Mermaid de agente comparador de preços

⏱ 8 minFontes validadas em: 2026-04-29

TL;DR

Desafio prático: desenhe em Mermaid um agente que pesquisa o preço de um produto em 3 sites diferentes, compara e recomenda. O objetivo é consolidar os conceitos do módulo — tool calling, parallelization, terminação — num diagrama concreto.

O cenário

Você precisa construir um agente que recebe o nome de um produto e:

  1. Busca o preço em 3 sites (Amazon, Mercado Livre, Magazine Luiza)
  2. Compara os preços encontrados
  3. Verifica disponibilidade e prazo de entrega
  4. Recomenda a melhor opção com justificativa

Diagrama da solução — versão paralela

Este é o diagrama completo do agente usando o padrão de parallelization (pesquisa em paralelo) + aggregation:

graph TD U[👤 Usuário\n'Preço iPhone 16 256GB'] --> ORCH ORCH["🤖 ORCHESTRATOR\nGPT-4o\n\nPlaneja buscas em paralelo"] ORCH --> T1["🛒 Tool: scrape_amazon\nInput: 'iPhone 16 256GB'"] ORCH --> T2["🛒 Tool: scrape_mercadolivre\nInput: 'iPhone 16 256GB'"] ORCH --> T3["🛒 Tool: scrape_magazineluiza\nInput: 'iPhone 16 256GB'"] T1 --> R1["📦 Resultado Amazon\n{\n price: 6799,\n availability: true,\n delivery_days: 2,\n seller_rating: 4.8\n}"] T2 --> R2["📦 Resultado MercadoLivre\n{\n price: 6499,\n availability: true,\n delivery_days: 5,\n seller_rating: 4.2\n}"] T3 --> R3["📦 Resultado Mag. Luiza\n{\n price: 6699,\n availability: false,\n delivery_days: null,\n seller_rating: 4.6\n}"] R1 --> AGG["📊 AGGREGATOR\nLLM analisa:\n- Filtra indisponíveis\n- Pondera preço + prazo\n- Calcula score"] R2 --> AGG R3 --> AGG AGG --> CHK{Todos os\nsites OK?} CHK -->|"Algum falhou"| RETRY["🔄 Retry\n(max 1 vez)"] RETRY --> T1 CHK -->|"Dados suficientes"| REC REC["💡 RECOMMENDER\nGera recomendação:\n'Amazon: R$6.799 em 2 dias'\nJustificativa: melhor custo-benefício\nconsiderando entrega"] REC --> OUT["📱 Output para usuário\ncom comparação formatada"] style ORCH fill:#1e40af,color:#fff style AGG fill:#4c1d95,color:#fff style REC fill:#065f46,color:#fff style CHK fill:#7c2d12,color:#fff style OUT fill:#374151,color:#fff

Template para você completar

Use este template como ponto de partida para adaptar ao seu caso de uso:

graph TD
    %% ===== ENTRADA =====
    U["👤 Usuário\n'{produto}'"] --> ORCH

    %% ===== ORQUESTRADOR =====
    ORCH["🤖 ORCHESTRATOR\n{modelo}\n\n{responsabilidade}"]
    
    %% ===== TOOL CALLS PARALELOS =====
    ORCH --> T1["🛒 Tool: {tool_1}\nInput: '{query}'"]
    ORCH --> T2["🛒 Tool: {tool_2}\nInput: '{query}'"]
    ORCH --> T3["🛒 Tool: {tool_3}\nInput: '{query}'"]
    
    %% ===== RESULTADOS =====
    T1 --> R1["📦 Resultado {fonte_1}\n{campos_relevantes}"]
    T2 --> R2["📦 Resultado {fonte_2}\n{campos_relevantes}"]
    T3 --> R3["📦 Resultado {fonte_3}\n{campos_relevantes}"]
    
    %% ===== AGREGAÇÃO =====
    R1 --> AGG["📊 AGGREGATOR\n{lógica de agregação}"]
    R2 --> AGG
    R3 --> AGG
    
    %% ===== GUARDRAIL =====
    AGG --> CHK{"{critério de\ncontinuação}"}
    CHK -->|"Falha"| RETRY["🔄 {ação de fallback}"]
    CHK -->|"Sucesso"| REC
    
    %% ===== OUTPUT =====
    REC["{output final}"]
    REC --> OUT["📱 Output para usuário"]

    %% ===== ESTILOS =====
    style ORCH fill:#1e40af,color:#fff
    style AGG fill:#4c1d95,color:#fff
    style REC fill:#065f46,color:#fff

Variações para explorar

Exercício adicional: Tente redesenhar o diagrama usando o padrão sequential (um site por vez) ao invés de paralelo. Quais são os trade-offs em latência e custo? Quando faria sentido a versão sequencial?

Implementação simplificada em Python

import asyncio
import openai
import json

client = openai.AsyncOpenAI()

# Simula tools de scraping
async def scrape_amazon(product: str) -> dict:
    # Na vida real: Playwright, ScraperAPI, ou API de preços
    return {"price": 6799, "availability": True, "delivery_days": 2, "site": "Amazon"}

async def scrape_mercadolivre(product: str) -> dict:
    return {"price": 6499, "availability": True, "delivery_days": 5, "site": "MercadoLivre"}

async def scrape_magazineluiza(product: str) -> dict:
    return {"price": 6699, "availability": False, "delivery_days": None, "site": "MagLuiza"}

async def price_comparison_agent(product: str) -> str:
    # Executa buscas em paralelo (parallelization pattern)
    results = await asyncio.gather(
        scrape_amazon(product),
        scrape_mercadolivre(product),
        scrape_magazineluiza(product),
        return_exceptions=True
    )
    
    # Filtra falhas e indisponíveis
    valid = [r for r in results 
             if not isinstance(r, Exception) and r.get("availability")]
    
    if not valid:
        return "Produto não encontrado disponível em nenhum site."
    
    # LLM faz a recomendação final
    response = await client.chat.completions.create(
        model="gpt-4o",
        messages=[{
            "role": "system",
            "content": "Você é um comparador de preços. Analise os resultados e recomende a melhor opção considerando preço e prazo de entrega. Seja conciso."
        }, {
            "role": "user", 
            "content": f"Produto: {product}\nResultados: {json.dumps(valid, ensure_ascii=False)}"
        }]
    )
    return response.choices[0].message.content

# Executa
result = asyncio.run(price_comparison_agent("iPhone 16 256GB"))
print(result)
Conectando com o módulo: Este desafio usa — Tool calling (scraping tools), Parallelization pattern (Anthropic), Graceful degradation (filtra falhas), e resultado via ReAct-style synthesis.

Próximos passos: Módulo 06

Você aprendeu os conceitos e a arquitetura de agentes. No Módulo 06 você vai implementar isso com frameworks reais: LangChain, LangGraph, Semantic Kernel e AutoGen.

Como isso se conecta

  • 05-02-03 — Tool calling: as funções de scraping são tool calls do agente.
  • 05-04-03 — Parallelization é um dos 5 padrões da Anthropic — este desafio o demonstra.
  • Módulo 06 — Implementação com LangChain, Semantic Kernel e AutoGen.

Fontes

  1. Anthropic — Building Effective Agents — parallelization pattern (seção relevante).
  2. Mermaid.js — Flowchart syntax — documentação oficial da sintaxe Mermaid.
  3. Python — asyncio docs — paralelismo assíncrono para tool calls simultâneos.