O Problema do Agente Único Sobrecarregado
Os primeiros protótipos de sistemas baseados em agentes de inteligência artificial costumam compartilhar a mesma arquitetura: um único modelo grande, alguns conectores para ferramentas externas e um extenso prompt de sistema. Essa abordagem funciona razoavelmente bem enquanto os casos de uso permanecem relativamente simples e contidos. No entanto, quando a complexidade real do mundo chega à porta, o sistema começa a desmoronar.
Considere um cenário comum: construir um assistente para planejamento de viagens. As buscas de voos chegam através de uma API estruturada e previsível. As buscas de hotéis, por sua vez, precisam navegar em interfaces web dinâmicas que mudam constantemente. Instruir um único modelo para lidar com ambas as tarefas simultaneamente é como pedir que um engenheiro escreva APIs de backend enquanto também clica manualmente em um site em tempo real. Com o tempo, o modelo começa a confundir instruções, perde contexto e alucina etapas inexistentes.
Aumentar o prompt, adicionar mais ferramentas e implementar lógica de fallback não resolve o problema fundamental: o sistema foi projetado de forma inadequada. Um agente único, quando sobrecarregado com muitas responsabilidades, desacelera, perde rastreabilidade das decisões, faz escolhas inconsistentes e eventualmente colapsa sob seu próprio peso. A solução não está em melhorar o prompting — está em reimaginar a arquitetura.
Arquitetura de Múltiplos Agentes Especializados
A estratégia mais eficaz é dividir o trabalho entre agentes especializados, permitindo que cada um se concentre em uma única responsabilidade bem definida. Em vez de forçar um modelo a fazer tudo, designa-se:
- Agente Viagem: Orquestra todo o fluxo, interpreta a intenção do usuário e coordena os demais agentes
- Agente Voos: Realiza buscas estruturadas em APIs de voos, onde os dados são previsíveis e organizados
- Agente Hotéis: Navega em sites reais de hotéis, lidando com layouts dinâmicos e elementos visuais complexos
Essa separação mantém a lógica limpa e evita que agentes individuais se tornem os gargalos do sistema. Cada um executa sua função com excelência, e um simples mecanismo de passagem de mensagens coordena todo o workflow sem complicações.

