Para agentes de IA: hay un índice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las páginas están disponibles agregando .md a cualquier ruta URL.
Docs Menu

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. Utiliza un modelo de embedding local para generar embebidos vectoriales.

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

  4. Utiliza un LLM local para responder a preguntas sobre los datos.

Trabaja con una versión ejecutable de este tutorial como un cuaderno interactivo de Python.

Para aprender cómo implementar RAG localmente sin usar LangChain, consulte Cree una implementación local de RAG 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, ejecuta atlas deployments setup en tu terminal y sigue las indicaciones para crear la implementación.

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

Utilizas el Atlas CLI para crear implementaciones locales de Atlas. Atlas CLI es la interfaz de línea de comandos para MongoDB Atlas, y se puede utilizar Atlas CLI para interactuar con Atlas desde el terminal para diversas tareas, incluida la creación de implementaciones locales de Atlas. Estas son implementaciones totalmente locales que no requieren conectarse a la nube.

Las implementaciones locales de Atlas están destinadas únicamente para pruebas. Para entornos de producción, implementa un clúster.

En esta sección, configura el entorno para este tutorial.

1

Ejecuta los siguientes comandos en tu 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 una base de datos vectorial, también llamada tienda de vectores. Copia y pega los siguientes fragmentos de código en su cuaderno.

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 podría tardar varios minutos en ejecutarse. Una vez finalizado, si utiliza Atlas, puede verificar sus incrustaciones vectoriales navegando hasta el namespace langchain_db.local_rag en la Interfaz de Usuario de Atlas.

También puedes ver tus embeddings vectoriales conectándote a tu implementación local desde mongosh o a tu aplicación utilizando la cadena de conexión de tu implementación. A continuación, puedes ejecutar operaciones de lectura en la colección de langchain_db.local_rag.

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
)

El índice debería tardar alrededor de un minuto en compilarse. Mientras se crea, el índice se encuentra en un estado de sincronización inicial. Cuando se termine de construir, se podrá empezar a consultar los datos de tu colección.

Esta sección demuestra una implementación de ejemplo de RAG que puedes ejecutar localmente utilizando MongoDB Vector Search y GPT4All.

Para aprender otras formas de ejecutar LLMs localmente con LangChain, consulte Ejecutar modelos localmente.

1
  1. Haz clic en el siguiente botón para descargar el modelo Mistral 7B desde GPT4All. Para explorar otros modelos, consulta el sitio web GPT4All..

    Descargar
  2. Mueve este modelo a tu directorio de proyectos local-rag-mongodb.

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

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