Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
MongoDB Branding Shape
Click here >
Docs Menu

Integre MongoDB con LangGraph

Se puede integrar MongoDB con LangGraph para construir agentes de IA y aplicaciones RAG avanzadas. Esta pÔgina ofrece una visión general de la integración de MongoDB LangGraph y cómo puede usarse MongoDB para la persistencia del estado del agente, la memoria y la recuperación en los flujos de trabajo de LangGraph.

Para crear un agente de IA de muestra que use todos los componentes de esta pƔgina, se puede consultar el tutorial.

Nota

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

LangGraph es un marco especializado dentro del ecosistema LangChain diseñado para desarrollar agentes de IA y flujos de trabajo complejos de múltiples agentes. Grafos son los componentes principales de LangGraph, que representan el flujo de trabajo de su agente. La integración de MongoDB LangGraph permite las siguientes capacidades:

  • Checkpointer de MongoDB LangGraph: Puede mantener el estado de los agentes LangGraph en MongoDB, proporcionando memoria a corto plazo.

  • MongoDB LangGraph Store: se pueden almacenar y recuperar memorias importantes para los agentes LangGraph en una colección de MongoDB, proporcionando una memoria a largo plazo.

  • Herramientas de recuperación: se puede utilizar la integración de MongoDB LangChain para crear rĆ”pidamente herramientas de recuperación para los flujos de trabajo de LangGraph.

La integración de las aplicaciones LangGraph que se usan con MongoDB permite consolidar tanto las capacidades de recuperación como la memoria del agente en una única base de datos, simplificando la arquitectura usada y reduciendo la complejidad operativa.

El MongoDB LangGraph Checkpointer permite persistir el estado del agente en MongoDB para implementar una memoria a corto plazo. Esta característica permite la intervención humana, la memoria, el viaje en el tiempo y la tolerancia a fallos para los agentes LangGraph que se usan.

Para instalar el paquete de este componente:

pip install "langgraph-checkpoint-mongodb>=0.4.0"
from langgraph.checkpoint.mongodb import MongoDBSaver
from pymongo import MongoClient
# Connect to your MongoDB cluster
client = MongoClient("<connection-string>")
# Initialize the MongoDB checkpointer
checkpointer = MongoDBSaver(client)
# Instantiate the graph with the checkpointer
app = graph.compile(checkpointer=checkpointer)

La tienda LangGraph de MongoDB permite almacenar y recuperar memorias en una colección de MongoDB, lo que habilita una memoria a largo plazo para los agentes de LangGraph. Esto permite compilar agentes que puedan recordar interacciones pasadas y utilizar esa información para tomar decisiones futuras.

Para instalar el paquete de este componente:

pip install "langgraph-store-mongodb>=0.3.0"

Atlas admite dos modos de integración:

  • Incorporación manual: Generar vectores de incorporación en el lado del cliente con un modelo de incorporación que especifiques.

  • Inserción automatizada: MongoDB inserta texto del lado del servidor sin necesidad de generarlo manualmente. Para obtener mĆ”s información, consulte Inserción automatizada.

    Importante

    La incrustación automatizada estÔ disponible como funcionalidad de Vista Previa sólo para MongoDB Community Edition v8.2 y versiones posteriores. La funcionalidad y la documentación correspondiente pueden cambiar en cualquier momento durante el periodo de vista previa. Para obtener mÔs información, consulte Funcionalidades de vista previa.

from langgraph.store.mongodb import MongoDBStore, create_vector_index_config
from langchain_voyageai import VoyageAIEmbeddings
# Vector search index configuration with client-side embedding
index_config = create_vector_index_config(
embed = VoyageAIEmbeddings(),
dims = <dimensions>,
fields = ["<field-name>"],
filters = ["<filter-field-name>", ...] # Optional
)
# Store memories in MongoDB collection
with MongoDBStore.from_conn_string(
conn_string=MONGODB_URI,
db_name="<database-name>",
collection_name="<collection-name>",
index_config=index_config
) as store:
store.put(
namespace=("user", "memories"),
key=f"memory_{hash(content)}",
value={"content": content}
)

Para usar la incrustación automatizada, pase una instancia AutoEmbeddings al parÔmetro embed en la configuración del índice. Esto permite que MongoDB genere y gestione vectores de incrustación automÔticamente.

from langgraph.store.mongodb import MongoDBStore, create_vector_index_config
from langchain_mongodb import AutoEmbeddings
# Vector search index configuration with server-side Automated Embedding
index_config = create_vector_index_config(
embed = AutoEmbeddings(model_name="voyage-4"),
fields = ["<field-name>"],
filters = ["<filter-field-name>", ...] # Optional
)
# Store memories - text is embedded server-side
with MongoDBStore.from_conn_string(
conn_string=MONGODB_URI,
db_name="<database-name>",
collection_name="<collection-name>",
index_config=index_config
) as store:
store.put(
namespace=("user", "memories"),
key=f"memory_{hash(content)}",
value={"content": content}
)

Recuperación y borrado de recuerdos:

# Retrieve memories from MongoDB collection
with MongoDBStore.from_conn_string(
conn_string=MONGODB_URI,
db_name="<database-name>",
collection_name="<collection-name>",
index_config=index_config
) as store:
results = store.search(
("user", "memories"),
query="<query-text>",
limit=3
)
for result in results:
print(result.value)
# To delete memories, use store.delete(namespace, key)
# To batch operations, use store.batch(ops)

