Você pode integrar o MongoDB ao Google ADK, um framework Python de código aberto para criar agentes de IA. A integração fornece três componentes:
MongoDbToolset, que fornece Vector Search MongoDB e ferramentas de pesquisa híbrida para agentes
MongoDbSessionService, que persiste sessões de agente , eventos e estado no MongoDB
MongoDbMemoryService, que armazena eventos de sessão no MongoDB para recuperação de memória de longo prazo baseada em palavras-chave
Começar
Para concluir um tutorial que configura o Google ADK para usar o MongoDB, consulte Introdução à integração do MongoDB Google ADK.
Instalação
Para instalar o Google ADK e as dependências do MongoDB , execute o seguinte comando:
pip install "google-adk[mongodb]"Este comando também instala o driver do PyMongo. A integração exige o PyMongo v4.9 ou posterior.
Uso
Esta seção descreve os três componentes que você pode usar para integrar o MongoDB ao Google ADK.
MongoDbToolset
MongoDbToolset é uma classe de conjunto de ferramentas que inclui as seguintes ferramentas de pesquisa somente leitura, que podem acessar um banco de dados MongoDB :
mongodb_vector_search: Classifica documentos por incorporação de similaridademongodb_hybrid_search: Combina essa classificação de similaridade com uma classificação de texto completo
Importante
Índices exigidos
Para usar as ferramentas de pesquisa anteriores, você deve criar os índices descritos na seção Diretivas de índice .
Ao chamar uma dessas ferramentas, o modelo de agente passa uma query de texto sem formatação como argumento da ferramenta. Ambas as ferramentas incorporam este texto internamente, então o modelo nunca produz ou manipula um vetor.
Para visualizar um exemplo que vincula o conjunto de ferramentas ao seu banco de dados MongoDB , selecione a guia correspondente ao seu método de conexão preferido:
O exemplo a seguir mostra como usar uma string de conexão para configurar um conjunto de ferramentas:
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 saber mais sobre como localizar sua string de conexão, consulte Conectar-se a um cluster por meio de bibliotecas de clientes.
O exemplo a seguir mostra como usar uma string de conexão armazenada em uma variável de ambiente para configurar um conjunto de ferramentas:
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 sistemas do Atlas Agent Engine, recomendamos que você utilize este parâmetro em vez de connection_string.
Para opções de conexão que o conjunto de ferramentas não expõe, você pode usar sua própria instância do pymongo.MongoClient em vez de uma string de conexão. O exemplo a seguir mostra como usar um cliente para configurar um conjunto de ferramentas:
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 saber mais sobre os clientes PyMongo,consulte Criar um MongoClient na documentação do PyMongo.
Observação
O conjunto de ferramentas não assume a propriedade deste cliente. Você é responsável por fechá-lo.
Nomeie a collection de destino nas instruções do agente, porque o modelo escolhe uma collection em cada chamada. Para saber as implicações que isso tem para os dados que o conjunto de ferramentas pode acessar, consulte a seção Escolha da Coleção.
As credenciais do modelo de incorporação vêm do Application Default Credentials, o mecanismo padrão do Google Cloud para descobrir credenciais. As credenciais do MongoDB vêm da string de conexão.
Definir configurações
MongoDbToolSettings é uma classe de configurações que configura o modelo de incorporação, nomes de índice e limites de pesquisa que o MongoDbToolset utiliza. Passe uma instância dessa classe para o parâmetro settings de MongoDbToolset para substituir seus padrões, conforme mostrado no exemplo a seguir:
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),)Incorporando modos
Antes de executar uma pesquisa vetorial, o conjunto de ferramentas incorpora seu texto de query. Selecione a aba Atlas Automated Embedding para permitir que o Atlas incorpore queries automaticamente ou selecione a aba Google embedding models para visualizar o comportamento de incorporação padrão:
Para utilizar o Atlas Automated Embedding, configure o parâmetro use_mongodb_auto_embedding para True na classe de configuração MongoDbToolSettings. O exemplo a seguir mostra esta configuração:
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 ),)Com essa configuração, o conjunto de ferramentas não faz uma chamada de incorporação do Google. Em vez disso, o estágio de pesquisa vetorial recebe o texto da query e o Atlas gera a incorporação com o modelo do Voyage AI configurado no índice. O campo pesquisado deve ser indexado como o tipo autoEmbed.
Dica
Recurso de visualização
O Atlas Automated Embedding também está disponível como um recurso de visualização em implementações autogerenciadas. Para saber mais, consulte Sobre o tipo autoEmbed.
Por padrão, o conjunto de ferramentas incorpora a query por meio de um modelo de incorporação da Vertex AI e passa o vetor resultante como o campo queryVector do estágio de agregação $vectorSearch. O exemplo a seguir mostra esta configuração padrão:
from google.adk.integrations.mongodb import MongoDbToolset
toolset = MongoDbToolset( connection_string="<connection_string>", database_name="products_db",)Este modo requer Application Default Credentials para a API de incorporação. As incorporações armazenadas em seus documentos devem vir do mesmo modelo de AI do Vertex que incorpora a query, que a opção vertex_ai_embedding_model_name define.
Escolha da coleção
O modelo escolhe a collection em cada chamada, portanto, um conjunto de ferramentas vinculado a um banco de dados acessa cada collection nesse banco de dados que tenha um índice de pesquisa}. Defina o parâmetro database_name como um banco de dados que contenha somente dados que o agente tem permissão para ler e armazene quaisquer outros dados em um banco de dados separado.
O parâmetro tool_filter não restringe quais collections o modelo pode acessar, pois seleciona ferramentas inteiras e não recebe argumentos de chamada. Para impor uma lista de permissões de coleção, use o gancho before_tool_callback, que recebe os argumentos de chamada:
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,)Se a chamada de resposta retornar um dicionário, o ADK nunca executará a ferramenta de pesquisa. Em vez disso, ele envia esse dicionário para o agente como se fosse a saída da própria ferramenta. Retornar None permite que a ferramenta de pesquisa seja executada normalmente.
MongoDbSessionService
MongoDbSessionService armazena sessões, eventos e estado do aplicativo, do usuário e da sessão no MongoDB. Passe para um objeto Runner para configurar o histórico de conversa persistente para seu agente, conforme mostrado no exemplo a seguir:
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,)Disposição do documento
MongoDbSessionService armazena dados nas seguintes coleções:
collection | _id Valor | Conteúdos |
|---|---|---|
|
| Estado do escopo da sessão em JSON, registros de data e hora e um número de revisão de simultaneidade otimista |
|
| evento serializado completo |
|
| Estado com escopo de aplicação |
|
| Estado no escopo do usuário |
O Google ADK define o estado do aplicativo, do usuário ou da sessão atual com um prefixo app: ou user: na chave de estado. MongoDbSessionService armazena cada valor na coleção correspondente e remove o prefixo da chave armazenada, de modo que um valor definido com a chave app:theme seja armazenado na coleção app_states como theme.
Observação
O campo state de cada coleção armazena suas chaves e valores como uma string codificada em JSON, não como um documento nativo do MongoDB . Como resultado, uma chave de estado contendo um caractere que o MongoDB proíbe em nomes de campo de documento , como . ou $, é armazenada e recuperada sem perda ou corrupção de dados.
Modelo de simultaneidade
O modelo de simultaneidade do serviço depende do seu tipo de sistema:
Em um conjunto de réplicas, cluster fragmentado ou cluster do Atlas , cada escrita de vários documentos é executada em uma transação, portanto, ela é confirmada ou cancelada atomicamente.
Em um
mongodautônomo , ou em qualquer sistema sem suporte a transações, o serviço retorna às gravações sequenciais com uma verificação de revisão de concorrência otimista no documento da sessão.
Em um único processo, um bloqueio por sessão impede gravações simultâneas na mesma sessão. Esse bloqueio não tem efeito em vários processos, como quando várias instâncias do seu aplicação gravam na mesma sessão ao mesmo tempo.
Em vários processos, a verificação de revisão do documento da sessão evita a corrupção de dados. Se duas gravações competirem, a escrita que conclui primeiro aumenta o número de revisão e a outra escrita falhará na verificação de revisão. Seu aplicação deve detectar essa falha, recarregar a sessão para obter o estado atual e tentar novamente a gravação.
MongoDbMemoryService
MongoDbMemoryService armazena eventos de sessão em uma coleção de memória e os recupera por correspondência de palavra-chave. Passe para um objeto Runner para configurar a memória de longo prazo entre sessões, conforme mostrado no exemplo a seguir:
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,)O objeto Runner chama o método add_session_to_memory() do serviço de memória para alimentar os eventos de uma sessão na memória. Cada evento ingerido é armazenado como um documento de memória em sua coleção de memória, que o parâmetro memories_collection configura. Esses documentos contêm as palavras-chave em minúsculas extraídas do conteúdo de texto do evento.
Considerações
Ao usar o serviço de memória, considere o seguinte comportamento:
Quando você pesquisa a memória, o serviço retorna documentos cuja array de palavras-chave intersecciona as palavras-chave da query.
A ingestão é idempotente. Se você consumir novamente uma sessão, o serviço substituirá suas memória em vez de duplicá-las.
A recuperação realiza uma pesquisa por palavra-chave e não requer um modelo de incorporação, credenciais do Google ou um índice vetorial. Como resultado, a recuperação de memória funciona em qualquer sistema MongoDB .
Diretivas de índice
Esta seção descreve os índices necessários para integrar o MongoDB e o Google ADK, e inclui índices recomendados para melhorias de desempenho.
Índices necessários do MongoDbToolset
Cada coleção que o agente pesquisa requer os seguintes índices:
Índice do MongoDB Vector Search no campo que armazena as incorporações, com o campo indexado como o tipo
vector. Se você utilizar o Atlas Automated Embedding, indexe o campo como o tipoautoEmbed.Índice de pesquisa do MongoDB no campo que armazena o texto a ser pesquisado, se você usar a ferramenta
mongodb_hybrid_search
MongoDbToolset lê esses índices por nome e não os cria. Para saber como criar esses índices, consulte Criar um índice de Vector Search do MongoDB e Índice de pesquisa do MongoDB .
Índices de serviço sugeridos
A maioria das leituras e todas as gravações usam o campo_id , que o MongoDB indexa automaticamente. No entanto, os seguintes padrões de leitura não usam o campo _id e exigem uma verificação de collection, a menos que você tenha um índice:
Lendo os eventos de uma sessão por aplicativo, usuário e sessão, classificados por registro de data e hora.
Pesquisando memória por aplicativo e usuário com uma correspondência na array de palavras-chave.
Por padrão, MongoDbSessionService e MongoDbMemoryService criam os seguintes índices sugeridos no primeiro uso:
collection | Index | Campos indexados e ordem de classificação |
|---|---|---|
|
|
|
|
|
|
|
|
|
Se você definir o parâmetro ensure_indexes como False, o serviço não criará esses índices sugeridos.
Observação
A criação de índice é idempotente, então você pode deixar com segurança o parâmetro ensure_indexes configurado para seu valor padrão de True. Esse parâmetro exige que o usuário do MongoDB mantenha a ação createIndex nas collections sessions, events e memories.
Diretivas de permissões
Em vez de usar um único usuário administrador, recomendamos que você use dois usuários de banco de dados separados para manter os privilégios definidos de acordo com o que cada componente exige.
A tabela a seguir descreve a configuração de mínimo privilégio sugerida para dois usuários de banco de dados :
Usuário do banco de dados | Usado por | Privilégios mínimos |
|---|---|---|
Pesquisar usuário (somente leitura) |
|
|
Usuário de estado (leitura-gravação) |
| * |
Importante
Os privilégios na tabela anterior são ações do MongoDB , não roles integradas do Atlas . Para concedê-las, crie uma função personalizada para cada usuário com essas ações, com escopo para as coleções listadas.
Recursos adicionais
Para saber mais sobre como usar o Google ADK com o MongoDB, consulte os seguintes recursos:
Repositóriodo Google ADK no GitHub