Docs Menu
Docs Home
/ /

Construya una implementación de RAG local con MongoDB y LangChain

Además de implementar MongoDB Atlas en la nube, puede usar la CLI de Atlas para implementar instancias autónomas de MongoDB en su equipo local. La integración de LangChain con MongoDB admite tanto clústeres de Atlas como implementaciones locales. Al especificar el parámetro de cadena de conexión, puede especificar la cadena de conexión de su implementación local en lugar de la cadena de conexión del clúster.

Este tutorial muestra cómo implementar la generación aumentada por recuperación (RAG) con una implementación local de Atlas, modelos locales y la integración de LangChain con MongoDB. En concreto, se realizan las siguientes acciones:

  1. Crea una implementación local de Atlas.

  2. Utilice un modelo de incrustación local para generar incrustaciones vectoriales.

  3. Utilice la implementación local de Atlas como almacén de vectores.

  4. Utilice un LLM local para responder preguntas sobre sus datos.

Trabaje con una versión ejecutable de este tutorial como Cuaderno de Python.

Para aprender a implementar RAG localmente sin usar LangChain, consulte Construya una implementación de RAG local con MongoDB Vector Search.

Para completar este tutorial, debes tener lo siguiente:

  • La CLI de Atlas instalada y en ejecución v1.14.3 o posterior.

  • Un cuaderno interactivo de Python que puedes ejecutar localmente. Puedes ejecutar cuadernos interactivos de Python en VS Code. Asegúrate de que tu entorno ejecute Python3 v.10 o posterior.

Para crear la implementación local, ejecute atlas deployments setup en su terminal y siga las instrucciones para crear la implementación.

Para obtener instrucciones detalladas, consulte Crear una implementación local de Atlas.

En esta sección configurarás el entorno para este tutorial.

1

Ejecute los siguientes comandos en su terminal para crear un nuevo directorio llamado local-rag-langchain-mongodb.

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

El siguiente comando crea un cuaderno en el directorio llamado langchain-local-rag.ipynb.

touch langchain-local-rag.ipynb
3

Ejecute el siguiente comando en su cuaderno:

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

Ejecute el siguiente código en su cuaderno, reemplazando <port-number> con el puerto de su implementación local.

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

Puedes usar tu implementación local de Atlas como base de datos vectorial, también llamada almacén vectorial. Copia y pega los siguientes fragmentos de código en tu notebook.

1

El siguiente código utiliza la integración de LangChain para MongoDB Vector Search para crear una instancia de su implementación de Atlas local como una base de datos vectorial, también llamada almacén vectorial, utilizando el espacio de langchain_db.local_rag nombres.

Este ejemplo especifica el modelo mixedbread-ai/mxbai-embed-large-v1 de Hugging 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

Pegue y ejecute el siguiente código en su cuaderno para ingerir un PDF de muestra que contiene un informe de ganancias reciente de MongoDB en la tienda de vectores.

Este código utiliza un divisor de texto para fragmentar los datos PDF en documentos principales más pequeños. Especifica el tamaño del fragmento (número de caracteres) y la superposición de fragmentos (número de caracteres superpuestos entre fragmentos consecutivos) 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)

Este código puede tardar varios minutos en ejecutarse. Una vez finalizado, si usa Atlas, puede verificar las incrustaciones vectoriales navegando al espacio de nombres en langchain_db.local_rag la interfaz de usuario de Atlas.

También puede ver sus incrustaciones vectoriales conectándose a su implementación local desde mongosh o a su aplicación mediante la cadena de conexión de su implementación. Después, puede ejecutar operaciones de lectura en la langchain_db.local_rag colección.

3

Para habilitar las consultas de búsqueda vectorial en su almacén de vectores, cree un índice de búsqueda vectorial de MongoDB en la colección langchain_db.test. Puede crear el índice utilizando el método auxiliar 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
)

Tip

El índice debería tardar aproximadamente un minuto en crearse. Mientras se crea, el índice está en un estado de sincronización inicial. Cuando termine de crearse, se pueden empezar a realizar los query en los datos de la colección.

Esta sección muestra un ejemplo de implementación de RAG que puede ejecutar localmente utilizando MongoDB Vector Search y GPT4All.

Para conocer otras formas de ejecutar LLM localmente con LangChain, consulte Ejecutar modelos localmente.

1
  1. Haga clic en el siguiente botón para descargar el 7modelo Mistral B de GPT4All. Para explorar otros modelos, consulte el sitio web de GPT All.4

    Descargar
  2. Mueva este modelo a su directorio de proyecto local-rag-mongodb.

  3. Pegue el siguiente código en su notebook para configurar el LLM. Antes de ejecutarlo, reemplace <path-to-model> con la ruta donde guardó el 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

Ejecute el siguiente código para completar la implementación de 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')]

Volver

Recuperación de auto-consulta

En esta página