Usar los siguientes parƔmetros para configurar el almacenamiento de la memoria.

Parameter
Necesidad
Descripción

conn_string

Requerido

Especifique la cadena de conexión para su clúster de MongoDB o para la implementación local de Atlas.

db_name

Requerido

El nombre de la base de datos que se va a utilizar. Se crearĆ” si no existe. Se establece por defecto en "checkpointing_db".

collection_name

Requerido

El nombre de la colección que se va a utilizar. Se crearÔ si no existe. Por defecto en "persistent-store".

ttl_config

Opcional

Configuración de TTL (Time To Live) para el almacenamiento. Esto configura la expiración automÔtica de documentos en el almacenamiento. Por ejemplo:

ttl_config = {
"default_ttl": 3600, # Expire documents after 1 hour
"refresh_on_read": True, # Refresh TTL on read
}

index_config

Opcional

Configuración del índice de búsqueda vectorial. El parÔmetro embed acepta un modelo de incrustación para incrustación del lado del cliente o una instancia de AutoEmbeddings para incrustación automÔtica del lado del servidor.

Por ejemplo:

index_config = create_vector_index_config(
embed = <embedding-model-or-AutoEmbeddings>,
dims = <dimensions>, # Not required for Automated Embedding
fields = ["<field-name>"], # field to embed
filters = ["<filter-field-name>", ...], # optional
name = "<index-name>" # optional, defaults to 'vector_index'
relevance_score_fn: "euclidean" | "cosine" | "dotProduct"] # defaults to 'cosine'
embedding_key: "<embedding-field-name>" # optional, defaults to 'embedding'
)
MƩtodo
Descripción

put(namespace, key, value, *, index)

Almacena un único elemento en el almacén con el namespace, clave y valor especificados.

search(namespace_prefix, /, *, ...)

Realiza búsquedas de elementos dentro de un namespace_prefix dado. Admite un filtro bÔsico de clave-valor y búsqueda semÔntica de query si se configura un índice vectorial.

El mƩtodo search tiene los siguientes modos:

  • Filtrado de metadatos (sin query): Cuando se llama sin un argumento de query, realiza una query estĆ”ndar filtrada de MongoDB. Se puede especificar un diccionario de filtros para que coincida con los campos dentro del documento de valor almacenado.

    Por ejemplo: store.search(("docs",), filter={"author": "Bob", "status": "published"})

  • BĆŗsqueda semĆ”ntica (con query): Si el almacenamiento fue inicializado con un index_config y se proporciona una string de query, realiza una bĆŗsqueda semĆ”ntica. El mĆ©todo incorpora el texto de la query y utiliza la bĆŗsqueda vectorial de MongoDB para encontrar los elementos mĆ”s relevantes.

    Por ejemplo: store.search(("docs",), query="information about AI assistants")

get(namespace, key, *, refresh_ttl)

Recupera un Ćŗnico elemento del almacenamiento. Opcionalmente, puede actualizar el TTL del elemento al acceder.

delete(namespace, key)

Borra un solo elemento del almacƩn identificado por su namespace y clave.

list_namespaces(*, prefix, ...)

Enumera los namespace Ćŗnicos en el almacenamiento. Permite el filtrado por un prefijo de ruta, un sufijo y la profundidad del documento.

batch(ops)

Ejecuta una secuencia de operaciones (GetOp, PutOp, SearchOp, DeleteOp) en una sola agrupación. Las operaciones de lectura se realizan primero, seguidas de una aplicación masiva de operaciones de guardar deduplicadas. abatch(ops) es la versión asíncrona de este método.

ensure_index_filters(filters)

Método que prepara una lista de campos de filtro para la indexación de búsqueda vectorial en MongoDB.

Se pueden usar sin problemas los recuperadores LangChain como herramientas en el flujo de trabajo de LangGraph para recuperar datos relevantes de MongoDB.

La integración de MongoDB LangChain admite de forma nativa la búsqueda de texto completo, la búsqueda vectorial, la búsqueda híbrida y la recuperación de documentos principales. Para una lista completa de métodos de recuperación, consultar MongoDB LangChain Retrievers.

  1. Para crear una herramienta de recuperación bÔsica con la búsqueda vectorial de MongoDB y LangChain:

    from langchain.tools.retriever import create_retriever_tool
    from langchain_mongodb.vectorstores import MongoDBAtlasVectorSearch
    from langchain_voyageai import VoyageAIEmbeddings
    # Instantiate the vector store
    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...
    )
    # Create a retrieval tool
    retriever = vector_store.as_retriever()
    retriever_tool = create_retriever_tool(
    retriever,
    "vector_search_retriever", # Tool name
    "Retrieve relevant documents from the collection" # Tool description
    )
  2. Para aƱadir la herramienta como un nodo en LangGraph:

    1. Convertir la herramienta en un nodo.

    2. AƱada el nodo al grafo.

    from langgraph.graph import StateGraph
    from langgraph.prebuilt import ToolNode
    # Define the graph
    workflow = StateGraph()
    # Convert the retriever tool into a node
    retriever_node = ToolNode([retriever_tool])
    # Add the tool as a node in the graph
    workflow.add_node("vector_search_retriever", retriever_node)
    graph = workflow.compile()