
Visão Geral do Projeto
Este é um exemplo simples de agente Hello World baseado no A2A (Agent2Agent) SDK. Este projeto demonstra como criar umA2A Protocolte inteligente básico que pode responder a mensagens de usuários e retornar saudações simples.
Descrição das Versões de Dependências
Requisitos de Versão do Python
- Python >= 3.10
Principais Pacotes de Dependências
| Nome do Pacote | Versão | Propósito |
|---|---|---|
a2a-sdk |
>= 0.2.5 | SDK principal A2A, fornece framework de agentes |
uvicorn |
>= 0.34.2 | Servidor ASGI, para executar aplicações web |
click |
>= 8.1.8 | Ferramenta de interface de linha de comando |
httpx |
>= 0.28.1 | Cliente HTTP assíncrono |
pydantic |
>= 2.11.4 | Validação e serialização de dados |
python-dotenv |
>= 1.1.0 | Gerenciamento de variáveis de ambiente |
langchain-google-genai |
>= 2.1.4 | Integração com Google Generative AI |
langgraph |
>= 0.4.1 | Framework de processamento de grafos de linguagem |
Estrutura do Projeto
helloworld/
├── __init__.py # Arquivo de inicialização do pacote
├── __main__.py # Ponto de entrada do programa principal
├── agent_executor.py # Implementação do executor de agente
├── test_client.py # Cliente de teste
├── pyproject.toml # Configuração do projeto e dependências
├── uv.lock # Arquivo de bloqueio de dependências
└── README.md # Documentação do projeto
Configuração do Ambiente
1. Instalar o Gerenciador de Pacotes UV
Se você ainda não instalou o UV, instale primeiro:
# macOS/Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
# ou use pip
pip install uv
2. Clonar o Projeto
git clone https://github.com/google-a2a/a2a-samples.git
cd a2a-samples/samples/python/agents/helloworld
3. Instalar Dependências
O UV instalará automaticamente todas as dependências de acordo com os arquivos pyproject.toml e uv.lock:
uv sync
Descrição da Arquitetura do Código
Componentes Principais
1. HelloWorldAgent (agent_executor.py)
class HelloWorldAgent:
"""Hello World Agent."""
async def invoke(self) -> str:
return 'Hello World'
2. HelloWorldAgentExecutor (agent_executor.py)
class HelloWorldAgentExecutor(AgentExecutor):
"""Implementação do executor de agente"""
async def execute(self, context: RequestContext, event_queue: EventQueue) -> None:
result = await self.agent.invoke()
event_queue.enqueue_event(new_agent_text_message(result))
3. Configuração do Servidor (__main__.py)
- Definir habilidades do agente (AgentSkill)
- Configurar cartões de agente públicos e estendidos (AgentCard)
- Configurar manipuladores de requisição e armazenamento de tarefas
- Iniciar servidor Uvicorn
Passos de Execução
1. Iniciar o Servidor do Agente
uv run .
O servidor iniciará em http://localhost:9999.
2. Executar o Cliente de Teste
Em outra janela do terminal:
uv run test_client.py
3. Verificar o Serviço
Você pode verificar se o serviço está funcionando corretamente das seguintes maneiras:
Acessar Informações do Cartão do Agente
curl http://localhost:9999/.well-known/agent.json
Acessar Cartão de Agente Estendido (Autenticação Necessária)
curl -H "Authorization: Bearer dummy-token-for-extended-card" \
http://localhost:9999/agent/authenticatedExtendedCard
Fluxograma do Projeto
Fluxo de Interação Cliente-Servidor A2A
sequenceDiagram
participant Client as A2A Client
participant Server as A2A Server
participant Agent as HelloWorldAgent
participant Queue as EventQueue
Note over Client,Server: 1. Fase de Descoberta de Serviço
Client->>Server: GET /.well-known/agent.json
Server-->>Client: Retornar cartão de agente público
Note over Client,Server: 2. Recuperação de Cartão Estendido (Opcional)
Client->>Server: GET /agent/authenticatedExtendedCard<br/>(with Bearer token)
Server-->>Client: Retornar cartão de agente estendido
Note over Client,Server: 3. Fluxo de Envio de Mensagem
Client->>Server: POST /agent/message<br/>{"message": {"role": "user", "parts": [...]}}
Note over Server,Queue: 4. Processamento Interno do Servidor
Server->>Agent: Chamar HelloWorldAgentExecutor.execute()
Agent->>Agent: Executar HelloWorldAgent.invoke()
Agent-->>Queue: Gerar mensagem "Hello World"
Queue-->>Server: Retornar resultado da fila de eventos
Note over Client,Server: 5. Retorno de Resposta
Server-->>Client: Retornar resposta da mensagem
Note over Client,Server: 6. Processamento de Mensagem em Streaming (Opcional)
Client->>Server: POST /agent/message/stream
Server-->>Client: Retornar chunks de mensagem em streaming
Server-->>Client: Chunk de Mensagem 1
Server-->>Client: Chunk de Mensagem 2
Server-->>Client: Marcador de Fim
Fluxograma da Arquitetura do Sistema
graph TB
subgraph "Ambiente Cliente"
C1[Inicialização do Cliente de Teste]
C2[A2ACardResolver<br/>Análise do Cartão do Agente]
C3[A2AClient<br/>Inicialização]
C4[Enviar Requisição de Mensagem]
C5[Processar Resposta]
end
subgraph "Comunicação de Rede"
N1[Requisição HTTP/HTTPS]
N2[Transferência de Dados JSON]
end
subgraph "Ambiente Servidor"
S1[A2AStarletteApplication<br/>Servidor Web]
S2[DefaultRequestHandler<br/>Manipulador de Requisição]
S3[HelloWorldAgentExecutor<br/>Executor de Agente]
S4[HelloWorldAgent<br/>Lógica Principal do Agente]
S5[InMemoryTaskStore<br/>Armazenamento de Tarefas]
S6[EventQueue<br/>Fila de Eventos]
end
subgraph "Configuração do Agente"
A1[Cartão de Agente Público<br/>Habilidades Básicas]
A2[Cartão de Agente Estendido<br/>Habilidades Aprimoradas]
end
%% Fluxo do Cliente
C1 --> C2
C2 --> C3
C3 --> C4
C4 --> C5
%% Comunicação de Rede
C4 --> N1
N1 --> N2
N2 --> S1
S1 --> N2
N2 --> C5
%% Fluxo do Servidor
S1 --> S2
S2 --> S3
S3 --> S4
S4 --> S6
S6 --> S3
S3 --> S2
S2 --> S1
%% Associação de Configuração
A1 --> S1
A2 --> S1
S2 --> S5
%% Estilização
style C3 fill:#e3f2fd
style S1 fill:#f3e5f5
style S4 fill:#e8f5e8
style N2 fill:#fff3e0
Endpoints da API
Endpoints Públicos
| Endpoint | Método | Descrição |
|---|---|---|
/.well-known/agent.json |
GET | Obter informações do cartão de agente público |
/agent/message |
POST | Enviar mensagem para o agente |
/agent/message/stream |
POST | Enviar mensagem em streaming |
Endpoints de Autenticação
| Endpoint | Método | Descrição | Autenticação |
|---|---|---|---|
/agent/authenticatedExtendedCard |
GET | Obter cartão de agente estendido | Bearer Token |
Configuração de Habilidades
Habilidades Básicas
- ID:
hello_world - Nome: Returns hello world
- Descrição: just returns hello world
- Exemplos: ['hi', 'hello world']
Habilidades Estendidas (Autenticação Necessária)
- ID:
super_hello_world - Nome: Returns a SUPER Hello World
- Descrição: A more enthusiastic greeting, only for authenticated users
- Exemplos: ['super hi', 'give me a super hello']
Solução de Problemas
Problemas Comuns
-
Porta Ocupada
# Verificar uso da porta lsof -i :9999 # Matar processo ocupante kill -9 <PID> -
Falha na Instalação de Dependências
# Limpar cache e reinstalar uv cache clean uv sync --reinstall -
Versão do Python Incompatível
# Verificar versão do Python python --version # Garantir que a versão >= 3.10
Desenvolvimento de Extensões
Adicionar Novas Habilidades
- Definir nova
AgentSkillem__main__.py - Modificar processamento de lógica em
agent_executor.py - Atualizar configuração do cartão do agente
Integração de API Externa
- Adicionar novas dependências em
pyproject.toml - Implementar chamadas de API em
agent_executor.py - Lidar com respostas assíncronas e erros
Resumo
Este exemplo Hello World demonstra o uso básico do A2A SDK, incluindo:
- Criação e configuração do servidor de agente
- Definição e gerenciamento de habilidades
- Comunicação cliente-servidor
- Autenticação e funcionalidade estendida
Através deste exemplo, você pode rapidamente entender como construir suas próprias aplicações de agentes inteligentes.
Related Articles
Explore more content related to this topic
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.
A2A Python Sample: Github Agent
How to use a2a-python to Create and Connect Github Agent with Google's Agent2Agent (A2A) Protocol
AP2 (Agent Payments Protocol) Usage Tutorial
"AP2 (Agent Payments Protocol) is a protocol for agent payments that supports both human-present and human-absent commerce flows. This tutorial provides detailed instructions on how to use the AP2 Python sample project."
A2A Protocol Specification (Python)
Comprehensive guide to the A2A protocol Python implementation specification, covering agent cards, message passing, task management, security authentication, and other core functionalities' data structures and object relationships, providing developers with a complete protocol implementation guide.
A2A Sample: Travel Planner OpenRouter
A2A implementation of Travel Planner with OpenRouter and Python a2a-sdk