Menu Docs
Página inicial do Docs
/ /

GraphRAG com MongoDB e LangChain

Este tutorial demonstra como implementar o GraphRAG usando o MongoDB Atlas e o LangChain. GraphRAG é uma abordagem alternativa ao RAG tradicional que estrutura seus dados como um grafo de conhecimento em vez de como incorporações vetoriais. Quando combinada com um LLM, essa abordagem permite a recuperação com reconhecimento de relacionamento e raciocínio multi-hop.

Trabalhe com uma versão executável deste tutorial como um bloco de anotações Python.

OGraphRAG é uma abordagem alternativa ao RAG tradicional que estrutura os dados como um gráfico de conhecimento de entidades e seus relacionamentos em vez de incorporações vetoriais. Enquanto o RAG baseado em vetor encontra documentos semanticamente semelhantes à query, o GraphRAG localiza entidades conectadas à query e atravessa os relacionamentos no grafo para recuperar informações relevantes.

Essa abordagem é particularmente útil para responder a perguntas baseadas em relacionamento, como "Qual é a conexão entre a Empresa A e a Empresa B?" ou "Quem é o gerente da Pessoa X?".

MongoDBGraphStore é um componente na integração do LangChain com o MongoDB que permite implementar o GraphRAG ao armazenar entidades (nós) e seus relacionamentos (arestas) em uma coleção do MongoDB. Este componente armazena cada entidade como um documento com campos de relacionamento que referenciam outros documentos na sua coleção. Ele executa consultas usando o estágio de agregação $graphLookup.

Para concluir este tutorial, você deve ter o seguinte:

  • Um dos seguintes tipos de cluster MongoDB :

  • Uma chave de API da OpenAI. Você deve ter uma conta da OpenAI com créditos disponíveis para solicitações de API. Para aprender mais sobre como registrar uma conta OpenAI, consulte o website de API OpenAI.

  • Um ambiente para executar blocos de anotações interativos do Python, como VS Code ou CoLab.

Configure o ambiente para este tutorial. Crie um bloco de anotações Python interativo salvando um arquivo com a extensão .ipynb. Este bloco de anotações permite que você execute trechos de código Python individualmente, e você o usará para executar o código neste tutorial.

Para configurar seu ambiente de bloco de anotações:

1

Execute o seguinte comando:

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

Copie o exemplo de código a seguir, substitua as variáveis pelos seus próprios valores e execute o código:

<api-key>

Sua chave de API do OpenAI

<connection-string>

string de conexão SRV do cluster 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

Observação

Substitua <connection-string> pela string de conexão do seu cluster do Atlas ou da implantação local do Atlas.

Sua string de conexão deve usar o seguinte formato:

mongodb+srv://<db_username>:<db_password>@<clusterName>.<hostname>.mongodb.net

Para saber mais, consulte Conectar a um cluster via drivers.

Sua string de conexão deve usar o seguinte formato:

mongodb://localhost:<port-number>/?directConnection=true

Para saber mais, consulte Connection strings.

Esta seção demonstra como usar o MongoDB como um gráfico de conhecimento para o GraphRAG. Cole e execute o seguinte código no seu bloco de notas:

1

Inicialize o LLM usando o método init_chat_model do 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

Neste tutorial, você utilizará dados publicamente acessíveis da Wikipedia como fonte de dados. Para carregar os dados de amostra, execute o seguinte snippet de código. Ele executa as seguintes etapas:

  • Recupera um subconjunto de páginas da Wikipedia, filtradas pela query Sherlock Holmes.

  • Usa um divisor de texto para dividir os dados em documentos menores.

  • Especifica os parâmetros de parte, que determinam o número de caracteres em cada documento e o número de caracteres que devem se sobrepor entre dois documentos consecutivos.

from langchain_community.document_loaders import WikipediaLoader
from langchain.text_splitter 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 a classe MongoDBGraphStore para construir o grafo de conhecimento e carregá-lo em seu cluster 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

Adicione documentos à coleção usando o método add_documents. Quando você adiciona novos documentos, este método localiza entidades existentes e as atualiza ou cria novas, caso não existam.

Esta etapa pode levar alguns minutos. Você pode ignorar quaisquer avisos que apareçam na saída.

graph_store.add_documents(wikipedia_docs)

Depois de executar o código de exemplo, você pode visualizar como seus dados são armazenados navegando até a coleção documents.wikipedia na IU do Atlas.

5

Você pode visualizar a estrutura do gráfico utilizando as bibliotecas networkx e pyvis. Para ver um exemplo, consulte o bloco de anotações.

Invoque o grafo de conhecimento para responder a perguntas. Use o método chat_response para invocar o gráfico de conhecimento. Ele recupera documentos relevantes do MongoDB e, em seguida, usa o modelo de chat que você especificou para gerar uma resposta em linguagem natural.

Especificamente, o modelo de chat extrai entidades da query, o MongoDB atravessa o grafo de conhecimento para localizar entidades conectadas usando o estágio $graphLookup, e as entidades mais próximas e seus relacionamentos são enviados com a query de volta ao modelo de chat para gerar uma resposta.

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.

Assista a este vídeo para ver uma demonstração do código utilizado neste tutorial.

Duração: 2 minutos

Voltar

RAG local

Nesta página