Agent Development Kit: ahora es más fácil compilar aplicaciones multiagente

9 DE ABRIL DE 2025
Erwin Huizenga Machine Learning Lead
Bo Yang Software Engineer

El mundo de la IA está pasando rápidamente de usar modelos de un solo propósito a usar sistemas multiagente inteligentes y autónomos. Sin embargo, la creación de estos sistemas multiagente implica nuevos desafíos. Por ese motivo, hoy presentamos el Agent Development Kit (ADK) en Google Cloud NEXT 2025. El ADK es un marco de trabajo de código abierto de Google, diseñado para simplificar el desarrollo de extremo a extremo de la pila completa de sistemas de agentes y multiagente.

El ADK es el mismo marco de trabajo que permite a los agentes trabajar dentro de productos de Google, como Agentspace y el Paquete de interacción con los clientes (CES) de Google. Configuramos el ADK con código abierto porque queremos brindar a los desarrolladores herramientas potentes y flexibles para compilar en el panorama de agentes en rápida evolución. El ADK se diseñó para ser flexible, usar diferentes modelos y compilar agentes listos para la producción en diferentes entornos de desarrollo.


Pilares básicos del ADK: compilar, interactuar, evaluar, implementar

El ADK proporciona capacidades a lo largo de todo el ciclo de vida de desarrollo del agente:

  • Multiagente por diseño: compila aplicaciones modulares y escalables componiendo múltiples agentes especializados en una jerarquía. Permite una coordinación y delegación complejas.

  • Ecosistema de modelos enriquecidos: elige el modelo que mejor se adapte a tus necesidades. El ADK funciona con tu modelo de elección, ya sea Gemini o cualquier modelo accesible a través de Vertex AI Model Garden. El marco de trabajo también ofrece integración con LiteLLM que te permite elegir entre una amplia selección de modelos de proveedores, como Anthropic, Meta, Mistral AI, AI21 Labs, entre otros.

  • Ecosistema de herramientas enriquecidas: equipa a los agentes con diversas capacidades. Usa herramientas precompiladas (búsqueda, ejecución de código), herramientas de protocolo de contexto de modelo (MCP), integra bibliotecas de terceros (LangChain, LlamaIndex) o incluso usa otros agentes como herramientas (LangGraph, CrewAI, etc.).

  • Transmisión integrada: interactúa con tus agentes en conversaciones similares a las humanas con las capacidades únicas de transmisión bidireccional de audio y video del ADK. Con solo unas pocas líneas de código, puedes crear interacciones naturales que cambien la forma en que trabajas con los agentes, y usar no solo texto simple, sino un diálogo rico y multimodal.

  • Orquestación flexible: define flujos de trabajo con agentes de flujo de trabajo (secuenciales, paralelos, de bucle) para canalizaciones de procesamiento predecibles, o aprovecha el enrutamiento dinámico impulsado por LLM (transferencia de LlmAgent) para lograr un comportamiento adaptativo.

  • Experiencia de desarrollador integrada: desarrolla, prueba y depura localmente con una potente CLI y una IU web visual. Inspecciona los eventos, el estado y la ejecución del agente paso a paso.

  • Evaluación incorporada: evalúa sistemáticamente el rendimiento del agente valorando tanto la calidad de la respuesta final como la trayectoria de ejecución paso a paso frente a casos de prueba predefinidos.

  • Implementación sencilla: usa contenedores e implementa tus agentes en cualquier lugar.


Comienza a usar tu primer agente

Si bien te alentamos a explorar los ejemplos de los documentos, la idea central es aprovechar la simplicidad de Python. Tú defines la lógica de tu agente, las herramientas que puede usar y cómo debería procesar la información. El ADK proporciona la estructura para administrar el estado, orquestar llamadas a herramientas e interactuar con los LLM subyacentes. Aquí hay un ejemplo ilustrativo de un agente básico.

El código se puede encontrar en la guía de inicio rápido.

from google.adk.agents import LlmAgent 
from google.adk.tools import google_Search
 
dice_agent = LlmAgent(
    model="gemini-2.0-flash-exp", # Required: Specify the LLM 
    name="question_answer_agent", # Requdired: Unique agent name
    description="Un agente asistente útil que pueda responder preguntas.",
    instruction="""Responde la consulta usando google search""",
    tools=[google_search], # Provide an instance of the tool
)
 
# you can run this by using adk web

En este ejemplo simple, se muestra la estructura básica. El ADK es muy eficaz cuando se compilan aplicaciones más complejas que involucran múltiples agentes, uso sofisticado de herramientas y orquestación dinámica, todo mientras se mantiene el control.

El ADK ofrece flexibilidad en la forma en que interactúas con tus agentes: CLI, IU web, servidor de API y API (Python). La forma en que defines tu agente (la lógica central dentro de agent.py) es la misma, independientemente de cómo elijas interactuar con él. La diferencia radica en cómo inicias y administras la interacción. Encontrarás ejemplos de todo lo anterior en la documentación del ADK.

ADK architecture

Compilar aplicaciones multiagente con el ADK

