Comece com a integração com o LangChain
Nesta página
Observação
Este tutorial usa a biblioteca Python do LangChain. Para um tutorial que usa a biblioteca JavaScript, consulte Introdução à integração LangChain JS/TS.
Você pode integrar o Atlas Vector Search com o LangChain para construir aplicativosLLM e implementar a geração aumentada de recuperação (RAG). Este tutorial demonstra como começar a usar o Atlas Vector Search com o LangChain para executar a Atlas Search semântica em seus dados e criar uma implementação de RAG . Especificamente, você executa as seguintes ações:
Configure o ambiente.
Armazene dados personalizados no Atlas.
Crie um índice de pesquisa do Atlas Vector Search em seus dados.
Execute as seguintes query de pesquisa vetorial:
Pesquisa semântica.
Pesquisar semântica com pontuação.
Pesquisa semântica com pré-filtragem de metadados.
Implemente o RAG usando o Atlas Vector Search para responder a perguntas sobre seus dados.
Plano de fundo
LangChain é uma estrutura de código aberto que simplifica a criação de aplicativos LLM por meio do uso de "cadeias". As cadeias são componentes específicos do LangChain que podem ser combinados para uma variedade de casos de uso de AI , incluindo RAG.
Ao integrar o Atlas Vector Search com o LangChain, você pode usar o Atlas como um banco de dados vetorial e usar o Atlas Vector Search para implementar o RAG recuperando documentos semanticamente semelhantes dos seus dados. Para saber mais sobre RAG, consulte Geração Aumentada de Recuperação (RAG) com Atlas Vector Search.
Pré-requisitos
Para concluir este tutorial, você deve ter o seguinte:
Um cluster do Atlas executando MongoDB versão 6.0.11, 7.0.2 ou posterior (incluindo RCs).
Uma chave de API OpenAI. Você deve ter uma conta OpenAI paga com créditos disponíveis para solicitações de API.
Um ambiente para executar notebooks Python interativos, como o Colab.
Observação
Se estiver usando o Colab, certifique-se de que o endereço IP da sessão do notebook esteja incluído na lista de acesso do projeto Atlas.
Configurar o ambiente
Você deve primeiro configurar o ambiente para este tutorial. Crie um notebook Python interativo salvando um arquivo com a extensão .ipynb
e, em seguida, execute os seguintes trechos de código no notebook.
Instalar e importar dependências.
Execute o seguinte comando:
%pip install --upgrade --quiet langchain langchain-community langchain-core langchain-mongodb langchain-openai pymongo pypdf
Em seguida, execute o seguinte código para importar os pacotes necessários:
import getpass, os, pymongo, pprint from langchain_community.document_loaders import PyPDFLoader from langchain_core.output_parsers import StrOutputParser from langchain_core.runnables import RunnablePassthrough from langchain_mongodb import MongoDBAtlasVectorSearch from langchain_openai import ChatOpenAI, OpenAIEmbeddings from langchain.prompts import PromptTemplate from langchain.text_splitter import RecursiveCharacterTextSplitter from pymongo import MongoClient from pymongo.operations import SearchIndexModel
Definir variáveis ambientais.
Execute o código a seguir e forneça o seguinte quando solicitado:
Sua chave de API da OpenAI.
A connection string SRVdo seu Atlas cluster.
os.environ["OPENAI_API_KEY"] = getpass.getpass("OpenAI API Key:") ATLAS_CONNECTION_STRING = getpass.getpass("MongoDB Atlas SRV Connection String:")
Observação
Sua string de conexão deve usar o seguinte formato:
mongodb+srv://<db_username>:<db_password>@<clusterName>.<hostname>.mongodb.net
Use o Atlas como um Vector Store
Em seguida, carregue dados personalizados no Atlas e instancie o Atlas como um banco de dados vetorial, também chamado de armazenamento de vetores. Copie e cole os seguintes trechos de código em seu bloco de anotações.
Conecte-se ao seu cluster do Atlas.
Execute o seguinte código para estabelecer uma conexão com seu cluster do Atlas. Ele especifica o seguinte:
langchain_db.test
como o nome da collection para a qual carregar os dados.vector_index
como o nome do Atlas Vector Search índice de pesquisa a ser usado para a query dos dados.
# Connect to your Atlas cluster client = MongoClient(ATLAS_CONNECTION_STRING) # Define collection and index name db_name = "langchain_db" collection_name = "test" atlas_collection = client[db_name][collection_name] vector_search_index = "vector_index"
Carregue os dados de amostra.
Para este tutorial, você usa um documento PDF acessível ao público intitulado Melhores práticas do MongoDB Atlas como fonte de dados para seu armazenamento de vetores. Este documento descreve várias recomendações e conceitos principais para gerenciar seus sistemas Atlas.
Para carregar os dados de amostra, execute o seguinte trecho de código. Ele faz o seguinte:
Recupera o PDF a partir da URL especificada e carrega os dados de texto brutos.
Usa um divisor de texto para dividir os dados em documentos menores.
Especifica os parâmetros de parte, que determinam o número de caracteres em cada documento e o número de caracteres que devem se sobrepor entre dois documentos consecutivos.
# Load the PDF loader = PyPDFLoader("https://query.prod.cms.rt.microsoft.com/cms/api/am/binary/RE4HkJP") data = loader.load() # Split PDF into documents text_splitter = RecursiveCharacterTextSplitter(chunk_size=200, chunk_overlap=20) docs = text_splitter.split_documents(data) # Print the first document docs[0]
Document(page_content='Mong oDB Atlas Best P racticesJanuary 20 19A MongoD B White P aper', metadata={'source': 'https://query.prod.cms.rt.microsoft.com/cms/api/am/binary/RE4HkJP', 'page': 0})
Instancie o armazenamento de vetores.
Execute o seguinte código para criar um armazenamento de vetor denominado vector_store
a partir dos documentos de exemplo. Este trecho utiliza o método MongoDBAtlasVectorSearch.from_documents
e especifica os seguintes parâmetros:
O documento de amostra a serem armazenados no reconhecimento de data center vetorial.
Modelo de incorporação do OpenAI como o modelo usado para converter texto em incorporações vetoriais para o campo
embedding
.langchain_db.test
como a coleção Atlas para armazenar os documentos.vector_index
como o índice a ser usado para consultar o armazenamento de vetores.
# Create the vector store vector_store = MongoDBAtlasVectorSearch.from_documents( documents = docs, embedding = OpenAIEmbeddings(disallowed_special=()), collection = atlas_collection, index_name = vector_search_index )
Dica
Depois de executar o código de amostra, você pode visualizar suas incorporações vetoriais na Atlas navegando até a collection langchain_db.test
no seu cluster.
Criar o índice Atlas Vector Search Index
Observação
Para criar um Atlas Vector Search índice de pesquisa, você deve ter acesso Project Data Access Admin
ou superior ao Atlas projeto.
Para habilitar consultas de pesquisa de vetor no seu armazenamento de vetor, crie um índice do Atlas Vector Search na coleção langchain_db.test
.
No notebook, execute o código a seguir para criar um índice do tipo VectorSearch que especifica a indexação dos seguintes campos:
embedding
campo como o tipo de vetor . O campoembedding
contém as incorporações criadas utilizando o modelo de incorporaçãotext-embedding-ada-002
do OpenAI. A definição de índice especifica1536
dimensões vetoriais e mede a similaridade usandocosine
.page
campo como o tipo de filtro para pré-filtrar dados pelo número da página no PDF.
1 # Create your index model, then create the search index 2 search_index_model = SearchIndexModel( 3 definition={ 4 "fields": [ 5 { 6 "type": "vector", 7 "path": "embedding", 8 "numDimensions": 1536, 9 "similarity": "cosine" 10 }, 11 { 12 "type": "filter", 13 "path": "page" 14 } 15 ] 16 }, 17 name="vector_index", 18 type="vectorSearch" 19 ) 20 21 atlas_collection.create_search_index(model=search_index_model)
O índice deve levar cerca de um minuto para ser criado. Enquanto ele é compilado, o índice está em um estado de sincronização inicial. Quando a construção estiver concluída, você poderá começar a fazer query nos dados em sua coleção.
Executar queries no Vector Search
Depois que o Atlas criar seu índice, execute queries de pesquisa vetorial em seus dados. Os exemplos a seguir demonstram várias queries que você pode executar em seus dados vetorizados.
A query a seguir usa o método similarity_search
para executar uma pesquisa semântica básica para a string MongoDB Atlas security
. Retorna uma lista de documentos classificados por relevância.
query = "MongoDB Atlas security" results = vector_store.similarity_search(query) pprint.pprint(results)
[Document(page_content='To ensure a secure system right out of the b ox,\nauthentication and I P Address whitelisting are\nautomatically enabled.\nReview the security section of the MongoD B Atlas', metadata={'_id': ObjectId('65c2e8f480f26794dedad8d5'), 'source': 'https://query.prod.cms.rt.microsoft.com/cms/api/am/binary/RE4HkJP', 'page': 17}), Document(page_content='MongoD B Atlas team are also monitoring the underlying\ninfrastructure, ensuring that it is always in a healthy state.\nApplication L ogs And Database L ogs', metadata={'_id': ObjectId('65c2e8f480f26794dedad8a0'), 'source': 'https://query.prod.cms.rt.microsoft.com/cms/api/am/binary/RE4HkJP', 'page': 15}), Document(page_content='MongoD B.\nMongoD B Atlas incorporates best practices to help keep\nmanaged databases healthy and optimized. T hey ensure\noperational continuity by converting comple x manual tasks', metadata={'_id': ObjectId('65c2e8f380f26794dedad883'), 'source': 'https://query.prod.cms.rt.microsoft.com/cms/api/am/binary/RE4HkJP', 'page': 13}), Document(page_content='Atlas provides encryption of data at rest with encrypted\nstorage volumes.\nOptionally , Atlas users can configure an additional layer of\nencryption on their data at rest using the MongoD B', metadata={'_id': ObjectId('65c2e8f480f26794dedad8e3'), 'source': 'https://query.prod.cms.rt.microsoft.com/cms/api/am/binary/RE4HkJP', 'page': 18})]
A query a seguir usa o método similarity_search_with_score
para realizar uma pesquisa semântica para a string MongoDB Atlas security
e especifica o parâmetro k
para limitar o número de documentos a serem retornados a 3
.
Observação
O parâmetro k
neste exemplo se refere à opção do método similarity_search_with_score
, não à opção do operador knnBeta de mesmo nome.
Ele retorna os três documentos mais relevantes e uma pontuação de relevância entre 0
e 1
.
query = "MongoDB Atlas security" results = vector_store.similarity_search_with_score( query = query, k = 3 ) pprint.pprint(results)
[(Document(page_content='To ensure a secure system right out of the b ox,\nauthentication and I P Address whitelisting are\nautomatically enabled.\nReview the security section of the MongoD B Atlas', metadata={'_id': ObjectId('65c2e8f480f26794dedad8d5'), 'source': 'https://query.prod.cms.rt.microsoft.com/cms/api/am/binary/RE4HkJP', 'page': 17}), 0.935082197189331), (Document(page_content='MongoD B Atlas team are also monitoring the underlying\ninfrastructure, ensuring that it is always in a healthy state.\nApplication L ogs And Database L ogs', metadata={'_id': ObjectId('65c2e8f480f26794dedad8a0'), 'source': 'https://query.prod.cms.rt.microsoft.com/cms/api/am/binary/RE4HkJP', 'page': 15}), 0.9335962533950806), (Document(page_content='MongoD B.\nMongoD B Atlas incorporates best practices to help keep\nmanaged databases healthy and optimized. T hey ensure\noperational continuity by converting comple x manual tasks', metadata={'_id': ObjectId('65c2e8f380f26794dedad883'), 'source': 'https://query.prod.cms.rt.microsoft.com/cms/api/am/binary/RE4HkJP', 'page': 13}), 0.9317940473556519)]
Você pode pré-filtrar seus dados usando uma expressão de correspondência MQL que compara o campo indexado com valores booleanos, numéricos ou de string. Você deve indexar todos os campos de metadados pelos quais deseja filtrar como o tipo filter
. Para saber mais, consulte Como indexar campos do Vector Search.
Observação
Você especificou o campo page
como um filtro quando criou o índice para este tutorial.
A query a seguir usa o método similarity_search_with_score
para executar uma pesquisa semântica para a string MongoDB Atlas security
. Ele também especifica o seguinte:
O parâmetro
k
para limitar o número de documentos para retornar ao3
.Um pré-filtro no campo
page
que usa o operador$eq
para corresponder aos documentos que aparecem somente na página 17 .
Ele retorna os três documentos mais relevantes da página 17 e uma pontuação de relevância entre 0
e 1
.
query = "MongoDB Atlas security" results = vector_store.similarity_search_with_score( query = query, k = 3, pre_filter = { "page": { "$eq": 17 } } ) pprint.pprint(results)
[(Document(page_content='To ensure a secure system right out of the b ox,\nauthentication and I P Address whitelisting are\nautomatically enabled.\nReview the security section of the MongoD B Atlas', metadata={'_id': ObjectId('65c2e8f480f26794dedad8d5'), 'source': 'https://query.prod.cms.rt.microsoft.com/cms/api/am/binary/RE4HkJP', 'page': 17}), 0.935082197189331), (Document(page_content='Security\nAs with all software, MongoD B administrators must\nconsider security and risk e xposure for a MongoD B\ndeployment. T here are no magic solutions for risk', metadata={'_id': ObjectId('65c2e8f480f26794dedad8d0'), 'source': 'https://query.prod.cms.rt.microsoft.com/cms/api/am/binary/RE4HkJP', 'page': 17}), 0.920635461807251), (Document(page_content='number of diff erent methods for managing risk and\nreducing risk e xposure.\nMongoD B Atlas f eatures e xtensive capabilities to def end,\ndetect, and control access to MongoD B, off ering among', metadata={'_id': ObjectId('65c2e8f480f26794dedad8d2'), 'source': 'https://query.prod.cms.rt.microsoft.com/cms/api/am/binary/RE4HkJP', 'page': 17}), 0.9206267595291138)]
Dica
Veja também:
Para obter uma lista completa dos métodos de pesquisa semântica, consulte a referência da API.
Responda a perguntas sobre seus dados
Esta seção demonstra como implementar RAG em seu aplicativo com Atlas Vector Search e LangChain. Agora que você usou o Atlas Vector Search para recuperar documentos semanticamente semelhantes, execute os exemplos de código a seguir para solicitar que o LLM responda perguntas com base nesses documentos.
Este exemplo faz o seguinte:
Instancia a Atlas Vector Search como um recuperador para fazer query em documentos semelhantes, incluindo o parâmetro
k
opcional para pesquisar apenas os10
documentos mais relevantes.
Define um modelo de prompt LangChain para instruir o LLM a usar esses documentos como contexto para sua query. O LangChain passa esses documentos para a variável de entrada
{context}
e sua query para a variável{question}
.Constrói uma cadeia que especifica o seguinte:
Atlas Vector Search como o recuperador para pesquisar documentos que são usados como contexto pelo LLM.
O modelo de prompt que você criou.
O modelo de bate-papo da OpenAI como LLM usado para gerar uma resposta sensível ao contexto.
Solicita a cadeia com uma query de amostra sobre as recomendações de segurança do Atlas .
Retorna a resposta do LLM e os documentos usados como contexto. A resposta gerada pode variar.
# Instantiate Atlas Vector Search as a retriever retriever = vector_store.as_retriever( search_type = "similarity", search_kwargs = { "k": 10 } ) # Define a prompt template template = """ Use the following pieces of context to answer the question at the end. If you don't know the answer, just say that you don't know, don't try to make up an answer. {context} Question: {question} """ custom_rag_prompt = PromptTemplate.from_template(template) llm = ChatOpenAI() def format_docs(docs): return "\n\n".join(doc.page_content for doc in docs) # Construct a chain to answer questions on your data rag_chain = ( { "context": retriever | format_docs, "question": RunnablePassthrough()} | custom_rag_prompt | llm | StrOutputParser() ) # Prompt the chain question = "How can I secure my MongoDB Atlas cluster?" answer = rag_chain.invoke(question) print("Question: " + question) print("Answer: " + answer) # Return source documents documents = retriever.invoke(question) print("\nSource documents:") pprint.pprint(documents)
Question: How can I secure my MongoDB Atlas cluster? Answer: To secure your MongoDB Atlas cluster, you can enable authentication and IP address whitelisting, review the security section in the MongoDB Atlas dashboard, encrypt data at rest with encrypted storage volumes, optionally configure an additional layer of encryption on your data, set up global clusters on Amazon Web Services, Microsoft Azure, and Google Cloud Platform, and ensure operational continuity by choosing appropriate instance size, storage size, and storage speed options. Additionally, consider setting up a larger number of replica nodes for increased protection against database downtime. Source documents: [Document(page_content='To ensure a secure system right out of the b ox,\nauthentication and I P Address whitelisting are\nautomatically enabled.\nReview the security section of the MongoD B Atlas', metadata={'_id': ObjectId('65fb4f056979cf7cbbfe0436'), 'source': 'https://query.prod.cms.rt.microsoft.com/cms/api/am/binary/RE4HkJP', 'page': 17}), Document(page_content='MongoD B Atlas team are also monitoring the underlying\ninfrastructure, ensuring that it is always in a healthy state.\nApplication L ogs And Database L ogs', metadata={'_id': ObjectId('65fb4f056979cf7cbbfe0401'), 'source': 'https://query.prod.cms.rt.microsoft.com/cms/api/am/binary/RE4HkJP', 'page': 15}), Document(page_content='All the user needs to do in order for MongoD B Atlas to\nautomatically deploy the cluster is to select a handful of\noptions:\n•Instance size\n•Storage size (optional)\n•Storage speed (optional)', metadata={'_id': ObjectId('65fb4f046979cf7cbbfe03ef'), 'source': 'https://query.prod.cms.rt.microsoft.com/cms/api/am/binary/RE4HkJP', 'page': 14}), Document(page_content='MongoD B.\nMongoD B Atlas incorporates best practices to help keep\nmanaged databases healthy and optimized. T hey ensure\noperational continuity by converting comple x manual tasks', metadata={'_id': ObjectId('65fb4f046979cf7cbbfe03e4'), 'source': 'https://query.prod.cms.rt.microsoft.com/cms/api/am/binary/RE4HkJP', 'page': 13}), Document(page_content='You can set up global clusters — available on Amazon W eb\nServices, Microsoft Azure, and Google Cloud Platform —\nwith just a f ew clic ks in the MongoD B Atlas U I. MongoD B', metadata={'_id': ObjectId('65fb4f046979cf7cbbfe03bb'), 'source': 'https://query.prod.cms.rt.microsoft.com/cms/api/am/binary/RE4HkJP', 'page': 12}), Document(page_content='Table of Contents\n1 Introduction\n2 Preparing for a MongoD B Deployment\n9 Scaling a MongoD B Atlas Cluster\n11 Continuous A vailability & Data Consistency\n12 Managing MongoD B\n16 Security', metadata={'_id': ObjectId('65fb4f026979cf7cbbfe02d6'), 'source': 'https://query.prod.cms.rt.microsoft.com/cms/api/am/binary/RE4HkJP', 'page': 1}), Document(page_content='Atlas provides encryption of data at rest with encrypted\nstorage volumes.\nOptionally , Atlas users can configure an additional layer of\nencryption on their data at rest using the MongoD B', metadata={'_id': ObjectId('65fb4f056979cf7cbbfe0444'), 'source': 'https://query.prod.cms.rt.microsoft.com/cms/api/am/binary/RE4HkJP', 'page': 18}), Document(page_content='Disaster Recovery\nCreated by the engineers who develop the database,\nMongoD B Atlas is the simplest way to run MongoD B,\nmaking it easy to deploy , monitor , backup, and scale\nMongoD B.', metadata={'_id': ObjectId('65fb4f046979cf7cbbfe03e3'), 'source': 'https://query.prod.cms.rt.microsoft.com/cms/api/am/binary/RE4HkJP', 'page': 13}), Document(page_content='Security\nAs with all software, MongoD B administrators must\nconsider security and risk e xposure for a MongoD B\ndeployment. T here are no magic solutions for risk', metadata={'_id': ObjectId('65fb4f056979cf7cbbfe0431'), 'source': 'https://query.prod.cms.rt.microsoft.com/cms/api/am/binary/RE4HkJP', 'page': 17}), Document(page_content='A larger number of replica nodes provides increased\nprotection against database downtime in case of multiple\nmachine failures.\nMongoD B Atlas replica sets have a minimum of 3 nodes', metadata={'_id': ObjectId('65fb4f046979cf7cbbfe03ca'), 'source': 'https://query.prod.cms.rt.microsoft.com/cms/api/am/binary/RE4HkJP', 'page': 12})]
Este exemplo faz o seguinte:
Instancia o Atlas Vector Search como um recuperador para consultar documentos semelhantes, incluindo os seguintes parâmetros opcionais:
k
para pesquisar somente os documentos10
mais relevantes.score_threshold
para usar somente documentos com uma pontuação de relevância acima de0.75
.Observação
Esse parâmetro se refere a uma pontuação de relevância que o Langchain usa para normalizar seus resultados, e não à pontuação de relevância usada nas queries do Atlas Search. Para usar as pontuações do Atlas Search na sua implementação do RAG, defina um recuperador personalizado que use o método
similarity_search_with_score
e filtre pela pontuação do Atlas Search.pre_filter
para filtrar no campopage
os documentos que aparecem somente na página 17.
Define um modelo de prompt LangChain para instruir o LLM a usar esses documentos como contexto para sua query. O LangChain passa esses documentos para a variável de entrada
{context}
e sua query para a variável{question}
.Constrói uma cadeia que especifica o seguinte:
Atlas Vector Search como o recuperador para pesquisar documentos que são usados como contexto pelo LLM.
O modelo de prompt que você criou.
O modelo de bate-papo da OpenAI como LLM usado para gerar uma resposta sensível ao contexto.
Solicita a cadeia com uma query de amostra sobre as recomendações de segurança do Atlas .
Retorna a resposta do LLM e os documentos usados como contexto. A resposta gerada pode variar.
# Instantiate Atlas Vector Search as a retriever retriever = vector_store.as_retriever( search_type = "similarity", search_kwargs = { "k": 10, "score_threshold": 0.75, "pre_filter": { "page": { "$eq": 17 } } } ) # Define a prompt template template = """ Use the following pieces of context to answer the question at the end. If you don't know the answer, just say that you don't know, don't try to make up an answer. {context} Question: {question} """ custom_rag_prompt = PromptTemplate.from_template(template) llm = ChatOpenAI() def format_docs(docs): return "\n\n".join(doc.page_content for doc in docs) # Construct a chain to answer questions on your data rag_chain = ( { "context": retriever | format_docs, "question": RunnablePassthrough()} | custom_rag_prompt | llm | StrOutputParser() ) # Prompt the chain question = "How can I secure my MongoDB Atlas cluster?" answer = rag_chain.invoke(question) print("Question: " + question) print("Answer: " + answer) # Return source documents documents = retriever.invoke(question) print("\nSource documents:") pprint.pprint(documents)
Question: How can I secure my MongoDB Atlas cluster? Answer: To secure your MongoDB Atlas cluster, you can enable authentication and IP Address whitelisting, define permissions for users and applications, use VPC Peering for secure connectivity, implement a Defense in Depth approach for securing deployments, and consider using LDAP integration for centralized authorization management. It is important to regularly review the security section of MongoDB Atlas and continuously monitor and update security measures to mitigate risk and maintain a secure deployment. Source documents: [Document(page_content='To ensure a secure system right out of the b ox,\nauthentication and I P Address whitelisting are\nautomatically enabled.\nReview the security section of the MongoD B Atlas', metadata={'_id': ObjectId('65fb4f056979cf7cbbfe0436'), 'source': 'https://query.prod.cms.rt.microsoft.com/cms/api/am/binary/RE4HkJP', 'page': 17}), Document(page_content='Security\nAs with all software, MongoD B administrators must\nconsider security and risk e xposure for a MongoD B\ndeployment. T here are no magic solutions for risk', metadata={'_id': ObjectId('65fb4f056979cf7cbbfe0431'), 'source': 'https://query.prod.cms.rt.microsoft.com/cms/api/am/binary/RE4HkJP', 'page': 17}), Document(page_content='number of diff erent methods for managing risk and\nreducing risk e xposure.\nMongoD B Atlas f eatures e xtensive capabilities to def end,\ndetect, and control access to MongoD B, off ering among', metadata={'_id': ObjectId('65fb4f056979cf7cbbfe0433'), 'source': 'https://query.prod.cms.rt.microsoft.com/cms/api/am/binary/RE4HkJP', 'page': 17}), Document(page_content='permissions for a user or application, and what data it can\naccess when querying MongoD B. MongoD B Atlas provides\nthe ability to provision users with roles specific to a', metadata={'_id': ObjectId('65fb4f056979cf7cbbfe043b'), 'source': 'https://query.prod.cms.rt.microsoft.com/cms/api/am/binary/RE4HkJP', 'page': 17}), Document(page_content='connectivity without using public I P addresses, and without\nneeding to whitelist every client in your MongoD B Atlas\ngroup.\nAuthorization\nMongoD B Atlas allows administrators to define', metadata={'_id': ObjectId('65fb4f056979cf7cbbfe043a'), 'source': 'https://query.prod.cms.rt.microsoft.com/cms/api/am/binary/RE4HkJP', 'page': 17}), Document(page_content='mitigation, and maintaining a secure MongoD B deployment\nis an ongoing process.\nDefense in Depth\nA Def ense in Depth approac h is recommended for\nsecuring MongoD B deployments, and it addresses a', metadata={'_id': ObjectId('65fb4f056979cf7cbbfe0432'), 'source': 'https://query.prod.cms.rt.microsoft.com/cms/api/am/binary/RE4HkJP', 'page': 17}), Document(page_content='optimization.\nIn addition, MongoD B Atlas provides pac kaged integration\nwith the New Relic platform. K ey metrics from MongoD B\nAtlas are accessible to the AP M for visualization, enabling', metadata={'_id': ObjectId('65fb4f056979cf7cbbfe042e'), 'source': 'https://query.prod.cms.rt.microsoft.com/cms/api/am/binary/RE4HkJP', 'page': 17}), Document(page_content='their I P address (or a C IDR covering their I P address) has\nbeen added to the IP whitelist for your MongoD B Atlas\ngroup.\nVPC P eering\nVirtual P rivate Cloud (VPC) P eering allows users to create', metadata={'_id': ObjectId('65fb4f056979cf7cbbfe0438'), 'source': 'https://query.prod.cms.rt.microsoft.com/cms/api/am/binary/RE4HkJP', 'page': 17}), Document(page_content='dedicated A tlas clusters using credentials that are verified\nby a centralized L DAP server . Authorization management is\nsimplified by allowing control at the L DAP group level.', metadata={'_id': ObjectId('65fb4f056979cf7cbbfe043d'), 'source': 'https://query.prod.cms.rt.microsoft.com/cms/api/am/binary/RE4HkJP', 'page': 17}), Document(page_content='database, making it possible to realize a separation of\nduties between diff erent entities accessing and managing\nthe data.\nAtlas supports L DAP integration, allowing users to login to', metadata={'_id': ObjectId('65fb4f056979cf7cbbfe043c'), 'source': 'https://query.prod.cms.rt.microsoft.com/cms/api/am/binary/RE4HkJP', 'page': 17})]