Docs Menu
Docs Home
/ /

Integre MongoDB con LangChain

Puede integrar MongoDB con LangChain para crear IA generativa y Aplicaciones RAG. Esta página ofrece una descripción general de la integración de LangChain con MongoDB y Python, así como de los diferentes componentes que puede usar en sus aplicaciones.

Empezar

Nota

Para obtener una lista completa de componentes y métodos, consulte Referencia API.

Para la integración de JavaScript, consulte Cadena LangChain JS/TS.

Para utilizar MongoDB Vector Search con LangChain, primero debe instalar el langchain-mongodb paquete:

pip install langchain-mongodb

MongoDBAtlasVectorSearch es un almacén vectorial que le permite almacenar y recuperar incrustaciones de vectores de una colección en MongoDB. Se puede usar este componente para almacenar incrustaciones de los datos y recuperarlas usando la MongoDB Vector Search.

Este componente requiere un Índice de búsqueda vectorial de MongoDB.

Atlas admite dos modos de incrustación:

  • Incorporación manual: genere vectores de incorporación en el lado del cliente con un modelo de incorporación que usted especifique.

  • Incrustaciones automatizadas: MongoDB incrusta texto en el servidor sin necesidad de generarlo manualmente. Para obtener más información, consulte Incrustaciones automatizadas.

    Importante

    La incrustación automatizada está disponible como función de vista previa solo para MongoDB Community Edition v8.2 y versiones posteriores. Esta función y la documentación correspondiente pueden cambiar en cualquier momento durante el periodo de vista previa. Para obtener más información, consulte Funciones de vista previa.

La forma más rápida de instanciar el almacenamiento vectorial es utilizar la cadena de conexión para el clúster MongoDB o implementación local:

from langchain_mongodb.vectorstores import MongoDBAtlasVectorSearch
from langchain_voyageai import VoyageAIEmbeddings
# Instantiate the vector store using your MongoDB connection string
vector_store = MongoDBAtlasVectorSearch.from_connection_string(
connection_string = "<connection-string>", # MongoDB cluster URI
namespace = "<database-name>.<collection-name>", # Database and collection name
embedding = VoyageAIEmbeddings(), # Embedding model to use
index_name = "vector_index", # Name of the vector search index
# Other optional parameters...
)

Para usar la incrustación automatizada, pase una instancia AutoEmbeddings al parámetro embedding. Esto permite que MongoDB genere y administre vectores de incrustación automáticamente.

Con incrustación automatizada:

  • No se requiere ningún cálculo de incrustación del lado del cliente

  • El texto sin procesar se envía directamente a MongoDB

  • Los vectores de incrustación se generan en el lado del servidor

  • El campo embedding_key no se almacena en los documentos

from langchain_mongodb.vectorstores import MongoDBAtlasVectorSearch
from langchain_mongodb import AutoEmbeddings
# Instantiate the vector store with Automated Embedding
vector_store = MongoDBAtlasVectorSearch.from_connection_string(
connection_string = "<connection-string>", # MongoDB cluster URI
namespace = "<database-name>.<collection-name>", # Database and collection name
embedding = AutoEmbeddings(model_name="voyage-4"), # Enable Automated Embedding
index_name = "vector_index", # Name of the vector search index
# Other optional parameters...
)
# Add documents - text is embedded server-side
vector_store.add_documents(documents=docs)
# Search - queries are embedded server-side
results = vector_store.similarity_search("search query")

