LangChain統合を始める
注意
このチュートリアルでは、Lgachein の Python ライブラリ を使用します 。JavaScriptライブラリを使用するチュートリアルについては、 「 Lgachein JavaScript / Typescript統合を使い始める 」を参照してください。
Atlas Vector Searchと Lgachein を統合できますLLM アプリケーションを構築し、検索拡張生成(RAG )を実装します。このチュートリアルでは、Lgachein と Atlas Vector Search の使用を開始し、データに対してセマンティック検索を実行し、 RAG実装を構築する方法を説明します。 具体的には、次のアクションを実行します。
環境を設定します。
カスタム データを Atlas に保存します。
データに Atlas Vector Search インデックスを作成します。
次のベクトル検索クエリを実行します。
セマンティック検索。
スコア付きのセマンティック検索。
メタデータの事前フィルタリングによるセマンティック検索。
Atlas Vector Search を使用してデータの質問に答え、 RAGを実装します。
バックグラウンド
LLMは、「チェーン」の使用を通じて LVM アプリケーションの作成を簡素化するオープンソースのフレームワークです。 チェーンは 、 RAGを含むさまざまな AI ユースケースで組み合わせることができる Lgachein 固有のコンポーネントです。
を RAGと統合することで、Atlas Vector Search Atlasをベクトルデータベースとして使用し、 を使用してセマンティックで類似したドキュメントを検索して RG を実装することができます。Atlas Vector SearchRAGRGRAG Atlas Vector Searchの詳細については、「 による検索拡張生成( ) 」を してください。
前提条件
Atlas の サンプル データ セット からの映画データを含むコレクションを使用します。
環境を設定する
最初に、このチュートリアルの環境を設定する必要があります。 .ipynb
拡張機能のファイルを保存して、インタラクティブ Python ノートを作成し、ノート内で次のコード スニペットを実行します。
依存関係をインストールしてインポートします。
次のコマンドを実行します:
%pip install --upgrade --quiet langchain langchain-community langchain-core langchain-mongodb langchain-openai pymongo pypdf
次に、次のコードを実行して必要なパッケージをインポートします。
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
環境変数を定義します。
次のコードを実行し、プロンプトが表示されたら、次の内容を提供します。
OpenAI API キー。
Atlas クラスターのSRV接続文字列。
os.environ["OPENAI_API_KEY"] = getpass.getpass("OpenAI API Key:") ATLAS_CONNECTION_STRING = getpass.getpass("MongoDB Atlas SRV Connection String:")
注意
接続stringには、次の形式を使用する必要があります。
mongodb+srv://<db_username>:<db_password>@<clusterName>.<hostname>.mongodb.net
Atlas をベクトル ストアとして使用
次に、カスタム データを Atlas にロードし、Atlas をベクトルデータベースとしてインスタンス化します。これは ベクトルストア とも呼ばれますが、 。次のコード スニペットをコピーして、ノートに貼り付けます。
Atlas クラスターに接続します。
次のコードを実行して、Atlas クラスターへの接続を確立します。 これは、以下を指定します。
langchain_db.test
データをロードするコレクションの名前である。vector_index
データのクエリに使用する Atlas Vector Search インデックスの名前として 。
# 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"
サンプル データをロードします。
このチュートリアルでは、「 MongoDB Atlas のベストプラクティス 」というタイトルの一般にアクセス可能な PDF ドキュメントを使用します。 ベクトル ストアのデータソースとして。このドキュメントでは、Atlas 配置を管理するためのさまざまな推奨事項と主要概念について説明します。
サンプル データをロードするには、次のコード スニペットを実行します。 この処理では、次の処理が行われます。
指定された URL から PDF を検索し、未加工のテキスト データを読み込みます。
テキストスプリット を使用する データを小さなドキュメントに分割します。
各ドキュメントの文字数と連続する 2 つのドキュメント間で重複する文字数を決定する チャンク パラメータを指定します。
# 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})
ベクトル ストアをインスタンス化します。
次のコードを実行して、サンプル ドキュメントからvector_store
という名前のベクトル ストアを作成します。 このスニペットは、 MongoDBAtlasVectorSearch.from_documents
メソッドを使用して、次のパラメータを指定します。
ベクトルデータベースに保存する サンプル ドキュメント 。
embedding
フィールドのベクトル埋め込みにテキストを変換するために使用されるモデルとしての OpenAI の埋め込みモデル。langchain_db.test
ドキュメントを保存する Atlas コレクションとして。vector_index
ベクトル ストアをクエリするために使用するインデックスとして 。
# Create the vector store vector_store = MongoDBAtlasVectorSearch.from_documents( documents = docs, embedding = OpenAIEmbeddings(disallowed_special=()), collection = atlas_collection, index_name = vector_search_index )
Tip
サンプル コードを実行した後、クラスター内のlangchain_db.test
コレクションに移動すると、Atlas UI でベクトル埋め込みを表示できます。
Atlas Vector Search インデックスの作成
注意
Atlas Vector Search インデックスを作成するには、Atlas プロジェクトに対するProject Data Access Admin
以上のアクセス権が必要です。
ベクトル ストアでベクトル検索クエリを有効にするには、 langchain_db.test
コレクションに Atlas Vector Search インデックスを作成します。
ノート次のコードを実行して、次のフィールドのインデックス作成を指定するvectorSearchタイプのインデックスを作成します。
embedding
ベクトル型としての フィールド。embedding
フィールドには、OpenAI のtext-embedding-ada-002
埋め込みモデルを使用して作成された埋め込みが含まれます。 インデックス定義では、1536
ベクトル次元を指定し、cosine
を使用して類似性を測定します。page
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)
インデックスの構築には約 1 分かかります。 構築中、インデックスは最初の同期状態になります。 構築が完了したら、コレクション内のデータのクエリを開始できます。
ベクトル検索クエリの実行
Atlas がインデックスをビルドしたら、データに対してベクトル検索クエリを実行します。 次の例は、ベクトル化されたデータに対して実行できるさまざまなクエリを示しています。
次のクエリは、 similarity_search
メソッドを使用して、string MongoDB Atlas security
の基本的なセマンティック検索を実行します。 関連性順にランク付けされたドキュメントのリストが返されます。
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})]
次のクエリは、 similarity_search_with_score
メソッドを使用して string MongoDB Atlas security
のセマンティック検索を実行し、返されるドキュメント数を3
に制限するためにk
パラメーターを指定します。
注意
この例のk
パラメータは、同じ名前のknnBeta演算子オプションではなく、 similarity_search_with_score
メソッド オプションを参照します。
最も関連性の高い 3 つのドキュメントと、 0
と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)]
MQLブール値、数値、または の値とインデックス付きフィールドを比較するstring マッチ式を使用して、データを事前にフィルタリングできます。フィルタリングするメタデータ フィールドはすべてfilter
タイプとしてインデックス化する必要があります。 詳細については、「ベクトル検索のフィールドにインデックスを作成する方法 」を参照してください。
注意
このチュートリアルのインデックスを作成したときに、 page
フィールドをフィルターとして指定しました。
次のクエリは、 similarity_search_with_score
メソッドを使用して string MongoDB Atlas security
のセマンティック検索を実行します。 また、次の項目も指定します。
返されるドキュメント数を
3
に制限するk
パラメーター。$eq
演算子を使用して17ページにのみ表示されるドキュメントを照合するpage
フィールドの事前フィルタリング。
ページ17から最も関連性の高いドキュメント 3 つと、 0
と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)]
データに関する質問に答えます
このセクションでは、RAG Atlas Vector Searchと を使用してアプリケーションに RG を実装する方法を説明します。Atlas Vector Searchを使用してセマンティックに類似したドキュメントを検索したので、次のコード例を実行して、それらのドキュメントに基づいて質問に答えるようにLLMに指示します。
この例では、次の処理を行います。
Atlas Vector Search をレプリカとして インスタンス 化
k
10
は、類似したドキュメントをクエリします。これには、最も関連性の高いドキュメントのみを検索するためのオプションの パラメーターも含まれています。
LgChuin プロンプトのテンプレート を定義するLLM は、これらのドキュメントをクエリのコンテキストとして使用するように指示します。LgChart はこれらのドキュメントを
{context}
入力変数に渡し、クエリを{question}
変数に渡します。連鎖 を構築します は、以下を指定します。
Atlas Vector SearchとしてLLMによってコンテキストとして使用されるドキュメントを検索するためのドライバーとしての Atlas Vector Search 。
構築した プロンプト テンプレート。
コンテキスト対応の応答を生成するために使用される LM としてのLLMのチャット モデル。
Atlas のセキュリティ推奨事項に関するサンプル クエリでチェーンをプロンプトします。
LLMの応答とコンテキストとして使用されたドキュメントを返します。 生成される応答は異なる場合があります。
# 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})]
この例では、次の処理を行います。
Atlas Vector Search をレプリカとして インスタンス 化 次の任意のパラメーターを含む類似したドキュメントをクエリします。
k
最も関連性の高い10
のみを検索するにはscore_threshold
関連性スコアが0.75
を超えるドキュメントのみを使用するようにします。注意
このパラメーターは、Atlas Search クエリで使用される関連性スコアではなく、Lgache が結果を正規化するために使用する関連性スコアを示します。 RAG実装で Atlas Search スコアを使用するには、
similarity_search_with_score
メソッドを使用し、Atlas Search スコアでフィルタリングするカスタム リージョンを定義します。pre_filter
ページ17にのみ表示されるドキュメントをpage
フィールドでフィルタリングします。
LgChuin プロンプトのテンプレート を定義するLLM は、これらのドキュメントをクエリのコンテキストとして使用するように指示します。LgChart はこれらのドキュメントを
{context}
入力変数に渡し、クエリを{question}
変数に渡します。連鎖 を構築します は、以下を指定します。
Atlas Vector SearchとしてLLMによってコンテキストとして使用されるドキュメントを検索するためのドライバーとしての Atlas Vector Search 。
構築した プロンプト テンプレート。
コンテキスト対応の応答を生成するために使用される LM としてのLLMのチャット モデル。
Atlas のセキュリティ推奨事項に関するサンプル クエリでチェーンをプロンプトします。
LLMの応答とコンテキストとして使用されたドキュメントを返します。 生成される応答は異なる場合があります。
# 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})]