Potencia tu agente con herramientas personalizadas
Oct 16, 2025

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 yfinance y repasar utilidades de ADK.
  • Crear un proyecto app03 y 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 web e iterar rápido.

lesson2_flow.svg2.1 Preparativos iniciales 🔧
  • Asegura google-adk y yfinance instalados si estás fuera del entorno del curso.
  • Sobre credenciales: ADK lee .env cuando ejecutas adk web/adk run desde la carpeta adecuada. Usa GOOGLE_API_KEY (AI Studio) o variables Vertex AI. Si usas notebooks con load_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).
2.2 Configuración del proyecto 🚀
  • Genera la app con scaffolding de ADK:
  • Estructura:app03/agent.py: lógica del agente..env: credenciales.__init__.py: organización del paquete.
2.3 Construyendo un Function Tool a medida 💼

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.
2.4 Instrucciones del agente principal 🧠

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_agents y selecciona "app03".O directo: adk web --port 8000 --reload_agents app03En Windows, si ves _make_subprocess_transport NotImplementedError, usa --no-reload. Detén con Ctrl-C.
  • 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_search funciona 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/
🎯 2.6 Desafíos propuestos
  • 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.
2.7 Recursos y referencias 📚
  • 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/
Buenas prácticas y próximos pasos ✅
  • 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

Sebastian Gomez

Creador de contenido principalmente acerca de tecnología.

Leave a Reply

0 Comments

Advertisements

Related Posts

Categorias