La integración también ofrece soporte a otros métodos para instanciar el almacén de vectores:

  • Usar al cliente de MongoDB:

    from langchain_mongodb.vectorstores import MongoDBAtlasVectorSearch
    from langchain_voyageai import VoyageAIEmbeddings
    from pymongo import MongoClient
    # Connect to your MongoDB cluster
    client = MongoClient("<connection-string>")
    collection = client["<database-name>"]["<collection-name>"]
    # Instantiate the vector store
    vector_store = MongoDBAtlasVectorSearch(
    collection = collection, # Collection to store embeddings
    embedding = VoyageAIEmbeddings(), # Embedding model to use
    index_name = "vector_index" # Name of the vector search index
    # Other optional parameters...
    )
  • De los documentos que se han creado:

    from langchain_mongodb.vectorstores import MongoDBAtlasVectorSearch
    from langchain_voyageai import VoyageAIEmbeddings
    from langchain_core.documents import Document
    from pymongo import MongoClient
    # Some documents to embed
    document_1 = Document(page_content="foo", metadata={"baz": "bar"})
    document_2 = Document(page_content="thud", metadata={"bar": "baz"})
    docs = [ document_1, document_2 ]
    # Connect to your MongoDB cluster
    client = MongoClient("<connection-string>")
    collection = client["<database-name>"]["<collection-name>"]
    # Create the vector store from documents
    vector_store = MongoDBAtlasVectorSearch.from_documents(
    documents = docs, # List of documents to embed
    embedding = VoyageAIEmbeddings(), # Embedding model to use
    collection = collection, # Collection to store embeddings
    index_name = "vector_index" # Name of the vector search index
    # Other optional parameters...
    )

Los recuperadores de LangChain son componentes que se utilizan para obtener documentos relevantes de los almacenes vectoriales. Se pueden utilizar los recuperadores son una funcionalidad incorporada de LangChain o los siguientes recuperadores de MongoDB para query y recuperar datos de MongoDB.

Después de instanciar MongoDB como un almacén vectorial, se puede usar la instancia del almacén vectorial como un recuperador para hacer queries de los datos usando MongoDB Vector Search.

from langchain_mongodb.vectorstores import MongoDBAtlasVectorSearch
# Instantiate the vector store
vector_store = MongoDBAtlasVectorSearch.from_connection_string(
# Vector store arguments...
)
# Use the vector store as a retriever
retriever = vector_store.as_retriever()
# Define your query
query = "some search query"
# Print results
documents = retriever.invoke(query)
for doc in documents:
print(doc)

MongoDBAtlasFullTextSearchRetriever es un recuperador que realiza búsquedas de texto completo mediante MongoDB Search. Específicamente, utiliza el algoritmo estándar BM25 de Lucene .

Este recuperador requiere un índice de MongoDB Search.

from langchain_mongodb.retrievers.full_text_search import MongoDBAtlasFullTextSearchRetriever
# Connect to your MongoDB cluster
client = MongoClient("<connection-string>")
collection = client["<database-name>"]["<collection-name>"]
# Initialize the retriever
retriever = MongoDBAtlasFullTextSearchRetriever(
collection = collection, # MongoDB Collection in Atlas
search_field = "<field-name>", # Name of the field to search
search_index_name = "<index-name>" # Name of the search index
)
# Define your query
query = "some search query"
# Print results
documents = retriever.invoke(query)
for doc in documents:
print(doc)

MongoDBAtlasHybridSearchRetriever es un recuperador que combina los resultados de la búsqueda vectorial y de texto completo mediante el algoritmo de Fusión de Rangos Recíprocos (RRF). Para aprender más, se puede consultar Cómo realizar una búsqueda híbrida.

Este recuperador requiere un almacén de vectores existente, un índice de MongoDB Vector Search y un índice de MongoDB Search.

from langchain_mongodb.retrievers.hybrid_search import MongoDBAtlasHybridSearchRetriever
# Initialize the retriever
retriever = MongoDBAtlasHybridSearchRetriever(
vectorstore = <vector-store>, # Vector store instance
search_index_name = "<index-name>", # Name of the MongoDB Search index
top_k = 5, # Number of documents to return
fulltext_penalty = 60.0, # Penalty for full-text search
vector_penalty = 60.0 # Penalty for vector search
)
# Define your query
query = "some search query"
# Print results
documents = retriever.invoke(query)
for doc in documents:
print(doc)

