Docs Menu
Docs Home
/ /

GraphRAG con MongoDB y LangChain

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.

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.

Para completar este tutorial, debes tener lo siguiente:

  • Uno de los siguientes tipos de clúster de MongoDB:

  • 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.

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:

1

Ejecuta el siguiente comando:

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

Copie el siguiente ejemplo de código, reemplace las variables con sus propios valores y luego ejecute el código:

<api-key>

Su clave API de OpenAI

<connection-string>

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.

Esta sección muestra cómo usar MongoDB como grafo de conocimiento para GraphRAG. Pegue y ejecute el siguiente código en su notebook:

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

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)
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. 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.

5

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

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.

Mire este vídeo para ver una demostración del código utilizado en este tutorial.

Duración: 2 minutos

Volver

RAG local

En esta página