Comunicação Entre Agentes
Para que essa arquitetura funcione, os agentes precisam de um mecanismo simples e robusto para se comunicar. O Agente Viagem envia uma solicitação clara ao Agente Voos, aguarda os resultados, e então dispara o Agente Hotéis com a próxima etapa. Não é necessário nada sofisticado — apenas um formato leve de mensagens estruturadas em JSON que cada agente compreenda e saiba como processar.
Quando esse loop de comunicação está em lugar, todo o workflow finalmente se sente coordenado em vez de caótico. Cada mensagem é um objeto JSON compacto contendo a ação, os dados de entrada e o destino da resposta. Essa simplicidade é o segredo para manter o sistema compreensível e manutenível conforme ele cresce.
Implementação Prática com Amazon Nova
Agente Viagem (Amazon Nova 2 Lite)
O Agente Viagem atua como o orquestrador central. Recebe a requisição do usuário em linguagem natural, interpreta a intenção usando Amazon Nova 2 Lite e decide quais agentes chamar em sequência. A tarefa pesada de raciocínio acontece aqui: o modelo quebra a entrada em etapas, identifica quando disparar o Agente Voos ou o Agente Hotéis, e mantém o registro do plano geral.
Como o Agente Viagem não toca sistemas externos diretamente, seu trabalho concentra-se em raciocinar com clareza e rotear mensagens entre os agentes especializados. Ele opera sobre Amazon Bedrock, a plataforma gerenciada da AWS para modelos fundacionais.
Aqui está uma versão simplificada de como o Agente Viagem é inicializado:
# Initialize A2A client tools provider
provider = A2AClientToolProvider(known_agent_urls=[
"http://localhost:9000", # Hotel Booking Expert (NovaAct)
"http://localhost:9001" # Flight Booking Expert
])
bedrock_model = BedrockModel(
model_id="global.amazon.nova-2-lite-v1:0",
region_name="us-east-1",
)
# Create client agent with A2A tools
client_agent = Agent(
name="Travel Client",
model=bedrock_model,
description="Client agent that coordinates travel planning using specialized A2A agents",
tools=provider.tools,
system_prompt="""You are an autonomous travel planning agent. You MUST take action immediately without asking for confirmation."""
)
Na prática, o Agente Viagem recebe uma requisição em linguagem natural simples: “Encontre voos de Nova York para Tóquio em 10 de julho e um hotel até 15 de julho.” A partir daí, Amazon Nova 2 Lite reconhece que duas tarefas separadas são necessárias, gera um plano claro, envia uma mensagem ao Agente Voos, aguarda os resultados, e depois dispara o Agente Hotéis com a próxima instrução. Por fim, monta ambas as saídas em uma resposta coerente para o usuário. Essa orquestração mantém a lógica limpa e fluida.
Agente Voos (Amazon Nova 2 Lite + API)
O Agente Voos tem um escopo muito mais estreito: transformar uma requisição estruturada em opções reais de voos. Utiliza Amazon Nova 2 Lite para o raciocínio leve necessário — validar entradas, formatar a busca e decidir se chama a API de voos ao vivo ou retorna dados de fallback quando credenciais não estão disponíveis.
Após a chamada à API, o agente devolve uma resposta JSON limpa e previsível ao Agente Viagem. Como esse agente trabalha com dados estruturados, a carga de raciocínio é mínima e o trabalho do Nova 2 Lite consiste principalmente em escolher o caminho correto de execução e normalizar a saída.
@tool
def search_flights(origin: str, destination: str, departure_date: str, return_date: Optional[str] = None) -> str:
# Nova 2 Lite handles the reasoning around which path to take
if amadeus_configured():
return _search_amadeus_flights(
origin=origin,
destination=destination,
departure_date=departure_date,
return_date=return_date
)
else:
# Local development fallback
return _search_flights_web(origin, destination, departure_date, return_date)
E aqui está um exemplo simplificado da resposta:
{
"flights": [
{
"flight_number": "DL456",
"price": 520,
"duration": "14h 30m"
},
{
"flight_number": "JL701",
"price": 545,
"duration": "13h 50m"
}
],
"source": "Amadeus API"
}
Essa separação mantém todo o pipeline previsível e evita que lógica específica de API vaze para dentro do Agente Viagem.
Agente Hotéis (Amazon Nova Act)
Hotéis são fundamentalmente diferentes de voos. Não existe uma API única e limpa para consultá-los — a maioria dos sites carrega conteúdo de formas que mudam a cada visita. É nesse cenário que Amazon Nova Act brilha.
O Agente Hotéis utiliza Nova Act para controlar um navegador real e seguir instruções em linguagem natural. Em vez de escrever código frágil de web scraping ou parsing de DOM, o agente instrui o Nova Act sobre o que precisa, e o modelo cuida da navegação, retornando dados estruturados.
@tool
def search_hotels(location: str, checkin_date: str, nights: int = 2) -> str:
with NovaAct() as nova:
result = nova.act(
f"Search for hotels in {location} from {checkin_date} for {nights} nights. "
f"Return the top 3 listings with name, price, and rating.",
schema=HotelSearchResults.model_json_schema()
)
return json.dumps(result)
Aqui está um exemplo simplificado da resposta:
{
"hotels": [
{
"name": "Shinjuku Grand",
"price": "$180",
"rating": 4.3
},
{
"name": "Park Tower Tokyo",
"price": "$210",
"rating": 4.6
},
{
"name": "Hotel Blossom",
"price": "$155",
"rating": 4.0
}
],
"source": "Anycompany.com via Nova Act"
}
Usar Amazon Nova Act mantém o Agente Hotéis funcionando mesmo quando os sites mudam de layout. Não há necessidade de manutenção constante ou ajustes frágeis.
Exemplo de Execução Completa
Para ilustrar como tudo funciona na prática, aqui está um fluxo de execução real:
Requisição do usuário: “Organize uma viagem para uma pessoa de Nova York a Paris em 6 de dezembro de 2025, incluindo duas noites de hospedagem em Paris.”
Agente Viagem → Agente Voos: O Agente Viagem extrai a parte de voos da requisição e a envia. O Agente Voos retorna três voos diretos e baratos de JFK para Paris, incluindo companhia aérea, horários, preço e duração.
Agente Viagem → Agente Hotéis: O Agente Viagem envia a parte de hospedagem. O Agente Hotéis, utilizando Nova Act, consulta hotéis em Paris e retorna as três opções principais com nomes, preços e notas resumidas.
Resultado final para o usuário: O Agente Viagem combina ambas as respostas e retorna um resumo claro incluindo:
- O voo recomendado
- O hotel recomendado
- Data de check-in e check-out
- Preços totais
- Uma pergunta se deseja prosseguir com a reserva
Vantagens da Abordagem Multi-Agentes
Construir um planejador de viagens com três agentes pequenos e especializados provou ser muito mais fácil de gerenciar do que um único agente monolítico. Cada agente concentra-se em uma tarefa bem definida. Amazon Nova 2 Lite realiza o raciocínio necessário para mover o trabalho de uma etapa para a próxima. Amazon Nova Act cobre as partes sem APIs, como buscas de hotéis, sem exigir código de scraping manual.
O padrão de passagem de mensagens mantém tudo conectado mas ainda direto e compreensível. Essa arquitetura não se limita a planejamento de viagens. Qualquer tarefa que misture diferentes habilidades pode usar a mesma abordagem: deixe um agente planejar o trabalho, deixe os outros executarem as partes em que são especializados, e passe mensagens pequenas entre eles. O resultado é um sistema que muda e explica-se naturalmente.
Para experimentar essa implementação, o código completo e exemplos estão disponíveis no repositório Agent to Agent com Amazon Nova no GitHub.
Fonte
Agent-to-agent collaboration: Using Amazon Nova 2 Lite and Amazon Nova Act for multi-agent systems (https://aws.amazon.com/blogs/machine-learning/agent-to-agent-collaboration-using-amazon-nova-2-lite-and-amazon-nova-act-for-multi-agent-systems/)
Leave a Reply