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.
Trabalhe com uma versão executável deste tutorial como um bloco de anotações Python.
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:
Criar uma implantação local do Atlas
Para criar a implantação local, execute atlas deployments setup no seu terminal e siga as instruções para criar a implantação.
Para obter instruções detalhadas, consulte Criar uma implementação local do Atlas.
Você usa a Atlas CLI para criar sistemas locais do Atlas . A Atlas CLI é a interface de linha de comando do MongoDB Atlas, e você pode usar a Atlas CLI para interagir com o Atlas a partir do terminal para várias tarefas, incluindo a criação de sistemas locais do Atlas . São sistemas totalmente locais que não exigem conexão com a nuvem.
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.
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 namespace langchain_db.local_rag.
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 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.
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 GPT4All.
Para saber mais sobre outras maneiras de executar LLMs localmente com o LangChain, consulte Executar modelos localmente.
Carregue o LLM local.
Clique no botão a seguir para baixar o modelo Mistral 7B do GPT4All. Para explorar outros modelos, consulte o website do GPT4All.
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')]