Sebastian Gomez
Potencia tu agente con herramientas personalizadas
Notebook de la lección: https://github.com/seagomezar/ADK-Blog-Posts/blob/main/Lesson_2.ipynb
En esta segunda entrega extendemos el agente con una herramienta propia y reforzamos el flujo conversacional para que las respuestas sean útiles y consistentes. Además, conectamos las ideas del video sobre Sesión, Estado y Memoria, que dan soporte a conversaciones persistentes. 🙌
Panorama general- Añadir dependencias como
yfinancey repasar utilidades de ADK. - Crear un proyecto
app03y definir una herramienta propia (get_financial_context). - Combinar herramientas: búsqueda web + datos financieros en un mismo agente.
- Redactar instrucciones que guían el diálogo paso a paso.
- Probar el agente en
adk webe iterar rápido.
- Asegura
google-adkyyfinanceinstalados si estás fuera del entorno del curso. - Sobre credenciales: ADK lee
.envcuando ejecutasadk web/adk rundesde la carpeta adecuada. UsaGOOGLE_API_KEY(AI Studio) o variables Vertex AI. Si usas notebooks conload_env(), aclara que es un helper del curso y que en producción usarás.env. - Tip: crea un entorno virtual por proyecto (
python -m venv .venv && source .venv/bin/activate).
- Genera la app con scaffolding de ADK:
- Estructura:
app03/agent.py: lógica del agente..env: credenciales.__init__.py: organización del paquete.
get_financial_context consulta Yahoo Finance vía yfinance para devolver precio y variación porcentual de cada ticker.
from typing import Dict, Listimport yfinance as yf
def get_financial_context(tickers: List[str]) -> Dict[str, str]:
"""Obtiene precio y variación diaria de cada ticker."""
financial_data: Dict[str, str] = {}
for ticker_symbol in tickers:
try:
stock = yf.Ticker(ticker_symbol)
info = stock.info
price = info.get("currentPrice") or info.get("regularMarketPrice")
change_percent = info.get("regularMarketChangePercent")
if price is not None and change_percent is not None:
change_str = f"{change_percent * 100:+.2f}%"
financial_data[ticker_symbol] = f"${price:.2f} ({change_str})"else:
financial_data[ticker_symbol] = "Price data not available."except Exception:
financial_data[ticker_symbol] = "Invalid Ticker or Data Error"return financial_data
Claves del Financial Tool ✨
- Tipado explícito (
List[str],Dict[str, str]) → ADK genera el esquema automáticamente. - Docstring descriptivo → el agente entiende cuándo usar la herramienta.
- Errores controlados → evita que un ticker inválido rompa la conversación.
- Formato consistente → devuelve un diccionario fácil de leer.
Integramos google_search y get_financial_context en un mismo Agent y usamos instrucciones para orquestar el flujo:
root_agent = Agent(
name="ai_news_chat_assistant",
model="gemini-2.0-flash-live-001",
instruction="""...""",
tools=[google_search, get_financial_context],
)
Claridad en el flujo: primero pide cuántas noticias quiere la persona.
Uso forzado de herramientas: buscar titulares y luego enriquecer con datos de bolsa.
Formato obligatorio: lista numerada citando herramientas y fuentes.
Conversación guiada: tras responder, entrega el turno (“¿cuál te interesa?”).
Reglas estrictas: solo IA y empresas listadas en EE.UU.; rechazos corteses si está fuera de alcance.
- 2.5 Pruebas y flujo conversacional 🔁
Inicia la UI local:
- Desde carpeta padre:
adk web --reload_agentsy selecciona "app03". - O directo:
adk web --port 8000 --reload_agents app03 - En Windows, si ves
_make_subprocess_transport NotImplementedError, usa--no-reload. Detén conCtrl-C.
- Desde carpeta padre:
Guion sugerido:
- “Dame noticias de IA” → el agente pregunta cuántas notas quieres.
- “3” → devuelve tres titulares con contexto financiero.
- Elige una → amplía SOLO esa y vuelve a preguntar qué sigue.
Induce errores (tickers desconocidos, preguntas fuera de tema) para verificar reglas. ⚠️
📌 Nota sobre Google Search:
google_searchfunciona con modelos Gemini 2.- Si el modelo devuelve "Search suggestions", muéstralas en tu UI (política de Grounding). Más info: https://google.github.io/adk-docs/tools/built-in-tools/
- Nuevo tool: conecta otra API (sentimiento, datos macro, papers). Sigue tipado + docstring + manejo de errores.
- Refina instrucciones: pide preferencia de cantidad, agrega disclaimers financieros, incluye timestamps.
- Ensaya diálogo: mezcla industrias y prueba ramificaciones.
- Simula fallos: datos faltantes o desconexiones con mensajes claros.
- Guía de Tools de ADK: https://google.github.io/adk-docs/tools/
- Function Tools: https://google.github.io/adk-docs/tools/function-tools/
- yfinance en PyPI: https://pypi.org/project/yfinance/
- Documenta variantes (
app03, etc.) con fecha, prompts y resultados. - Incluye pruebas manuales en PRs para evidenciar el flujo conversacional.
- Mantén claves fuera del repo y rota API keys periódicamente.
- Si evolucionas a podcast, evalúa memoria persistente para recordar preferencias.
— Anterior lección ➜ https://www.sebastian-gomez.com/category/inteligencia-artificial/adk-clase-1-construye-tu-primer-agente-con-google-adk
Siguiente lección ➜ https://www.sebastian-gomez.com/category/inteligencia-artificial/adk-clase-3-construye-un-agente-investigador-en-segundo-plano
Este contenido se basa en el curso “Building Live Voice Agents with Google’s ADK!” de DeepLearning.AI (https://learn.deeplearning.ai/courses/building-live-voice-agents-with-googles-adk/). Este blog busca acercar material de ADK al español.
Sebastian Gomez
Creador de contenido principalmente acerca de tecnología.