Use o protocolo A2A na comunicação com os agentes de IA

Autores

Vanna Winland

AI Advocate & Technology Writer

O A2A, ou protocolo Agent2Agent, é um padrão aberto que permite a comunicação estruturada entre agentes de IA, clientes e ferramentas. Neste tutorial, você pode construir um sistema de agentes em que um cliente de chat processa as consultas do usuário e as envia para um agente de IA executado em um servidor compatível com o A2A.

A maioria das aplicações de IA agêntica implementa comunicação personalizada entre componentes (por exemplo, o ChatChain do ChatDev), dificultando a reutilização do mesmo agente em diferentes aplicações ou a integração de ferramentas externas. Essa falta de padronização impede a interoperabilidade e limita o desenvolvimento de um ecossistema de agentes mais amplo.

A A2A soluciona essa limitação separando a camada de comunicação da lógica do agente por meio de um protocolo padronizado criado em HTTP, JSON-RPC 2.0 e eventos enviados pelo servidor (SSE). Essa separação permite que os agentes colaborem com outros agentes, atendam às solicitações dos clientes e acessem ferramentas externas sem um código de integração personalizado.

O A2A é compatível com arquiteturas descentralizadas que permitem que as equipes evoluam seus sistemas de IA de forma incremental, sem quebrar o código do cliente. As equipes podem atualizar ferramentas, trocar modelos ou modificar o comportamento dos agentes enquanto mantêm uma interface consistente em fluxos de trabalho complexos.

Os agentes trocam informações em mensagens estruturadas no formato JSON-RPC, que incluem metadados que enriquecem as interações dos agentes com clareza e consistência. Cada servidor A2A expõe um AgentCard em um endpoint conhecido (.well-known/agent-card.json), que descreve os recursos do agente como dados JSON estruturados. Assim, ele permite que os clientes descubram dinamicamente o que um agente pode fazer, semelhante a como a documentação das APIs descreve os endpoints disponíveis.

Acompanhe para criar e executar um sistema de agentes A2A e ganhar experiência prática com:

  • BeeAI: um framework agêntico de código aberto para a criação de agentes de IA.
  • Protocolo A2A: um protocolo de comunicação padronizado para interoperabilidade de agentes.
  • Ollama: uma ferramenta para executar grandes modelos de linguagem (LLMs) localmente.
  • Ferramentas de agentes: Recursos especializados, incluindo pesquisa na web (DuckDuckGo), dados meteorológicos (OpenMeteo), acesso à Wikipedia (WikipediaTool) e raciocínio (ThinkTool)

Observação: se você já trabalhou com o ACP (Agent Communication Protocol), reconhece as semelhanças. O ACP, originalmente desenvolvido pelo BeeAI da IBM, uniu forças com o Google A2A sob a Linux Foundation. O BeeAI agora usa adaptadores A2A (A2AServer e A2AAgent) para fornecer comunicação compatível com A2A. O A2A também trabalha ao lado do MCP (Model Context Protocol) para permitir que os agentes interajam com fontes de dados e ferramentas, criando ecossistemas de agentes interoperáveis.

Como funciona o sistema de chat do A2A

Este projeto demonstra como o A2A permite uma separação clara entre a interface do cliente e a lógica do agente.

O fluxo de trabalho segue esta sequência:

  1. Entrada do usuário: o cliente captura a entrada do usuário por meio da interface do terminal.
  2. Solicitação A2A: o cliente formata a entrada como uma carga útil de mensagem JSON-RPC e a envia para o servidor do agente.
  3. Processamento de agentes: o servidor encaminha a solicitação para oRequirementAgent , que analisa a tarefa e executa as ferramentas apropriadas conforme a necessidade.
  4. Resposta A2A: o servidor retorna a resposta do agente como dados estruturados no formato JSON-RPC, transmitindo os resultados em tempo real à medida que são gerados.
  5. Exibição: o cliente extrai e exibe o texto da resposta no terminal.

Esse fluxo de trabalho demonstra um padrão reutilizável aplicável a casos de uso que exigem comunicação estruturada entre cliente e agente, como chatbots, sistemas de automação de tarefas, agentes de suporte ao cliente e assistentes de pesquisa com orquestração de ferramentas.

Agente A2A

Este projeto usa um único agente de IA com vários recursos de ferramentas. Em sistemas mais complexos, você pode implementar vários agentes especializados, cada um focado em domínios ou tarefas específicas.