El ADK es muy eficaz cuando no solo se crean agentes individuales, sino que se crean sistemas colaborativos de multiagente que aprovechan las herramientas. Imagina crear un equipo de agentes especializados donde un agente principal puede delegar tareas en función de la conversación. El ADK facilita este trabajo a través de estructuras jerárquicas y enrutamiento inteligente.

Veamos un ejemplo ilustrativo: un WeatherAgent que maneja las consultas meteorológicas, pero delega los saludos a un GreetingAgent especializado.


1. Define una herramienta:
los agentes usan herramientas para realizar acciones. Aquí, nuestro WeatherAgent necesita una herramienta para obtener datos meteorológicos. Definimos una función de Python; el ADK usa su docstring para comprender cuándo y cómo usarla.

def get_weather(city: str) -> Dict:
 
    # Best Practice: Log tool execution for easier debugging
    print(f"--- Tool: get_weather called for city: {city} ---")
    city_normalized = city.lower().replace(" ", "") # Basic input normalization
 
    # Mock weather data for simplicity (matching Step 1 structure)
    mock_weather_db = {
        "newyork": {"status": "success", "report": "The weather in New York is sunny with a temperature of 25°C."},
        "london": {"status": "success", "report": "It's cloudy in London with a temperature of 15°C."},
        "tokyo": {"status": "success", "report": "Tokyo is experiencing light rain and a temperature of 18°C."},
        "chicago": {"status": "success", "report": "The weather in Chicago is sunny with a temperature of 25°C."},
        "toronto": {"status": "success", "report": "It's partly cloudy in Toronto with a temperature of 30°C."},
        "chennai": {"status": "success", "report": "It's rainy in Chennai with a temperature of 15°C."},
 }
 
    # Best Practice: Handle potential errors gracefully within the tool
    if city_normalized in mock_weather_db:
        return mock_weather_db[city_normalized]
    else:
        return {"status": "error", "error_message": f"Sorry, I don't have weather information for '{city}'."}

2. Define los agentes y su relación: utilizamos LlmAgent para crear nuestros agentes. Presta mucha atención a los campos de instrucción y descripción: el LLM depende en gran medida de estos para comprender los roles y tomar decisiones de delegación utilizando delegaciones automáticas para los subagentes.

greeting_agent = Agent(
         model=LiteLlm(model="anthropic/claude-3-sonnet-20240229"),
            name="greeting_agent",
            instruction="Eres Greeting Agent. Tu ÚNICA tarea es dar una cálida bienvenida al usuario. " "No es necesario que converses ni realices otras tareas.",
            # Crucial for delegation: Clear description of capability
            description="Procesa saludos simples",
 
 )
 
farewell_agent = Agent(
          model=LiteLlm(model="anthropic/claude-3-sonnet-20240229"),
            name="farewell_agent",
            instruction="Eres Farewell Agent. Tu ÚNICA tarea es dar un cálido mensaje de despedida. "
                        "No realices ninguna otra acción.",
            # Crucial for delegation: Clear description of capability
            description="Procesa mensajes de despedida simples",
 
 )
 
root_agent = Agent(
        name="weather_agent_v2", 
        model="gemini-2.0-flash-exp",
        description="Eres el principal Weather Agent y coordinas un equipo. - Tu tarea principal es proporcionar información del tiempo usando la herramienta `get_weather`. Procesa la respuesta de 'status' ('report' o 'error_message'). - Reglas de delegación: - Si el usuario envía un saludo simple (como 'Hola'), delega al `greeting_agent`. - Si el usuario envía un mensaje de despedida simple (como 'Adiós', 'Nos vemos'), delega al `farewell_agent`. - Procesa solicitudes de estado del tiempo usando `get_weather`. - Si hay otras consultas, indica claramente que no puedes procesarlas.",
        tools=[get_weather], # Root agent still needs the weather tool
        sub_agents=[greeting_agent, farewell_agent]
)

