Sebastian Gomez
Construye un agente investigador en segundo plano
Notebook de la lección: Lesson_3.ipynb
En esta tercera lección transformamos al asistente conversacional en un coordinador silencioso que investiga, compone un reporte y solo te habla dos veces. Reutilizamos herramientas de la lección anterior y agregamos persistencia de archivo para obtener un artefacto claro: un reporte Markdown.
Panorama general
- Reutilizar
get_financial_contexty sumar una herramienta para guardar Markdown. - Implementar el patrón Coordinator Dispatcher: ejecuta en segundo plano y responde dos veces.
- Forzar salidas estructuradas con una plantilla Markdown consistente.
- Probar la experiencia desde la ADK Web UI y visualizar el reporte.
3.1 Preparativos iniciales
- Asegura tener
google-adkyyfinancedisponibles. Usa un piso de versión reciente, por ejemplogoogle-adk>=1.16.0, y deja anotado con qué versión exacta probaste el notebook para que sea reproducible, por ejemplogoogle-adk==1.16.0.
Nota: la API de ADK avanza rápido. Si reproduces esto bastante después de la publicación, instala la versión más reciente y revisa el changelog por si cambió alguna firma.google-adk en PyPI antes de fijarlo.
- Credenciales: ADK lee
.envcuando corresadk weboadk run. Si usasload_env()en el notebook, úsalo solo como helper y mantén.envcomo fuente de verdad en entornos reales. - Trabaja en un entorno virtual para evitar conflictos entre lecciones.
Instala las dependencias:
pip install "google-adk>=1.16.0" yfinance3.2 Configuración del proyecto
Crea la app base con la estructura prevista:
app04/
agent.py # implementación del agente coordinador
.env # configuración sensible
__init__.py # paquete Python3.3 Patrón Coordinator Dispatcher
El reto: un agente que "lee en voz alta" cada resultado genera ruido y carga cognitiva.
La solución: separar la interacción en dos fases.
- Coordinación: reconoce la orden y avisa que empieza a trabajar.
- Ejecución silenciosa: busca, cruza datos y genera un reporte sin interrumpir.
3.4 Herramientas y persistencia
Reutilizamos get_financial_context para enriquecer titulares y añadimos save_news_to_markdown para persistir el reporte.
Advertencia sobre `yfinance`: get_financial_context depende de yfinance, que consume datos no oficiales de Yahoo Finance. Es una fuente conocida por romperse sin previo aviso cuando Yahoo cambia su API interna. Si las métricas dejan de llegar, actualiza yfinance o prevé un plan B en tu pipeline.
Notas de estado y persistencia:
- Las modificaciones a
tool_context.statedurante la ejecución quedan registradas por el framework y se persisten vía el runner; no implican almacenamiento externo a menos que configures servicios de memoria o artefactos. - La escritura de archivo en
save_news_to_markdowngenera el artefacto final de forma explícita.
3.5 Reportes estructurados
Plantilla recomendada, incrustada en las instrucciones del agente:
- Título, fecha y contexto.
- Lista numerada de 5 noticias con: titular, compañía y ticker, métrica financiera (
get_financial_context) y resumen breve.
3.6 Instrucciones avanzadas: agente coordinador
El agente cambia de "presentador" a "coordinador de investigación" con reglas estrictas.
Dos mensajes máximo:
- Inicio: "Ok, empiezo la investigación; dame un momento...".
- Cierre: "Listo, guardé el reporte en
ai_research_report.md".
Trabajo en segundo plano entre ambos mensajes: google_search, extraer tickers, get_financial_context, formatear según la plantilla y save_news_to_markdown. Sin resultados intermedios ni conversación adicional.
3.7 Pruebas en la Web UI
Ejecuta la UI:
# Desde la carpeta padre y luego selecciona "app04"
adk web
# O directo a la app
adk web --port 8000 app04En Windows, usa --no-reload si es necesario. Detén el proceso con Ctrl-C.
Guion sugerido:
- "Consígueme las últimas noticias de IA".
- El agente confirma el inicio y se queda en silencio.
- Llega el mensaje final confirmando
ai_research_report.md. - Abre el archivo y valida formato y contenido.
Cierra el proceso al terminar:
pkill -f "adk web"Opcional (memoria de largo plazo): para usar Vertex AI Memory Bank desde adk web o adk api_server, arranca con la bandera --memory_service_uri=agentengine://<agent_engine_id>.
Nota: consulta la guía de memoria en la documentación oficial de ADK: Memory en ADK.agentengine:// y el naming de Memory Bank / Agent Engine han estado en evolución; confirma el esquema vigente contra la documentación de 2026 antes de publicar.
3.8 Visualización del reporte
Desde el notebook:
from IPython.display import Markdown, display
with open("ai_research_report.md", encoding="utf-8") as f:
display(Markdown(f.read()))Buenas prácticas y próximos pasos
- Versiona
ai_research_report.mdsolo si necesitas auditar resultados; si no, ignóralo. - Parametriza la cantidad de noticias y el formato del reporte si apuntas a pipelines (podcast, boletines).
- Para producción, evalúa almacenamiento externo (buckets, bases de datos).
- Practica el mismo patrón con otras temáticas para afinar prompts y plantillas.
Ejercicios propuestos
- Añade una segunda herramienta de persistencia que guarde el reporte también en formato JSON, reutilizando el mismo estado del agente.
- Parametriza la cantidad de noticias (por ejemplo, 3 o 10) mediante una variable que el coordinador lea desde
tool_context.state. - Sustituye el tema "noticias de IA" por uno de tu interés y ajusta la plantilla del reporte para ese dominio.
Resumen en 3 puntos
- El patrón Coordinator Dispatcher separa la conversación del trabajo: el agente solo habla al iniciar y al terminar, y todo lo demás ocurre en silencio.
- Reutilizamos
get_financial_contexty sumamossave_news_to_markdownpara producir un artefacto Markdown claro y persistente. - Una plantilla estructurada en las instrucciones del agente garantiza reportes consistentes que puedes probar desde la ADK Web UI.
Eso es todo, espero que este post te sea de utilidad y lo puedas aplicar a algún proyecto que tengas en mente. Déjame un comentario si te sirvió, si quieres añadir alguna opinión o si tienes alguna duda, y recuerda que si te gustó también puedes compartirlo usando los links a las redes sociales aquí abajo.
Lección anterior: ADK clase 2: potencia tu agente con herramientas personalizadas
Siguiente lección: ADK clase 4: callbacks y guardrails para agentes confiables
Este contenido se basa en el curso "Building Live Voice Agents with Google's ADK!" de DeepLearning.AI (ver curso). Este blog busca acercar material de ADK al español.
Sebastian Gomez
Creador de contenido principalmente acerca de tecnología.