RequirementAgent (BeeAI): um agente declarativo que seleciona e coordena dinamicamente várias ferramentas com base na solicitação do usuário. Ele usa:

  • ThinkTool para raciocínio e operações lógicas
  • DuckDuckGoSearchTool para buscas na web
  • OpenMeteoTool  para dados meteorológicos
  • WikipediaTool para recuperação de informações

O servidor A2A

O servidor A2A (beeai-a2a-server/beeai_chat_server.py ) expõe a funcionalidade do agente por meio de uma API HTTP. Lida com três responsabilidades principais:

  1. inicialização do LLM: carrega um modelo de idioma local por meio do Ollama
llm = ChatModel.from_name(os.environ.get(“BEEAI_MODEL”, “ollama:granite3.3:8b”))

 

2. Configuração de agentes: cria um RequirementAgent com ferramentas e memória para lidar com o ciclo de vida dos agentes

    agent = RequirementAgent(
        llm=llm,
        tools=[ThinkTool(), DuckDuckGoSearchTool(), OpenMeteoTool(), WikipediaTool()],
        memory=UnconstrainedMemory(),
        description=”An agent that can search the web, check the weather, and think through problems step-by-step.”,

 

3. Configuração do servidor: expõe o agente por meio de endpoint HTTP compatível com A2A

A2AServer(
    config=A2AServerConfig(port=int(os.environ.get(“A2A_PORT”, 9999))),
    memory_manager=LRUMemoryManager(maxsize=100)
).register(agent).serve()

 

O servidor expõe automaticamente um AgentCard em /.well-known/agent-card.json que descreve os recursos dos agentes e ajuda a validar as configurações dos agentes.

O cliente A2A

O cliente A2A (beeai-a2a-client/beeai_chat_client.py ) fornece a interface do usuário e lida com a comunicação com o servidor usando o A2A SDK e a biblioteca assíncrona do Python para o processamento de mensagens assíncronas.

Configuração de conexão: cria um adaptador de cliente A2A

agent = A2AAgent(
    url=os.environ.get(“BEEAI_AGENT_URL”, “http://127.0.0.1:9999”),
    memory=UnconstrainedMemory()
)

Ourl o parâmetro especifica o endpoint do servidor compatível com A2A (padrão:http://127.0.0.1:9999 ). Omemory o parâmetro armazena o histórico de conversas localmente, permitindo que o cliente mantenha o contexto durante as interações e é compatível com tarefas de longa duração.

Troca de mensagens: envia prompts assíncronos e processa respostas:

for prompt in reader:
    response = await agent.run(prompt)
    # Extract and display response text

OA2AAgent é um adaptador do lado do cliente que abstrai os detalhes da comunicação JSON-RPC. Não é um agente autônomo: ele simplesmente converte a entrada do usuário em mensagens compatíveis com A2A e lida com as respostas do servidor, permitindo a troca de dados e a observabilidade sem dificuldades.

Pré-requisitos para executar este projeto

Requisitos do Sistema

Estes são os requisitos do sistema para executar este projeto:

  • Sistema operacional: macOS, Linux ou Windows
  • Memória (RAM): >= 8 GB (recomendado: 16 GB ou mais para executar LLMs locais)
  • Espaço em disco: >= 5 GB de espaço livre (recomendado: 10 GB ou mais para acomodar o ambiente do Python e os modelos locais)
  • Versão do Python: >= 3.11

Requisitos de ferramentas e provedores

Antes de começar, aqui está uma visão geral das ferramentas necessárias para este projeto:

  • BeeAI: um kit de desenvolvimento de agentes de código aberto para a criação de agentes de IA. O BeeAI é compatível com vários provedores de LLMs, incluindo Ollama (usado neste tutorial), OpenAI e Anthropic.
  • Ollama: para executar LLMs locais para alimentar o agente de IA.
  • Protocolo A2A: integrado ao framework BeeAI para permitir comunicação estruturada entre o cliente e o servidor.
  • Terminal ou IDE: um terminal ou IDE semelhante ao Visual Studio Code (recomendado para gerenciar vários terminais e visualizar logs).
  • Ambiente virtual do Python: para isolar dependências para o cliente e o servidor.

Requisitos do provedor de LLMs

Esse projeto usa o Ollama como provedor de modelos para o agente de IA. Siga estas etapas para configurar o Ollama:

  1. Baixe e instale o Ollama:
    -     Acesse Ollama e instale a aplicação para seu sistema operacional
  2. Inicie o servidor Ollama 
    -   Abra um terminal e execute:
    ollama serve
  3. Use o modelo padrão (requer aproximadamente 5 GB de espaço em disco):

    ollama pull granite3.3:8b

Observação: você pode usar qualquer modelo compatível com o Ollama configurando aBEEAI_MODEL variável de ambiente. Verifique a biblioteca de modelos Ollama para obter modelos disponíveis e seus tamanhos.

Etapas

Etapa 1. Clone o repositório do GitHub

Para executar esse projeto, clone o repositório do GitHub usando https://github.com/IBM/ibmdotcom-tutorials.git como a URL HTTPS. Para ver etapas detalhadas sobre como clonar um repositório, consulte a documentação do GitHub.

Este tutorial pode ser encontrado dentro do diretório de projetos do repo.

Dentro de um terminal, navegue até o diretório deste tutorial:

cd docs/tutorials/projects/a2a_tutorial

Etapa 2. Configure o ambiente de desenvolvimento

Este projeto exige dois scripts Python separados para execução simultânea, um para o servidor e o outro para o cliente. Você precisa abrir duas janelas ou guias de terminal.

Mantenha seu terminal atual aberto e, em seguida, abra um segundo terminal e certifique-se de que ambos sejam navegados para o diretório de projeto correto (oa2a_tutorial diretório raiz).

Usando um IDE?

Se você estiver usando um IDE como o Visual Studio Code, você pode usar a funcionalidade Dividir terminal para gerenciar vários terminais lado a lado.

Caso contrário, abra duas janelas de terminal independentes e navegue até o diretório do projeto.

Etapa 3. Crie e ative ambientes virtuais

Os ambientes virtuais ajudam a deixar as dependências separadas e com manutenção. Para manter as dependências do servidor e do cliente separadas, crie um ambiente virtual para cada componente.

Para o servidor:

Navegue até obeeai-a2a-server diretório:

cd beeai-a2a-server

Crie um ambiente virtual com o Python 3.11:

python3.11 -m venv venv

Ative o ambiente virtual:

source venv/bin/activate

Observação para usuários do Windows: use venv\Scripts\activate para ativar o ambiente virtual.

Para o cliente:

Navegue até obeeai-a2a-client diretório:

cd beeai-a2a-client

Crie e ative um ambiente virtual:

python3.11 -m venv venv
source venv/bin/activate

Etapa 4. Instale dependências

Instale as dependências necessárias para cada componente executando este código em cada terminal:

pip install -r requirements.txt

Você pode executarpip freeze no terminal para verificar se o ambiente está atualizado com as dependências.

Etapa 5. Inicie o servidor do agente A2A

No primeiro terminal, inicie o servidor do agente A2A:

python beeai_chat_server.py

Você deverá ver:

INFO:     Started server process [88159]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://0.0.0.0:9999 (Press CTRL+C to quit)

O servidor agora está atendendo às solicitações recebidas da aplicação do cliente, pronto para atender à comunicação entre agentes.

Etapa 6. Inicie o cliente A2A

No outro terminal, inicie o cliente A2A:  

python beeai_chat_client.py

Isso deve solicitar uma entrada de sua parte:

Type your message (Ctrl+C to exit):
You:

Etapa 7. Interaja com o agente

Digite uma mensagem no terminal do cliente e pressioneEnter . O agente processa sua consulta e responderá:

You: What is the capital of France?
Agent 🤖 : The capital of France is Paris.

No terminal do servidor, é possível ver os logs do protocolo A2A mostrando a comunicação com notificações por push:

INFO:     127.0.0.1:49292 - “GET /.well-known/agent-card.json HTTP/1.1” 200 OK
INFO:     127.0.0.1:49294 - “POST / HTTP/1.1” 200 OK

A primeira solicitação recupera o AgentCard que descreve os recursos do agente. A segunda solicitação envia sua mensagem como umTextPart (uma unidade de conteúdo de texto na mensagem A2A) e recebe a resposta.

Observação: as saídas dos LLMs são probabilísticas e podem variar cada vez que você executa o fluxo de trabalho, mesmo com a mesma entrada.

Experimente consultas diferentes

Experimente com diferentes tipos de consultas para testar as várias ferramentas do agente:

  • Pesquisa na web: "Pesquise notícias recentes sobre inteligência artificial"
  • Dados meteorológicos: "Como está o clima em Tóquio?"
  • Wikipedia: “Fale-me sobre computação quântica”
  • Raciocínio: "Quais são as três razões pelas quais o céu é azul?"

Veja o AgentCard

Navegue até https://0.0.0.0:9999/.well-known/agent-card.json no seu navegador para visualizar oRequirementAgent do AgentCard.

{
    “capabilities”: {
        “streaming”: true
    },
    “defaultInputModes”: [
        “text”
    ],
    “defaultOutputModes”: [
        “text”
    ],
    “description”: “An agent that can search the web, check the weather, and think through problems step-by-step.”,
    “name”: “RequirementAgent”,
    “preferredTransport”: “JSONRPC”,
    “protocolVersion”: “0.3.0”,
    “skills”: [
        {
            “description”: “An agent that can search the web, check the weather, and think through problems step-by-step.”,
            “id”: “RequirementAgent”,
            “name”: “RequirementAgent”,
            “tags”: []
        }
    ],
    “url”: “http://localhost:9999”,
    “version”: “1.0.0”
}

Este documento JSON descreve:

  • O nome do agente (RequirementAgent) e uma breve descrição de seus recursos.
  • Os protocolos de comunicação e formatos de mensagem compatíveis
  • Quaisquer requisitos ou restrições

Esse AgentCard permite que qualquer cliente em conformidade com o A2A descubra e interaja com o agente sem conhecimento prévio dos detalhes de implementação.

Conclusão

Neste tutorial, você criou um sistema de chat usando um servidor de reclamações A2A que expôs uma interface estruturada para comunicação entre cliente e agente. Ao separar a camada de mensagens da lógica interna, o protocolo Agent2Agent permite que as equipes atualizem os recursos do agente, troquem modelos ou modifiquem as configurações de ferramentas sem alterar o código do cliente. Essa flexibilidade é especialmente valiosa ao coordenar tarefas que exigem entradas, acompanhar o status das tarefas ou tratar cada operação como uma unidade discreta de trabalho.

O A2A funciona definindo um formato de mensagem comum que qualquer componente compatível pode entender, permitindo que agentes autônomos colaborem com outros agentes. A especificação do protocolo define como as mensagens são estruturadas no formato JSON-RPC e enriquecidas com metadados para garantir consistência e clareza entre as interações.

Este tutorial baseia-se nos exemplos básicos fornecidos pelo repositório de amostras A2A. Para mais informações sobre a implementação original, consulte o arquivo readme no repositório, que traz mais contexto e exemplos para a criação de sistemas em conformidade com o A2A.

Para implementações no mundo real, os servidores A2A podem implementar mecanismos de autenticação para proteger os endpoints dos agentes, usar eventos enviados pelo servidor para transmitir respostas e escalar para lidar com fluxos de trabalho de produção. Seguindo esse fluxo de trabalho, você viu como um cliente de linha de comando pode interagir com um agente de IA por meio de um protocolo padronizado, permitindo que o agente coordene várias ferramentas e forneça respostas contextuais. Essa abordagem demonstra o poder do A2A para permitir sistemas de IA sustentáveis, escaláveis e flexíveis.

Desligamento do sistema

Quando você terminar de experimentar o sistema, siga estas etapas para encerrar corretamente todos os componentes em execução:

Interrompa todos os servidores em execução

Em cada janela do terminal, pressione Ctrl+C para interromper o processo de execução.

Você deverá ver a saída como:

INFO:     Shutting down
INFO:     Finished server process

Se o servidor travar durante um desligamento

Se o servidor não responder ou travar ao ser desligado, você poderá pará-lo à força:

Encontre a ID do processo (PID):

ps aux | grep python

Identifique a PID do processo que você está tentando interromper.

Encerre o processo:

kill -9 <PID>

repita esse processo para cada servidor, se necessário.

É isso. Você executou com sucesso um sistema de chat completo em conformidade com o A2A.

Soluções relacionadas
Agentes de IA para empresas

Crie, implemente e gerencie assistentes e agentes de IA potentes que automatizam fluxos de trabalho e processos com a IA generativa.

    Explore o watsonx Orchestrate
    Soluções de agentes de IA da IBM

    Construa o futuro do seu negócio com soluções de IA em que você pode confiar.

    Explore soluções de agentes de IA
    Serviços de IA do IBM® Consulting

    Os serviços de IA da IBM Consulting ajudam a reinventar a forma como as empresas trabalham com IA para gerar transformação.

    Explore os serviços de inteligência artificial
    Dê o próximo passo

    Se você optar por personalizar aplicativos e habilidades criados previamente ou criar e implementar serviços agênticos personalizados usando um estúdio de IA, a plataforma IBM watsonx tem aquilo de que você precisa.

    Explore o watsonx Orchestrate Explore o watsonx.ai