MongoDBAtlasParentDocumentRetriever es un recuperador que ejecuta queries en los fragmentos más pequeños y luego devuelve el documento principal más grande al LLM. Este tipo de recuperación se denomina recuperación de documento principal. La recuperación de documentos principales puede mejorar las respuestas de sus agentes y aplicaciones RAG al permitir búsquedas más granulares en fragmentos más pequeños, mientras se proporciona a los LLMel contexto completo del documento principal.

Este recuperador almacena tanto los documentos principales como los documentos secundarios en una única colección de MongoDB, lo que permite una recuperación eficiente al tener que calcular y crear un índice de solo las incrustaciones de los documentos secundarios.

Internamente, este recuperador crea lo siguiente:

  • Una instancia de MongoDBAtlasVectorSearch para gestionar queries de búsqueda vectorial a los documentos secundarios.

  • Una instancia de MongoDBDocStore para gestionar el almacenamiento y la recuperación de los documentos principales.

from langchain_mongodb.retrievers.parent_document import ParentDocumentRetriever
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_voyageai import VoyageAIEmbeddings
retriever = MongoDBAtlasParentDocumentRetriever.from_connection_string(
connection_string = <connection-string>, # MongoDB cluster URI
embedding_model = VoyageAIEmbeddings(), # Embedding model to use
child_splitter = RecursiveCharacterTextSplitter(), # Text splitter to use
database_name = <database-name>, # Database to store the collection
collection_name = <collection-name>, # Collection to store the collection
# Additional vector store or parent class arguments...
)
# Define your query
query = "some search query"
# Print results
documents = retriever.invoke(query)
for doc in documents:
print(doc)

MongoDBAtlasSelfQueryRetriever es un recuperador que se hace queries. El recuperador utiliza un LLM para procesar la consulta de búsqueda que se le haga con el fin de identificar posibles filtros de metadatos, forma un query de búsqueda vectorial estructurada con los filtros y luego ejecuta el query para recuperar los documentos más relevantes.

Por ejemplo, con un query como "¿Cuáles son las películas de suspenso después de 2010 con calificaciones superiores a 8?", el sistema de recuperación puede identificar filtros en los campos genre, year y rating y utilizarlos para recuperar documentos que coincidan con el query.

Este recuperador requiere un almacén de vectores existente y un índice de MongoDB Vector Search.

from langchain_mongodb.retrievers import MongoDBAtlasSelfQueryRetriever
from langchain_mongodb import MongoDBAtlasVectorSearch
# Given an existing vector store with movies data, define metadata describing the data
metadata_field_info = [
AttributeInfo(
name="genre",
description="The genre of the movie. One of ['science fiction', 'comedy', 'drama', 'thriller', 'romance', 'animated']",
type="string",
),
AttributeInfo(
name="year",
description="The year the movie was released",
type="integer",
),
AttributeInfo(
name="rating", description="A 1-10 rating for the movie", type="float"
),
]
# Create the retriever from the VectorStore, an LLM and info about the documents
retriever = MongoDBAtlasSelfQueryRetriever.from_llm(
llm=llm,
vectorstore=vector_store,
metadata_field_info=metadata_field_info,
document_contents="Descriptions of movies",
enable_limit=True
)
# This example results in the following composite filter sent to $vectorSearch:
# {'filter': {'$and': [{'year': {'$lt': 1960}}, {'rating': {'$gt': 8}}]}}
print(retriever.invoke("Movies made before 1960 that are rated higher than 8"))

GraphRAG es un enfoque alternativo al RAG tradicional que estructura los datos como un grafo de conocimiento de entidades y sus relaciones en lugar de como incrustaciones vectoriales. Mientras que el RAG basado en vectores encuentra documentos que son semánticamente similares al query, GraphRAG encuentra entidades conectadas al query y recorre las relaciones en el grafo para recuperar información relevante.

Este enfoque es particularmente útil para responder preguntas basadas en relación como "¿Cuál es la conexión entre la empresa A y la empresa B?" o "¿Quién es el administrador de la Persona X?".

