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.
Plano de fundo
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.
Pré-requisitos
Para concluir este tutorial, você deve ter o seguinte:
Um dos seguintes tipos de cluster MongoDB :
Um cluster do Atlas executando a versão 6.0.11 do MongoDB, 7.0.2, ou posterior. Certifique-se de que seu endereço IP esteja incluído na lista de acesso do seu projeto Atlas.
Um sistema local do Atlas criado utilizando o Atlas CLI. Para saber mais, consulte Criar uma implantação de Atlas local.
Um cluster MongoDB Community ou Enterprise com Search e Vector Search instalados.
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.
Configurar o ambiente
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:
Defina as variáveis de ambiente.
Copie o exemplo de código a seguir, substitua as variáveis pelos seus próprios valores e execute o código:
| Sua chave de API do OpenAI |
| 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.
Usar MongoDB como Gráfico de informações
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:
Carregue os dados de amostra.
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)
Instancie o armazenamento de grafo.
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 )
Adicione documentos ao grafo de conhecimento.
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.
(Opcional) Visualize o grafo de conhecimento.
Você pode visualizar a estrutura do gráfico utilizando as bibliotecas networkx e pyvis. Para ver um exemplo, consulte o bloco de anotações.
Responda a perguntas sobre seus dados
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.
Aprenda assistindo
Assista a este vídeo para ver uma demonstração do código utilizado neste tutorial.
Duração: 2 minutos