Este tutorial demonstra como implementar o GraphRAG usando MongoDB Atlas e LangChain. O GraphRAG é uma abordagem alternativa ao RAG tradicional que estrutura seus dados como um gráfico de conhecimento em vez de incorporações vetoriais. Quando combinada com um LLM, essa abordagem permite a recuperação com reconhecimento de relacionamento e o argumento com vários saltos.
Plano de fundo
O GraphRAG é 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 MongoDB MongoDB que permite implementar GraphRAG armazenando entidades (nós) e seus relacionamentos (edge) em uma coleção MongoDB . Este componente armazena cada entidade como um documento com campos de relacionamento que fazem referência a outros documentos em sua coleção. Ele executa queries usando o $graphLookup estágio de agregação.
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 usando Python e Docker. Instale
atlas-local-lib-pyopip install atlas-local-lib-py() para criar e gerenciar implantações locais programaticamente. Para saber mais, consulte o repositório atlas-local-lib-py .Um cluster da MongoDB Community com o Search e o 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 saber mais sobre como registrar uma conta OpenAI, consulte o site da API OpenAI.
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-se a um cluster por meio de bibliotecas de clientes.
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_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)
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 grafo usando as bibliotecas networkx e pyvis. Para obter um exemplo, consulte o notebook.
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, e as entidades mais próximas e seus relacionamentos são enviados com a query de volta ao modelo de chat para gerar uma $graphLookup 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