Para agentes de IA: hay un índice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las páginas están disponibles agregando .md a cualquier ruta URL.

Integrar MongoDB con Google ADK

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.

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".

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.

Esta sección describe los tres componentes que puede utilizar para integrar MongoDB con Google ADK.

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.

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.

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),)

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.

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.

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,)

MongoDbSessionService Almacena datos en las siguientes colecciones:

Colección
_id Valor
Contenido

sessions

<app_name>/<user_id>/<session_id>

Estado con ámbito de sesión en formato JSON, marcas de tiempo y un número de revisión de concurrencia optimista.

events

<app_name>/<user_id>/<session_id>/<event_id>

Evento serializado completo

app_states

<app_name>

Estado con ámbito de aplicación

user_states

<app_name>/<user_id>

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.

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 mongod independiente, 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.

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.

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.

Esta sección describe los índices necesarios para integrar MongoDB y Google ADK, e incluye índices recomendados para mejorar el rendimiento.

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 tipo autoEmbed.

  • Í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.

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

events

app_user_session_ts

(app_name, user_id, session_id, timestamp DESC, revision DESC)

sessions

app_user

(app_name, user_id)

memories

app_user_keywords

(app_name, user_id, keywords) (multikey)

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.

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)

MongoDbToolset

find En cada colección, el agente realiza búsquedas.

Usuario de estado (lectura-escritura)

MongoDbSessionService, MongoDbMemoryService

* find, insert, update, remove en las colecciones sessions y events
* find, insert, update en las colecciones app_states, user_states y memories
* Si establece ensure_indexes en True, agregue la acción createIndex en las colecciones sessions, events y memories

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.

Para obtener más información sobre cómo usar Google ADK con MongoDB, consulte los siguientes recursos: