Almacenar y consultar documentos

Retrieval Augmented Generation (RAG) con LangChain

Meri Nova

Machine Learning Engineer

Instanciar la base de datos Neo4j

from langchain_community.graphs import Neo4jGraph

graph = Neo4jGraph(url="bolt://localhost:7687", username="neo4j", password="...")
import os

url = os.environ["NEO4J_URI"]
user = os.environ["NEO4J_USERNAME"]
password = os.environ["NEO4J_PASSWORD"]

graph = Neo4jGraph(url=url, username=user, password=password)
1 https://neo4j.com/download/
Retrieval Augmented Generation (RAG) con LangChain

Almacenar documentos de grafo

from langchain_experimental.graph_transformers import LLMGraphTransformer

llm = ChatOpenAI(api_key="...", temperature=0, model="gpt-4o-mini")
llm_transformer = LLMGraphTransformer(llm=llm)

graph_documents = llm_transformer.convert_to_graph_documents(documents)
Retrieval Augmented Generation (RAG) con LangChain

Almacenar documentos de grafo

graph.add_graph_documents(
  graph_documents,

include_source=True,
baseEntityLabel=True
)
  • include_source=True: enlaza nodos a documentos fuente con arista MENTIONS
  • baseEntityLabel=True: añade la etiqueta __Entity__ a cada nodo
Retrieval Augmented Generation (RAG) con LangChain

Los documentos de grafo representados como nodos y aristas.

Retrieval Augmented Generation (RAG) con LangChain

Una versión ampliada de la imagen anterior con nodos sobre modelos de OpenAI.

Retrieval Augmented Generation (RAG) con LangChain

Esquema de la base de datos

print(graph.get_schema)
Propiedades de nodos:
Concept {id: STRING}
Architecture {id: STRING}
Organization {id: STRING}
Event {id: STRING}
Paper {id: STRING}

Relaciones:
(:Concept)-[:DEVELOPED_BY]->(:Person)
(:Architecture)-[:BASED_ON]->(:Concept)
(:Organization)-[:PROPOSED]->(:Concept)
(:Document)-[:MENTIONS]->(:Event)
(:Paper)-[:BASED_ON]->(:Concept)
Retrieval Augmented Generation (RAG) con LangChain

Consulta en Neo4j - Lenguaje Cypher

Un nodo llamado James con una relación llamada friends que apunta a un nodo persona misterioso.

Retrieval Augmented Generation (RAG) con LangChain

Consulta en Neo4j - Lenguaje Cypher

cypher4.jpg

Retrieval Augmented Generation (RAG) con LangChain

Consulta en Neo4j - Lenguaje Cypher

cypher4.jpg

Retrieval Augmented Generation (RAG) con LangChain

Consulta en Neo4j - Lenguaje Cypher

cypher4.jpg

Retrieval Augmented Generation (RAG) con LangChain

Consulta en Neo4j - Lenguaje Cypher

cypher4.jpg

Retrieval Augmented Generation (RAG) con LangChain

Consultar el grafo de LLM

results = graph.query("""
MATCH (gpt4:Model {id: "Gpt-4"})-[:DEVELOPED_BY]->(org:Organization)
RETURN org
""")

print(results)
[{'org': {'id': 'Openai'}}]
Retrieval Augmented Generation (RAG) con LangChain

¡Vamos a practicar!

Retrieval Augmented Generation (RAG) con LangChain

Preparing Video For Download...