Docs Menu
Docs Home
/ /

Comienza con la integración de MongoDB LangChain

Nota

Este tutorial utiliza LangChain Biblioteca de PythonPara ver un tutorial que utiliza la biblioteca JavaScript, consulte Comience a utilizar la integración de LangChain JS/TS.

Puede integrar MongoDB Vector Search con LangChain para crear aplicaciones LLM e implementar la generación aumentada por recuperación (RAG). Este tutorial muestra cómo empezar a usar MongoDB Vector Search con LangChain para realizar búsquedas semánticas en sus datos y crear una Implementación deRAG. En concreto, se realizan las siguientes acciones:

  1. Configura el entorno.

  2. Almacenar datos personalizados en MongoDB.

  3. Cree un índice de búsqueda vectorial MongoDB en sus datos.

  4. Ejecuta las siguientes consultas de búsqueda vectorial:

    • Búsqueda semántica.

    • Búsqueda semántica con puntuación.

    • Búsqueda semántica con prefiltrado de metadatos.

  5. Implementa RAG usando la búsqueda vectorial de MongoDB para responder preguntas sobre tus datos.

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

LangChain es un framework de código abierto que simplifica la creación de aplicaciones LLM mediante el uso de cadenas. Estas cadenas son componentes específicos de LangChain que pueden combinarse para diversos casos de uso de IA, incluyendo RAG.

Al integrar MongoDB Vector Search con LangChain, puede usar MongoDB como base de datos vectorial y usar MongoDB Vector Search para implementar RAG recuperando documentos semánticamente similares de sus datos. Para obtener más información sobre RAG, consulte Generación Aumentada por Recuperación (RAG) con MongoDB.

Para completar este tutorial, debes tener lo siguiente:

  • Uno de los siguientes tipos de clúster de MongoDB:

  • Una clave API de Voyage AI. Para crear una clave API, consulta Claves API de modelos.

  • Una llave de API de OpenAI. Debes tener una cuenta de OpenAI con créditos disponibles para las solicitudes de API. Para obtener más información sobre cómo registrar una cuenta de OpenAI, consulta el sitio web de la API de OpenAI.

  • Un entorno para ejecutar cuadernos interactivos de Python como Colab.

Configura el entorno para este tutorial. Crea un cuaderno interactivo de Python guardando un archivo con el .ipynb Extensión. Este cuaderno te permite ejecutar fragmentos de código Python individualmente y lo usarás para ejecutar el código en este tutorial.

Para configurar el entorno de su portátil:

1

Ejecuta el siguiente comando:

pip install --quiet --upgrade langchain langchain-community langchain-core langchain-mongodb langchain-voyageai langchain-openai langchain-text-splitters pymongo pypdf

Luego, ejecute el siguiente código para importar los paquetes requeridos:

import os, pymongo, pprint
from langchain_community.document_loaders import PyPDFLoader
from langchain_core.output_parsers import StrOutputParser
from langchain_core.runnables import RunnablePassthrough
from langchain_mongodb import MongoDBAtlasVectorSearch
from langchain_voyageai import VoyageAIEmbeddings
from langchain_openai import ChatOpenAI
from langchain.prompts import PromptTemplate
from langchain_text_splitters import RecursiveCharacterTextSplitter
from pymongo import MongoClient
from pymongo.operations import SearchIndexModel
2

Ejecute el siguiente código, reemplazando los marcadores de posición con los siguientes valores:

  • Su clave API de Voyage AI y OpenAI.

  • La cadena de conexión de su clúster MongoDB.

os.environ["VOYAGE_API_KEY"] = "<voyage-api-key>"
os.environ["OPENAI_API_KEY"] = "<openai-api-key>"
MONGODB_URI = "<connection-string>"

Nota

Se debe sustituir <connection-string> por la cadena de conexión del clúster Atlas o de la implementación local de Atlas.

Su cadena de conexión debe usar el siguiente formato:

mongodb+srv://<db_username>:<db_password>@<clusterName>.<hostname>.mongodb.net

Para obtener más información,consulte Conectarse a un clúster a través de bibliotecas de cliente.

Su cadena de conexión debe usar el siguiente formato:

mongodb://localhost:<port-number>/?directConnection=true

Para obtener más información, consulta Cadenas de conexión.