MongoDBGraphStore es un componente en la integración de LangChain MongoDB que permite implementar GraphRAG al almacenar entidades (nodos) y sus relaciones (aristas) en una colección de MongoDB. Este componente almacena cada entidad como un documento con campos de relación que hacen referencia a otros documentos en su colección. Ejecutar las queries utilizando la $graphLookup etapa de agregación.

from langchain_mongodb import MongoDBGraphStore
from langchain_openai import ChatOpenAI
# Initialize the graph store
graph_store = MongoDBGraphStore(
connection_string = "<connection-string>", # MongoDB cluster URI
database_name = "<database-name>", # Database to store the graph
collection_name = "<collection-name>", # Collection to store the graph
entity_extraction_model = ChatOpenAI(), # LLM to extract entities from documents (e.g. OpenAI model)
# Other optional parameters...
)
# Add documents to the graph
docs = [...] # Your documents
graph_store.add_documents(docs)
# Query the graph
query = "Who is the CEO of MongoDB?"
answer = graph_store.chat_response(query)
print(answer.content)

Las cachés se utilizan para optimizar el rendimiento de los LLM almacenando respuestas repetitivas para queries similares o repetitivas, evitando así tener que volver a calcularlas. MongoDB proporciona las siguientes cachés para las aplicaciones de LangChain.

MongoDBCache le permite almacenar una caché básica en una colección de MongoDB.

from langchain_mongodb import MongoDBCache
from langchain_core.globals import set_llm_cache
set_llm_cache(MongoDBCache(
connection_string = "<connection-string>", # MongoDB cluster URI
database_name = "<database-name>", # Database to store the cache
collection_name = "<collection-name>" # Collection to store the cache
))

El caché semántico es una forma más avanzada de almacenamiento en caché que recupera las indicaciones almacenadas en caché en función de la similitud semántica entre la entrada del usuario y los resultados almacenados en caché.

MongoDBAtlasSemanticCache es una caché semántica que utiliza la MongoDB Vector Search para recuperar las indicaciones almacenadas en caché. Este componente requiere un índice de MongoDB Vector Search.

from langchain_mongodb import MongoDBAtlasSemanticCache
from langchain_core.globals import set_llm_cache
from langchain_voyageai import VoyageAIEmbeddings
set_llm_cache(MongoDBAtlasSemanticCache(
embedding = VoyageAIEmbeddings(), # Embedding model to use
connection_string = "<connection-string>", # MongoDB cluster URI
database_name = "<database-name>", # Database to store the cache
collection_name = "<collection-name>" # Collection to store the cache
))

El MongoDB Agent Toolkit es una colección de herramientas que se puede pasar a un agente LangGraph ReAct para que se pueda interactuar con los recursos de MongoDB.

Nombre
Descripción

MongoDBDatabaseToolkit

Una herramienta para consultar una base de datos MongoDB.

InfoMongoDBDatabaseTool

Una herramienta para obtener metadatos sobre una base de datos de MongoDB.

ListMongoDBDatabaseTool

Una herramienta para obtener los nombres de las colecciones de una base de datos de MongoDB.

QueryMongoDBCheckerTool

Una herramienta que llama a un LLM para comprobar si un query de base de datos es correcto.

from langchain_openai import ChatOpenAI
from langgraph.prebuilt import create_react_agent
from langchain_mongodb.agent_toolkit import (
MONGODB_AGENT_SYSTEM_PROMPT,
MongoDBDatabase,
MongoDBDatabaseToolkit,
)
db_wrapper = MongoDBDatabase.from_connection_string(
CONNECTION_STRING, database=DB_NAME
)
llm = ChatOpenAI(model="gpt-4o-mini", timeout=60)
toolkit = MongoDBDatabaseToolkit(db=db_wrapper, llm=llm)
system_message = MONGODB_AGENT_SYSTEM_PROMPT.format(top_k=5)
test_query = "Which country's customers spent the most?"
agent = create_react_agent(llm, toolkit.get_tools(), state_modifier=system_message)
agent.step_timeout = 60
events = agent.stream(
{"messages": [("user", test_query)]},
stream_mode="values",
)
messages = []

