Este tutorial demuestra cómo implementar GraphRAG usando MongoDB Atlas y LangChain. GraphRAG es un enfoque alternativo al RAG tradicional que estructura los datos como un grafo de conocimiento en lugar de incrustaciones vectoriales. Al combinarse con un LLM, este enfoque permite la recuperación consciente de las relaciones y el razonamiento de múltiples saltos.
Trabaja con una versión ejecutable de este tutorial como Cuaderno de Python.
Segundo plano
GraphRAG es un enfoque alternativo al tradicional RAG estructura los datos como un grafo de conocimiento de entidades y sus relaciones, en lugar de incrustaciones vectoriales. Mientras que RAG, basado en vectores, encuentra documentos semánticamente similares a la consulta, GraphRAG encuentra entidades conectadas a la consulta 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.
Requisitos previos
Para completar este tutorial, debes tener lo siguiente:
Uno de los siguientes tipos de clúster de MongoDB:
Un clúster de Atlas que ejecuta la versión 6.0.11, 7.0.2 o posterior de MongoDB. Asegúrese de que su dirección IP esté incluida en la lista de acceso de su proyecto Atlas.
Una implementación local de Atlas creada usando Atlas CLI. Para obtener más información, consulta Crear una Implementación local de Atlas.
Un clúster de MongoDB Community o Enterprise con Search y Vector Search instalados.
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 VS Code o Colab.
Configurar el entorno
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 el entorno de su portátil:
Defina variables de entorno.
Copia el siguiente ejemplo de código, reemplaza las variables con tus propios valores y luego ejecuta el código:
| Tu clave API de OpenAI |
| La cadena de conexión SRV de su clúster 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.
Utilizar MongoDB como un grafo de conocimiento
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:
Cargue los datos de muestra.
En este tutorial, se utilizan datos de acceso público de Wikipedia como fuente de datos. Para cargar los datos de ejemplo, ejecute el siguiente fragmento de código. Este 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)
Instanciar el almacén de grafo.
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 )
Agregue documentos al grafo de conocimiento.
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 muestra, puede ver cómo se almacenan sus datos navegando a la documents.wikipedia colección en la interfaz de usuario de Atlas.
(Opcional) Visualiza el grafo de conocimiento.
Puedes visualizar la estructura del grafo usando las librerías networkx y pyvis. Por ejemplo, consulta el notebook.
Responda preguntas sobre sus datos
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.
Aprende observando
Mira este video para ver una demostración del código utilizado en este tutorial.
Duración: 2 minutos