
Clonar Código
git clone https://github.com/google-a2a/a2a-samples
cd a2a-samples/samples/java
Este projeto é um exemplo de implementação Java do protocolo Agent2Agent (A2A), fornecendo SDKs completos de cliente e servidor, juntamente com uma aplicação de demonstração de serviço de tradução alimentado por IA.
Arquitetura do Projeto
Este projeto usa uma arquitetura Maven multi-módulo, contendo os seguintes três módulos principais:
samples/java/
├── model/ # Modelos de Dados do Protocolo A2A
├── server/ # SDK do Servidor A2A & Serviço de Tradução
├── client/ # SDK do Cliente A2A & Código de Exemplo
└── pom.xml # Arquivo de Configuração Maven Principal
Detalhes dos Módulos
🎯 Módulo Model (model/)
Modelos de dados principais para o protocolo A2A, fornecendo estruturas de dados completas para JSON-RPC 2.0 e protocolo A2A:
- Modelos de Mensagem:
Message,Part,TextPart,Artifact - Modelos de Tarefa:
Task,TaskStatus,TaskState - Modelos de Agente:
AgentCard,AgentCapabilities,AgentSkill - Modelos JSON-RPC:
JSONRPCRequest,JSONRPCResponse,JSONRPCError - Modelos de Evento:
TaskStatusUpdateEvent,TaskArtifactUpdateEvent
🚀 Módulo Server (server/)
SDK do servidor A2A baseado em Spring Boot, integrado com framework Spring AI:
-
Componentes Principais:
A2AServer: Classe principal do servidor gerenciando comportamento do agenteA2AController: Controlador REST implementando endpoints do protocolo A2ATaskHandler: Interface de processamento de tarefasA2AServerConfiguration: Configuração do bot de tradução IA
-
Recursos Principais:
- Suporte completo ao JSON-RPC 2.0
- Publicação de cartão de agente (
/.well-known/agent-card) - Gerenciamento de tarefas (enviar, consultar, cancelar)
- Suporte a resposta em streaming (Server-Sent Events)
- Integração Spring AI suportando OpenAI e outros modelos
📱 Módulo Client (client/)
SDK cliente A2A Java puro com exemplos de cliente de tradução:
-
Componentes Principais:
A2AClient: Classe principal do cliente lidando com todas as operações A2AStreamingEventListener: Interface de ouvinte de eventos de streamingA2AClientException: Tratamento de exceções específicas do A2AA2AClientExample: Exemplo completo de cliente de tradução
-
Recursos Principais:
- Implementação de cliente JSON-RPC 2.0
- Descoberta de agente e consulta de capacidades
- Operações de tarefa síncronas/assíncronas
- Tratamento de resposta em streaming
- Pool de conexões e recuperação de erros
Implementação da Funcionalidade Principal
🤖 Serviço de Tradução IA
O projeto implementa um agente de tradução inteligente suportando tradução multilíngue:
Lógica de Tradução:
- Chinês → Inglês
- Inglês → Chinês
- Outras línguas → Inglês
Recursos Técnicos:
- Baseado em Spring AI ChatClient
- Suporta OpenAI, Azure OpenAI e outros modelos
- Tradução de linguagem natural consciente do contexto
- Respostas em streaming em tempo real
🔄 Implementação do Protocolo A2A
Implementação completa das especificações do protocolo A2A:
Operações Principais:
tasks/send: Enviar mensagens de tarefatasks/get: Consultar status da tarefatasks/cancel: Cancelar execução da tarefa
Recursos do Protocolo:
- Comunicação JSON-RPC 2.0
- Descoberta de capacidades do agente
- Rastreamento de status da tarefa
- Push de eventos em streaming
- Códigos de erro padronizados
📡 Mecanismos de Comunicação
Comunicação Síncrona:
- HTTP POST
/a2a- Requisições JSON-RPC padrão - HTTP GET
/.well-known/agent-card- Recuperação de informações do agente
Comunicação em Streaming:
- HTTP POST
/a2a/stream- Server-Sent Events - Atualizações de status de tarefa em tempo real
- Reconexão automática e recuperação de erros
Como Executar
Requisitos
- Java: 17 ou superior
Passo 1: Compilar o Projeto
Execute a compilação no diretório raiz do projeto:
cd samples/java
./mvnw clean install -DskipTests
Passo 2: Configurar Variáveis de Ambiente
Defina variáveis de ambiente relacionadas ao modelo IA (necessário para funcionalidade de tradução):
# Configuração OpenAI
export OPENAI_API_KEY="your-openai-api-key"
export OPENAI_BASE_URL="https://api.openai.com"
export OPENAI_CHAT_MODEL="gpt-4o"
# Ou Configuração GCP OpenAI
export OPENAI_API_KEY="your-gcp-api-key"
export OPENAI_BASE_URL="https://{location}-aiplatform.googleapis.com/v1/projects/{project_id}/locations/{location}/endpoints/openapi"
export OPENAI_CHAT_MODEL="gemini-2.5-pro-preview-05-06"
Configuração OpenRouter
export OPENAI_API_KEY="sk-or-v1-"
export OPENAI_BASE_URL="https://openrouter.ai/api"
export OPENAI_CHAT_MODEL="openai/gpt-4o-2024-11-20"
Preste atenção ao OPENAI_BASE_URL, não há /v1 na URL.
Passo 3: Iniciar o Servidor de Tradução
Inicie o servidor de tradução A2A:
cd server
../mvnw spring-boot:run
O servidor iniciará em http://localhost:8080, fornecendo os seguintes endpoints:
http://localhost:8080/.well-known/agent-card- Informações do agentehttp://localhost:8080/a2a- Endpoint do protocolo A2Ahttp://localhost:8080/a2a/stream- Endpoint de streaming
Validar o Cartão do Agente:
Passo 4: Executar o Cliente de Tradução
Em uma nova janela de terminal, execute o exemplo do cliente:
cd client
../mvnw exec:java -Dexec.mainClass="com.google.a2a.client.A2AClientExample"
Diagrama de Sequência
O seguinte diagrama de sequência ilustra o fluxo completo de interação da aplicação de exemplo A2A Java, baseado no A2AClientExample.java:
sequenceDiagram
participant Example as A2AClientExample
participant Client as A2AClient
participant Server as A2A Server<br/>(localhost:8080)
Note over Example,Server: Diagrama de Sequência do Exemplo A2A Java
%% 1. Initialize Client
Example->>Client: new A2AClient("http://localhost:8080")
activate Client
%% 2. Get Agent Card
Example->>Client: getAgentCard()
Client->>Server: GET /.well-known/agent-card
Server-->>Client: AgentCard (name, description, version, skills)
Client-->>Example: AgentCard
Note over Example: Imprimir informações do agente
%% 3. French to Chinese Translation
Example->>Client: sendTask(frenchToChineseParams)
Note right of Example: TextPart: "Bonjour le monde!<br/>Comment allez-vous?"
Client->>Server: POST /a2a<br/>JSON-RPC: tasks/send
Server-->>Client: Task (id, status, history)
Client-->>Example: JSONRPCResponse<Task>
Note over Example: Imprimir resultado da tradução
%% 4. Chinese to English Translation
Example->>Client: sendTask(chineseParams)
Note right of Example: TextPart: "你好,世界!<br/>欢迎使用AI翻译机器人。"
Client->>Server: POST /a2a<br/>JSON-RPC: tasks/send
Server-->>Client: Task (id, status, history)
Client-->>Example: JSONRPCResponse<Task>
Note over Example: Imprimir resultado da tradução
%% 5. Streaming Translation
Example->>Client: sendTaskStreaming(frenchParams, StreamingEventListener)
Note right of Example: TextPart: "Bonjour le monde!<br/>Comment allez-vous?"
Client->>Server: POST /a2a/stream<br/>Server-Sent Events
activate Server
loop Resposta em Streaming
Server-->>Client: SSE Event (progresso da tradução)
Client-->>Example: onEvent(event)
Note over Example: Imprimir eventos de tradução em tempo real
end
Server-->>Client: SSE Complete
deactivate Server
Client-->>Example: onComplete()
Note over Example: Tradução em streaming concluída
%% 6. Query Task Status
Example->>Client: getTask(queryParams)
Note right of Example: Consultar status da tarefa de tradução francesa
Client->>Server: POST /a2a<br/>JSON-RPC: tasks/get
Server-->>Client: Task (status atualizado)
Client-->>Example: JSONRPCResponse<Task>
Note over Example: Imprimir status da tarefa
%% 7. Send Task to be Canceled
Example->>Client: sendTask(cancelParams)
Note right of Example: TextPart: "Diese Übersetzung<br/>wird abgebrochen." (Alemão)
Client->>Server: POST /a2a<br/>JSON-RPC: tasks/send
Server-->>Client: Task (id, status)
Client-->>Example: JSONRPCResponse<Task>
%% 8. Cancel Task
Example->>Client: cancelTask(cancelTaskParams)
Client->>Server: POST /a2a<br/>JSON-RPC: tasks/cancel
Server-->>Client: Task (status cancelado)
Client-->>Example: JSONRPCResponse<Task>
Note over Example: Imprimir resultado do cancelamento
deactivate Client
Note over Example,Server: Execução do programa de exemplo concluída
Padrões de Interação Principais
O diagrama de sequência demonstra os seguintes padrões de interação principais:
- Inicialização do Cliente: Criando uma instância
A2AClientconectada ao servidor local - Descoberta do Agente: Recuperando informações do agente via endpoint
/.well-known/agent-card - Exemplos de Tradução Multilíngue:
- Tradução Francês → Chinês
- Tradução Chinês → Inglês
- Tradução em streaming Alemão → Inglês
- Gerenciamento de Tarefas:
- Consulta de status da tarefa
- Cancelamento da execução da tarefa
Mecanismos de Comunicação
- Tradução Síncrona: Usando endpoint
POST /a2acom requisições JSON-RPC - Tradução em Streaming: Usando endpoint
POST /a2a/streamcom Server-Sent Events (SSE) - Consultas de Status: Usando método
tasks/getpara verificar status de execução da tarefa - Cancelamento de Tarefa: Usando método
tasks/cancelpara cancelar tarefas em execução
Exemplos de Uso da API
Obter Informações do Agente
curl -X GET http://localhost:8080/.well-known/agent-card \
-H "Accept: application/json"
Enviar Tarefa de Tradução
curl -X POST http://localhost:8080/a2a \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": "request-1",
"method": "tasks/send",
"params": {
"id": "translation-task-1",
"message": {
"messageId": "msg-1",
"kind": "message",
"role": "user",
"parts": [
{
"kind": "text",
"text": "Hello, world!"
}
]
}
}
}'
Tradução em Streaming
curl -X POST http://localhost:8080/a2a/stream \
-H "Content-Type: application/json" \
-H "Accept: text/event-stream" \
-d '{
"jsonrpc": "2.0",
"id": "stream-request-1",
"method": "tasks/send",
"params": {
"id": "streaming-translation-task",
"message": {
"messageId": "stream-msg-1",
"kind": "message",
"role": "user",
"parts": [
{
"kind": "text",
"text": "Hello world!"
}
]
}
}
}'
Related Articles
Explore more content related to this topic
A2UI Introduction - Declarative UI Protocol for Agent-Driven Interfaces
Discover A2UI, the declarative UI protocol that enables AI agents to generate rich, interactive user interfaces. Learn how A2UI works, who it's for, how to use it, and see real-world examples from Google Opal, Gemini Enterprise, and Flutter GenUI SDK.
Agent Gateway Protocol (AGP): Practical Tutorial and Specification
Learn the Agent Gateway Protocol (AGP): what it is, problems it solves, core spec (capability announcements, intent payloads, routing and error codes), routing algorithm, and how to run a working simulation.
Integrating A2A Protocol - Intelligent Agent Communication Solution for BeeAI Framework
Using A2A protocol instead of ACP is a better choice for BeeAI, reducing protocol fragmentation and improving ecosystem integration.
A2A vs ACP Protocol Comparison Analysis Report
A2A (Agent2Agent Protocol) and ACP (Agent Communication Protocol) represent two mainstream technical approaches in AI multi-agent system communication: 'cross-platform interoperability' and 'local/edge autonomy' respectively. A2A, with its powerful cross-vendor interconnection capabilities and rich task collaboration mechanisms, has become the preferred choice for cloud-based and distributed multi-agent scenarios; while ACP, with its low-latency, local-first, cloud-independent characteristics, is suitable for privacy-sensitive, bandwidth-constrained, or edge computing environments. Both protocols have their own focus in protocol design, ecosystem construction, and standardization governance, and are expected to further converge in openness in the future. Developers are advised to choose the most suitable protocol stack based on actual business needs.
Building an A2A Currency Agent with LangGraph
This guide provides a detailed explanation of how to build an A2A-compliant agent using LangGraph and the Google Gemini model. We'll walk through the Currency Agent example from the A2A Python SDK, explaining each component, the flow of data, and how the A2A protocol facilitates agent interactions.