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:
Crea una implementación local de Atlas.
Utilice un modelo de incrustación local para generar incrustaciones vectoriales.
Usa la implementación local de Atlas como un almacén de vectores.
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.
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 esté ejecutando Python v3.10. o después.
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.
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.
Configurar el entorno
En esta sección configurarás el entorno para este tutorial.
Utiliza tu implementación local como un almacén vectorial
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 la tienda de vectores.
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" )
Agrega documentos a la tienda vectorial.
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.
Crea el índice de búsqueda vectorial de MongoDB.
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 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.
Usa 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 aprender otras formas de ejecutar LLMs localmente con LangChain, consulte Ejecutar modelos localmente.
Carga 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
DescargarMueve este modelo a tu directorio de proyectos
local-rag-mongodb.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)
Responde preguntas sobre tus datos.
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')]