LlamaIndex 통합 시작하기
이 페이지의 내용
Atlas Vector Search를 LlamaIndex 와 통합할 수 있습니다.LLM 애플리케이션에서 검색 보강 생성(RAG)을 구현합니다. 이 튜토리얼에서는 LlamaIndex와 함께 Atlas Vector Search 를 사용하여 데이터에 시맨틱 Atlas Search를 수행하고 RAG 구현을 빌드하는 방법을 보여 줍니다. 구체적으로 다음 조치를 수행합니다.
환경을 설정합니다.
Atlas에 사용자 지정 데이터를 저장합니다.
데이터에 Atlas Vector Search 검색 인덱스를 만듭니다.
다음 벡터 검색 쿼리를 실행합니다.
시맨틱 검색.
메타데이터 사전 필터링을 통한 시맨틱 검색.
Atlas Vector Search를 사용하여 RAG 를 구현하여 데이터에 대한 질문에 답변하세요.
배경
LlamaIndex는 사용자 지정 데이터 소스를 LLM에 연결하는 방법을 간소화하도록 설계된 오픈 소스 프레임워크입니다. RAG 애플리케이션에 대한 벡터 임베딩을 로드하고 준비하는 데 도움이 되는 데이터 커넥터, 인덱스 및 쿼리 엔진과 같은 여러 도구를 제공합니다.
Atlas Vector Search를 LlamaIndex와 통합하면 Atlas를 벡터 데이터베이스로 사용하고 Atlas Vector Search를 통해 데이터에서 의미적으로 유사한 문서를 검색하여 RAG를 구현할 수 있습니다. RAG에 대해 자세히 알아보려면 Atlas Vector Search를 사용한 검색 증강 생성(RAG)을 참조하세요.
전제 조건
이 튜토리얼을 완료하려면 다음 조건을 충족해야 합니다.
MongoDB 버전 6.0.11, 7.0.2 이상(RC 포함)을 실행 하는 클러스터 가 있는 Atlas 계정. 사용자의 IP 주소 가 Atlas 프로젝트의 액세스 목록에 포함되어 있는지 확인하세요. 학습 내용은 클러스터 생성을 참조하세요.
OpenAI API 키. API 요청에 사용할 수 있는 크레딧이 있는 유료 OpenAI 계정이 있어야 합니다. OpenAI 계정 등록에 대한 자세한 내용은 OpenAI API 웹사이트를 참조하세요.
Colab 같은 대화형 Python 노트북을 실행할 수 있는 환경입니다.
참고
Colab을 사용하는 경우 노트북 세션의 IP 주소가 Atlas 프로젝트의 액세스 목록에 포함되어 있는지 확인하세요.
환경 설정
이 튜토리얼의 환경을 설정합니다. 확장자가 .ipynb
인 파일 을 저장하여 대화형 Python 노트북을 만듭니다. 이 노트북을 사용하면 Python 코드 스니펫을 개별적으로 실행 수 있으며, 이 튜토리얼에서는 이를 사용하여 코드를 실행 수 있습니다.
노트북 환경을 설정하다 하려면 다음을 수행합니다.
종속성을 설치하고 가져옵니다.
다음 명령을 실행합니다:
pip install --quiet --upgrade llama-index llama-index-vector-stores-mongodb llama-index-embeddings-openai pymongo
그런 다음, 다음 코드를 실행하여 필요한 패키지를 가져옵니다.
import getpass, os, pymongo, pprint from pymongo.operations import SearchIndexModel from llama_index.core import SimpleDirectoryReader, VectorStoreIndex, StorageContext from llama_index.core.settings import Settings from llama_index.core.retrievers import VectorIndexRetriever from llama_index.core.vector_stores import MetadataFilter, MetadataFilters, ExactMatchFilter, FilterOperator from llama_index.core.query_engine import RetrieverQueryEngine from llama_index.embeddings.openai import OpenAIEmbedding from llama_index.llms.openai import OpenAI from llama_index.vector_stores.mongodb import MongoDBAtlasVectorSearch
환경 변수를 정의합니다.
다음 코드를 실행하고 메시지가 표시되면 다음을 제공합니다.
사용자의 OpenAI API 키.
Atlas cluster의 SRV 연결 string 입니다.
os.environ["OPENAI_API_KEY"] = getpass.getpass("OpenAI API Key:") ATLAS_CONNECTION_STRING = getpass.getpass("MongoDB Atlas SRV Connection String:")
참고
연결 문자열은 다음 형식을 사용해야 합니다.
mongodb+srv://<db_username>:<db_password>@<clusterName>.<hostname>.mongodb.net
LlamaIndex 설정을 구성합니다.
다음 코드를 실행하여 LlamaIndex와 관련된 설정을 구성합니다. 이 설정은 다음을 지정합니다:
애플리케이션에서 데이터에 대한 질문에 답변하는 데 사용하는 LLM 인 OpenAI입니다.
text-embedding-ada-002
를 애플리케이션에서 데이터에서 벡터 임베딩을 생성하는 데 사용하는 임베딩 모델로 사용합니다.청크 크기 및 겹침 LlamaIndex가 저장을 위해 데이터를 분할하는 방법을 사용자 지정할 수 있습니다.
Settings.llm = OpenAI() Settings.embed_model = OpenAIEmbedding(model="text-embedding-ada-002") Settings.chunk_size = 100 Settings.chunk_overlap = 10
Atlas를 Vector Store로 사용
그런 다음 사용자 지정 데이터를 Atlas에 로드하고 Atlas를 벡터 저장소 라고도 하는 벡터 데이터베이스로 인스턴스화합니다. . 다음 코드 스니펫을 복사하여 노트북에 붙여넣습니다.
샘플 데이터를 불러옵니다.
이 튜토리얼에서는 공개적으로 액세스할 수 있는 MongoDB Atlas 모범 사례 라는 제목의 PDF 문서를 사용합니다. 벡터 저장소의 데이터 소스로 사용합니다. 이 문서에서는 Atlas 배포서버를 관리하기 위한 다양한 권장 사항과 핵심 개념을 설명합니다.
샘플 데이터를 로드하려면 다음 코드 스니펫을 실행합니다. 다음을 수행합니다.
data
이라는 새 디렉토리를 만듭니다.지정된 URL에서 PDF를 검색하여 디렉토리에 파일로 저장합니다.
SimpleDirectoryReader
connector 데이터 파일에서 원시 텍스트와 메타데이터를 추출합니다. 또한 데이터의 형식을 문서로 지정합니다.
# Load the sample data !mkdir -p 'data/' !wget 'https://query.prod.cms.rt.microsoft.com/cms/api/am/binary/RE4HkJP' -O 'data/atlas_best_practices.pdf' sample_data = SimpleDirectoryReader(input_files=["./data/atlas_best_practices.pdf"]).load_data() # Print the first document sample_data[0]
Document(id_='e9893be3-e1a3-4249-9355-e4f42539f508', embedding=None, metadata={'page_label': '1', 'file_name': 'atlas_best_practices.pdf', 'file_path': 'data/atlas_best_practices.pdf', 'file_type': 'application/pdf', 'file_size': 512653, 'creation_date': '2024-02-20', 'last_modified_date': '2020-10-27', 'last_accessed_date': '2024-02-20'}, excluded_embed_metadata_keys=['file_name', 'file_type', 'file_size', 'creation_date', 'last_modified_date', 'last_accessed_date'], excluded_llm_metadata_keys=['file_name', 'file_type', 'file_size', 'creation_date', 'last_modified_date', 'last_accessed_date'], relationships={}, text='Mong oDB Atlas Best P racticesJanuary 20 19A MongoD B White P aper\n', start_char_idx=None, end_char_idx=None, text_template='{metadata_str}\n\n{content}', metadata_template='{key}: {value}', metadata_seperator='\n')
벡터 저장소를 인스턴스화합니다.
다음 코드를 실행하여 다음을 지정하는 MongoDBAtlasVectorSearch
메서드를 사용하여 atlas_vector_store
이라는 이름의 벡터 저장소를 만듭니다.
Atlas cluster에 대한 연결.
llamaindex_db.test
- 문서를 저장하는 데 사용되는 Atlas 데이터베이스 및 컬렉션.vector_index
를 벡터 저장소를 쿼리하는 데 사용할 인덱스로 사용합니다.
그런 다음 벡터 저장소를 저장소 컨텍스트 에 저장합니다. 는 데이터 저장을 준비하는 데 사용되는 LlamaIndex 컨테이너 객체입니다.
# Connect to your Atlas cluster mongo_client = pymongo.MongoClient(ATLAS_CONNECTION_STRING) # Instantiate the vector store atlas_vector_store = MongoDBAtlasVectorSearch( mongo_client, db_name = "llamaindex_db", collection_name = "test", vector_index_name = "vector_index" ) vector_store_context = StorageContext.from_defaults(vector_store=atlas_vector_store)
데이터를 벡터 임베딩으로 저장합니다.
데이터를 로드하고 Atlas를 벡터 저장소로 인스턴스화한 후에는 데이터에서 벡터 임베딩을 생성하여 Atlas에 저장합니다. 이렇게 하려면 벡터 저장소 인덱스 를 빌드해야 합니다. . 이 유형의 인덱스는 데이터를 분할, 임베딩한 후 벡터 저장소에 저장하는 LlamaIndex 데이터 구조입니다.
다음 코드에서는 VectorStoreIndex.from_documents
메서드를 사용하여 샘플 데이터에 벡터 저장소 인덱스를 빌드합니다. 벡터 저장소의 저장 컨텍스트에 지정된 대로 샘플 데이터를 벡터 임베딩으로 변환하고 이러한 임베딩을 Atlas cluster의 llamaindex_db.test
collection에 문서로 저장합니다.
참고
vector_store_index = VectorStoreIndex.from_documents( sample_data, storage_context=vector_store_context, show_progress=True )
팁
샘플 코드를 실행한 후 langchain_db.test
cluster의 collection으로 이동 하여 Atlas UI에서 벡터 임베딩을 볼 수 있습니다.
Atlas Vector Search 인덱스 만들기
참고
Atlas Vector Search 검색 인덱스를 만들려면 Atlas 프로젝트에 대한 Project Data Access Admin
이상의 액세스 권한이 있어야 합니다.
벡터 저장소에서 벡터 검색 쿼리를 활성화하려면 llamaindex_db.test
컬렉션에 Atlas Vector Search 인덱스를 생성하세요.
노트북에서 다음 코드를 실행하여, 다음 필드의 인덱싱을 지정하는 vectorSearch 유형의 인덱스를 생성합니다.
embedding
필드를 벡터 유형으로 지정합니다.embedding
필드에는 OpenAI의text-embedding-ada-002
임베딩 모델을 사용하여 생성된 임베딩이 포함되어 있습니다. 인덱스 정의는1536
벡터 차원을 지정하고cosine
를 사용하여 유사성을 측정합니다.metadata.page_label
필드를 PDF의 페이지 번호를 기준으로 데이터를 사전 필터링하는 필터 유형으로 지정합니다.
# Specify the collection for which to create the index collection = mongo_client["llamaindex_db"]["test"] # Create your index model, then create the search index search_index_model = SearchIndexModel( definition={ "fields": [ { "type": "vector", "path": "embedding", "numDimensions": 1536, "similarity": "cosine" }, { "type": "filter", "path": "metadata.page_label" } ] }, name="vector_index", type="vectorSearch", ) collection.create_search_index(model=search_index_model)
인덱스 작성에는 약 1분 정도가 소요됩니다. 인덱스가 작성되는 동안 인덱스는 초기 동기화 상태에 있습니다. 빌드가 완료되면 컬렉션의 데이터 쿼리를 시작할 수 있습니다.
Vector Search 쿼리 실행
Atlas가 인덱스를 빌드하면 노트북으로 돌아가서 데이터에 대해 벡터 검색 쿼리를 실행합니다. 다음 예제는 벡터화된 데이터에 대해 실행할 수 있는 다양한 쿼리를 보여줍니다.
이 예에서는 문자열 MongoDB Atlas security
에 대한 기본적인 시맨틱 검색을 수행하고 관련성 점수 에 따라 순위가 지정된 문서 목록을 반환합니다. 또한 다음을 지정합니다.
Atlas Vector Search 를 리트리버 시맨틱 Atlas Search를 수행합니다.
similarity_top_k
매개변수를 사용하면 가장 관련성이 높은 세 개의 문서만 반환됩니다.
retriever = vector_store_index.as_retriever(similarity_top_k=3) nodes = retriever.retrieve("MongoDB Atlas security") for node in nodes: print(node)
Node ID: 8a743e7c-4d28-4f7c-9c64-1033523a767d Text: MongoD B Atlas provides: •Security f eatures to protect access to your data •Built in replication for always-on availability , tolerating complete data center failure •Backups and point in time recovery to protect against data corruption •Fine-grained monitoring to let you know when to scale. Score: 0.935 Node ID: 5904c51b-ac96-4a2f-818e-35c85af4b624 Text: MongoD B Atlas f eatures e xtensive capabilities to def end, detect, and control access to MongoD B, off ering among the most complete security controls of any modern database: •User Rights Management.User Rights Management. Control access to sensitive data using industry standard mec hanisms for authentication and authorization at the database ... Score: 0.932 Node ID: cb71a615-2f69-47b3-87e7-3373ff476fd6 Text: Protect data in motion over the network and at rest in persistent storage To ensure a secure system right out of the b ox, authentication and I P Address whitelisting are automatically enabled. Review the security section of the MongoD B Atlas documentation to learn more ab out eac h of the security features discussed below . Score: 0.930
인덱싱된 필드를 부울, 숫자 또는 문자열 값과 비교하는 일치 표현식을 사용하여 데이터를 사전 필터링할 수도 있습니다. 필터링하려는 모든 메타데이터 필드를 filter
유형으로 필터링하도록 인덱싱해야 합니다. 자세한 내용은 벡터 검색을 위해 필드를 인덱싱하는 방법을 참조하세요.
참고
이 튜토리얼 의 인덱스를 생성 할 때 metadata.page_label
필드를 필터로 지정했습니다.
이 예시는 string MongoDB Atlas security
에 대한 시맨틱 검색을 수행하고 관련성 점수에 따라 순위가 매겨진 문서 목록을 반환합니다. 또한 다음을 지정합니다.
Atlas Vector Search 를 리트리버 시맨틱 Atlas Search를 수행합니다.
similarity_top_k
매개변수를 사용하면 가장 관련성이 높은 세 개의 문서만 반환됩니다.Atlas Vector Search가 17 페이지에 한하여 나타나는 문서만 검색하도록 하는
metadata.page_label
필드 필터입니다.
# Specify metadata filters metadata_filters = MetadataFilters( filters=[ExactMatchFilter(key="metadata.page_label", value="17")] ) retriever = vector_store_index.as_retriever(similarity_top_k=3, filters=metadata_filters) nodes = retriever.retrieve("MongoDB Atlas security") for node in nodes: print(node)
Node ID: bd82d311-e70b-4d00-aab9-56b84ad16e3d Text: Integrating MongoD B with External Monitoring S olutions The MongoD B Atlas AP I provides integration with e xternal management frameworks through programmatic access to automation f eatures and alerts. APM Integration Many operations teams use Application P erformance Monitoring (AP M) platforms to gain global oversight of 15 Score: 0.911 Node ID: c24f0bdd-d84e-4214-aceb-aa2cbd362819 Text: If the MongoD B cluster e xperiences a failure, the most recentbackup is only moments behind, minimizing e xposure to data loss. In additional, MongoD B Atlas includes queryable bac kups, which allows you to perform queries against e xisting snapshots to more easily restore data at the document/ object level. Queryable bac kups allow you to acco... Score: 0.911 Node ID: 642f08a3-f9b7-427b-81ce-00c1574eea01 Text: In the vast majority of cases, MongoD B Atlas bac kups delivers the simplest, saf est, and most efficient bac kup solution. mongodump is useful when data needs to be exported to another system, when a local bac kup is needed, or when just a subset of the data needs to be backed up. Score: 0.909
데이터에 대한 질문에 답변
이 섹션에서는 Atlas Vector Search 및 LlamaIndex를 사용하여 애플리케이션에서 RAG 를 구현하는 방법을 보여 줍니다. 이제 벡터 Atlas Search 쿼리를 실행하여 의미적으로 유사한 문서를 조회하는 방법을 알아보았으므로,Atlas Vector Search 를 사용하여 문서와 LlamaIndex 쿼리 엔진 을 조회하는 다음 코드를 실행하세요. 을(를) 클릭한 다음 해당 문서를 기반으로 질문에 답변합니다.
이 예제는 다음을 수행합니다:
Atlas Vector Search를 벡터 저장소를 위한 특정 유형의 검색기인 벡터 인덱스 검색기 로 인스턴스화합니다.
similarity_top_k
매개변수가 포함되어 있어 Atlas Vector Search가 가장 관련성 있는 문서 5개만 검색합니다.
RetrieverQueryEngine
쿼리 엔진을 인스턴스화하여 데이터에 대한 질문에 답변합니다. 메시지가 표시되면 쿼리 엔진은 다음 조치를 수행합니다.Atlas Vector Search를 리트리버로 사용하여 프롬프트에 따라 의미적으로 유사한 문서를 쿼리합니다.
조회된 문서를 기반으로 컨텍스트 인식 응답을 생성하기 위해 환경 설정할 때 지정한 LLM을 호출합니다.
LLM에 Atlas 보안 권장 사항에 대한 샘플 쿼리를 제공합니다.
LLM의 응답과 컨텍스트로 사용된 문서를 반환합니다. 생성된 응답은 다를 수 있습니다.
# Instantiate Atlas Vector Search as a retriever vector_store_retriever = VectorIndexRetriever(index=vector_store_index, similarity_top_k=5) # Pass the retriever into the query engine query_engine = RetrieverQueryEngine(retriever=vector_store_retriever) # Prompt the LLM response = query_engine.query('How can I secure my MongoDB Atlas cluster?') print(response) print("\nSource documents: ") pprint.pprint(response.source_nodes)
You can secure your MongoDB Atlas cluster by utilizing security features such as authentication, IP address whitelisting, encryption for data in motion and at rest, user rights management, and encryption. Additionally, you can set up global clusters on various cloud platforms with just a few clicks in the MongoDB Atlas UI to ensure data is written to and read from different regions. Source documents: [NodeWithScore(node=TextNode(id_='56884a56-6bcb-4890-9bdc-7d8eb9980b42', embedding=None, metadata={'page_label': '3', 'file_name': 'atlas_best_practices.pdf', 'file_path': 'data/atlas_best_practices.pdf', 'file_type': 'application/pdf', 'file_size': 512653, 'creation_date': '2024-02-21', 'last_modified_date': '2020-10-27', 'last_accessed_date': '2024-02-21'}, excluded_embed_metadata_keys=['file_name', 'file_type', 'file_size', 'creation_date', 'last_modified_date', 'last_accessed_date'], excluded_llm_metadata_keys=['file_name', 'file_type', 'file_size', 'creation_date', 'last_modified_date', 'last_accessed_date'], relationships={<NodeRelationship.SOURCE: '1'>: RelatedNodeInfo(node_id='79ee3a70-7d3d-4dda-b2b4-8da9299ac639', node_type=<ObjectType.DOCUMENT: '4'>, metadata={'page_label': '3', 'file_name': 'atlas_best_practices.pdf', 'file_path': 'data/atlas_best_practices.pdf', 'file_type': 'application/pdf', 'file_size': 512653, 'creation_date': '2024-02-21', 'last_modified_date': '2020-10-27', 'last_accessed_date': '2024-02-21'}, hash='4acc6a58693d749a7f3ddd92063755de00ab9bc8c11be03fd05814bc9c3d2e47'), <NodeRelationship.PREVIOUS: '2'>: RelatedNodeInfo(node_id='9c4f4242-e8c0-493d-b32d-21b900138210', node_type=<ObjectType.TEXT: '1'>, metadata={'page_label': '3', 'file_name': 'atlas_best_practices.pdf', 'file_path': 'data/atlas_best_practices.pdf', 'file_type': 'application/pdf', 'file_size': 512653, 'creation_date': '2024-02-21', 'last_modified_date': '2020-10-27', 'last_accessed_date': '2024-02-21'}, hash='6d12532c110420f9131f63bc1f676796103ea2b8078dfdab3809eaff9c4bde21'), <NodeRelationship.NEXT: '3'>: RelatedNodeInfo(node_id='6554d774-108c-4602-8ce8-5aca08802b5a', node_type=<ObjectType.TEXT: '1'>, metadata={}, hash='ce37b9f7382f86f97316d5dd346f645175e4a392afabb11d6a13c2dce81395e5')}, text='MongoD B\nAtlas provides:\n•Security f eatures to protect access to your data\n•Built in replication for always-on availability , tolerating\ncomplete data center failure\n•Backups and point in time recovery to protect against\ndata corruption\n•Fine-grained monitoring to let you know when to scale.', start_char_idx=386, end_char_idx=679, text_template='{metadata_str}\n\n{content}', metadata_template='{key}: {value}', metadata_seperator='\n'), score=0.9282928109169006), NodeWithScore(node=TextNode(id_='5ac63468-529e-4f74-a263-2dc15183f793', embedding=None, metadata={'page_label': '13', 'file_name': 'atlas_best_practices.pdf', 'file_path': 'data/atlas_best_practices.pdf', 'file_type': 'application/pdf', 'file_size': 512653, 'creation_date': '2024-02-21', 'last_modified_date': '2020-10-27', 'last_accessed_date': '2024-02-21'}, excluded_embed_metadata_keys=['file_name', 'file_type', 'file_size', 'creation_date', 'last_modified_date', 'last_accessed_date'], excluded_llm_metadata_keys=['file_name', 'file_type', 'file_size', 'creation_date', 'last_modified_date', 'last_accessed_date'], relationships={<NodeRelationship.SOURCE: '1'>: RelatedNodeInfo(node_id='ae95f83a-15f8-46bd-9603-ed14792b2f18', node_type=<ObjectType.DOCUMENT: '4'>, metadata={'page_label': '13', 'file_name': 'atlas_best_practices.pdf', 'file_path': 'data/atlas_best_practices.pdf', 'file_type': 'application/pdf', 'file_size': 512653, 'creation_date': '2024-02-21', 'last_modified_date': '2020-10-27', 'last_accessed_date': '2024-02-21'}, hash='07a7475af2413b7ad4a3010191462eca9d1691e29d8194389de7a7333ed2d67b'), <NodeRelationship.PREVIOUS: '2'>: RelatedNodeInfo(node_id='6d77733c-8532-43a9-a38d-c1da51a5a51b', node_type=<ObjectType.TEXT: '1'>, metadata={'page_label': '13', 'file_name': 'atlas_best_practices.pdf', 'file_path': 'data/atlas_best_practices.pdf', 'file_type': 'application/pdf', 'file_size': 512653, 'creation_date': '2024-02-21', 'last_modified_date': '2020-10-27', 'last_accessed_date': '2024-02-21'}, hash='19ac3815d50ad3ba71f5119f9ebacc1c84742b7a215e014be2dbf46cf6f38cb6'), <NodeRelationship.NEXT: '3'>: RelatedNodeInfo(node_id='99d8cf63-fecf-452b-aa2a-a5f6eec2933d', node_type=<ObjectType.TEXT: '1'>, metadata={}, hash='86b4419256e9d788383ea6a8cd30d4f37461f9f23e41c1e33ca9cd268dc12884')}, text='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\nAtlas takes care of the deployment and management of\ninfrastructure and database resources required to ensure\nthat data is written to and read from diff erent regions.', start_char_idx=498, end_char_idx=839, text_template='{metadata_str}\n\n{content}', metadata_template='{key}: {value}', metadata_seperator='\n'), score=0.9278459548950195), NodeWithScore(node=TextNode(id_='71589aef-f5e3-43de-b711-9b9e6e1c9f42', embedding=None, metadata={'page_label': '18', 'file_name': 'atlas_best_practices.pdf', 'file_path': 'data/atlas_best_practices.pdf', 'file_type': 'application/pdf', 'file_size': 512653, 'creation_date': '2024-02-21', 'last_modified_date': '2020-10-27', 'last_accessed_date': '2024-02-21'}, excluded_embed_metadata_keys=['file_name', 'file_type', 'file_size', 'creation_date', 'last_modified_date', 'last_accessed_date'], excluded_llm_metadata_keys=['file_name', 'file_type', 'file_size', 'creation_date', 'last_modified_date', 'last_accessed_date'], relationships={<NodeRelationship.SOURCE: '1'>: RelatedNodeInfo(node_id='fdfddc80-aa07-4411-8b5d-f8e02c53551e', node_type=<ObjectType.DOCUMENT: '4'>, metadata={'page_label': '18', 'file_name': 'atlas_best_practices.pdf', 'file_path': 'data/atlas_best_practices.pdf', 'file_type': 'application/pdf', 'file_size': 512653, 'creation_date': '2024-02-21', 'last_modified_date': '2020-10-27', 'last_accessed_date': '2024-02-21'}, hash='8289ead3efad9fc0ffb10c1051f14a8a6357692c1ab8cc34841116591a3f4f01'), <NodeRelationship.PREVIOUS: '2'>: RelatedNodeInfo(node_id='ce3ad309-f8b0-4211-b4eb-db82afb18b8e', node_type=<ObjectType.TEXT: '1'>, metadata={'page_label': '18', 'file_name': 'atlas_best_practices.pdf', 'file_path': 'data/atlas_best_practices.pdf', 'file_type': 'application/pdf', 'file_size': 512653, 'creation_date': '2024-02-21', 'last_modified_date': '2020-10-27', 'last_accessed_date': '2024-02-21'}, hash='8ddc31be6d74789b9a6fd9451bccb1d258bfc27cb60d443527eaad9de0d742ec'), <NodeRelationship.NEXT: '3'>: RelatedNodeInfo(node_id='053bee76-40c8-42c7-b19c-3ec97a2eefab', node_type=<ObjectType.TEXT: '1'>, metadata={}, hash='5393211ed6e59c3ee8e1b2fc9e2529f403ee7241ee477da7c20242440a203976')}, text='Protect data in motion over the network\nand at rest in persistent storage\nTo 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\ndocumentation to learn more ab out eac h of the security\nfeatures discussed below .', start_char_idx=1852, end_char_idx=2179, text_template='{metadata_str}\n\n{content}', metadata_template='{key}: {value}', metadata_seperator='\n'), score=0.9274715781211853), NodeWithScore(node=TextNode(id_='c2f91ce0-f310-43a4-b473-e8feb8b2dcca', embedding=None, metadata={'page_label': '11', 'file_name': 'atlas_best_practices.pdf', 'file_path': 'data/atlas_best_practices.pdf', 'file_type': 'application/pdf', 'file_size': 512653, 'creation_date': '2024-02-21', 'last_modified_date': '2020-10-27', 'last_accessed_date': '2024-02-21'}, excluded_embed_metadata_keys=['file_name', 'file_type', 'file_size', 'creation_date', 'last_modified_date', 'last_accessed_date'], excluded_llm_metadata_keys=['file_name', 'file_type', 'file_size', 'creation_date', 'last_modified_date', 'last_accessed_date'], relationships={<NodeRelationship.SOURCE: '1'>: RelatedNodeInfo(node_id='8be9cdd6-0d45-4e03-994c-d103aac018a4', node_type=<ObjectType.DOCUMENT: '4'>, metadata={'page_label': '11', 'file_name': 'atlas_best_practices.pdf', 'file_path': 'data/atlas_best_practices.pdf', 'file_type': 'application/pdf', 'file_size': 512653, 'creation_date': '2024-02-21', 'last_modified_date': '2020-10-27', 'last_accessed_date': '2024-02-21'}, hash='7dcc304caa6d650f0d8a1709dfbdeb8bd5e96bd62ea37e09d44c61eff1ec3a82'), <NodeRelationship.PREVIOUS: '2'>: RelatedNodeInfo(node_id='b2952038-2966-4eb8-a590-38a47bf2d2ff', node_type=<ObjectType.TEXT: '1'>, metadata={'page_label': '11', 'file_name': 'atlas_best_practices.pdf', 'file_path': 'data/atlas_best_practices.pdf', 'file_type': 'application/pdf', 'file_size': 512653, 'creation_date': '2024-02-21', 'last_modified_date': '2020-10-27', 'last_accessed_date': '2024-02-21'}, hash='73dd5fb0c39eff5917f7ef8ebf2baed63463d720c147133bd1a030c71c0cfd22'), <NodeRelationship.NEXT: '3'>: RelatedNodeInfo(node_id='3d175c9d-f332-44fd-ace6-17c676683e8e', node_type=<ObjectType.TEXT: '1'>, metadata={}, hash='2b982087b4e8a9600ae02c1dc31be7e4ab9b10d27d923654bd3de8e3fd134fae')}, text='Eac h node must be configured\nwith sufficient storage for the full data set, or for the subset\nto be stored in a single shard. T he storage speed and size\ncan be set when pic king the MongoD B Atlas instance\nduring cluster creation or reconfiguration.\nData volumes for customers deploying on A WS, Azure, and\nGCP are always encrypted.', start_char_idx=299, end_char_idx=633, text_template='{metadata_str}\n\n{content}', metadata_template='{key}: {value}', metadata_seperator='\n'), score=0.9221477508544922), NodeWithScore(node=TextNode(id_='ce3ad309-f8b0-4211-b4eb-db82afb18b8e', embedding=None, metadata={'page_label': '18', 'file_name': 'atlas_best_practices.pdf', 'file_path': 'data/atlas_best_practices.pdf', 'file_type': 'application/pdf', 'file_size': 512653, 'creation_date': '2024-02-21', 'last_modified_date': '2020-10-27', 'last_accessed_date': '2024-02-21'}, excluded_embed_metadata_keys=['file_name', 'file_type', 'file_size', 'creation_date', 'last_modified_date', 'last_accessed_date'], excluded_llm_metadata_keys=['file_name', 'file_type', 'file_size', 'creation_date', 'last_modified_date', 'last_accessed_date'], relationships={<NodeRelationship.SOURCE: '1'>: RelatedNodeInfo(node_id='fdfddc80-aa07-4411-8b5d-f8e02c53551e', node_type=<ObjectType.DOCUMENT: '4'>, metadata={'page_label': '18', 'file_name': 'atlas_best_practices.pdf', 'file_path': 'data/atlas_best_practices.pdf', 'file_type': 'application/pdf', 'file_size': 512653, 'creation_date': '2024-02-21', 'last_modified_date': '2020-10-27', 'last_accessed_date': '2024-02-21'}, hash='8289ead3efad9fc0ffb10c1051f14a8a6357692c1ab8cc34841116591a3f4f01'), <NodeRelationship.PREVIOUS: '2'>: RelatedNodeInfo(node_id='d84004f0-4170-48c4-b9f7-69b76db64652', node_type=<ObjectType.TEXT: '1'>, metadata={'page_label': '18', 'file_name': 'atlas_best_practices.pdf', 'file_path': 'data/atlas_best_practices.pdf', 'file_type': 'application/pdf', 'file_size': 512653, 'creation_date': '2024-02-21', 'last_modified_date': '2020-10-27', 'last_accessed_date': '2024-02-21'}, hash='13f060ab7a04314bd0b814dd83f9334e1014c43be94f4913bd7387d0f0521a66'), <NodeRelationship.NEXT: '3'>: RelatedNodeInfo(node_id='71589aef-f5e3-43de-b711-9b9e6e1c9f42', node_type=<ObjectType.TEXT: '1'>, metadata={}, hash='23826d53a8be4492a2e267e08e3481b309ef43c249148758610e5cc17354467f')}, text='MongoD B Atlas f eatures e xtensive capabilities to def end,\ndetect, and control access to MongoD B, off ering among\nthe most complete security controls of any modern\ndatabase:\n•User Rights Management.User Rights Management. Control access to sensitive\ndata using industry standard mec hanisms for\nauthentication and authorization at the database level•Encryption.Encryption.', start_char_idx=1476, end_char_idx=1851, text_template='{metadata_str}\n\n{content}', metadata_template='{key}: {value}', metadata_seperator='\n'), score=0.9206620454788208)]
이 예제는 다음을 수행합니다:
Atlas Vector Search가 17 페이지에 나타나는 문서만 검색하도록
metadata.page_label
필드에 메타데이터 필터를 정의합니다.Atlas Vector Search를 벡터 인덱스 리트리버 로 인스턴스화합니다. 벡터 저장소를 위한 특정 유형의 리트리버입니다. 여기에는 정의한 메타데이터 필터와
similarity_top_k
매개 변수가 포함되어 있어 Atlas Vector Search가 17 페이지에서 가장 관련성이 높은 5 문서만 검색합니다.
RetrieverQueryEngine
쿼리 엔진을 인스턴스화하여 데이터에 대한 질문에 답변합니다. 메시지가 표시되면 쿼리 엔진은 다음 조치를 수행합니다.Atlas Vector Search를 리트리버로 사용하여 프롬프트에 따라 의미적으로 유사한 문서를 쿼리합니다.
조회된 문서를 기반으로 컨텍스트 인식 응답을 생성하기 위해 환경 설정할 때 지정한 LLM을 호출합니다.
LLM에 Atlas 보안 권장 사항에 대한 샘플 쿼리를 제공합니다.
LLM의 응답과 컨텍스트로 사용된 문서를 반환합니다. 생성된 응답은 다를 수 있습니다.
# Specify metadata filters metadata_filters = MetadataFilters( filters=[ExactMatchFilter(key="metadata.page_label", value="17")] ) # Instantiate Atlas Vector Search as a retriever vector_store_retriever = VectorIndexRetriever(index=vector_store_index, filters=metadata_filters, similarity_top_k=5) # Pass the retriever into the query engine query_engine = RetrieverQueryEngine(retriever=vector_store_retriever) # Prompt the LLM response = query_engine.query('How can I secure my MongoDB Atlas cluster?') print(response) print("\nSource documents: ") pprint.pprint(response.source_nodes)
Regular backups are essential for securing your MongoDB Atlas cluster. By ensuring that backups are maintained continuously and are just a few seconds behind the operational system, you can minimize exposure to data loss in case of a failure. Additionally, utilizing queryable backups allows you to easily restore data at the document/object level. Integrating external monitoring solutions through the MongoDB Atlas API can also enhance security by providing access to automation features and alerts. Source documents: [NodeWithScore(node=TextNode(id_='72afbd12-441c-4390-843d-cc11609a7855', embedding=None, metadata={'page_label': '17', 'file_name': 'atlas_best_practices.pdf', 'file_path': 'data/atlas_best_practices.pdf', 'file_type': 'application/pdf', 'file_size': 512653, 'creation_date': '2024-02-21', 'last_modified_date': '2020-10-27', 'last_accessed_date': '2024-02-21'}, excluded_embed_metadata_keys=['file_name', 'file_type', 'file_size', 'creation_date', 'last_modified_date', 'last_accessed_date'], excluded_llm_metadata_keys=['file_name', 'file_type', 'file_size', 'creation_date', 'last_modified_date', 'last_accessed_date'], relationships={<NodeRelationship.SOURCE: '1'>: RelatedNodeInfo(node_id='45d87295-3d74-41bb-812f-789b72b4f8ba', node_type=<ObjectType.DOCUMENT: '4'>, metadata={'page_label': '17', 'file_name': 'atlas_best_practices.pdf', 'file_path': 'data/atlas_best_practices.pdf', 'file_type': 'application/pdf', 'file_size': 512653, 'creation_date': '2024-02-21', 'last_modified_date': '2020-10-27', 'last_accessed_date': '2024-02-21'}, hash='8e56ef0d706096509e6793e2406c4f5fd0bd020c077a0e7713dd5f3b595f7915'), <NodeRelationship.PREVIOUS: '2'>: RelatedNodeInfo(node_id='552250ae-a55b-4d6d-b326-6d736e5423c8', node_type=<ObjectType.TEXT: '1'>, metadata={'page_label': '17', 'file_name': 'atlas_best_practices.pdf', 'file_path': 'data/atlas_best_practices.pdf', 'file_type': 'application/pdf', 'file_size': 512653, 'creation_date': '2024-02-21', 'last_modified_date': '2020-10-27', 'last_accessed_date': '2024-02-21'}, hash='19f3143232ce10c30ee4d9f44012bf3b672ecba3240742d00c921149d9c73016'), <NodeRelationship.NEXT: '3'>: RelatedNodeInfo(node_id='936e940e-2063-4649-8a9a-20090a87aa0a', node_type=<ObjectType.TEXT: '1'>, metadata={}, hash='4751bacb2f79e8e61b00828e28cee72a221c5b33bbbec942d431220b2446e507')}, text='If the\nMongoD B cluster e xperiences a failure, the most recentbackup is only moments behind, minimizing e xposure to\ndata loss.\nIn additional, MongoD B Atlas includes queryable bac kups,\nwhich allows you to perform queries against e xisting\nsnapshots to more easily restore data at the document/\nobject level. Queryable bac kups allow you to accomplish\nthe following with less', start_char_idx=1987, end_char_idx=2364, text_template='{metadata_str}\n\n{content}', metadata_template='{key}: {value}', metadata_seperator='\n'), score=0.913266658782959), NodeWithScore(node=TextNode(id_='552250ae-a55b-4d6d-b326-6d736e5423c8', embedding=None, metadata={'page_label': '17', 'file_name': 'atlas_best_practices.pdf', 'file_path': 'data/atlas_best_practices.pdf', 'file_type': 'application/pdf', 'file_size': 512653, 'creation_date': '2024-02-21', 'last_modified_date': '2020-10-27', 'last_accessed_date': '2024-02-21'}, excluded_embed_metadata_keys=['file_name', 'file_type', 'file_size', 'creation_date', 'last_modified_date', 'last_accessed_date'], excluded_llm_metadata_keys=['file_name', 'file_type', 'file_size', 'creation_date', 'last_modified_date', 'last_accessed_date'], relationships={<NodeRelationship.SOURCE: '1'>: RelatedNodeInfo(node_id='45d87295-3d74-41bb-812f-789b72b4f8ba', node_type=<ObjectType.DOCUMENT: '4'>, metadata={'page_label': '17', 'file_name': 'atlas_best_practices.pdf', 'file_path': 'data/atlas_best_practices.pdf', 'file_type': 'application/pdf', 'file_size': 512653, 'creation_date': '2024-02-21', 'last_modified_date': '2020-10-27', 'last_accessed_date': '2024-02-21'}, hash='8e56ef0d706096509e6793e2406c4f5fd0bd020c077a0e7713dd5f3b595f7915'), <NodeRelationship.PREVIOUS: '2'>: RelatedNodeInfo(node_id='a72f111d-1bb9-4173-a713-8bfce8cd2ad5', node_type=<ObjectType.TEXT: '1'>, metadata={'page_label': '17', 'file_name': 'atlas_best_practices.pdf', 'file_path': 'data/atlas_best_practices.pdf', 'file_type': 'application/pdf', 'file_size': 512653, 'creation_date': '2024-02-21', 'last_modified_date': '2020-10-27', 'last_accessed_date': '2024-02-21'}, hash='5da4ac9abb19e20a0b14481751a7d4a80f46f8968f804f1d3f4f04fb351886a3'), <NodeRelationship.NEXT: '3'>: RelatedNodeInfo(node_id='72afbd12-441c-4390-843d-cc11609a7855', node_type=<ObjectType.TEXT: '1'>, metadata={}, hash='5c99659b2505c1de0600c65fc65cc19c97321a3b9607107d0cac342c5ec9887a')}, text='T aking regular bac kups off ers\nother advantages, as well. T he bac kups can be used to\nseed new environments for development, staging, or QA\nwithout impacting production systems.\nMongoD B Atlas bac kups are maintained continuously , just\na few seconds behind the operational system.', start_char_idx=1702, end_char_idx=1986, text_template='{metadata_str}\n\n{content}', metadata_template='{key}: {value}', metadata_seperator='\n'), score=0.9097342491149902), NodeWithScore(node=TextNode(id_='70fc2c34-1338-4f29-8fc6-7b8551ea2c39', embedding=None, metadata={'page_label': '17', 'file_name': 'atlas_best_practices.pdf', 'file_path': 'data/atlas_best_practices.pdf', 'file_type': 'application/pdf', 'file_size': 512653, 'creation_date': '2024-02-21', 'last_modified_date': '2020-10-27', 'last_accessed_date': '2024-02-21'}, excluded_embed_metadata_keys=['file_name', 'file_type', 'file_size', 'creation_date', 'last_modified_date', 'last_accessed_date'], excluded_llm_metadata_keys=['file_name', 'file_type', 'file_size', 'creation_date', 'last_modified_date', 'last_accessed_date'], relationships={<NodeRelationship.SOURCE: '1'>: RelatedNodeInfo(node_id='45d87295-3d74-41bb-812f-789b72b4f8ba', node_type=<ObjectType.DOCUMENT: '4'>, metadata={'page_label': '17', 'file_name': 'atlas_best_practices.pdf', 'file_path': 'data/atlas_best_practices.pdf', 'file_type': 'application/pdf', 'file_size': 512653, 'creation_date': '2024-02-21', 'last_modified_date': '2020-10-27', 'last_accessed_date': '2024-02-21'}, hash='8e56ef0d706096509e6793e2406c4f5fd0bd020c077a0e7713dd5f3b595f7915'), <NodeRelationship.PREVIOUS: '2'>: RelatedNodeInfo(node_id='834d6586-9bee-4dd8-bf94-2306f1c21f8a', node_type=<ObjectType.TEXT: '1'>, metadata={'page_label': '17', 'file_name': 'atlas_best_practices.pdf', 'file_path': 'data/atlas_best_practices.pdf', 'file_type': 'application/pdf', 'file_size': 512653, 'creation_date': '2024-02-21', 'last_modified_date': '2020-10-27', 'last_accessed_date': '2024-02-21'}, hash='86fda9a7b7edce18f333bcbe91c28a9bdb0469957545b6e8cc7fc8e22228c820'), <NodeRelationship.NEXT: '3'>: RelatedNodeInfo(node_id='be001832-41ee-46d2-bd29-4c8650129598', node_type=<ObjectType.TEXT: '1'>, metadata={}, hash='e0b09755cc3fad7edc84d2ad9e4b44c098e137c3efea14dd680e55b72c80ffe4')}, text='In the vast majority of cases, MongoD B Atlas bac kups\ndelivers the simplest, saf est, and most efficient bac kup\nsolution. mongodump is useful when data needs to be\nexported to another system, when a local bac kup is\nneeded, or when just a subset of the data needs to be\nbacked up.', start_char_idx=3104, end_char_idx=3386, text_template='{metadata_str}\n\n{content}', metadata_template='{key}: {value}', metadata_seperator='\n'), score=0.9047020673751831), NodeWithScore(node=TextNode(id_='be001832-41ee-46d2-bd29-4c8650129598', embedding=None, metadata={'page_label': '17', 'file_name': 'atlas_best_practices.pdf', 'file_path': 'data/atlas_best_practices.pdf', 'file_type': 'application/pdf', 'file_size': 512653, 'creation_date': '2024-02-21', 'last_modified_date': '2020-10-27', 'last_accessed_date': '2024-02-21'}, excluded_embed_metadata_keys=['file_name', 'file_type', 'file_size', 'creation_date', 'last_modified_date', 'last_accessed_date'], excluded_llm_metadata_keys=['file_name', 'file_type', 'file_size', 'creation_date', 'last_modified_date', 'last_accessed_date'], relationships={<NodeRelationship.SOURCE: '1'>: RelatedNodeInfo(node_id='45d87295-3d74-41bb-812f-789b72b4f8ba', node_type=<ObjectType.DOCUMENT: '4'>, metadata={'page_label': '17', 'file_name': 'atlas_best_practices.pdf', 'file_path': 'data/atlas_best_practices.pdf', 'file_type': 'application/pdf', 'file_size': 512653, 'creation_date': '2024-02-21', 'last_modified_date': '2020-10-27', 'last_accessed_date': '2024-02-21'}, hash='8e56ef0d706096509e6793e2406c4f5fd0bd020c077a0e7713dd5f3b595f7915'), <NodeRelationship.PREVIOUS: '2'>: RelatedNodeInfo(node_id='70fc2c34-1338-4f29-8fc6-7b8551ea2c39', node_type=<ObjectType.TEXT: '1'>, metadata={'page_label': '17', 'file_name': 'atlas_best_practices.pdf', 'file_path': 'data/atlas_best_practices.pdf', 'file_type': 'application/pdf', 'file_size': 512653, 'creation_date': '2024-02-21', 'last_modified_date': '2020-10-27', 'last_accessed_date': '2024-02-21'}, hash='53fad6c5333cc41a5246f204a317696c4cb97420363910170f3ae25ef253c1da'), <NodeRelationship.NEXT: '3'>: RelatedNodeInfo(node_id='e3ed474b-1ada-4e15-9f48-db37535bbdd6', node_type=<ObjectType.TEXT: '1'>, metadata={}, hash='4eb5d83c88741d63c76679251b2402ff084d33ffd9619f3dd74e5fc0dffc87e2')}, text='Integrating MongoD B with External\nMonitoring S olutions\nThe MongoD B Atlas AP I provides integration with e xternal\nmanagement frameworks through programmatic access to\nautomation f eatures and alerts.\nAPM Integration\nMany operations teams use Application P erformance\nMonitoring (AP M) platforms to gain global oversight of\n15', start_char_idx=3387, end_char_idx=3715, text_template='{metadata_str}\n\n{content}', metadata_template='{key}: {value}', metadata_seperator='\n'), score=0.9037604331970215), NodeWithScore(node=TextNode(id_='fd4d3ed9-a0d2-4663-9e0b-aee2faea2b4f', embedding=None, metadata={'page_label': '17', 'file_name': 'atlas_best_practices.pdf', 'file_path': 'data/atlas_best_practices.pdf', 'file_type': 'application/pdf', 'file_size': 512653, 'creation_date': '2024-02-21', 'last_modified_date': '2020-10-27', 'last_accessed_date': '2024-02-21'}, excluded_embed_metadata_keys=['file_name', 'file_type', 'file_size', 'creation_date', 'last_modified_date', 'last_accessed_date'], excluded_llm_metadata_keys=['file_name', 'file_type', 'file_size', 'creation_date', 'last_modified_date', 'last_accessed_date'], relationships={<NodeRelationship.SOURCE: '1'>: RelatedNodeInfo(node_id='45d87295-3d74-41bb-812f-789b72b4f8ba', node_type=<ObjectType.DOCUMENT: '4'>, metadata={'page_label': '17', 'file_name': 'atlas_best_practices.pdf', 'file_path': 'data/atlas_best_practices.pdf', 'file_type': 'application/pdf', 'file_size': 512653, 'creation_date': '2024-02-21', 'last_modified_date': '2020-10-27', 'last_accessed_date': '2024-02-21'}, hash='8e56ef0d706096509e6793e2406c4f5fd0bd020c077a0e7713dd5f3b595f7915'), <NodeRelationship.PREVIOUS: '2'>: RelatedNodeInfo(node_id='a53c9dbc-25ec-49cf-bd3c-04c2758dd681', node_type=<ObjectType.TEXT: '1'>, metadata={'page_label': '16', 'file_name': 'atlas_best_practices.pdf', 'file_path': 'data/atlas_best_practices.pdf', 'file_type': 'application/pdf', 'file_size': 512653, 'creation_date': '2024-02-21', 'last_modified_date': '2020-10-27', 'last_accessed_date': '2024-02-21'}, hash='ce8e610852c742743e0674dd6fc05126cc18138fa224e28fc0cc72c0319d087a'), <NodeRelationship.NEXT: '3'>: RelatedNodeInfo(node_id='a07617d5-8090-47b4-92f8-f3bbe38cff54', node_type=<ObjectType.TEXT: '1'>, metadata={}, hash='9ad371a88420c2c0ace630858035b13b82f589042b0de31afc364bbe89d0d9ce')}, text='example, a poorly selected shard key can result in uneven\ndata distribution. In this case, most if not all of the queries\nwill be directed to the single mongodthat is managing the\ndata. F urthermore, MongoD B may be attempting to\nredistribute the documents to ac hieve a more ideal balance\nacross the servers.', start_char_idx=0, end_char_idx=309, text_template='{metadata_str}\n\n{content}', metadata_template='{key}: {value}', metadata_seperator='\n'), score=0.9037080407142639)]
다음 단계
데이터 커넥터, 인덱스 및 쿼리 엔진을 포함하여 RAG 애플리케이션을 위한 LlamaIndex의 전체 도구 라이브러리를 탐색하려면 LlamaHub를 참조 하세요.
이 튜토리얼의 애플리케이션을 확장하여 주고받는 대화를 나누려면 채팅 엔진을 참조하세요.
MongoDB는 다음과 같은 개발자 리소스도 제공합니다.