Puedes integrar MongoDB con Google ADK, un framework de Python de código abierto para la creación de agentes de IA. La integración proporciona tres componentes:
MongoDbToolset, que proporciona herramientas de búsqueda vectorial y de búsqueda híbrida para agentes de MongoDB.
MongoDbSessionService, que persiste las sesiones, los eventos y el estado de los agentes en MongoDB.
MongoDbMemoryService, que almacena eventos de sesión en MongoDB para la recuperación de memoria a largo plazo basada en palabras clave.
Empezar
Para completar un tutorial que configure Google ADK para usar MongoDB, consulte la sección "Primeros pasos con la integración de MongoDB y Google ADK".
Instalación
Para instalar Google ADK y las dependencias de MongoDB, ejecute el siguiente comando:
pip install "google-adk[mongodb]"Este comando también instala el controlador PyMongo. La integración requiere PyMongo v4.9 o posterior.
Uso
Esta sección describe los tres componentes que puede utilizar para integrar MongoDB con Google ADK.
MongoDbToolset
MongoDbToolset es una clase de conjunto de herramientas que incluye las siguientes herramientas de búsqueda de solo lectura, que pueden acceder a una base de datos MongoDB:
mongodb_vector_search: Clasifica los documentos según su similitud de incrustación.mongodb_hybrid_searchCombina esa clasificación de similitud con una clasificación de texto completo.
Importante
Índices requeridos
Para utilizar las herramientas de búsqueda anteriores, debe crear los índices descritos en la sección Directrices para la creación de índices.
Al llamar a una de estas herramientas, el modelo del agente pasa una consulta en texto plano como argumento de la herramienta. Ambas herramientas integran este texto internamente, por lo que el modelo nunca produce ni procesa un vector.
Para ver un ejemplo que vincula el conjunto de herramientas a su base de datos MongoDB, seleccione la pestaña que corresponda a su método de conexión preferido:
El siguiente ejemplo muestra cómo usar una cadena de conexión para configurar un conjunto de herramientas:
from google.adk.agents import Agentfrom google.adk.integrations.mongodb import MongoDbToolset
toolset = MongoDbToolset( connection_string="<connection_string>", database_name="products_db",)
agent = Agent( model="gemini-2.5-flash", name="product_search_agent", instruction=( "Search the products collection with your MongoDB tools." ), tools=[toolset],)Para obtener más información sobre cómo encontrar su cadena de conexión, consulte Conectarse a un clúster mediante bibliotecas cliente.
El siguiente ejemplo muestra cómo usar una cadena de conexión almacenada en una variable de entorno para configurar un conjunto de herramientas:
from google.adk.agents import Agentfrom google.adk.integrations.mongodb import MongoDbToolset
toolset = MongoDbToolset( connection_string_env_var="MONGODB_URI", database_name="products_db",)
agent = Agent( model="gemini-2.5-flash", name="product_search_agent", instruction=( "Search the products collection with your MongoDB tools." ), tools=[toolset],)Para las implementaciones de Atlas Agent Engine, recomendamos que utilice este parámetro en lugar de connection_string.
Para las opciones de conexión que el conjunto de herramientas no expone, puede usar su propia instancia pymongo.MongoClient en lugar de una cadena de conexión. El siguiente ejemplo muestra cómo usar un cliente para configurar un conjunto de herramientas:
from pymongo import MongoClientfrom google.adk.integrations.mongodb import MongoDbToolset
client = MongoClient("<connection_string>")toolset = MongoDbToolset(database_name="products_db", mongo_client=client)
# ... Pass toolset to an agentPara obtener más información sobre los clientes de PyMongo, consulte la sección "Crear un MongoClient" en la documentación de PyMongo.
Nota
El conjunto de herramientas no se hace cargo de este cliente. Usted es responsable de cerrarlo.
Indique la colección de destino en las instrucciones del agente, ya que el modelo selecciona una colección en cada llamada. Para conocer las implicaciones de esto en los datos a los que puede acceder el conjunto de herramientas, consulte la sección Selección de colección.
Las credenciales para el modelo de incrustación provienen de las Credenciales predeterminadas de la aplicación, el mecanismo estándar de Google Cloud para descubrir credenciales. Las credenciales para MongoDB provienen de la cadena de conexión.
Configurar los ajustes
MongoDbToolSettings es una clase de configuración que configura el modelo de incrustación, los nombres de los índices y los límites de búsqueda que utiliza MongoDbToolset. Pase una instancia de esta clase al parámetro settings de MongoDbToolset para anular sus valores predeterminados, como se muestra en el siguiente ejemplo:
from google.adk.integrations.mongodb import MongoDbToolsetfrom google.adk.integrations.mongodb import MongoDbToolSettings
toolset = MongoDbToolset( connection_string="<connection_string>", database_name="products_db", settings=MongoDbToolSettings(default_limit=8, max_results=20),)Modos de incrustación
Antes de ejecutar una búsqueda vectorial, el conjunto de herramientas inserta el texto de su consulta. Seleccione la pestaña Atlas Automated Embedding para permitir que Atlas inserte las consultas automáticamente, o seleccione la pestaña Google embedding models para ver el comportamiento de inserción predeterminado:
Para utilizar Atlas Automated Embedding, establezca el parámetro use_mongodb_auto_embedding en True en la clase de configuración MongoDbToolSettings. El siguiente ejemplo muestra esta configuración:
from google.adk.integrations.mongodb import MongoDbToolsetfrom google.adk.integrations.mongodb import MongoDbToolSettings
toolset = MongoDbToolset( connection_string="<connection_string>", database_name="products_db", settings=MongoDbToolSettings( use_mongodb_auto_embedding=True, mongodb_auto_embedding_model="voyage-4", # optional ),)Con esta configuración, el conjunto de herramientas no realiza una llamada de incrustación de Google. En su lugar, la etapa de búsqueda vectorial recibe el texto de la consulta y Atlas genera la incrustación con el modelo de IA Voyage configurado en el índice. El campo buscado debe estar indexado como el tipo autoEmbed.
Tip
Función de vista previa
La función de incrustación automática de Atlas también está disponible como función de vista previa en implementaciones autogestionadas. Para obtener más información, consulte Acerca del tipo de incrustación automática.
Por defecto, el conjunto de herramientas integra la consulta mediante un modelo de incrustación de Vertex AI y pasa el vector resultante como el campo queryVector de la etapa de agregación $vectorSearch. El siguiente ejemplo muestra esta configuración predeterminada:
from google.adk.integrations.mongodb import MongoDbToolset
toolset = MongoDbToolset( connection_string="<connection_string>", database_name="products_db",)Este modo requiere credenciales predeterminadas de la aplicación para la API de incrustación. Las incrustaciones almacenadas en sus documentos deben provenir del mismo modelo de Vertex AI que incrusta la consulta, lo cual se configura con la opción vertex_ai_embedding_model_name.
Selección de colección
El modelo selecciona la colección en cada llamada, por lo que un conjunto de herramientas vinculado a una base de datos accede a todas las colecciones de esa base de datos que tengan un índice de búsqueda. Configure el parámetro database_name con una base de datos que contenga solo los datos que el agente tiene permiso para leer y almacene cualquier otro dato en una base de datos separada.
El parámetro tool_filter no restringe las colecciones a las que el modelo puede acceder, ya que selecciona herramientas completas y no recibe argumentos de llamada. Para imponer una lista de colecciones permitidas, utilice el hook before_tool_callback, que sí recibe los argumentos de llamada:
from google.adk.agents import Agentfrom google.adk.integrations.mongodb import MongoDbToolset
def allow_products_only(tool, args, tool_context): if tool.name.startswith("mongodb_") and args.get("collection_name") != "products": return { "status": "ERROR", "error_details": "Only the products collection may be searched.", } return None
agent = Agent( name="product_search_agent", instruction="Answer questions about products.", tools=[ MongoDbToolset( connection_string="<connection_string>", database_name="products_db", ) ], before_tool_callback=allow_products_only,)Si la función de devolución de llamada devuelve un diccionario, ADK nunca ejecuta la herramienta de búsqueda. En su lugar, envía ese diccionario al agente como si fuera la propia salida de la herramienta. Devolver None permite que la herramienta de búsqueda se ejecute con normalidad.
Servicio de sesión de MongoDB
MongoDbSessionService Almacena sesiones, eventos y estado con ámbito de aplicación, usuario y sesión en MongoDB. Pásalo a un objeto Runner para configurar el historial de conversaciones persistente para tu agente, como se muestra en el siguiente ejemplo:
from google.adk.integrations.mongodb import MongoDbSessionServicefrom google.adk.runners import Runner
session_service = MongoDbSessionService( connection_string="<connection_string>", database_name="my_app",)
runner = Runner( agent=agent, app_name="my_app", session_service=session_service,)Diseño del documento
MongoDbSessionService Almacena datos en las siguientes colecciones:
Colección | _id Valor | Contenido |
|---|---|---|
|
| Estado con ámbito de sesión en formato JSON, marcas de tiempo y un número de revisión de concurrencia optimista. |
|
| Evento serializado completo |
|
| Estado con ámbito de aplicación |
|
| Estado con ámbito de usuario |
Google ADK limita el estado a la aplicación, un usuario o la sesión actual con un prefijo app: o user: en la clave de estado. MongoDbSessionService almacena cada valor en la colección correspondiente y elimina el prefijo de la clave almacenada, por lo que un valor establecido con la clave app:theme se almacena en la colección app_states como theme.
Nota
El campo state de cada colección almacena sus claves y valores como una cadena codificada en JSON, no como un documento nativo de MongoDB. Como resultado, una clave de estado que contiene un carácter prohibido por MongoDB en los nombres de los campos de los documentos, como . o $, se almacena y recupera sin pérdida ni corrupción de datos.
Modelo de concurrencia
El modelo de concurrencia del servicio depende de su tipo de implementación:
En un conjunto de réplicas, un clúster fragmentado o un clúster Atlas, cada escritura de varios documentos se ejecuta en una transacción, por lo que se confirma o se cancela de forma atómica.
En una instancia
mongodindependiente, o en cualquier implementación sin soporte para transacciones, el servicio recurre a escrituras secuenciales con una comprobación de revisión de concurrencia optimista en el documento de sesión.
Dentro de un mismo proceso, un bloqueo por sesión impide que se escriba en la misma sesión simultáneamente. Este bloqueo no tiene efecto en múltiples procesos, por ejemplo, cuando varias instancias de la aplicación escriben en la misma sesión al mismo tiempo.
En múltiples procesos, la comprobación de revisión del documento de sesión evita la corrupción de datos. Si dos escrituras compiten, la que se completa primero incrementa el número de revisión, y la otra no supera la comprobación. Su aplicación debe detectar este fallo, recargar la sesión para obtener su estado actual y volver a intentar la escritura.
Servicio de memoria de MongoDB
MongoDbMemoryService Almacena los eventos de sesión en una colección de memoria y los recupera mediante la coincidencia de palabras clave. Pásalo a un objeto Runner para configurar la memoria a largo plazo entre sesiones, como se muestra en el siguiente ejemplo:
from google.adk.integrations.mongodb import MongoDbMemoryServicefrom google.adk.runners import Runner
memory_service = MongoDbMemoryService( connection_string="<connection_string>", database_name="my_app",)
runner = Runner( agent=agent, app_name="my_app", memory_service=memory_service,)El objeto Runner llama al método add_session_to_memory() del servicio de memoria para almacenar los eventos de una sesión en la memoria. Cada evento almacenado se guarda como un documento en la colección de recuerdos, que se configura mediante el parámetro memories_collection. Estos documentos contienen las palabras clave en minúsculas extraídas del texto del evento.
Considerations
Al utilizar el servicio de memoria, tenga en cuenta el siguiente comportamiento:
Al realizar una búsqueda en la memoria, el servicio devuelve documentos cuya matriz de palabras clave coincide con las palabras clave de la consulta.
La ingesta es idempotente. Si vuelves a ingerir una sesión, el servicio sobrescribe sus recuerdos en lugar de duplicarlos.
La recuperación realiza una búsqueda por palabra clave y no requiere un modelo de incrustación, credenciales de Google ni un índice vectorial. Por lo tanto, la recuperación de memoria funciona en cualquier implementación de MongoDB.
Directrices del índice
Esta sección describe los índices necesarios para integrar MongoDB y Google ADK, e incluye índices recomendados para mejorar el rendimiento.
Índices necesarios de MongoDbToolset
Cada colección que el agente consulta requiere los siguientes índices:
Indexa el campo que almacena las incrustaciones en MongoDB Vector Search, con el campo indexado como tipo
vector. Si utilizas Atlas Automated Embedding, indexa el campo como tipoautoEmbed.Índice de búsqueda de MongoDB en el campo que almacena el texto a buscar, si utiliza la herramienta
mongodb_hybrid_search
MongoDbToolset Lee estos índices por nombre y no los crea. Para aprender a crear estos índices, consulte Crear un índice de búsqueda vectorial de MongoDB e Índice de búsqueda de MongoDB.
Índices de servicios sugeridos
La mayoría de las lecturas y todas las escrituras utilizan el campo _id, que MongoDB indexa automáticamente. Sin embargo, los siguientes patrones de lectura no utilizan el campo _id y requieren un escaneo completo de la colección a menos que tenga un índice:
Lectura de los eventos de una sesión por aplicación, usuario y sesión, ordenados por marca de tiempo.
Búsqueda en la memoria por aplicación y usuario con coincidencia en la matriz de palabras clave.
Por defecto, MongoDbSessionService y MongoDbMemoryService crean los siguientes índices sugeridos en su primer uso:
Colección | Index | Campos indexados y orden de clasificación |
|---|---|---|
|
|
|
|
|
|
|
|
|
Si establece el parámetro ensure_indexes en False, el servicio no creará estos índices sugeridos.
Nota
La creación de índices es idempotente, por lo que puede dejar el parámetro ensure_indexes con su valor predeterminado de True. Este parámetro requiere que el usuario de MongoDB mantenga la acción createIndex sobre las colecciones sessions, events y memories.
Directrices sobre permisos
En lugar de utilizar un único usuario administrador, recomendamos utilizar dos usuarios de base de datos independientes para limitar los privilegios a las necesidades de cada componente.
La siguiente tabla describe la configuración de privilegios mínimos sugerida para dos usuarios de la base de datos:
Usuario de base de datos | Utilizado por | Privilegios mínimos |
|---|---|---|
Buscar usuario (solo lectura) |
|
|
Usuario de estado (lectura-escritura) |
| * |
Importante
Los privilegios que aparecen en la tabla anterior son acciones de MongoDB, no roles integrados de Atlas. Para otorgarlos, cree un rol personalizado para cada usuario con estas acciones, limitado a las colecciones indicadas.
Recursos adicionales
Para obtener más información sobre cómo usar Google ADK con MongoDB, consulte los siguientes recursos:
Repositorio deGoogle ADK en GitHub