Claude + MCP + ADK: Construyo un Agente IA con BigQuery que Sustituye al Data Analyst
El paradigma tradicional de Text-to-SQL unidireccional ha tocado techo en entornos corporativos debido a la falta de contexto sobre esquemas dinámicos, la ausencia de validación y la imposibilidad de generar visualizaciones o inferencias predictivas en tiempo real. En este artículo analizamos la construcción de un Agente Analítico Autónomo de grado empresarial integrando el Agent Development Kit (ADK) de Google Cloud, el Model Context Protocol (MCP) y modelos de frontera en Vertex AI para consultar petabytes en BigQuery, generar gráficos como artefactos nativos y ejecutar series temporales con BigQuery ML.
Matriz de Decisión Arquitectónica para Analítica con LLMs
Comparativa entre los tres enfoques predominantes para exponer datos analíticos a usuarios de negocio mediante interfaces conversacionales:
| Criterio | Text-to-SQL Básico | RAG sobre Documentos / BI | Agente ADK + BigQuery Toolset |
|---|---|---|---|
| Patrón de Consulta | Inyección directa de prompt a SQL | Recuperación semántica vectorial | Razonamiento dinámico multi-herramienta |
| Inspección de Esquema | Estática (hardcodeada en el prompt) | Parcial (fragmentos de catálogo) | Dinámica en runtime (list_tables, get_table_info) |
| Capacidad Visual | Ninguna (texto plano / markdown) | Precalculada (dashboards fijos) | Artefactos nativos bajo demanda (PNG/Matplotlib) |
| Forecasting / ML | No soportado | No soportado | Nativo con AI.FORECAST (BigQuery ML) |
| Seguridad / Auth | Credenciales estáticas | RBAC del vector store | IAM granular con Google Cloud ADC |
El error más costoso al implementar agentes sobre Data Warehouses analíticos (FinOps failure) consiste en otorgar al LLM la capacidad de ejecutar consultas libres sin descubrimiento previo de particiones ni límites de bytes escaneados. En BigQuery on-demand, una consulta desoptimizada sobre tablas con partición temporal puede escanear terabytes innecesarios en segundos.
Solución Técnica: Implementar un pipeline de herramientas en dos fases dentro del prompt del agente: (1) Obligatoriedad de inspeccionar metadatos y esquemas primero (get_table_info) y (2) Construcción de SQL validado con cláusulas WHERE sobre columnas de partición, GROUP BY eficientes y delegación de visualización a una herramienta de artefactos independiente.
Implementación del Agente Analítico con ADK y BigQuery Toolset
Estructura de producción modular en Python utilizando el SDK de adk, autenticación enterprise vía google.auth (ADC) y una herramienta personalizada para generar gráficos como artefactos visuales interactivos:
"""
Agente Analítico Autónomo con Google ADK y BigQuery
Orquestación code-first con autenticación ADC y generación de artefactos visuales.
"""
import os
import io
import base64
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import google.auth
from adk.agents import Agent
from adk.tools.bigquery import BigQueryToolset, BigQueryCredentialsConfig
from adk.context import ToolContext
# 1. Configuración de credenciales de Google Cloud (ADC)
credentials, project_id = google.auth.default(
scopes=["https://www.googleapis.com/auth/cloud-platform"]
)
bq_config = BigQueryCredentialsConfig(
project_id=project_id,
credentials=credentials
)
bq_toolset = BigQueryToolset(config=bq_config)
# 2. Herramienta personalizada para renderizado de artefactos gráficos
async def generate_chart(
chart_type: str,
labels: list,
values: list,
title: str,
x_label: str = "",
y_label: str = "",
tool_context: ToolContext = None
) -> dict:
"""Genera una gráfica (bar, pie, line) y la guarda como artefacto visible en chat."""
plt.figure(figsize=(9, 5))
plt.style.use('seaborn-v0_8-whitegrid' if 'seaborn-v0_8-whitegrid' in plt.style.available else 'default')
if chart_type == "bar":
plt.bar(labels, values, color="#36f097", edgecolor="#0c2520")
plt.xticks(rotation=45, ha='right')
elif chart_type == "pie":
plt.pie(values, labels=labels, autopct='%1.1f%%', startangle=140)
elif chart_type == "line":
plt.plot(labels, values, marker='o', color="#36f097", linewidth=2.5)
plt.xticks(rotation=45, ha='right')
plt.title(title, fontsize=14, fontweight='bold', pad=15)
if x_label and chart_type != "pie": plt.xlabel(x_label)
if y_label and chart_type != "pie": plt.ylabel(y_label)
plt.tight_layout()
buf = io.BytesIO()
plt.savefig(buf, format='png', dpi=150)
buf.seek(0)
img_bytes = buf.getvalue()
plt.close()
# Emisión del artefacto multimedia a la interfaz del chat
if tool_context and hasattr(tool_context, "save_artifact"):
await tool_context.save_artifact(
name="chart.png",
mime_type="image/png",
data=img_bytes
)
return {"status": "success", "message": f"Gráfico '{title}' generado y renderizado como artefacto."}
# 3. Inicialización del Agente Analítico con modelo de frontera en Vertex AI
agent_instructions = f"""
Eres un Data Analyst Senior experto en Google BigQuery.
Tu objetivo es responder consultas de negocio sobre el dataset de e-commerce en `{project_id}.ecommerce_data`.
REGLAS OBLIGATORIAS:
1. Inspecciona las tablas (`list_tables`) y su esquema (`get_table_info`) antes de construir consultas.
2. Escribe únicamente sentencias SELECT optimizadas; nunca ejecutes DDL ni mutaciones destructivas.
3. Para tendencias temporales o distribuciones, invoca automáticamente `generate_chart`.
4. Utiliza BigQuery ML (`forecast`) cuando el usuario solicite predicciones a futuro.
5. Responde siempre de forma clara, ejecutiva y en español con cifras normalizadas.
"""
root_agent = Agent(
model="gemini-2.5-flash", # O backend Claude 3.7 Sonnet en Vertex Model Garden
name="bigquery_data_analyst",
description="Agente autónomo para análisis de datos y forecasting en BigQuery.",
instructions=agent_instructions,
tools=[
bq_toolset.list_datasets,
bq_toolset.list_tables,
bq_toolset.get_table_info,
bq_toolset.execute_sql,
bq_toolset.forecast,
generate_chart
]
)
if __name__ == "__main__":
# Ejecución con interfaz web reactiva: adk web --port 8000
print("[✓] Agente inicializado con autenticación ADC y herramientas BigQuery.")
Patrones de Diseño: Vibecoding & Model Context Protocol (MCP)
El flujo de trabajo moderno de desarrollo con IA (Vibecoding) traslada el foco de la sintaxis repetitiva a la dirección arquitectónica de alto nivel. Sin embargo, para que un asistente de código como Copilot o Claude genere implementaciones libres de alucinaciones sobre frameworks emergentes como ADK, requiere acceso a la documentación viva de la API en tiempo real.
Configuración del Servidor MCP en VS Code
Al declarar el servidor MCP oficial de ADK Docs en mcp.config.json, el editor provee el contexto completo de las herramientas y sus firmas:
{
"mcpServers": {
"adk-docs": {
"command": "npx",
"args": ["-y", "@google/adk-docs-mcp-server"],
"transport": "stdio"
}
}
}
Con este canal activo, el modelo valida los métodos nativos de BigQueryToolset (como execute_sql, forecast y detect_anomalies) antes de emitir una sola línea de código, garantizando compatibilidad inmediata con la versión desplegada en el entorno de ejecución.
Framework de Implementación en Producción
-
1Configurar Autenticación ADC: Ejecutar
gcloud auth application-default loginpara aprovisionar tokens OAuth de corta duración sin exponer llaves estáticas de Service Account. -
2Vincular Servidor MCP en el Workspace: Conectar el repositorio de documentación técnica al entorno de desarrollo para guiar al modelo de generación de código.
-
3Definir el System Prompt con Sandboxing: Restringir las operaciones a sólo lectura en el catálogo de BigQuery y parametrizar los límites de partición por fecha.
-
4Implementar Handlers de Artefactos: Exponer herramientas capaces de capturar buffers de gráficos en memoria y transmitirlos como payloads MIME directos al chat.
-
5Validar Inferencia y Forecasting Local: Levantar el servidor interactivo con
adk web --port 8000y ejecutar pruebas de estrés analítico y predicción de series temporales.
Preguntas Frecuentes Técnicas
ADK (Agent Development Kit) está diseñado específicamente para el ecosistema de Google Cloud y Vertex AI. Elimina capas innecesarias de abstracción mediante una arquitectura code-first, soporta de forma nativa la gestión de artefactos multimedia y ofrece toolsets de primera mano para servicios como BigQuery, Spanner y Vertex ML con autenticación ADC integrada.
El agente implementa un patrón de razonamiento donde primero invoca herramientas de catálogo (list_tables y get_table_info) para conocer la estructura y particiones de los datos. De esta forma, el SQL resultante contiene siempre filtros explícitos sobre columnas de partición (ej. fechas) y proyecciones controladas en lugar de escaneos masivos.
MCP actúa como un protocolo estándar que conecta a los asistentes de desarrollo (Copilot, Claude) con fuentes dinámicas de conocimiento externo (la documentación oficial y actualizada de ADK). Esto habilita el vibecoding de alta precisión, garantizando que el código generado coincida exactamente con las APIs reales del SDK.
