Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

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

Además de implementar MongoDB Atlas en la nube, utilizas Atlas CLI para implementar instancias independientes de MongoDB en tu máquina local. La integración de MongoDB con LangChain admite tanto clústeres de Atlas como implementaciones locales. Cuando especifique el parámetro de cadena de conexión, puede especificar su cadena de conexión de implementación local en lugar de la cadena de conexión del clúster.

Este tutorial demuestra cómo implementar la generación de recuperación aumentada (RAG) con una implementación local de Atlas, modelos locales y la integración de LangChain MongoDB. Específicamente, realizas las siguientes acciones:

  1. Crea una implementación local de Atlas.

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

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

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

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

Para aprender a implementar RAG localmente sin usar LangChain, consulta Cree una implementación 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 esté ejecutando Python v3.10. o después.

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 notebook en el directorio llamado langchain-local-rag.ipynb.

touch langchain-local-rag.ipynb
3

Ejecuta el siguiente comando en tu notebook:

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

Ejecuta el siguiente código en tu cuaderno, reemplazando <port-number> con el puerto de tu 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 instanciar tu implementación local de Atlas como una base de datos vectorial, también denominada almacén vectorial, usando el namespace langchain_db.local_rag.

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

Pega y ejecuta el siguiente código en tu notebook para ingerir un PDF de muestra que contiene un informe de ganancias reciente de MongoDB en la base de datos vectorial.

Este código utiliza un divisor de texto para fragmentar los datos del PDF en documentos padre 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 consultas de búsqueda vectorial en tu almacenamiento vectorial, crea un índice de MongoDB Vector Search en la colección langchain_db.test. Puedes crear el índice utilizando el método asistente 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 aprender otras formas de ejecutar LLMs 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. Mueve este modelo a tu directorio de proyectos local-rag-mongodb.

  3. Pega el siguiente código en tu notebook para configurar el LLM. Antes de ejecutar, 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 su 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