Configurei o ambiente instalando o ADK, o SDK da Vertex AI para Python e o máximo de dependências. Em seguida, implementei duas ferramentas externas: uma para consultar dados/hora e outra para obter a previsão do tempo. Criei um agente com nome, descrição e instruções claras, orientando-o a usar essas ferramentas conforme a intenção da pergunta. Associei as ferramentas ao agente e realizei testes locais com sessão em memória, validando cenários de sucesso e erro. Por fim, preparei os requisitos do projeto e fiz o deploy do agente no Vertex AI Agent Engine, verificando o funcionamento e os logs de operação no ambiente da Vertex AI
configuração em notebook:
!pip install -U google-adk google-genai google-cloud-aiplatform requests
2) Configurar ambiente
import os
os.environ["GOOGLE_CLOUD_PROJECT"] = "seu-projeto"
os.environ["GOOGLE_CLOUD_LOCATION"] = "us-central1"
os.environ["GOOGLE_GENAI_USE_VERTEXAI"] = "true"
3) Criar como ferramentas
Ferramenta 1: dados/hora
from datetime import datetime
from zoneinfo import ZoneInfo
def get_current_time(city: str) -> dict:
timezones = {
"São Paulo": "America/Sao_Paulo",
"Lisboa": "Europe/Lisbon",
"Nova York": "America/New_York",
}
if city not in timezones:
return {"success": False, "error": f"Fuso horário para {city} não encontrado."}
now = datetime.now(ZoneInfo(timezones[city])).isoformat()
return {"success": True, "city": city, "timestamp": now}
Ferramenta 2: previsão do tempo
import requests
def get_weather(city: str) -> dict:
cities = {
"São Paulo": (-23.5505, -46.6333),
"Lisboa": (38.7223, -9.1393),
"Nova York": (40.7128, -74.0060),
}
if city not in cities:
return {"success": False, "error": f"Cidade {city} não encontrada."}
lat, lon = cities[city]
url = (
"https://api.open-meteo.com/v1/forecast"
f"?latitude={lat}&longitude={lon}¤t=temperature_2m,relative_humidity_2m,wind_speed_10m"
)
try:
resp = requests.get(url, timeout=20)
resp.raise_for_status()
data = resp.json()["current"]
return {
"success": True,
"city": city,
"temperature": data.get("temperature_2m"),
"humidity": data.get("relative_humidity_2m"),
"wind_speed": data.get("wind_speed_10m"),
}
except Exception as e:
return {"success": False, "error": str(e)}
4) Criar o agente
from google.adk.agents import Agent
root_agent = Agent(
name="assistente_tempo_hora",
model="gemini-2.0-flash",
description="Agente que informa data/hora e clima usando ferramentas externas.",
instruction=(
"Você é um assistente objetivo. "
"Use a tool de horário para perguntas sobre hora/data. "
"Use a tool de clima para perguntas sobre previsão/tempo. "
"Se a cidade não existir ou a tool falhar, explique o erro de forma clara."
),
tools=[get_current_time, get_weather],
)
5) Rodar localmente com sessão em memória
from google.adk.runners import InMemoryRunner
runner = InMemoryRunner(agent=root_agent)
session = runner.create_session(user_id="usuario_teste")
6) Fazer testes
response = runner.run(
session=session,
user_message="Qual a hora atual em São Paulo?"
)
print(response)
Cenário de erro
response = runner.run(
session=session,
user_message="Qual a hora em Atlantis?"
)
print(response)