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.
Trabaje con una versión ejecutable de este tutorial como Cuaderno de Python.
Segundo plano
GraphRAG es un enfoque alternativo a los métodos tradicionales 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:
Definir variables de entorno.
Copie el siguiente ejemplo de código, reemplace las variables con sus propios valores y luego ejecute el código:
| Su 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,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.
Utilice MongoDB como un gráfico de conocimiento
Esta sección muestra cómo usar MongoDB como grafo de conocimiento para GraphRAG. Pegue y ejecute el siguiente código en su notebook:
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 consulta
Sherlock Holmes.Utiliza un divisor de texto para dividir los datos en documentos más pequeños.
Especifica los parámetros de fragmento, que determinan la cantidad de caracteres en cada documento y la cantidad 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)
Crear una instancia del almacén de gráficos.
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 )
Añadir documentos al gráfico 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. Puede ignorar las advertencias que aparezcan en el resultado.
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) Visualice el gráfico 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 conocimiento para responder preguntas. Use el método chat_response para invocarlo. Este recupera los documentos relevantes de MongoDB y luego usa el modelo de chat especificado para generar una respuesta en lenguaje natural.
Específicamente, el modelo de chat extrae entidades de la consulta, MongoDB recorre el gráfico de conocimiento para encontrar entidades conectadas utilizando la etapa y las entidades más cercanas y sus relaciones se envían con la consulta al modelo de chat para generar una $graphLookup 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
Mire este vídeo para ver una demostración del código utilizado en este tutorial.
Duración: 2 minutos