Luego, cargue datos personalizados en MongoDB e instancie su clúster de MongoDB como una base de datos vectorial, también llamada almacén vectorial. Copie y pegue los siguientes fragmentos de código en su notebook.

1

Para este tutorial, utilizará un documento PDF de acceso público sobre un informe de ganancias reciente de MongoDB como fuente de datos para su tienda de vectores.

Para cargar los datos de muestra, ejecute el siguiente fragmento de código. Hace lo siguiente:

  • Recupera el PDF de la URL especificada y carga los datos de texto sin procesar.

  • Utiliza un divisor de texto para dividir los datos en documentos más pequeños.

  • Especifica los parámetros del fragmento, que determinan la cantidad de caracteres en cada documento y la cantidad de caracteres que deben superponerse entre dos documentos consecutivos.

# 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)
# Print the first document
docs[0]
Document(metadata={'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': 0, 'page_label': '1'}, page_content='MongoDB, Inc. Announces Fourth Quarter and Full Year Fiscal 2025 Financial Results\nMarch 5, 2025\nFourth Quarter Fiscal 2025 Total Revenue of $548.4 million, up 20% Year-over-Year')
2

Ejecute el siguiente código para crear una instancia de almacén de vectores llamada vector_store a partir de los documentos de ejemplo. Este fragmento especifica lo siguiente:

  • La cadena de conexión a su clúster MongoDB.

  • langchain_db.test como el espacio de nombres MongoDB para almacenar los documentos.

  • El modelo de incrustación voyage-3-large de Voyage AI. para convertir el texto en incrustaciones vectoriales para el campo embedding.

  • vector_index como el índice a utilizar para consultar el almacén de vectores.

# Instantiate the vector store using your MongoDB connection string
vector_store = MongoDBAtlasVectorSearch.from_connection_string(
connection_string = MONGODB_URI,
namespace = "langchain_db.test",
embedding = VoyageAIEmbeddings(model="voyage-3-large"),
index_name = "vector_index"
)
# Add documents to the vector store
vector_store.add_documents(documents=docs)

Después de ejecutar el código de ejemplo, si usas Atlas, puedes verificar tus incrustaciones vectoriales navegando al namespace langchain_db.test en la Interfaz de Usuario de Atlas.

Tip

Para habilitar consultas de búsqueda de vectores en su almacén de vectores, cree un índice de búsqueda de vectores de MongoDB en la colección langchain_db.test utilizando el método auxiliar LangChain o el método controlador de PyMongo.

Ejecute el siguiente código en su notebook para el método que prefiera. La definición del índice especifica la indexación de los siguientes campos:

  • embedding campo como tipo de vector. El embedding campo contiene las incrustaciones creadas con el voyage-3-large modelo de incrustación de Voyage AI. La definición del índice especifica las 1024 dimensiones del vector y mide la similitud cosine mediante.

  • page_label campo como el tipo filtro para prefiltrar datos por el número de página en el PDF.

# Use helper method to create the vector search index
vector_store.create_vector_search_index(
dimensions = 1024, # The number of vector dimensions to index
filters = [ "page_label" ]
)
# Connect to your cluster
client = MongoClient(MONGODB_URI)
collection = client["langchain_db"]["test"]
# Create your vector search index model, then create the index
search_index_model = SearchIndexModel(
definition={
"fields": [
{
"type": "vector",
"path": "embedding",
"numDimensions": 1024,
"similarity": "cosine"
},
{
"type": "filter",
"path": "page_label"
}
]
},
name="vector_index",
type="vectorSearch"
)
collection.create_search_index(model=search_index_model)

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.

Una vez que MongoDB construya su índice, ejecute consultas de búsqueda vectorial en sus datos. Los siguientes ejemplos demuestran diversas queries que puedes ejecutar en tus datos vectorizados.

La siguiente consulta utiliza el método similarity_search para realizar una búsqueda semántica básica de la cadena MongoDB acquisition. Devuelve una lista de documentos ordenados por relevancia.

query = "MongoDB acquisition"
results = vector_store.similarity_search(query)
pprint.pprint(results)
[Document(id='67f0259b8bb2babc06924409', metadata={ ... }, page_content='SOURCE MongoDB, Inc.'),
Document(id='67f0259b8bb2babc0692432f', metadata={ ... }, page_content='MongoDB platform. In fiscal year 2026 we expect to see stable consumption growth in Atlas, our main growth driver," said Dev Ittycheria, President\nand Chief Executive Officer of MongoDB .'),
Document(id='67f0259b8bb2babc06924355', metadata={ ... }, 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='67f0259b8bb2babc069243a6', metadata={ ... }, page_content="MongoDB's unified, intelligent data platform was built to power the next generation of applications, and MongoDB is the most widely available, globally")]

