Equipo de Investigación Multi-Agente con Google ADK, Tavily y Crawl4AI
Construye un equipo de investigación multi-agente con Google ADK. Combina la búsqueda web de Tavily, la extracción de contenido de Crawl4AI y la síntesis con IA en un solo flujo de trabajo de agentes.
Actualizado Publicado 31 min de lectura

Google ADK Tutorials
Part 3 of 3
Construir un equipo de investigación multi-agente con Google ADK es el siguiente paso natural después de poner en marcha tu primer agente de Google ADK. La arquitectura de ADK facilita conectar agentes especializados (uno para búsqueda web, uno para extracción de contenido y uno para síntesis) y que un agente coordinador los orqueste en un único flujo de trabajo.
Este tutorial se ha reescrito por completo para Google ADK 2.x (probado con la 2.7.1, ago 2026). La versión original estaba dirigida a ADK 0.x/1.x, y varias API han cambiado desde entonces: el nombre del modelo, la integración de Tavily con LangChain, la API de resultados de Crawl4AI y el patrón de delegación multi-agente. Todo lo que sigue funciona con las versiones actuales.
Probado con google-adk 2.7.1
Este tutorial se escribió y probó con Google ADK 2.7.1 (ago 2026), Crawl4AI 0.9.x y langchain-tavily. Si usas una versión anterior de ADK, consulta la sección de resolución de problemas para ver las notas de migración.
Lo que vas a construir: un equipo de investigación multi-agente
Vamos a crear un sistema con cuatro agentes trabajando juntos:
| Agente | Rol | Herramientas | Cómo funciona |
|---|---|---|---|
| Coordinador | Dirige las peticiones del usuario al especialista adecuado | Delegación con sub_agents |
El LLM decide qué especialista invocar según la consulta |
| Agente de Búsqueda | Búsqueda web para encontrar información | Tavily Search (vía LangChain) | Devuelve resultados estructurados con enlaces y fragmentos |
| Extractor de Contenido | Análisis profundo de páginas web | Crawl4AI (FunctionTool personalizado) | Extrae, analiza y estructura el contenido de la página |
| Resumidor | Condensa la información en resúmenes claros | Ninguna (razonamiento puro del LLM) | Crea resúmenes con distintos niveles de detalle |
El coordinador usa el patrón sub_agents de ADK 2.x. El LLM del coordinador ve la descripción de cada especialista y decide a cuál delegar. Este es el enfoque moderno de ADK para coordinador-sobre-especialistas, que sustituye al antiguo patrón del envoltorio AgentTool.
Así fluyen los datos por el sistema:
User Query
│
▼
┌─────────────────────┐
│ Coordinator Agent │ ← LLM decides routing
│ (gemini-flash-latest)│
└──────┬──┬──┬────────┘
│ │ │
▼ ▼ ▼
┌───────┐ ┌──────────┐ ┌───────────┐
│Search │ │Extractor │ │Summarizer │
│Agent │ │Agent │ │Agent │
└───┬───┘ └────┬─────┘ └─────┬─────┘
│ │ │
▼ ▼ ▼
Tavily API Crawl4AI LLM reasoning
│ │ │
└──────────┴──────────────┘
│
Session State
(shared memory)
│
▼
Final ResponseRequisitos previos
- Python 3.10+ instalado (ADK 2.x lo requiere)
- Una clave API de Google AI Studio de aistudio.google.com
- Una clave API de Tavily de tavily.com (nivel gratuito: 1.000 créditos/mes, sin tarjeta)
uvinstalado (guía de instalación)- Familiaridad con los conceptos básicos de ADK del primer tutorial
Nota sobre costes
El nivel gratuito de Tavily ofrece 1.000 créditos de API al mes, suficiente para prototipar. La API de Gemini tiene un nivel gratuito en AI Studio. Crawl4AI es open-source pero ejecuta un navegador headless (necesita ~500 MB de RAM). Puedes construir y probar todo este sistema por 0 $.
Configuración del proyecto
Crea el proyecto e instala las dependencias:
# Create project directory
mkdir adk-research-team
cd adk-research-team
# Initialize with uv
uv init
uv venv
# Install required packages
uv add google-adk langchain-tavily python-dotenv crawl4aiCambio incompatible respecto a tutoriales anteriores
Si seguiste una versión anterior de este tutorial, sustituye langchain-community por langchain-tavily en tus dependencias. La clase TavilySearchResults de langchain_community está obsoleta y no funcionará con las API actuales de Tavily.
Crea un archivo .env en la raíz del proyecto:
# .env file
GOOGLE_API_KEY=your_google_ai_studio_api_key
TAVILY_API_KEY=your_tavily_api_key
# Optional: force the non-enterprise Gemini API path
GOOGLE_GENAI_USE_ENTERPRISE=FalseLa variable GOOGLE_GENAI_USE_ENTERPRISE sustituye a la obsoleta GOOGLE_GENAI_USE_VERTEXAI. Si usas una clave normal de AI Studio (no Vertex AI), puedes omitirla por completo. ADK usa por defecto la ruta de la API de Gemini.
La CLI de ADK carga automáticamente el .env desde la raíz del proyecto, así que las llamadas manuales a load_dotenv() son opcionales aunque inofensivas.
¿Usas un proveedor de modelos distinto?
Si quieres usar modelos de OpenRouter u otros proveedores en lugar de Gemini de Google, mira cómo usar cualquier modelo de OpenRouter con Google ADK.
Estructura del proyecto
ADK espera una estructura concreta para que adk web descubra tus agentes:
adk-research-team/
├── .env # API keys
└── agent_module/ # Agent package
├── __init__.py # Makes it a Python package
├── agent.py # Main file with root_agent
├── search_agent.py # Search specialist
├── content_extractor.py # Content analysis specialist
└── summarizer.py # Summarization specialistCrea la estructura de directorios:
mkdir -p agent_module
touch agent_module/__init__.pyAñade lo siguiente a agent_module/__init__.py:
# This file makes agent_module a proper Python package
# The import below ensures that agent.py is accessible
from . import agentLos nombres de agentes y carpetas deben ser identificadores válidos de Python (solo letras, dígitos y guiones bajos). Los nombres con guiones como my-agent harán que ADK omita silenciosamente la carga del agente.
Creación de los agentes especializados
Vamos a implementar cada especialista uno a uno, empezando por los agentes hoja y terminando en el coordinador.
1. El agente de búsqueda con Tavily Search
touch agent_module/search_agent.pyfrom dotenv import load_dotenv
import os
from google.adk.agents import LlmAgent
from google.adk.integrations.langchain import LangchainTool
from langchain_tavily import TavilySearch
load_dotenv()
def create_search_agent():
"""
Creates an agent specialized in web searching using Tavily Search.
"""
if not os.getenv("TAVILY_API_KEY"):
raise ValueError("TAVILY_API_KEY not found in environment variables")
# Create Tavily Search tool (langchain-tavily package)
tavily_tool = TavilySearch(
max_results=5,
topic="general",
search_depth="advanced",
include_answer=True,
include_raw_content=True,
include_images=False,
)
# Wrap for ADK
adk_tavily_tool = LangchainTool(tool=tavily_tool)
return LlmAgent(
name="search_agent",
model="gemini-flash-latest",
description="A specialized agent that searches the web for information using Tavily Search API.",
instruction="""You are a web research specialist.
When asked to find information about a topic, craft an effective search query and use the TavilySearch tool.
After receiving search results:
1. Parse the response which may contain a direct answer and multiple search results.
2. Format the results in a clear, structured way, with each result showing the title, link, and a brief preview of the content.
3. Highlight the most relevant results based on the original query.
4. If Tavily provided a direct answer, present that first as the most likely answer.
If the search doesn't return useful results, suggest refined search terms for a follow-up search.
Avoid making up information - only report what is found in the search results.
""",
tools=[adk_tavily_tool],
)Cambios clave respecto a la versión anterior:
from google.adk.agents import LlmAgenten lugar defrom google.adk import Agentfrom google.adk.integrations.langchain import LangchainTool(movido desdegoogle.adk.tools.langchain_tool)from langchain_tavily import TavilySearchen lugar deTavilySearchResultsdelangchain_community- Modelo:
gemini-flash-latest(el antiguogemini-2.0-flashse retiró en junio de 2026)
Nivel gratuito de Tavily
Tavily ofrece 1.000 créditos de API gratuitos al mes sin tarjeta de crédito. Una búsqueda suele costar 1 crédito. La búsqueda avanzada con include_raw_content puede costar más por consulta.
Si necesitas una opción de búsqueda que no requiera clave API, puedes ver la búsqueda web gratuita sin claves API con DuckDuckGo. Para una API de búsqueda web gestionada pensada para agentes de IA, la API de búsqueda web de TinyFish es otra opción que merece la pena evaluar.
2. El extractor de contenido con Crawl4AI
touch agent_module/content_extractor.pyfrom dotenv import load_dotenv
import asyncio
from crawl4ai import AsyncWebCrawler, CrawlerRunConfig
from google.adk.agents import LlmAgent
from google.adk.tools import FunctionTool
from google.adk.tools.tool_context import ToolContext
load_dotenv()
async def extract_content_from_url(url: str, tool_context: ToolContext = None) -> dict:
"""
Extracts content from a URL using Crawl4AI.
Args:
url (str): The URL to extract content from.
tool_context (ToolContext, optional): Tool context for ADK session state.
Returns:
dict: Extracted content, metadata, and status.
"""
async with AsyncWebCrawler() as crawler:
result = await crawler.arun(url=url, config=CrawlerRunConfig())
# Crawl4AI 0.9.x: result.markdown is a MarkdownGenerationResult object
md = result.markdown.raw_markdown if result.markdown else ""
# Title: try metadata first, fall back to first markdown heading
title = (result.metadata or {}).get("title")
if not title and md:
for line in md.split("\n"):
if line.startswith("# "):
title = line[2:]
break
response = {
"status": "success" if result.success else "error",
"title": title,
"url": result.url or url,
"markdown_content": md[:10000], # Limit to 10k chars for context window
"content_length": len(md),
"word_count": len(md.split()),
"has_truncated_content": len(md) > 10000,
"error_message": result.error_message if not result.success else None,
}
# Store full content in session state for the summarizer
if tool_context and md:
tool_context.state["temp:extracted_content"] = md
return response
def create_content_extractor_agent():
"""
Creates an agent specialized in extracting and analyzing content from URLs.
"""
extract_tool = FunctionTool(func=extract_content_from_url)
return LlmAgent(
name="content_extractor",
model="gemini-flash-latest",
description="A specialized agent that extracts and analyzes content from web pages using Crawl4AI.",
instruction="""You are a web content analysis specialist.
When given a URL, use the extract_content_from_url tool to fetch and analyze its content.
After extracting content:
1. Report the page title and basic metadata (word count, if content was truncated).
2. Highlight key information found in the content that's most relevant to the user's request.
3. Note if there were any errors during extraction.
When extracting content from multiple URLs, organize the information clearly by URL.
If the extraction fails, explain the error and suggest possible solutions.
""",
tools=[extract_tool],
)Cambios incompatibles de Crawl4AI
Crawl4AI 0.9.x cambió result.markdown de un string a un objeto MarkdownGenerationResult. Usa .raw_markdown para obtener el texto. Los atributos result.title y result.headers ya no existen. Usa result.metadata.get("title") en su lugar. El parámetro include_headers se eliminó de arun().
Algunas cosas a tener en cuenta sobre este código:
- Usamos
CrawlerRunConfig()para configurar el rastreo (sustituye al antiguo kwarginclude_headers=True) result.markdown.raw_markdownnos da el texto real (el antiguo acceso aresult.markdowncomo string fallaría)- Las claves de estado usan el prefijo
temp:. ADK las descarta automáticamente tras la invocación, que es el comportamiento correcto para las entregas intermedias - Las excepciones se dejan propagar en lugar de quedar atrapadas en un
except Exceptionamplio. ADK 2.0 usa las excepciones para reintentos automáticos y pausas de Human-in-the-Loop.
Para extracción de datos web a escala empresarial, la plataforma de web scraping de Bright Data gestiona la rotación de proxies y evita los bloqueos anti-bot. Para una alternativa más ligera a Crawl4AI, consulta la alternativa gratuita a Firecrawl para agentes de IA. Y si estás construyendo tu propio sitio y quieres controlar a qué pueden acceder los crawlers de IA, aquí tienes cómo bloquear crawlers de IA en tu propio sitio.
3. El agente resumidor
touch agent_module/summarizer.pyfrom google.adk.agents import LlmAgent
def create_summarizer_agent():
"""
Creates an agent specialized in summarizing content.
Uses output_key to automatically save the summary to session state.
"""
return LlmAgent(
name="summarizer",
model="gemini-flash-latest",
description="A specialized agent that summarizes content at various detail levels.",
instruction="""You are a professional content summarizer.
Summarize the content provided to you according to the requested length:
- "short": A concise summary in 1-3 sentences, capturing only the essential point.
- "medium": A balanced summary in 1-3 paragraphs, covering key points and some supporting details.
- "long": A comprehensive summary in multiple paragraphs, preserving nuances and important contexts.
If no length is specified, default to "medium".
Always structure summaries with clear headings and bullet points when appropriate.
Prioritize accuracy over brevity - never include information not found in the original text.
For technical or complex content, preserve the key terminology used in the original text.
""",
output_key="summary",
)Más simple con output_key
ADK 2.x permite poner output_key="summary" en un LlmAgent para guardar automáticamente su respuesta final en el estado de sesión. No hace falta ninguna herramienta personalizada. La versión anterior usaba una función summarize_content hecha a mano para escribir en el estado; output_key hace lo mismo en una línea.
4. El coordinador: conectar el root_agent
Por último, el archivo principal del agente que ADK descubre:
touch agent_module/agent.pyfrom google.adk.agents import LlmAgent
# Import our specialized agents
from agent_module.search_agent import create_search_agent
from agent_module.content_extractor import create_content_extractor_agent
from agent_module.summarizer import create_summarizer_agent
# Define the root agent that ADK web will use
root_agent = LlmAgent(
name="research_coordinator",
model="gemini-flash-latest",
description="A coordinator agent that manages a team of specialized research agents.",
instruction="""You are the coordinator of a research assistant team with specialized agents.
Your team includes:
- search_agent: Finds information on the web using Tavily Search.
- content_extractor: Analyzes and extracts content from specific URLs.
- summarizer: Creates concise summaries of content at different levels of detail.
Based on user requests, delegate tasks to the appropriate specialist:
1. If the user needs to find information on a topic, delegate to search_agent.
2. If the user provides a specific URL or wants to analyze a web page, delegate to content_extractor.
3. If the user needs a summary of content, delegate to summarizer.
4. For complex research tasks, coordinate multiple agents in sequence:
- First search for relevant information
- Then extract detailed content from the most promising URLs
- Finally summarize the findings
Always present the results from your specialists in a clear, organized manner.
When coordinating multi-step research, explain the research process to the user.
Remember: You are responsible for the final response to the user, so ensure it fully addresses their request.
""",
sub_agents=[
create_search_agent(),
create_content_extractor_agent(),
create_summarizer_agent(),
],
)El cambio clave aquí es sub_agents=[...] en lugar de tools=[AgentTool(...)]. Con sub_agents, el LLM del coordinador ve el nombre y la descripción de cada especialista y decide cuál invocar según la petición del usuario. Este es el patrón idiomático de ADK 2.x para coordinador-sobre-especialistas.
El antiguo patrón AgentTool sigue funcionando, pero ahora encaja mejor para sub-agentes de un solo turno muy controlados (mode="single_turn"). Para un coordinador que debe enrutar libremente entre especialistas, sub_agents es la elección correcta.
Ejecutar el equipo multi-agente
Hay tres formas de ejecutar y probar tus agentes.
Opción 1: adk web (interfaz interactiva)
# From the project root (where .env is located)
adk webEsto inicia un servidor web local en http://127.0.0.1:8000. Ábrelo en tu navegador, selecciona «research_coordinator» en la lista de agentes y empieza a chatear.
Solo local
adk web no tiene autenticación y se vincula a 127.0.0.1 por defecto. No lo expongas a internet público sin añadir autenticación y TLS.
Verifica que funciona: la lista de agentes debería mostrar research_coordinator. Prueba primero una consulta de búsqueda sencilla:
«¿Cuáles son los últimos avances en computación cuántica?»
Luego prueba una consulta de varios pasos:
«Investiga el impacto ambiental de los vehículos eléctricos, analiza el primer resultado en detalle y dame un resumen corto de las conclusiones clave.»
Opción 2: adk run (REPL de CLI)
Útil para probar rápidamente un solo agente sin la interfaz web:
# Test the search agent standalone
adk run agent_module/search_agent.pyEsto te lleva a un REPL interactivo. Escribe una consulta y comprueba si el agente responde correctamente. Úsalo para verificar que cada especialista funciona antes de conectar el coordinador.
Opción 3: adk api_server (endpoints HTTP)
Para scripting y verificación con curl:
adk api_serverLuego verifica con curl:
# Health check
curl http://127.0.0.1:8000/health
# List available agents
curl http://127.0.0.1:8000/list-appsEs útil para integrar el equipo de agentes en otras aplicaciones o para probar desde CI.
Cómo funciona el sistema multi-agente
Vamos a desglosar la arquitectura:
-
El coordinador como orquestador: todas las peticiones del usuario van al coordinador. Su LLM analiza la petición y decide a qué especialista delegar según la descripción de cada sub_agent.
-
Delegación con sub-agents: el patrón
sub_agentsde ADK 2.x permite al LLM del coordinador ver los nombres y las descripciones de los especialistas. Decide el enrutado mediante razonamiento del LLM, sin lógica if/else programada. -
Comunicación vía estado de sesión: los agentes comparten datos a través de
tool_context.state. El extractor de contenido guarda el texto extraído entemp:extracted_content, y el resumidor (o el coordinador) puede leerlo. El prefijotemp:significa que ADK descarta automáticamente los datos tras la invocación. -
Integración con LangChain: el envoltorio
LangchainTooldegoogle.adk.integrations.langchainconecta las herramientas de LangChain (como Tavily) con ADK. Esto significa que cualquier herramienta de LangChain puede usarse en tus agentes ADK. -
Herramientas personalizadas con FunctionTool: la integración de Crawl4AI muestra cómo envolver cualquier función async de Python como herramienta de ADK usando
FunctionTool.
Ten en cuenta que InMemorySessionService (el predeterminado) no es persistente. El estado de sesión se reinicia cuando el servidor se reinicia. Eso está bien para desarrollo y pruebas. Para producción, cambiarías a un SessionService persistente.
Ampliar el sistema
El diseño modular facilita añadir capacidades:
| Mejora | Enfoque de implementación |
|---|---|
| Análisis de documentos PDF | Añade un agente especialista con una herramienta de parseo de PDF |
| Servicios de traducción | Crea un agente de traducción con una API de idiomas |
| Visualización de datos | Añade un agente que genere gráficos a partir de los datos extraídos |
| Análisis de sentimiento | Implementa un agente especializado en análisis de sentimiento |
| Gestión de citas | Añade una herramienta para extraer y formatear citas de fuentes académicas |
| Tavily Extract para URL simples | Usa TavilyExtract de langchain-tavily en lugar de Crawl4AI para la extracción básica de contenido de URL (menos piezas móviles) |
Usar el servidor MCP de Tavily en lugar de LangChain
Tavily ofrece un servidor MCP oficial (mcp-tavily en PyPI, u hospedado en mcp.tavily.com). En lugar de envolver Tavily a través de LangChain, puedes conectarlo directamente vía el McpToolset de ADK. Esto elimina por completo la dependencia de LangChain y sigue el estándar Model Context Protocol.
La contrapartida: la integración MCP es más nueva y está menos documentada que la vía LangChain. Si ya usas LangChain para otras herramientas, el envoltorio LangchainTool es más simple. Si estás construyendo un stack puro de ADK, MCP es más limpio.
Para otro ejemplo de herramientas MCP, consulta Agno con Context7 MCP.
Actualizar al Workflow Runtime de ADK 2.0
ADK 2.0 introdujo un Workflow Runtime basado en grafos para la orquestación determinista de agentes. Si tu pipeline de investigación es siempre «buscar → extraer → resumir» (sin ramificaciones), un grafo Workflow es más predecible que el enrutado sub_agents dirigido por el LLM.
El patrón sub_agents mostrado en este tutorial es mejor cuando quieres que el coordinador decida a qué especialistas llamar según la consulta. Un Workflow es mejor cuando la secuencia es fija y quieres un orden de ejecución garantizado.
Consulta la documentación de ADK 2.0 para ejemplos de Workflow.
Si estás explorando otros frameworks para sistemas multi-agente, también puedes construir un equipo de investigación de IA con Agno o construir un agente de IA con Mastra. Ambos adoptan enfoques distintos para la orquestación de agentes.
Resolución de problemas comunes
| Problema | Causa | Solución |
|---|---|---|
| 429 RESOURCE_EXHAUSTED en el nivel gratuito de Gemini | El nivel gratuito tiene límites de tasa | Configura http_options.retry_options en el modelo o solicita una cuota mayor. Mira el acordeón de abajo. |
| El agente no aparece en adk web | El nombre de la carpeta/agente tiene guiones o __init__.py no importa el agente |
Usa solo letras, dígitos y guiones bajos en los nombres. Asegúrate de que __init__.py tenga from . import agent. |
ModuleNotFoundError: langchain_tavily |
Instalaste langchain-community en lugar de langchain-tavily |
Ejecuta uv add langchain-tavily. La herramienta Tavily del paquete antiguo está obsoleta. |
AttributeError: 'MarkdownGenerationResult' has no attribute 'split' |
Código antiguo de Crawl4AI que trata result.markdown como un string |
Usa result.markdown.raw_markdown. Ahora es un objeto MarkdownGenerationResult. |
| Navegador de Crawl4AI no encontrado / timeouts | Chromium headless no instalado | Ejecuta crawl4ai-setup para instalar Chromium. Aumenta page_timeout en CrawlerRunConfig(page_timeout=60000). |
Un except Exception amplio enmascara los reintentos |
ADK 2.0 usa excepciones para reintentos automáticos y pausas HITL | Deja que las excepciones se propaguen desde las herramientas en lugar de capturarlo todo. |
| El estado se «pierde» entre sesiones | InMemorySessionService se reinicia al reiniciar |
Esperado en desarrollo. Usa un SessionService persistente en producción. |
El .env no se carga |
El archivo está dentro de agent_module/ en lugar de en la raíz del proyecto |
Mueve .env a la raíz del proyecto (junto a agent_module/). La CLI de ADK lo carga automáticamente. |
Corregir errores 429 en el nivel gratuito de Gemini
El nivel gratuito de la API de Gemini tiene límites de tasa que pueden devolver errores 429 RESOURCE_EXHAUSTED. Puedes configurar el comportamiento de reintento en el modelo:
from google.adk.agents import LlmAgent
from google.genai import types
root_agent = LlmAgent(
name="research_coordinator",
model="gemini-flash-latest",
generate_content_config=types.GenerateContentConfig(
http_options=types.HttpOptions(
retry_options=types.HttpRetryOptions(
attempts=5,
initial_delay=1.0,
max_delay=10.0,
)
)
),
# ... rest of config
)Si te encuentras 429 de forma constante, considera solicitar un aumento de cuota en AI Studio o pasar a un nivel de pago de la API de Gemini.
Resumen de costes y niveles gratuitos
| Componente | Nivel gratuito | Precio de pago | Notas |
|---|---|---|---|
| Google ADK | Gratis / open-source | N/A | Paquete de Python, sin coste de API |
| Gemini API (AI Studio) | Nivel gratuito disponible | Varía según el modelo | Errores 429 frecuentes en el nivel gratuito |
| Tavily Search | 1.000 créditos/mes | 0,008 $/crédito PAYG | Una búsqueda ≈ 1 crédito. No se requiere tarjeta para el nivel gratuito. |
| Crawl4AI | Gratis / open-source | N/A | Ejecuta Chromium headless (~500 MB de RAM). Opción con Docker disponible. |
Coste cero para prototipar
Los cuatro componentes tienen niveles gratuitos. Puedes construir y probar todo este equipo de investigación multi-agente sin gastar un céntimo.
Algo a vigilar: include_raw_content=True en Tavily y guardar markdown de 10.000 caracteres por URL puede agotar tu ventana de contexto rápido. El truncado en el extractor de contenido lo gestiona, pero si procesas muchas URL, considera include_raw_content=False para ahorrar tokens.
Conclusión
Ya tienes un equipo de investigación multi-agente funcional construido sobre Google ADK 2.x. El sistema demuestra varios patrones clave de ADK:
- Delegación con
sub_agentspara el enrutado coordinador-sobre-especialistas - Integración con LangChain vía
LangchainToolpara usar Tavily Search - Herramientas personalizadas con
FunctionToolpara el extractor de contenido con Crawl4AI output_keypara escrituras automáticas en el estado (el resumidor)- Estado de sesión con prefijo
temp:para compartir datos entre agentes adk webpara pruebas interactivas rápidas sin construir un frontend
Desde aquí, puedes ampliar el equipo con nuevos especialistas, cambiar a otros modelos o actualizar al Workflow Runtime de ADK para pipelines deterministas.
Empieza con la Parte 1: Tu Primer Agente de Google ADKPara usar modelos más allá de Gemini (como Claude o GPT vía OpenRouter), mira cómo usar cualquier modelo de OpenRouter con Google ADK.


