Visão Geral

O Agent-to-Agent Protocol (A2A) é um protocolo padronizado desenvolvido pelo Google para permitir comunicação estruturada entre agentes de IA independentes. Utilizando JSON-RPC 2.0 sobre HTTP/HTTPS, o A2A facilita a interoperabilidade entre diferentes sistemas de agentes, permitindo que trabalhem em conjunto de forma eficiente.

Protocolo Oficial: O A2A é mantido pelo Google e está disponível em google.github.io/A2A. O código fonte pode ser encontrado no repositório GitHub.

Características Principais

JSON-RPC 2.0

Protocolo baseado em JSON-RPC 2.0 para comunicação estruturada e padronizada

Multi-turn

Suporte nativo a conversas com múltiplos turnos usando contextId

Upload de Arquivos

Transferência de arquivos via Base64 com suporte a diferentes tipos MIME

Streaming

Comunicação assíncrona via Server-Sent Events (SSE) para respostas em tempo real

Visão Geral Rápida

Ponto-chaveResumo
ObjetivoPadronizar a conversa entre agentes de IA (independentemente do fornecedor) usando JSON-RPC 2.0
Formato baseCada chamada é um objeto JSON com jsonrpc:"2.0", id, method e params
Métodos principaismessage/sendmessage/streamtasks/gettasks/canceltasks/pushNotificationConfig/{set|get}tasks/resubscribeagent/authenticatedExtendedCard
IDs obrigatóriosmessageId (UUID v4) dentro de cada mensagem e id/taskId/callId para rastrear requisição e tarefa
Recursos de 1ª classeConversas multi-turn (contextId) • Upload de arquivos (parts[] tipo file com Base64 + MIME) • Notificações Push via pushNotificationConfig • Autenticação por x-api-key ou Authorization: Bearer
Ciclo de vida da tarefasubmitted → working → completed / failed / canceled, relatado em result.status.state

Métodos do Protocolo

message/send (HTTP Síncrono)

O método principal para enviar mensagens de forma síncrona.

message/stream (SSE Assíncrono)

Para comunicação em tempo real com streaming de respostas.

Exemplos de Implementação

cURL

curl -X POST http://localhost:8000/api/v1/a2a/AGENT-ID \
  -H 'Content-Type: application/json' \
  -H 'x-api-key: YOUR_API_KEY' \
  -d '{
    "jsonrpc": "2.0",
    "id": "req-001",
    "method": "message/send",
    "params": {
      "message": {
        "role": "user",
        "parts": [{"type": "text", "text": "Olá!"}],
        "messageId": "6dbc13b5-bd57-4c2b-b503-24e381b6c8d6"
      }
    }
  }'

JavaScript / Fetch

const payload = {
  "jsonrpc": "2.0",
  "id": "req-001",
  "method": "message/send",
  "params": {
    "message": {
      "role": "user",
      "parts": [{"type": "text", "text": "Explique o protocolo A2A"}],
      "messageId": crypto.randomUUID()
    }
  }
};

const response = await fetch('/api/v1/a2a/AGENT-ID', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'x-api-key': 'YOUR_API_KEY'
  },
  body: JSON.stringify(payload)
});

const result = await response.json();
console.log(result);

Python

import requests
import uuid
import json

payload = {
    "jsonrpc": "2.0",
    "id": str(uuid.uuid4()),
    "method": "message/send",
    "params": {
        "message": {
            "role": "user",
            "parts": [{"type": "text", "text": "Explique o protocolo A2A"}],
            "messageId": str(uuid.uuid4())
        }
    }
}

response = requests.post(
    "http://localhost:8000/api/v1/a2a/AGENT-ID",
    headers={"x-api-key": "YOUR_API_KEY"},
    json=payload
)

print(json.dumps(response.json(), indent=2, ensure_ascii=False))

Upload de Arquivos

O protocolo A2A suporta upload de arquivos através do tipo file em parts:

{
  "jsonrpc": "2.0",
  "id": "req-003",
  "method": "message/send",
  "params": {
    "message": {
      "role": "user",
      "parts": [
        {
          "type": "text",
          "text": "Analise esta imagem"
        },
        {
          "type": "file",
          "file": {
            "name": "imagem.png",
            "mimeType": "image/png",
            "bytes": "iVBORw0KGgoAAAANSUhEUgAAAAUA..." // Base64 sem cabeçalho
          }
        }
      ],
      "messageId": "uuid-here"
    }
  }
}

Formato Base64: Os arquivos devem ser codificados em Base64 sem o cabeçalho data:mime/type;base64,. Apenas o conteúdo Base64 puro deve ser incluído no campo bytes.

Conversas Multi-turn

Para manter contexto entre múltiplas mensagens, use o contextId:

Estados da Tarefa

O protocolo A2A define estados específicos para o ciclo de vida das tarefas:

EstadoDescrição
submittedTarefa foi recebida e está na fila
workingTarefa está sendo processada
completedTarefa foi concluída com sucesso
failedTarefa falhou durante o processamento
canceledTarefa foi cancelada pelo usuário

Autenticação

O protocolo suporta diferentes métodos de autenticação:

x-api-key: YOUR_API_KEY

Dicas e Boas Práticas

Recursos Adicionais


Com o protocolo A2A, você pode integrar rapidamente qualquer agente ou aplicação front-end ao ecossistema Evo AI, garantindo interoperabilidade e comunicação padronizada entre diferentes sistemas de agentes de IA.