Los agentes de Inteligencia Artificial (IA) están transformando la forma en que interactuamos con la tecnología, actuando como asistentes autónomos capaces de razonar, planificar y ejecutar tareas. Desde ayudantes virtuales hasta complejos sistemas multiagente, la demanda de herramientas accesibles para construir estos agentes va en aumento. Aquí entra el Agent Development Kit (ADK) de Google, un framework de Python de código abierto lanzado el 9 de abril de 2025, diseñado para simplificar la creación de agentes de IA sofisticados. Integrado estrechamente con el ecosistema de Google —en particular los modelos Gemini y Vertex AI— ADK permite a los desarrolladores crear, probar y desplegar agentes con facilidad, ya sea para tareas sencillas o para flujos de trabajo colaborativos complejos.
Este artículo te guiará paso a paso en la creación de tu primer agente con ADK. Veremos cómo configurar tu entorno de desarrollo con el rápido instalador de paquetes uv, conectar tu agente a un modelo Gemini mediante la API de Google AI Studio, darle a tu agente la capacidad de recordar información usando el Session State (estado de sesión) y mejorarlo con búsqueda web en tiempo real gracias a la herramienta de búsqueda Tavily. Al final, tendrás un agente funcional listo para seguir explorando.
¿Qué es Google Agent Development Kit (ADK)?
El Agent Development Kit (ADK) de Google es un framework de Python de código abierto presentado por Google el 9 de abril de 2025, orientado a simplificar el desarrollo de agentes de IA. Construido pensando en la integración, ADK aprovecha la potente infraestructura de IA de Google —como la familia de modelos Gemini y Vertex AI— para permitir a los desarrolladores crear agentes que pueden razonar, usar herramientas y colaborar en sistemas multiagente. Tanto si estás construyendo un asistente de un solo propósito como un equipo de agentes especializados, ADK proporciona el andamiaje para hacerlo de forma eficiente.
Características clave de ADK
Integración de herramientas: los agentes pueden llamar a APIs externas, realizar búsquedas web o ejecutar funciones personalizadas, lo que los convierte en solucionadores de problemas versátiles.
Colaboración multiagente: ADK admite la creación de equipos de agentes que trabajan juntos, compartiendo tareas y memoria para flujos de trabajo complejos.
Compatibilidad con el ecosistema de Google: la integración perfecta con Google Cloud, Vertex AI y los modelos Gemini garantiza un alto rendimiento y escalabilidad.
Flexibilidad de código abierto: al ser de código abierto, ADK permite la personalización y las contribuciones de la comunidad, fomentando una innovación rápida.
Facilidad de uso: con plantillas predefinidas y una API sencilla, incluso los principiantes pueden empezar rápidamente.
¿Por qué usar ADK para crear agentes?
ADK destaca en un campo saturado de herramientas de desarrollo de IA gracias a su equilibrio entre simplicidad y potencia. A diferencia de frameworks más genéricos, su estrecha integración con las ofertas de IA de Google —como las avanzadas capacidades de razonamiento de Gemini— da a los desarrolladores acceso a tecnología de vanguardia sin necesidad de construir todo desde cero. Además, su naturaleza de código abierto significa que no quedas atado a un sistema propietario, lo que ofrece libertad para adaptar tu agente a casos de uso únicos. Ya sea que estés automatizando una tarea personal o creando el prototipo de una solución empresarial, ADK proporciona un punto de partida sólido.
En resumen, ADK es ideal para cualquiera que quiera aprovechar los agentes de IA sin atascarse en la complejidad. Es un puente entre los potentes modelos de IA y las aplicaciones prácticas del mundo real: perfecto para tu primera aventura creando agentes.
Crea tu primer agente con Google Agent Development Kit (ADK)
Requisitos previos
Antes de sumergirnos en la creación de tu primer agente con Google Agent Development Kit (ADK) y uv, asegurémonos de que tienes todo lo necesario para seguir el tutorial. Esta sección describe las herramientas, cuentas y conocimientos básicos requeridos para completar el proyecto.
Herramientas y cuentas necesarias
Python 3.9+
ADK requiere Python 3.9 o superior. Usaremos uv para gestionar la versión de Python, así que no necesitas tenerla preinstalada: uv puede encargarse de ello. Sin embargo, tener una instalación base de Python (por ejemplo, mediante el gestor de paquetes de tu sistema o python.org) simplifica la configuración inicial de uv.
uv
¡La estrella de la gestión de nuestro proyecto! Instalarás uv como un binario independiente (no se requiere Python de antemano). Veremos los pasos de instalación en la siguiente sección.
Clave de API de Google AI Studio
Para alimentar nuestro agente con el modelo Gemini 2.0 Flash, necesitarás una clave de API de Google AI Studio. Regístrate o inicia sesión en aistudio.google.com, ve a la sección de API y genera una clave. La configuraremos de forma segura usando variables de entorno.
Clave de API de Tavily
Para la funcionalidad de búsqueda, integraremos la herramienta de búsqueda Tavily, que proporciona resultados de búsqueda web en tiempo real diseñados para agentes de IA. Obtén una clave de API gratuita registrándote en tavily.com. La necesitarás para que tu agente pueda obtener información de la web.
Editor de texto o IDE
Usa el editor que prefieras: VS Code, PyCharm o incluso un editor de texto sencillo como Notepad++ funcionarán. Escribirás código Python y editarás archivos de configuración.
Conocimientos básicos asumidos
Esta guía asume que tienes:
Conocimientos básicos de Python: familiaridad con la sintaxis de Python, las funciones y la ejecución de scripts. No necesitas ser un experto, pero debes saber escribir y ejecutar un programa simple de Python.
Comprensión de los entornos virtuales: una idea general de por qué son útiles los entornos virtuales (aislar las dependencias del proyecto). Si has usado venv o pip antes, estás listo.
Conceptos básicos de API: saber qué es una clave de API y cómo se usa para autenticar solicitudes. No se requiere experiencia profunda con APIs: te guiaremos en la configuración.
Con todo esto en marcha, estás listo para configurar tu proyecto y empezar a construir. En la siguiente sección instalaremos uv, inicializaremos tu proyecto y añadiremos las dependencias necesarias para poner ADK en funcionamiento.
Configuración de tu proyecto con uv
Ahora que tienes los requisitos previos resueltos, vamos a configurar tu proyecto de Python con uv. Esta sección te guía por la instalación de uv, la inicialización de un nuevo proyecto, la creación de un entorno virtual y la incorporación de las dependencias necesarias para Google Agent Development Kit (ADK) y la integración con la búsqueda de Tavily. Al usar uv en lugar de pip, disfrutarás de un flujo de trabajo más rápido y fluido.
Instalación de uv
uv es una herramienta independiente escrita en Rust, por lo que no necesitas una instalación previa de Python para empezar. A abril de 2025, la última versión está disponible en el sitio oficial del equipo de Astral. Así es como se instala:
En macOS/Linux:
Abre tu terminal y ejecuta:
bash
curl -LsSf https://astral.sh/uv/install.sh | sh
Esto descarga e instala uv en ~/.local/bin. Tras la instalación, asegúrate de que esté en tu PATH reiniciando la terminal o ejecutando:
bash
source ~/.local/bin/env
En Windows:
En PowerShell, ejecuta:
powershell
irm https://astral.sh/uv/install.ps1 | iex
El instalador añade uv a tu PATH automáticamente, pero puede que tengas que reiniciar PowerShell para usarlo.
Verifica la instalación:
bash
uv --version
Deberías ver una salida como uv 0.6.6 (o una versión posterior a abril de 2025). Si falla, revisa tu PATH o reinstala.
Inicialización de un nuevo proyecto de Python
Con uv instalado, vamos a crear un nuevo proyecto:
Inicializa el proyecto:
Ejecuta:
bash
uv init my-adk-agentcd my-adk-agent
Esto crea un directorio my-adk-agent con una estructura básica:
Define la versión de Python:
La versión de Python por defecto en .python-version (p. ej., 3.12) funciona con ADK, pero asegurémonos de usar 3.12 explícitamente:
bash
uv python pin 3.12
Si 3.12 no está instalada, uv puede descargarla:
bash
uv python install 3.12
Configuración de un entorno virtual
A diferencia de pip y venv, uv simplifica la creación de entornos:
bash
uv venv
Esto crea un directorio .venv en la raíz de tu proyecto usando Python 3.12. Verás:
text
Using Python 3.12.xCreating virtual environment at: .venvActivate with: source .venv/bin/activate
Puedes activarlo manualmente si es necesario (source .venv/bin/activate en macOS/Linux, .venv\Scripts\activate en Windows), pero uv run se encargará de esto automáticamente más adelante.
Añadir ADK y las dependencias
Ahora, añadamos el paquete ADK y el soporte de Tavily:
Añade Google ADK:
bash
uv add google-adk
Esto actualiza pyproject.toml:
toml
[project]dependencies = [ "google-adk>=x.x.x", # Latest version as of April 2025]
Añade el soporte de Tavily:
Como usaremos Tavily a través de la integración de LangChain, instala langchain-community y tavily-python:
Sincroniza el entorno:
Instala todas las dependencias en .venv:
bash
uv sync
Verás una salida que lista los paquetes instalados (p. ej., google-adk, langchain-community, tavily-python y sus dependencias) en apenas milisegundos: aquí es donde la velocidad de uv brilla frente a pip.
Tu proyecto ya está configurado con uv, listo para construir un agente ADK. En la siguiente sección configuraremos la API de Google AI Studio para alimentar nuestro agente con el modelo Gemini.
Bien, aquí está la siguiente sección:
Conexión con Gemini a través de AI Studio
Tu agente ADK necesita una forma de comunicarse con el Large Language Model (LLM) Gemini que impulsa su inteligencia. Esta comunicación se realiza mediante llamadas seguras a la API, que requieren credenciales de autenticación, normalmente una clave de API. Sin una clave válida, el servicio del LLM rechazará las solicitudes del agente, impidiendo que funcione.
Para desarrollo y prototipado, Google AI Studio ofrece una forma sencilla de obtener una clave de API.
Si aún no tienes una, crea una clave de API. Copia esta clave de forma segura: la necesitarás en el siguiente paso.
Configura tu entorno
La mejor forma de proporcionar la clave de API a tu aplicación ADK es mediante variables de entorno, gestionadas habitualmente con un archivo .env dentro del directorio de tu proyecto.
Dentro de la carpeta de tu proyecto de agente (la que contiene tu archivo agent.py), crea un nuevo archivo llamado .env.
Abre el archivo .env y añade las siguientes líneas, reemplazando "PASTE_YOUR_ACTUAL_API_KEY_HERE" con la clave que copiaste de AI Studio:
dotenv
# Use Google AI Studio (not Vertex AI)GOOGLE_GENAI_USE_VERTEXAI="False"# Your API KeyGOOGLE_API_KEY="PASTE_YOUR_ACTUAL_API_KEY_HERE"
La línea GOOGLE_GENAI_USE_VERTEXAI="False" indica explícitamente a ADK que use el backend de Google AI (que utiliza la GOOGLE_API_KEY) en lugar del backend de Vertex AI. ADK cargará automáticamente estas variables cuando tu agente se ejecute, permitiéndole autenticarse de forma segura con la API de Gemini.
Bien, aquí está la siguiente sección:
Construcción de tu primer agente básico
Con el entorno configurado y la clave de API establecida, vamos a crear el núcleo de nuestra aplicación de agente.
Configura la estructura del proyecto
Una estructura recomendada ayuda a mantener organizado el código de tu agente. En el directorio principal de tu proyecto (donde creaste la carpeta .venv), crea una estructura como esta:
Crea una carpeta llamada agent_module. Contendrá el código de tu agente.
Dentro de agent_module, crea un archivo vacío llamado __init__.py. Esto le indica a Python que trate la carpeta como un paquete. Añade la siguiente línea:
python
# agent_module/__init__.pyfrom . import agent
Dentro de agent_module, crea el archivo principal de la lógica de tu agente: agent.py.
Ya deberías tener el archivo .env en el directorio your_agent_project del paso anterior.
Define tu agente
Ahora, abre agent.py y define tu primer agente usando la clase Agent de ADK. Esta clase es la pieza central para definir la identidad, el modelo y las instrucciones de tu agente.
python
# agent_module/agent.pyfrom google.adk.agents import Agent# Define the root agent for your applicationroot_agent = Agent( # A unique name for your agent [cite: 167, 639] name="my_first_adk_agent", # Specify the Gemini model to use (ensure compatibility with AI Studio key) [cite: 19, 56, 168, 645] model="gemini-2.0-flash-exp", # Or "gemini-1.0-pro" etc. # A brief description of what the agent does [cite: 169, 642] description="A basic agent that can chat.", # Instructions guiding the agent's behavior and persona [cite: 171, 648] instruction="You are a friendly and helpful assistant. Respond concisely to user queries.", # Initially, we won't add specific tools [cite: 172, 659] tools=[])print(f"Agent '{root_agent.name}' defined.")
En este código:
name: le da a tu agente un ID único.
model: indica al agente qué modelo de Gemini usar para pensar y responder. Usamos un modelo Flash reciente adecuado para chat general.
description: resume brevemente el propósito del agente, algo especialmente útil en configuraciones multiagente.
instruction: proporciona la guía principal al LLM sobre cómo debe comportarse.
tools: una lista vacía por ahora, ya que este agente básico aún no usará herramientas externas.
Ejecución de tu agente (brevemente)
ADK proporciona herramientas de línea de comandos para interactuar con tu agente. Navega en tu terminal al directorio your_agent_project (el que contiene agent_module y .env) y puedes probar:
adk web: lanza una interfaz web interactiva en tu navegador, que te permite chatear con tu agente.
adk run agent_module: te permite chatear con el agente directamente en tu terminal.
Todavía no profundizaremos en la ejecución del agente, ya que primero necesitamos añadir memoria y herramientas, pero esto te da una idea de cómo interactuar con él más adelante.
Añadir memoria con Session State
Nuestro agente básico puede chatear, pero no tiene memoria. Cada vez que interactúas con él, empieza de cero, olvidando todo lo de los turnos anteriores. Para construir agentes más atractivos y útiles, necesitamos darles la capacidad de recordar el contexto y las interacciones pasadas. ADK lo consigue mediante el Session State (estado de sesión).
¿Qué es Session State?
Session State es esencialmente un banco de memoria para cada sesión de conversación individual. Técnicamente, es un diccionario de Python asociado a una sesión de usuario concreta. La información almacenada en este diccionario persiste a lo largo de múltiples turnos dentro de esa única conversación. Tanto tu agente como sus herramientas pueden leer y escribir en este estado, lo que les permite:
Recordar las preferencias del usuario.
Recuperar información mencionada antes en la conversación.
Personalizar las respuestas basándose en interacciones pasadas.
Uso de InMemorySessionService
Para este tutorial usaremos InMemorySessionService de ADK. Como su nombre indica, almacena el historial y el estado de la sesión directamente en la memoria de tu ordenador. Es perfecto para desarrollo y pruebas, aunque la memoria se perderá cuando tu aplicación se detenga.
Configuración del Runner y el servicio de sesión
Para gestionar sesiones y ejecutar tu agente necesitas dos componentes más: InMemorySessionService y Runner. Añadamos el código de configuración, normalmente en un script principal o junto a la definición de tu agente:
python
# Add these imports to your agent.py or a main scriptfrom google.adk.sessions import InMemorySessionServicefrom google.adk.runners import Runnerfrom google.adk.agents import Agent # Assuming root_agent is defined as before# Define constants for the app and session identificationAPP_NAME = "my_first_adk_app"USER_ID = "user_test_1" # Identifier for the userSESSION_ID = "session_abc_123" # Identifier for this specific conversation# 1. Create the Session Service instancesession_service = InMemorySessionService()print("Session Service created.")# 2. Create the specific session (can initialize state here if needed)session = session_service.create_session( app_name=APP_NAME, user_id=USER_ID, session_id=SESSION_ID # state={"initial_key": "initial_value"} # Optional: initial state)print(f"Session '{SESSION_ID}' created.")# 3. Create the Runner instance# The Runner orchestrates the agent's execution and uses the session servicerunner = Runner( agent=root_agent, # Your agent defined earlier app_name=APP_NAME, session_service=session_service)print(f"Runner created for agent '{root_agent.name}'.")# (You would then use 'runner.run()' or 'runner.run_async()' to interact)
Acceso al estado en las herramientas
La principal forma en que las herramientas interactúan con la memoria es a través del objeto ToolContext. Si defines una función de herramienta que acepta tool_context: ToolContext como último argumento, ADK proporciona automáticamente este objeto cuando se llama a la herramienta.
python
# Example tool demonstrating state accessfrom google.adk.tools.tool_context import ToolContextdef remember_something(data_to_remember: str, tool_context: ToolContext) -> dict: """Reads previous data from state and saves new data.""" print("--- Tool: remember_something called ---") # Read from state (use .get() for safety) previous_data = tool_context.state.get("user_data", "nothing") print(f"--- Tool: Found previous data: '{previous_data}' ---") # # Write new data to state tool_context.state["user_data"] = data_to_remember # [cite: 354] print(f"--- Tool: Saved new data: '{data_to_remember}' ---") return {"status": "success", "message": f"I remembered '{data_to_remember}'. Before that, I knew about '{previous_data}'."}# (You would add 'remember_something' to the agent's 'tools' list)
Esto permite a las herramientas adaptar dinámicamente su comportamiento según lo que haya ocurrido antes en la conversación.
Nota rápida sobre output_key: ADK también ofrece un atajo. Al definir output_key="some_name" al crear un Agent, la respuesta de texto final del agente en cada turno se guardará automáticamente en session.state["some_name"].
Ahora que nuestro agente tiene una forma de recordar cosas, ¡démosle algunas herramientas para interactuar con el mundo exterior!
Mejora de tu agente con herramientas: búsqueda Tavily
Nuestro agente ya puede chatear y recordar cosas dentro de una sesión. Sin embargo, su conocimiento está limitado a aquello con lo que se entrenó el modelo Gemini subyacente. Para hacerlo realmente potente, necesitamos darle acceso a información en tiempo real y capacidades externas. En ADK, esto se hace con Tools (herramientas).
Las herramientas son funciones o servicios que permiten a tu agente interactuar con el mundo exterior: obtener datos de APIs, consultar bases de datos, realizar cálculos o, como haremos ahora, buscar en la web.
Integración de herramientas de terceros: LangChain y Tavily
ADK está diseñado para ser extensible y funciona bien con otros frameworks populares de IA. Podemos integrar fácilmente herramientas creadas para librerías como LangChain. Usaremos el wrapper LangchainTool de ADK para incorporar la API de búsqueda de Tavily, un servicio diseñado específicamente para que los agentes de IA obtengan resultados de búsqueda actualizados.
Configuración de Tavily
Instala las dependencias: añade las librerías necesarias de LangChain y Tavily usando uv:
bash
# Run this in your activated virtual environmentuv add langchain_community tavily-python
Obtén la clave de API de Tavily:
Regístrate para obtener una clave de API gratuita en el sitio web de Tavily.
Añade esta clave a tu archivo .env:
dotenv
# .env file content (add this line)TAVILY_API_KEY="PASTE_YOUR_TAVILY_API_KEY_HERE"
Asegúrate de que tu aplicación cargue las variables de entorno desde este archivo (ADK suele hacerlo automáticamente, o puedes usar una librería como python-dotenv).
Uso del wrapper LangchainTool
Ahora, integremos Tavily en el código de nuestro agente:
Importa las clases necesarias en tu agent.py:
python
# Add these importsfrom google.adk.tools.langchain_tool import LangchainToolfrom langchain_community.tools import TavilySearchResultsimport os # To potentially check for the API key
Instancia y envuelve la herramienta: crea una instancia de la herramienta de LangChain y envuélvela para ADK:
python
# Instantiate the LangChain Tavily tool# You can configure options like max_resultstavily_search_tool_instance = TavilySearchResults( max_results=3, include_answer=True # Ask Tavily to provide a direct answer if possible)# Wrap it with ADK's LangchainTooladk_tavily_tool = LangchainTool(tool=tavily_search_tool_instance)print("Tavily search tool wrapped for ADK.")
Actualiza la definición de tu agente
Por último, modifica la definición de tu agente para incluir la nueva herramienta y actualiza sus instrucciones para que sepa cuándo usarla:
python
# Modify your existing root_agent definition in agent.pyroot_agent = Agent( name="my_first_adk_agent", # Or maybe rename to "research_agent" model="gemini-2.0-flash-exp", description="A helpful assistant that can search the web for current information.", instruction="""You are a friendly and helpful assistant.If the user asks for information that might require up-to-date details, recent events, or searching the web, use the 'TavilySearchResults' tool.Otherwise, answer directly based on your knowledge.Remember information provided earlier in the conversation using session state.""", # Added mention of memory # Add the wrapped Tavily tool to the list tools=[adk_tavily_tool] # Add any other tools like 'remember_something' here too if desired)print(f"Agent '{root_agent.name}' updated with Tavily tool.")# Ensure your Runner is using this updated 'root_agent' instancerunner = Runner( agent=root_agent, # Make sure this uses the updated agent app_name=APP_NAME, session_service=session_service)
Ahora, cuando ejecutes tu agente y hagas una pregunta que requiera información actual (p. ej., «¿Cuáles son las últimas noticias sobre agentes de IA?» o «¿Qué tiempo hace en Londres ahora mismo?»), el agente, guiado por sus instrucciones, debería reconocer la necesidad de usar la herramienta TavilySearchResults para obtener y ofrecer una respuesta relevante y actualizada.
Código completo:
python
# agent_module/agent.pyimport osimport asynciofrom dotenv import load_dotenvfrom google.adk.sessions import InMemorySessionServicefrom google.adk.runners import Runnerfrom google.adk.agents import Agentfrom google.adk.tools.tool_context import ToolContextfrom google.adk.tools.langchain_tool import LangchainToolfrom langchain_community.tools import TavilySearchResultsfrom google.genai import types # For creating message Content/Parts# --- Load Environment Variables ---# Ensure you have a .env file in the parent directory with your keys# Requires: pip install python-dotenv (or uv install python-dotenv)load_dotenv()# Check if keys are loaded (optional but good practice)if not os.getenv("GOOGLE_API_KEY"): print("Warning: GOOGLE_API_KEY environment variable not set.")if not os.getenv("TAVILY_API_KEY"): print("Warning: TAVILY_API_KEY environment variable not set.")# --- Tool Definitions ---def remember_something(data_to_remember: str, tool_context: ToolContext) -> dict: """ Reads previous data from state ('user_data') and saves new data to the same state key. Used to demonstrate agent memory. """ print("--- Tool: remember_something called ---") # Read from state (use .get() for safety, provide default) previous_data = tool_context.state.get("user_data", "nothing") print(f"--- Tool: Found previous data in state['user_data']: '{previous_data}' ---") # Write new data to state tool_context.state["user_data"] = data_to_remember print(f"--- Tool: Saved new data to state['user_data']: '{data_to_remember}' ---") return {"status": "success", "message": f"Okay, I've noted down '{data_to_remember}'. Before that, I had noted '{previous_data}'."}# --- Tool Setup ---# Instantiate the LangChain Tavily tooltavily_search_tool_instance = TavilySearchResults( max_results=3, # Limit the number of search results include_answer=True # Ask Tavily to provide a direct answer if possible)# Wrap it with ADK's LangchainTool for compatibilityadk_tavily_tool = LangchainTool(tool=tavily_search_tool_instance)print("Tavily search tool wrapped for ADK.")# --- Agent Definition ---root_agent = Agent( name="my_adk_agent_with_tools", # Ensure this model is available with your GOOGLE_API_KEY (AI Studio) model="gemini-2.0-flash-exp", # Or gemini-1.0-pro, etc. description="A helpful assistant that can search the web using Tavily and remember user data.", instruction="""You are a friendly and helpful assistant.1. If the user asks for information that might require up-to-date details, recent events, or specific web searching, use the 'TavilySearchResults' tool.2. If the user asks you to remember something specific, use the 'remember_something' tool to save it. Also mention what was previously remembered if anything.3. Use information remembered earlier (from session state) if relevant to the current query.4. Otherwise, answer directly based on your general knowledge.""", # Include both tools the agent can use tools=[adk_tavily_tool, remember_something])print(f"Agent '{root_agent.name}' defined with tools.")# --- Session and Runner Setup ---APP_NAME = "my_first_adk_app"USER_ID = "user_dev_1" # Identifier for the userSESSION_ID = "session_main_1" # Identifier for this specific conversation# Create the Session Service instance (stores memory)session_service = InMemorySessionService()print("Session Service created.")# Create the specific session for this user and appsession = session_service.create_session( app_name=APP_NAME, user_id=USER_ID, session_id=SESSION_ID # state={"user_data": "initial value"} # Optional: prime the state memory)print(f"Session '{SESSION_ID}' created.")# Create the Runner instance (orchestrates agent execution)runner = Runner( agent=root_agent, app_name=APP_NAME, session_service=session_service)print(f"Runner created for agent '{root_agent.name}'.")# --- Interaction Logic ---async def run_conversation(): """Runs a simple interactive loop to chat with the agent.""" print("\n--- Starting Conversation (type 'quit' to exit) ---") while True: try: user_query = input("You: ") if user_query.lower() == 'quit': print("Exiting conversation.") break # Prepare the user message in ADK format content = types.Content(role='user', parts=[types.Part(text=user_query)]) final_response_text = "Agent did not produce a final response." # Use run_async to process the message and get events async for event in runner.run_async(user_id=USER_ID, session_id=SESSION_ID, new_message=content): # You can uncomment below to see all events (tool calls, etc.) # print(f" [Event] Author: {event.author}, Type: {type(event).__name__}, Final: {event.is_final_response()}") # Look for the final response event if event.is_final_response(): if event.content and event.content.parts: # Assuming text response in the first part final_response_text = event.content.parts[0].text elif event.actions and event.actions.escalate: final_response_text = f"Agent escalated: {event.error_message or 'No specific message.'}" break # Stop processing events for this turn print(f"Agent: {final_response_text}") # Optional: Print current state for debugging # current_session = session_service.get_session(APP_NAME, USER_ID, SESSION_ID) # print(f" (Debug State: {current_session.state})") except Exception as e: print(f"An error occurred: {e}")# --- Run the Application ---if __name__ == "__main__": # Check dependencies are installed try: import langchain_community import tavily except ImportError: print("Error: Missing dependencies. Please run:") print("uv add langchain_community tavily-python python-dotenv") exit() # Run the asynchronous conversation loop try: asyncio.run(run_conversation()) except RuntimeError as e: # Handle specific error when running asyncio.run in an already running loop (like Jupyter/Colab) if "cannot be called from a running event loop" in str(e): print("\nCannot start a new event loop. If in a Jupyter Notebook, run:") print("await run_conversation()") else: raise e # Re-raise other runtime errors
Ejecutar en la terminal
Puedes usar la terminal para ejecutar la herramienta, con:
bash
uv run python -m agent_module.agent
Esto producirá algo como:
bash
Tavily search tool wrapped for ADK.Agent 'my_adk_agent_with_tools' defined with tools.Session Service created.Session 'session_main_1' created.Runner created for agent 'my_adk_agent_with_tools'.<frozen runpy>:128: RuntimeWarning: 'agent_module.agent' found in sys.modules after import of package 'agent_module', but prior to execution of 'agent_module.agent'; this may result in unpredictable behaviourTavily search tool wrapped for ADK.Agent 'my_adk_agent_with_tools' defined with tools.Session Service created.Session 'session_main_1' created.Runner created for agent 'my_adk_agent_with_tools'.--- Starting Conversation (type 'quit' to exit) ---You: what are the latest news on tech in april 2025Warning: there are non-text parts in the response: ['function_call'],returning concatenated text result from text parts,check out the non text parts for full response from model.Agent: In April 2025, some of the biggest tech news included: Apple releasing new software updates, Amazon developing an AI model to enhance customer experience, Google announcing a quantum computing breakthrough, and NVIDIA advancing confidential computing on its Blackwell infrastructure.You:
Conclusión
¡Enhorabuena! Has construido con éxito tu primer agente de IA usando Google Agent Development Kit. Hemos repasado los pasos esenciales:
Configurar tu entorno de desarrollo usando uv para la gestión de paquetes.
Conectar tu agente a los potentes modelos Gemini mediante una clave de API de Google AI Studio.
Definir una estructura básica de agente con su identidad e instrucciones principales.
Integrar una herramienta de terceros (búsqueda Tavily) usando los wrappers de ADK, dando a tu agente acceso a información web en tiempo real.
Este recorrido demuestra la flexibilidad y la potencia de ADK. Has visto lo rápido que puedes poner en marcha un agente básico y lo fácil que es mejorarlo con memoria y herramientas externas. ADK proporciona los bloques de construcción para todo, desde bots simples hasta sistemas multiagente complejos capaces de una orquestación sofisticada y de aprovechar un rico ecosistema de herramientas.
¿A dónde ir ahora?
Tu primer agente es solo el principio. Aquí tienes algunas ideas para seguir explorando ADK:
Explora los tutoriales: profundiza en conceptos como la delegación multiagente, la gestión avanzada del estado y los callbacks de seguridad siguiendo los tutoriales oficiales de ADK.
Integra APIs reales: sustituye los datos de ejemplo o las herramientas simples por APIs del mundo real para el tiempo, finanzas u otros servicios.
Añade más herramientas: experimenta con otras herramientas integradas como Code Execution o Vertex AI Search, o integra más herramientas de LangChain o CrewAi.
Construye equipos de agentes: diseña sistemas con varios agentes especializados que colaboren en tareas.
Memoria persistente: investiga cómo almacenar el estado de la sesión de forma más permanente usando bases de datos en lugar de solo memoria.
Revisa los ejemplos: echa un vistazo a los ADK Sample Agents para más ejemplos.
La documentación oficial de ADK es tu recurso completo para todas las funciones, referencias de API y guías avanzadas.
Ahora tienes una base sólida para construir agentes inteligentes y capaces con Google Agent Development Kit. ¡Feliz construcción!