06-04-02 — Google Agent Development Kit (ADK)
TL;DR
O Google Agent Development Kit (ADK) é o framework oficial do Google para construir agentes com Gemini. Lançado em abril 2025, foi desenhado especificamente para multi-agent, suporta A2A protocol nativo, MCP client/server, e integra com Vertex AI para deploy e observabilidade. Para quem está no ecossistema Google Cloud, é o equivalente do AF 1.0 da Microsoft — mas em Python/Java, sem suporte .NET.
Arquitetura do ADK
O ADK é organizado em torno de três abstrações principais:
- Agent: unidade básica com model, tools e instruction
- Runner: executa o agente e gerencia o ciclo de vida das sessões
- Session Service: persiste estado entre invocações (in-memory, Firestore, Spanner)
from google.adk.agents import Agent
from google.adk.runners import Runner
from google.adk.sessions import InMemorySessionService
from google.adk.tools import google_search
import asyncio
# Agente simples com Gemini
agente_pesquisa = Agent(
name="pesquisador",
model="gemini-2.0-flash",
description="Pesquisa informações na web sobre qualquer tópico",
instruction="""Você é um pesquisador especializado.
Sempre cite fontes e seja objetivo nas respostas.
Foque em informações recentes e verificáveis.""",
tools=[google_search] # ferramenta nativa do Google
)
# Runner gerencia sessões e execução
session_service = InMemorySessionService()
runner = Runner(
agent=agente_pesquisa,
app_name="pesquisa-app",
session_service=session_service
)
async def main():
session = await session_service.create_session(
app_name="pesquisa-app",
user_id="usuario-joao"
)
from google.genai.types import Content, Part
message = Content(role="user", parts=[Part(text="Mercado de IA no Brasil 2026")])
async for event in runner.run_async(
user_id="usuario-joao",
session_id=session.id,
new_message=message
):
if event.is_final_response():
print(event.content.parts[0].text)
asyncio.run(main())
Multi-agent com ADK
ADK tem tipos de agentes especializados para orquestração:
from google.adk.agents import Agent, SequentialAgent, ParallelAgent, LoopAgent
# Agente especialista em clima
agente_clima = Agent(
name="especialista_clima",
model="gemini-2.0-flash",
description="Fornece dados meteorológicos precisos",
instruction="Você é um meteorologista. Forneça previsões detalhadas.",
tools=[google_search]
)
# Agente especialista em moda
agente_moda = Agent(
name="consultor_moda",
model="gemini-2.0-flash",
description="Recomenda roupas baseado no clima e contexto",
instruction="Você é um consultor de moda. Sugira roupas adequadas para o clima informado."
)
# Orquestrador sequencial: clima primeiro, moda depois
agente_orquestrador = SequentialAgent(
name="assistente_dia",
sub_agents=[agente_clima, agente_moda],
description="Consulta clima e recomenda roupas"
)
# Exemplo com ParallelAgent: executa múltiplos agentes em paralelo
agente_paralelo = ParallelAgent(
name="analista_multifontes",
sub_agents=[agente_clima, agente_noticias, agente_trafego],
description="Coleta dados de múltiplas fontes simultaneamente"
)
# LlmAgent como orquestrador inteligente: o LLM decide qual subagente chamar
from google.adk.agents import LlmAgent
orquestrador_llm = LlmAgent(
name="gerente",
model="gemini-2.0-flash",
sub_agents=[agente_clima, agente_moda, agente_noticias],
instruction="Você gerencia uma equipe de especialistas. Delegue conforme necessário."
)
Integração MCP
from google.adk.tools.mcp_tool import MCPToolset, StdioServerParameters
# Conectar a servidor MCP via stdio (ex: servidor de filesystem)
async def criar_agente_com_mcp():
tools, exit_stack = await MCPToolset.from_server(
connection_params=StdioServerParameters(
command="npx",
args=["-y", "@modelcontextprotocol/server-filesystem", "/dados/contratos"]
)
)
agente = Agent(
name="analista_documentos",
model="gemini-2.0-flash",
tools=tools, # todas as tools MCP disponíveis automaticamente
instruction="Analise documentos no filesystem corporativo."
)
return agente, exit_stack
A2A — interoperabilidade com outros frameworks
from google.adk.a2a import A2AServer, A2AClient
# Expor agente ADK como servidor A2A
# (outros frameworks como AF 1.0 podem descobrir e chamar este agente)
a2a_server = A2AServer(
agent=agente_pesquisa,
host="0.0.0.0",
port=8080
)
# Serve /.well-known/agent.json automaticamente
# Consumir agente remoto via A2A (ex: agente AF 1.0 da Microsoft)
client = A2AClient("https://agente-microsoft.empresa.com/.well-known/agent.json")
resultado = await client.send_task("Analise contratos Q1 2026")
Deploy no Vertex AI
from google.cloud import aiplatform
from google.adk.deploy import VertexAIDeployment
# Deploy direto para Vertex AI Agent Engine
deployment = VertexAIDeployment(
agent=agente_orquestrador,
project="meu-projeto-gcp",
location="us-central1"
)
deployed_agent = await deployment.deploy(
display_name="Assistente Empresarial v1",
machine_type="n1-standard-4"
)
print(f"Agent URL: {deployed_agent.resource_name}")
ADK vs AF 1.0 para stack Microsoft: Se seu cliente roda Azure e .NET, o AF 1.0 é a escolha natural. O ADK brilha quando a infraestrutura é Google Cloud (Vertex AI, Firestore, BigQuery) e o modelo principal é Gemini. Para ambientes híbridos, A2A permite que os dois coexistam.
Ferramentas nativas do Google no ADK
| Tool | O que faz |
|---|---|
google_search | Busca na web via Google Search |
code_execution | Executa código Python no sandbox |
vertex_ai_search | Busca em corpus indexado no Vertex AI |
bigquery_tool | Consultas SQL no BigQuery |
gmail_tool | Leitura/envio de emails via Gmail API |
Como isso se conecta
- 06-03-04 AF 1.0: A2A — ADK e AF 1.0 se comunicam via A2A protocol; são interoperáveis
- Módulo 07 (MCP/A2A) — ADK implementa ambos os protocolos de interoperabilidade
- 06-04-03 Decision matrix — ADK é a opção Google Cloud na matriz de decisão
- Google Vertex AI — plataforma de deploy para agentes ADK em produção