Menu Docs
Página inicial do Docs
/ /

Construa uma implementação de RAG local com MongoDB e LangChain

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:

  1. Crie um sistema do Atlas local.

  2. Use um modelo de incorporação local para gerar incorporação de vetores.

  3. Use a implementação local do Atlas como um repositório de vetores.

  4. 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.

Para concluir este tutorial, você deve ter o seguinte:

  • O Atlas CLI instalado e em execução v1.14.3 ou posterior.

  • Um notebook interativo de Python que você pode executar localmente. Você pode executar notebooks interativos de Python no VS Code. Seu ambiente deve estar executando Python v3.10 ou posterior.

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.

Nesta seção, você configura o ambiente para este tutorial.

1

Execute os seguintes comandos em seu terminal para criar um novo diretório chamado local-rag-langchain-mongodb.

mkdir local-rag-langchain-mongodb
cd local-rag-langchain-mongodb
2

O comando a seguir cria um notebook no diretório chamado langchain-local-rag.ipynb.

touch langchain-local-rag.ipynb
3

Execute o seguinte comando no seu notebook:

pip install --quiet --upgrade pymongo langchain langchain-community langchain-huggingface gpt4all pypdf
4

Execute o seguinte código no seu notebook, substituindo <port-number> pela porta da sua implantação local.

MONGODB_URI = ("mongodb://localhost:<port-number>/?directConnection=true")

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.

1

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"
)
2

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.

3

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
)

Dica

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.

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.

1
  1. Clique no botão a seguir para baixar o modelo Mistral 7B do GPT4All. Para explorar outros modelos, consulte o website do GPT4All.

    Download
  2. Mova esse modelo para o diretório do seu projeto local-rag-mongodb.

  3. 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)
2

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')]

Voltar

Recuperação de auto-consulta

Nesta página