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:
Crea una implementación local de Atlas.
Utilice un modelo de incrustación local para generar incrustaciones vectoriales.
Utilice la implementación local de Atlas como almacén de vectores.
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.
Requisitos previos
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.
Crear una implementación local de Atlas
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.
Utilice la CLI de Atlas para crear implementaciones locales de Atlas. La CLI de Atlas es la interfaz de línea de comandos para MongoDB Atlas, y puede usarla para interactuar con Atlas desde la terminal para diversas tareas, incluyendo la creación de implementaciones locales de Atlas. Estas implementaciones son completamente locales y no requieren conexión a la nube.
Las implementaciones locales de Atlas están destinadas únicamente para pruebas. Para entornos de producción, implementa un clúster.
Configurar el entorno
En esta sección configurarás el entorno para este tutorial.
Utilice su implementación local como almacén de vectores
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.
Instanciar el almacén de vectores.
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" )
Añade documentos al almacén de vectores.
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.
Crea el índice de búsqueda vectorial de MongoDB.
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 )
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.
Utilice el LLM local para responder preguntas
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.
Cargue el LLM local.
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
DescargarMueva este modelo a su directorio de proyecto
local-rag-mongodb.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)
Responda preguntas sobre sus datos.
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')]