Além de implantar o MongoDB Atlas na nuvem, você usa o Atlas CLI para implantar instâncias MongoDB independentes em sua máquina local. A integração do MongoDB com o MongoDB suporta clusters Atlas e sistemas locais. Ao especificar o parâmetro de string de conexão , você pode especificar sua string de conexão da implantação local em vez da string de conexão do cluster.
Este tutorial demonstra como implementar a geração aumentada de recuperação (RAG) com uma implantação local do Atlas , modelos locais e a integração do MongoDB do LangChain. Especificamente, você executa as seguintes ações:
Crie um sistema do Atlas local.
Use um modelo de incorporação local para gerar incorporação de vetores.
Use a implementação local do Atlas como um repositório de vetores.
Use um LLM local para responder a perguntas sobre seus dados.
Para saber como implementar o RAG localmente sem usar o LangChain, consulte Criar uma implementação local do RAG com a Vector Search do MongoDB .
Pré-requisitos
Para concluir este tutorial, você deve ter o seguinte:
Python v3.10 ou posterior.
Docker em execução localmente.
Um bloco de anotações Python interativo que você pode executar localmente. Você pode executar blocos de anotações interativos do Python no VS Code.
Este tutorial usa a biblioteca Python atlas-local-lib-py para criar e gerenciar implantações locais do Atlas. A biblioteca envolve contêineres Docker para fornecer implantações totalmente locais que não exigem conexão com a nuvem. A biblioteca lida automaticamente com o ciclo de vida da implantação, a recuperação da string de conexão e garante a reutilização da implantação em sessões do Jupyter Notebook.
As implantações locais do Atlas são destinadas apenas para testes. Para ambientes de produção, implante um cluster.
Configurar o ambiente
Nesta seção, você configura o ambiente para este tutorial. A biblioteca atlas-local-lib-py cria e gerencia automaticamente sua implantação local do MongoDB por meio do Docker, eliminando a necessidade de configuração manual ou comandos CLI.
Crie ou reutilize uma implantação local do Atlas.
Execute o código a seguir em seu notebook para criar uma nova implantação local ou reutilizar uma existente com configuração correspondente. Isso também recupera a string de conexão programaticamente.
from atlas_local import LocalDeployment deployment = LocalDeployment.get_or_create(name="local-atlas-deployment") MONGODB_URI = deployment.connection_string()
Use sua implantação local como armazenagem vetorial
Você pode utilizar seu sistema local do Atlas como um banco de dados vetorial, também chamado de armazenamento de vetor. Copie e cole os seguintes trechos de código em seu bloco de anotações.
Instancie o armazenamento de vetores.
O código a seguir usa a integração LangChain com o MongoDB Vector Search para instanciar sua implantação local do Atlas como um banco de dados vetorial, também chamado de armazenamento vetorial, usando o langchain_db.local_rag namespace.
Este exemplo especifica o modelo mixedbread-ai/mxbai-embed-large-v1 do Abraçando o Face.
from langchain_mongodb import MongoDBAtlasVectorSearch from langchain_huggingface import HuggingFaceEmbeddings # Load the embedding model (https://huggingface.co/mixedbread-ai/mxbai-embed-large-v1) embedding_model = HuggingFaceEmbeddings(model_name="mixedbread-ai/mxbai-embed-large-v1") # Instantiate vector store vector_store = MongoDBAtlasVectorSearch.from_connection_string( connection_string = MONGODB_URI, namespace = "langchain_db.local_rag", embedding=embedding_model, index_name="vector_index" )
Adicione documentos ao repositório de vetores.
Cole e execute o código a seguir em seu bloco de anotações para inserir um PDF de amostra que contém um relatório de rendimentos recente do MongoDB no armazenamento de vetores.
Este código utiliza um divisor de texto para dividir os dados do PDF em documentos pai menores. Ele especifica o tamanho da parte (número de caracteres) e a sobreposição da parte (número de caracteres sobrepostos entre partes consecutivas) para cada documento.
from langchain_community.document_loaders import PyPDFLoader from langchain_text_splitters import RecursiveCharacterTextSplitter # Load the PDF loader = PyPDFLoader("https://investors.mongodb.com/node/13176/pdf") data = loader.load() # Split PDF into documents text_splitter = RecursiveCharacterTextSplitter(chunk_size=200, chunk_overlap=20) docs = text_splitter.split_documents(data) # Add data to the vector store vector_store.add_documents(docs)
Esse código pode levar alguns minutos para ser executado. Depois de concluído, se estiver usando o Atlas, poderá verificar suas incorporações vetoriais navegando até o namespace langchain_db.local_rag na interface do usuário do Atlas.
Você também pode visualizar suas incorporações vetoriais conectando-se à implantação local a partir do mongosh ou ao seu aplicação usando a string de conexão da implantação. Em seguida, você pode executar operações de leitura na coleção langchain_db.local_rag.
Crie o índice do MongoDB Vector Search .
Para habilitar consultas de pesquisa de vetor em seu armazenamento de vetor, crie um índice do MongoDB Vector Search na coleção langchain_db.test . Você pode criar o índice usando o método assistente LangChain:
# Use helper method to create the vector search index vector_store.create_vector_search_index( dimensions = 1024 # The dimensions of the vector embeddings to be indexed )
O índice deve levar cerca de um minuto para criar. Enquanto constrói, o índice está em um estado de sincronização inicial. Quando terminar de ser criado, você poderá começar a consultar os dados em sua coleção.
Use o LLM local para responder a perguntas
Esta seção demonstra um exemplo de implementação de RAG que você pode executar localmente usando o MongoDB Vector Search e a GPT4All.
Para aprender mais sobre outras maneiras de executar LLMs localmente com LangChain, veja Executar modelos localmente.
Carregue o LLM local.
Clique no botão a seguir para fazer o download do 7modelo Miscal B da GPT4All. Para explorar outros modelos, consulte o website da GPT All.4
DownloadMova esse modelo para o diretório do seu projeto
local-rag-mongodb.Cole o seguinte código no seu bloco de anotações para configurar o LLM. Antes de executar, substitua
<path-to-model>pelo caminho onde você salvou o LLM localmente.from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler from langchain_community.llms import GPT4All # Configure the LLM local_path = "<path-to-model>" # Callbacks support token-wise streaming callbacks = [StreamingStdOutCallbackHandler()] # Verbose is required to pass to the callback manager llm = GPT4All(model=local_path, callbacks=callbacks, verbose=True)
Responda perguntas sobre seus dados.
Execute o seguinte código para concluir a implementação da RAG:
from langchain_core.prompts import PromptTemplate from langchain_core.output_parsers import StrOutputParser from langchain_core.runnables import RunnablePassthrough # Instantiate MongoDB Vector Search as a retriever retriever = vector_store.as_retriever() # Define prompt template template = """ Use the following pieces of context to answer the question at the end. {context} Question: {question} """ custom_rag_prompt = PromptTemplate.from_template(template) def format_docs(docs): return "\n\n".join(doc.page_content for doc in docs) # Create chain rag_chain = ( {"context": retriever | format_docs, "question": RunnablePassthrough()} | custom_rag_prompt | llm | StrOutputParser() ) # Prompt the chain question = "What was MongoDB's latest acquisition?" answer = rag_chain.invoke(question) # Return source documents documents = retriever.invoke(question) print("\nSource documents:") pprint.pprint(documents)
Answer: MongoDB's latest acquisition was Voyage AI, a pioneer in state-of-the-art embedding and reranking models that power next-generation Source documents: [Document(id='680a98187685ddb66d29ed88', metadata={'_id': '680a98187685ddb66d29ed88', 'producer': 'West Corporation using ABCpdf', 'creator': 'PyPDF', 'creationdate': '2025-03-05T21:06:26+00:00', 'title': 'MongoDB, Inc. Announces Fourth Quarter and Full Year Fiscal 2025 Financial Results', 'source': 'https://investors.mongodb.com/node/13176/pdf', 'total_pages': 9, 'page': 1, 'page_label': '2'}, page_content='Measures."\nFourth Quarter Fiscal 2025 and Recent Business Highlights\nMongoDB acquired Voyage AI, a pioneer in state-of-the-art embedding and reranking models that power next-generation'), Document(id='680a98187685ddb66d29ed8c', metadata={'_id': '680a98187685ddb66d29ed8c', 'producer': 'West Corporation using ABCpdf', 'creator': 'PyPDF', 'creationdate': '2025-03-05T21:06:26+00:00', 'title': 'MongoDB, Inc. Announces Fourth Quarter and Full Year Fiscal 2025 Financial Results', 'source': 'https://investors.mongodb.com/node/13176/pdf', 'total_pages': 9, 'page': 1, 'page_label': '2'}, page_content='conjunction with the acquisition of Voyage, MongoDB is announcing a stock buyback program of $200 million, to offset the\ndilutive impact of the acquisition consideration.'), Document(id='680a98187685ddb66d29ee3f', metadata={'_id': '680a98187685ddb66d29ee3f', 'producer': 'West Corporation using ABCpdf', 'creator': 'PyPDF', 'creationdate': '2025-03-05T21:06:26+00:00', 'title': 'MongoDB, Inc. Announces Fourth Quarter and Full Year Fiscal 2025 Financial Results', 'source': 'https://investors.mongodb.com/node/13176/pdf', 'total_pages': 9, 'page': 8, 'page_label': '9'}, page_content='View original content to download multimedia:https://www.prnewswire.com/news-releases/mongodb-inc-announces-fourth-quarter-and-full-\nyear-fiscal-2025-financial-results-302393702.html'), Document(id='680a98187685ddb66d29edde', metadata={'_id': '680a98187685ddb66d29edde', 'producer': 'West Corporation using ABCpdf', 'creator': 'PyPDF', 'creationdate': '2025-03-05T21:06:26+00:00', 'title': 'MongoDB, Inc. Announces Fourth Quarter and Full Year Fiscal 2025 Financial Results', 'source': 'https://investors.mongodb.com/node/13176/pdf', 'total_pages': 9, 'page': 3, 'page_label': '4'}, page_content='distributed database on the market. With integrated capabilities for operational data, search, real-time analytics, and AI-powered retrieval, MongoDB')]