Para agentes de IA: hay un índice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las páginas están disponibles agregando .md a cualquier ruta URL.
Docs Menu

GraphRAG con MongoDB y LangChain

Este tutorial demuestra cómo implementar GraphRAG utilizando MongoDB Atlas y LangChain. GraphRAG es un enfoque alternativo al RAG tradicional que estructura tus datos como un grafo de conocimiento en lugar de como vectores de incrustación. Cuando se combina con un LLM, este enfoque permite una recuperación consciente de las relaciones y razonamiento multi-hop.

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

GraphRAG es un enfoque alternativo al RAG tradicional que estructura los datos como un grafo de conocimiento de entidades y su relación en lugar de como incrustación vectorial. Mientras que el RAG basado en vectores encuentra documentos que son semánticamente similares a la query, GraphRAG encuentra entidades conectadas a la 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.

Para completar este tutorial, debes tener lo siguiente:

Configura el entorno para este tutorial. Cree un cuaderno interactivo de Python guardando un archivo con la extensión .ipynb. Este cuaderno te permite ejecutar snippets de código Python de forma individual y lo utilizarás para ejecutar el código en este tutorial.

Para configurar tu entorno de notebook:

1

Ejecuta el siguiente comando:

pip install --quiet --upgrade pymongo langchain_community wikipedia langchain_openai langchain_mongodb
2

Copia el siguiente ejemplo de código, reemplaza las variables con tus propios valores y luego ejecuta el código:

<api-key>

Tu clave API de OpenAI

<connection-string>

Tu cadena de conexión SRV del clúster de MongoDB

import os
os.environ["OPENAI_API_KEY"] = "<api-key>"
MONGODB_URI = "<connection-string>"
DB_NAME = "langchain_db" # MongoDB database to store the knowledge graph
COLLECTION = "wikipedia" # MongoDB collection to store the knowledge graph

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, consulta Conectar a un clúster a través de bibliotecas de clientes.

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.

Esta sección demuestra cómo usar MongoDB como un grafo de conocimiento para GraphRAG. Pega y ejecuta el siguiente código en tu cuaderno:

1

Inicialice el LLM utilizando el método init_chat_model de LangChain:

from langchain_openai import OpenAI
from langchain.chat_models import init_chat_model
chat_model = init_chat_model("gpt-4o", model_provider="openai", temperature=0)
2

Para este tutorial, usará datos de acceso público de Wikipedia como fuente de datos. Para cargar los datos de muestra, ejecute el siguiente snippet. Realiza los siguientes pasos:

  • Recupera un subconjunto de páginas de Wikipedia, filtradas por la query Sherlock Holmes.

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

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

from langchain_community.document_loaders import WikipediaLoader
from langchain_text_splitters import TokenTextSplitter
wikipedia_pages = WikipediaLoader(query="Sherlock Holmes", load_max_docs=3).load()
text_splitter = TokenTextSplitter(chunk_size=1024, chunk_overlap=0)
wikipedia_docs = text_splitter.split_documents(wikipedia_pages)
3

Use la clase MongoDBGraphStore para construir el grafo de conocimiento y cargarlo en su clúster de MongoDB:

from langchain_mongodb.graphrag.graph import MongoDBGraphStore
graph_store = MongoDBGraphStore.from_connection_string(
connection_string = MONGODB_URI,
database_name = DB_NAME,
collection_name = COLLECTION,
entity_extraction_model = chat_model
)
4

Agrega documentos a la colección utilizando el método add_documents. Cuando agregas nuevos documentos, este método encuentra entidades existentes y las actualiza o crea nuevas si estas no existen.

Este paso puede tardar unos minutos. Puedes ignorar cualquier advertencia que aparezca en salida.

graph_store.add_documents(wikipedia_docs)

Después de ejecutar el código de ejemplo, puedes ver cómo se almacenan tus datos navegando a la colección documents.wikipedia en la interfaz de usuario de Atlas.

5

Puedes visualizar la estructura del grafo usando las librerías networkx y pyvis. Por ejemplo, consulta el notebook.

Invoque el grafo de conocimientos para responder preguntas. Utiliza el chat_response método para invocar el grafo de conocimiento. Recupera documentos relevantes de MongoDB y luego utiliza el modelo de chat que especificaste para generar una respuesta en lenguaje natural.

Específicamente, el modelo de chat extrae entidades de la query, MongoDB recorre el grafo de conocimiento para encontrar entidades conectadas utilizando la etapa $graphLookup, y las entidades más cercanas y sus relaciones se envían junto con la query de vuelta al modelo de chat para generar una respuesta.

query = "Who inspired Sherlock Holmes?"
answer = graph_store.chat_response(query)
print(answer.content)
Sherlock Holmes was inspired by Dr. Joseph Bell, a physician known for his keen observation and deductive reasoning, as acknowledged by Sir Arthur Conan Doyle, Holmes' creator.

Mira este video para ver una demostración del código utilizado en este tutorial.

Duración: 2 minutos