Cómo funciona la delegación:

  • El comportamiento predeterminado del agente es permitir la delegación.

  • Al procesar un mensaje de un usuario, el LLM considera la consulta, la description del agente actual y los campos description de los agentes relacionados (agentes principales/subagentes definidos en la jerarquía).

  • Si el LLM determina que otro agente se ajusta mejor en función de su descripción (por ejemplo, el usuario dice "Hola", lo que coincide con la descripción de GreetingAgent, inicia una transferencia.

Las descripciones claras y distintas son vitales. El LLM las usa para enrutar las tareas de manera efectiva.

En esta configuración, si un usuario comienza con "Hola", el WeatherAgent (si es el agente raíz que procesa la entrada) puede reconocer que no es una consulta meteorológica, ver que el GreetingAgent es adecuado a través de su descripción y transferir automáticamente el control. Si el usuario pregunta "¿Cómo está el clima en Chicago?", el WeatherAgent lo procesa directamente utilizando su herramienta get_weather.

En este ejemplo, se demuestra cómo la estructura jerárquica del ADK y la delegación basada en descripciones te permiten crear aplicaciones multiagente organizadas, mantenibles y sofisticadas.


Completar el ciclo de vida: evaluación e implementación

La creación de agentes inteligentes, como nuestro agente meteorológico, es fundamental, pero llevarlos de manera confiable a los usuarios implica cumplir los siguientes pasos fundamentales: una evaluación rigurosa y una implementación perfecta. Antes de publicarlo, es primordial garantizar que tu agente se comporte de manera predecible y correcta. Las herramientas de evaluación integradas del ADK se diseñaron precisamente para esto, lo que te permite probar sistemáticamente las rutas de ejecución y la calidad de la respuesta contra conjuntos de datos predefinidos, como evaluation.test.json o test.json. Puedes ejecutar estas comprobaciones con programación dentro de tus conjuntos de pruebas utilizando AgentEvaluator.evaluate(). También puedes utilizar la evaluación directamente a través de la herramienta de línea de comandos ADK eval o a través de la IU web.

Una vez que estés conforme con el rendimiento, el ADK ofrece un camino claro y optimizado hacia la producción a través de la opción para implementar en cualquier tiempo de ejecución de contenedores o utilizando su integración con Vertex AI Agent Engine. Esto te permite aprovechar un tiempo de ejecución totalmente administrado, escalable y de nivel empresarial, completando el ciclo de vida de desarrollo y permitiéndote pasar de prototipos sofisticados a aplicaciones sólidas y ágiles listas para la producción.


Cómo elegir tu marco de trabajo: ¿ADK o Genkit?

A medida que exploras las posibilidades de crear sistemas multiagente con el ADK, es posible que te preguntes cómo encaja esto en el panorama más amplio de las herramientas de desarrollo de IA generativa de Google. Si bien hay una variedad de SDK y marcos disponibles, como el marco de trabajo Genkit, es útil comprender el enfoque relativo del ADK. A continuación, puedes ver una comparación rápida:


Agent Development Kit:

  • Optimizado para sistemas de agente y multiagente complejos, proporciona abstracciones de nivel superior para el desarrollo de agentes con integración incorporada para LiteLLM y Vertex AI Model Garden que admiten una variedad de modelos.

  • Se centra en definir los comportamientos y las interacciones de los agentes.

  • Admite transmisión bidireccional.


Genkit:

  • Proporciona elementos fundamentales para crear una gran variedad de experiencias impulsadas por IA.

  • Incluye herramientas de desarrollo para iterar, probar y depurar tus interacciones relacionadas con la IA.

  • Admite una gran variedad de modelos de lenguaje grandes de Google AI, Vertex AI y de terceros a través de complementos de la comunidad.


Cómo elegir la herramienta adecuada

En última instancia, la mejor opción depende de los objetivos específicos de tu proyecto. Si estás compilando sistemas de agentes colaborativos intrincados dentro de un marco de trabajo bien definido, el ADK ofrece una solución poderosa. Para muchos otros proyectos de IA generativa que requieren flexibilidad y un amplio soporte de modelos, Genkit es una excelente opción.


El ADK funciona en cualquier lugar, pero optimizado para Google Cloud

Si bien el Agent Development Kit (ADK) ofrece flexibilidad para trabajar con varias herramientas, está optimizado para una integración perfecta dentro del ecosistema de Google Cloud, específicamente con los modelos Gemini y Vertex AI. Este diseño personalizado permite a los desarrolladores aprovechar al máximo las capacidades avanzadas de Gemini, como el razonamiento mejorado y el uso de herramientas que se encuentran en Gemini 2.5 Pro Experimental, y proporciona una vía directa y nativa para implementar estos agentes en el tiempo de ejecución de nivel empresarial totalmente administrado de Vertex AI para la escalabilidad.

Fundamentalmente, esta integración profunda se extiende a tu entorno empresarial más amplio; el ADK permite a los agentes conectarse directamente a sistemas y datos a través de más de 100 conectores preconstruidos, utilizar flujos de trabajo creados con Application Integration y acceder a datos almacenados en sistemas como AlloyDB, BigQuery y NetApp sin necesidad de duplicar datos.

Además, los agentes creados con el ADK pueden aprovechar de forma segura las inversiones de API existentes de tu organización administradas a través de Apigee, lo que mejorará aun más tus capacidades al aprovechar las interfaces establecidas.

Esta conectividad integral a través de modelos avanzados de IA, implementación escalable, diversas fuentes de datos y APIs existentes hace que el ADK sea excepcionalmente potente cuando se utiliza dentro del entorno de Google Cloud.


Compila la próxima generación de agentes con el ADK

El Agent Development Kit (ADK) proporciona una base potente, flexible y de código abierto para crear la próxima generación de aplicaciones de IA. Aborda los desafíos centrales del desarrollo multiagente ya que ofrece lo siguiente:

  • Control preciso del comportamiento y la orquestación de los agentes.

  • Un rico ecosistema para herramientas e integraciones.

  • Una experiencia de desarrollador integrada para la creación y depuración.

  • Un marco de evaluación sólido esencial para agentes confiables.

  • Una ruta clara hacia la implementación, incluidas las opciones administradas.

Nos entusiasma mucho ver lo que desarrollas con el ADK.

Explora el código: Documentación oficial del ADK.