La siguiente consulta utiliza el método similarity_search_with_score para realizar una búsqueda semántica de la cadena MongoDB acquisition y especifica el parámetro k para limitar la cantidad de documentos a devolver a 3.

Nota

El parámetro k en este ejemplo se refiere a la opción de método similarity_search_with_score, no a la opción del operador knnBeta del mismo nombre.

Devuelve los tres documentos más relevantes y una puntuación de relevancia entre 0 1y.

query = "MongoDB acquisition"
results = vector_store.similarity_search_with_score(
query = query, k = 3
)
pprint.pprint(results)
[(Document(id='67f0259b8bb2babc06924409', metadata={ ... }, page_content='SOURCE MongoDB, Inc.'),
0.8193451166152954),
(Document(id='67f0259b8bb2babc0692432f', metadata={ ... }, page_content='MongoDB platform. In fiscal year 2026 we expect to see stable consumption growth in Atlas, our main growth driver," said Dev Ittycheria, President\nand Chief Executive Officer of MongoDB .'),
0.7815237045288086),
(Document(id='67f0259b8bb2babc06924355', metadata={ ... }, 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.'),
0.7788857221603394)]

Puedes prefiltrar tus datos utilizando una expresión de coincidencia MQL que compare el campo indexado con otro valor de tu colección. Debes indexar cualquier campo de metadatos que desees filtrar como tipo filter. Para obtener más información, consulta Cómo indexar campos para la búsqueda vectorial.

Nota

Usted especificó el page_label campo como filtro cuando creó el índice para este tutorial.

La siguiente consulta utiliza el método similarity_search_with_score para realizar una búsqueda semántica de la cadena MongoDB acquisition. También especifica lo siguiente:

  • El parámetro k para limitar el número de documentos a devolver a 3.

  • Un prefiltro en el page_label campo que utiliza el $eq operador para hacer coincidir los documentos que aparecen 2 solo en la página.

Devuelve los tres documentos más relevantes de la página 2 y una puntuación de relevancia entre 0 1y.

query = "MongoDB acquisition"
results = vector_store.similarity_search_with_score(
query = query,
k = 3,
pre_filter = { "page_label": { "$eq": 2 } }
)
pprint.pprint(results)
[(Document(id='67f0259b8bb2babc06924355', metadata={ ... '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.'),
0.7788857221603394),
(Document(id='67f0259b8bb2babc06924351', metadata={ ... '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'),
0.7606035470962524),
(Document(id='67f0259b8bb2babc06924354', metadata={ ... 'page_label': '2'}, page_content='data.\nMongoDB completed the redemption of 2026 Convertible Notes, eliminating all debt from the balance sheet. Additionally, in'),
0.7583936452865601)]

Tip

Para obtener una lista completa de los métodos de búsqueda semántica, consulte la referencia de API.

Esta sección muestra cómo implementar RAG en su aplicación con MongoDB Vector Search y LangChain. Ahora que ha utilizado MongoDB Vector Search para recuperar documentos semánticamente similares, ejecute los siguientes ejemplos de código para solicitar al LLM que responda preguntas basadas en esos documentos.

Este ejemplo hace lo siguiente:

  • Crea una instancia de MongoDB Vector Search como recuperador para consultar documentos similares, incluido el k parámetro opcional para buscar solo los 10 documentos más relevantes.

  • Define una plantilla de solicitud de LangChain para indicar al LLM que utilice estos documentos como contexto para su consulta. LangChain pasa estos documentos a la {context} variable de entrada y su consulta a la {question} variable.

  • Construye una cadena que especifica lo siguiente:

    • MongoDB Vector Search como recuperador para buscar documentos para usar como contexto.

    • La plantilla de aviso que usted definió.

    • El modelo de chat gpt-4o de OpenAI para generar una respuesta consciente del contexto.

  • Invoca la cadena con una consulta de muestra.

  • Devuelve la respuesta del LLM y los documentos utilizados como contexto. La respuesta generada puede variar.

# Instantiate MongoDB Vector Search as a retriever
retriever = vector_store.as_retriever(
search_type = "similarity",
search_kwargs = { "k": 10 }
)
# Define a prompt template
template = """
Use the following pieces of context to answer the question at the end.
{context}
Question: {question}
"""
prompt = PromptTemplate.from_template(template)
model = ChatOpenAI(model="gpt-4o")
# Construct a chain to answer questions on your data
chain = (
{ "context": retriever, "question": RunnablePassthrough()}
| prompt
| model
| StrOutputParser()
)
# Prompt the chain
question = "What was MongoDB's latest acquisition?"
answer = chain.invoke(question)
print("Question: " + question)
print("Answer: " + answer)
# Return source documents
documents = retriever.invoke(question)
print("\nSource documents:")
pprint.pprint(documents)
Question: What was MongoDB's latest acquisition?
Answer: MongoDB's latest acquisition was Voyage AI, a pioneer in state-of-the-art embedding and reranking models.
Source documents:
[Document(id='67f0259b8bb2babc06924409', metadata={'_id': '67f0259b8bb2babc06924409', ... 'page_label': '9'}, page_content='SOURCE MongoDB, Inc.'),
Document(id='67f0259b8bb2babc06924351', metadata={'_id': '67f0259b8bb2babc06924351', ... '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='67f0259b8bb2babc0692432f', metadata={'_id': '67f0259b8bb2babc0692432f', ... 'page_label': '1'}, page_content='MongoDB platform. In fiscal year 2026 we expect to see stable consumption growth in Atlas, our main growth driver," said Dev Ittycheria, President\nand Chief Executive Officer of MongoDB .'),
Document(id='67f0259b8bb2babc06924355', metadata={'_id': '67f0259b8bb2babc06924355', ... '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='67f0259b8bb2babc069243a6', metadata={'_id': '67f0259b8bb2babc069243a6', ... 'page_label': '4'}, page_content="MongoDB's unified, intelligent data platform was built to power the next generation of applications, and MongoDB is the most widely available, globally"),
Document(id='67f0259b8bb2babc06924329', metadata={'_id': '67f0259b8bb2babc06924329', ... 'page_label': '1'}, page_content='MongoDB, Inc. Announces Fourth Quarter and Full Year Fiscal 2025 Financial Results\nMarch 5, 2025\nFourth Quarter Fiscal 2025 Total Revenue of $548.4 million, up 20% Year-over-Year'),
Document(id='67f0259b8bb2babc069243a7', metadata={'_id': '67f0259b8bb2babc069243a7', ... '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'),
Document(id='67f0259b8bb2babc069243a5', metadata={'_id': '67f0259b8bb2babc069243a5', ... 'page_label': '4'}, page_content="Headquartered in New York, MongoDB's mission is to empower innovators to create, transform, and disrupt industries with software and data."),
Document(id='67f0259b8bb2babc06924354', metadata={'_id': '67f0259b8bb2babc06924354', ... 'page_label': '2'}, page_content='data.\nMongoDB completed the redemption of 2026 Convertible Notes, eliminating all debt from the balance sheet. Additionally, in'),
Document(id='67f0259b8bb2babc069243a9', metadata={'_id': '67f0259b8bb2babc069243a9', ... 'page_label': '4'}, page_content='50,000 customers across almost every industry—including 70% of the Fortune 100—rely on MongoDB for their most important applications. To learn\nmore, visit mongodb.com .\nInvestor Relations')]

Este ejemplo hace lo siguiente:

  • Crea una instancia de MongoDB Vector Search como un recuperador para consultar documentos similares, incluidos los siguientes parámetros opcionales:

    • k para buscar sólo los 10 documentos más relevantes.

    • score_threshold utilizar únicamente documentos con un puntaje de relevancia superior a 0.75.

      Nota

      Este parámetro se refiere a la puntuación de relevancia que Langchain utiliza para normalizar los resultados, y no a la puntuación de relevancia utilizada en las consultas de MongoDB Search. Para usar las puntuaciones de MongoDB Search en su implementación de RAG, defina un recuperador personalizado que utilice el similarity_search_with_score método y filtre por la puntuación de MongoDB Search.

    • pre_filter para filtrar en el campo page_label los documentos que aparecen sólo en la página 2.

  • Define una plantilla de solicitud de LangChain para indicar al LLM que utilice estos documentos como contexto para su consulta. LangChain pasa estos documentos a la {context} variable de entrada y su consulta a la {question} variable.

  • Construye una cadena que especifica lo siguiente:

    • MongoDB Vector Search como recuperador para buscar documentos para usar como contexto.

    • La plantilla de aviso que usted definió.

    • El modelo de chat gpt-4o de OpenAI para generar una respuesta consciente del contexto.

  • Invoca la cadena con una consulta de muestra.

  • Devuelve la respuesta del LLM y los documentos utilizados como contexto. La respuesta generada puede variar.

# Instantiate MongoDB Vector Search as a retriever
retriever = vector_store.as_retriever(
search_type = "similarity",
search_kwargs = {
"k": 10,
"score_threshold": 0.75,
"pre_filter": { "page_label": { "$eq": 2 } }
}
)
# Define a prompt template
template = """
Use the following pieces of context to answer the question at the end.
{context}
Question: {question}
"""
prompt = PromptTemplate.from_template(template)
model = ChatOpenAI(model="gpt-4o")
# Construct a chain to answer questions on your data
chain = (
{ "context": retriever, "question": RunnablePassthrough()}
| prompt
| model
| StrOutputParser()
)
# Prompt the chain
question = "What was MongoDB's latest acquisition?"
answer = rag_chain.invoke(question)
print("Question: " + question)
print("Answer: " + answer)
# Return source documents
documents = retriever.invoke(question)
print("\nSource documents:")
pprint.pprint(documents)
Question: What was MongoDB's latest acquisition?
Answer: MongoDB's latest acquisition was Voyage AI, a pioneer in state-of-the-art embedding and reranking models.
Source documents:
[Document(id='67f0259b8bb2babc06924351', metadata={'_id': '67f0259b8bb2babc06924351', ... '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='67f0259b8bb2babc06924355', metadata={'_id': '67f0259b8bb2babc06924355', ... '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='67f0259b8bb2babc06924354', metadata={'_id': '67f0259b8bb2babc06924354', ... 'page_label': '2'}, page_content='data.\nMongoDB completed the redemption of 2026 Convertible Notes, eliminating all debt from the balance sheet. Additionally, in'),
Document(id='67f0259b8bb2babc06924358', metadata={'_id': '67f0259b8bb2babc06924358', ... 'page_label': '2'}, page_content='Lombard Odier, a Swiss private bank, partnered with MongoDB to migrate and modernize its legacy banking technology'),
Document(id='67f0259b8bb2babc06924352', metadata={'_id': '67f0259b8bb2babc06924352', ... 'page_label': '2'}, page_content="AI applications. Integrating Voyage AI's technology with MongoDB will enable organizations to easily build trustworthy,"),
Document(id='67f0259b8bb2babc0692435a', metadata={'_id': '67f0259b8bb2babc0692435a', ... 'page_label': '2'}, page_content='applications from a legacy relational database to MongoDB 20 times faster than previous migrations.\nFirst Quarter and Full Year Fiscal 2026 Guidance'),
Document(id='67f0259b8bb2babc06924356', metadata={'_id': '67f0259b8bb2babc06924356', ... 'page_label': '2'}, page_content='For the third consecutive year, MongoDB was named a Leader in the 2024 Gartner® Magic Quadrant™ for Cloud'),
Document(id='67f0259b8bb2babc0692434d', metadata={'_id': '67f0259b8bb2babc0692434d', ... 'page_label': '2'}, page_content='compared to $121.5 million of cash from operations in the year-ago period. MongoDB used $29.6 million of cash in capital'),
Document(id='67f0259b8bb2babc0692434c', metadata={'_id': '67f0259b8bb2babc0692434c', ... 'page_label': '2'}, page_content='Cash Flow: During the year ended January 31, 2025, MongoDB generated $150.2 million of cash from operations,'),
Document(id='67f0259b8bb2babc06924364', metadata={'_id': '67f0259b8bb2babc06924364', ... 'page_label': '2'}, page_content='MongoDB will host a conference call today, March 5, 2025, at 5:00 p.m. (Eastern Time) to discuss its financial results and business outlook. A live')]

Siga este video tutorial para obtener más información sobre la búsqueda semántica y RAG con LangChain y MongoDB.

Duración: 8 minutos

Volver

LangChain

En esta página