Cargadores de documentos son herramientas que ayudan a cargar datos para las aplicaciones de LangChain.

MongoDBLoader es un cargador de documentos que devuelve una lista de documentos desde una base de datos de MongoDB.

from langchain_mongodb.loaders import MongoDBLoader
loader = MongoDBLoader.from_connection_string(
connection_string = "<connection-string>", # MongoDB cluster URI
db_name = "<database-name>", # Database that contains the collection
collection_name = "<collection-name>", # Collection to load documents from
filter_criteria = { "field": "value" }, # Optional document to specify a filter
field_names = ["<field-name>", "..." ], # Optional list of fields to include in document content
metadata_names = ["<metadata-field>", "..."] # Optional metadata fields to extract
)
docs = loader.load()

MongoDBChatMessageHistory es un componente que le permite almacenar y gestionar historiales de mensajes de chat en una base de datos de MongoDB. Puede guardar tanto los mensajes generados por el usuario como los generados por la IA asociados a un identificador de sesión único. Esto es útil para aplicaciones que requieren el seguimiento de interacciones a lo largo del tiempo, como los chatbots.

from langchain_mongodb.chat_message_histories import MongoDBChatMessageHistory
chat_message_history = MongoDBChatMessageHistory(
session_id = "<session-id>", # Unique session identifier
connection_string = "<connection-string>", # MongoDB cluster URI
database_name = "<database-name>", # Database to store the chat history
collection_name = "<collection-name>" # Collection to store the chat history
)
chat_message_history.add_user_message("Hello")
chat_message_history.add_ai_message("Hi")
chat_message_history.messages
[HumanMessage(content='Hello'), AIMessage(content='Hi')]

Se pueden utilizar los siguientes almacenes de datos personalizados para gestionar y almacenar datos en MongoDB.

MongoDBDocStore es un almacén de clave-valor personalizado que utiliza MongoDB para almacenar y gestionar documentos. Se pueden realizar operaciones CRUD como lo haría en cualquier otra colección de MongoDB.

from pymongo import MongoClient
from langchain_mongodb.docstores import MongoDBDocStore
# Replace with your MongoDB connection string and namespace
connection_string = "<connection-string>"
namespace = "<database-name>.<collection-name>"
# Initialize the MongoDBDocStore
docstore = MongoDBDocStore.from_connection_string(connection_string, namespace)

MongoDBByteStore es un almacén de datos personalizado que utiliza MongoDB para almacenar y gestionar datos binarios, específicamente datos representados en bytes. Se pueden realizar operaciones CRUD con pares clave-valor donde las claves son cadenas y los valores son secuencias de bytes.

from langchain.storage import MongoDBByteStore
# Instantiate the MongoDBByteStore
mongodb_store = MongoDBByteStore(
connection_string = "<connection-string>", # MongoDB cluster URI
db_name = "<database-name>", # Name of the database
collection_name = "<collection-name>" # Name of the collection
)
# Set values for keys
mongodb_store.mset([("key1", b"hello"), ("key2", b"world")])
# Get values for keys
values = mongodb_store.mget(["key1", "key2"])
print(values) # Output: [b'hello', b'world']
# Iterate over keys
for key in mongodb_store.yield_keys():
print(key) # Output: key1, key2
# Delete keys
mongodb_store.mdelete(["key1", "key2"])

Para aprender cómo integrar MongoDB con LangGraph, se puede consultar Integrar MongoDB con LangGraph.

Para cuadernos interactivos de Python, se puede consultar el Repositorio de Docs Notebooks y el Repositorio de Casos de Uso de IA generativa.

Volver

Integraciones de IA

Obtén una insignia de habilidad

¡Domina "RAG con MongoDB" gratis!

Más información