Grafuri și RAG

Graph RAG cu LangChain și Neo4j

Adam Cowley

Manager, Developer Education at Neo4j

Cunoaște-ți instructorul

 

  • Manager, Developer Education la Neo4j
  • Developer Education prin Neo4j GraphAcademy
  • Peste 20 de ani de experiență în dezvoltarea software
  • Peste 10 ani de experiență cu Neo4j

 

Fotografia lui Adam

1 https://graphacademy.neo4j.com
Graph RAG cu LangChain și Neo4j

R-ul din RAG

Diagramă de aplicație cu un input de utilizator adăugat într-un prompt trimis unui LLM

Graph RAG cu LangChain și Neo4j

R-ul din RAG

Promptul necesită context provenit din documente și surse de date

Graph RAG cu LangChain și Neo4j

R-ul din RAG

Aceste date sunt adesea convertite în vectori de tip embedding

Graph RAG cu LangChain și Neo4j

Unde eșuează căutarea semantică?

Vectorii funcționează bine pentru

  • Întrebări vagi sau deschise

Vectorii sunt ineficienți pentru

  • Întrebări foarte specifice sau factuale
  • Interogări numerice sau cu potrivire exactă
  • Interogări logice

Ce crede Paul Graham despre AI generativ?

În câte startup-uri de AI generativ a investit Paul Graham?

Graph RAG cu LangChain și Neo4j

Vectori vs. grafuri de cunoștințe

Text Vector Embedding
He's just a city boy born [0.12, -0.34, 0.56, 0.78, ..., -0.91]
born and raised in South Detroit [0.22, 0.45, -0.67, 0.11, ..., 0.33]
He took the midnight train [-0.55, 0.89, 0.12, -0.44, ..., 0.67]
going anywhere [0.78, -0.23, 0.45, 0.91, ..., -0.12]

Diagramă de graf cu entitățile menționate în versurile piesei Don't Stop Believin'. Un băiat din oraș mic, cu relațiile BORN și RAISED față de South Detroit

Graph RAG cu LangChain și Neo4j

Vectori vs. grafuri de cunoștințe

Text Vector Embedding
He's just a city boy born [0.12, -0.34, 0.56, 0.78, ..., -0.91]
born and raised in South Detroit [0.22, 0.45, -0.67, 0.11, ..., 0.33]
He took the midnight train [-0.55, 0.89, 0.12, -0.44, ..., 0.67]
going anywhere [0.78, -0.23, 0.45, 0.91, ..., -0.12]

Nodurile sunt: o persoană (Small town boy), o locație (South Detroit), un tren (Midnight Train) și o locație (Anywhere)

Graph RAG cu LangChain și Neo4j

Vectori vs. grafuri de cunoștințe

Text Vector Embedding
He's just a city boy born [0.12, -0.34, 0.56, 0.78, ..., -0.91]
born and raised in South Detroit [0.22, 0.45, -0.67, 0.11, ..., 0.33]
He took the midnight train [-0.55, 0.89, 0.12, -0.44, ..., 0.67]
going anywhere [0.78, -0.23, 0.45, 0.91, ..., -0.12]

Relațiile BORN și RAISED merg de la persoană la locație. Trenul GOING merge de la nodul Midnight Train la nodul Anywhere

Graph RAG cu LangChain și Neo4j

Grafuri de cunoștințe și Neo4j

 

  • Neo4j este liderul mondial în baze de date graf
  • Flexibil, cu schemă opțională
  • Integrare LangChain prin langchain-neo4j
  • LCEL: LangChain Expression Language

Logo-urile neo4j și langchain

1 https://db-engines.com/en/ranking/graph%20dbms
Graph RAG cu LangChain și Neo4j

Nodurile reprezintă entități

from langchain_neo4j.graphs.graph_document \
  import Node

book = Node(
type="Book",
id=f"9781098127107",
properties={ "title": "Building Knowledge Graphs" }
)

Un nod de tip carte într-o diagramă de graf, cu proprietățile ID și Title

Graph RAG cu LangChain și Neo4j

Relațiile conectează nodurile

from langchain_neo4j.graphs.graph_document \
  import Node, Relationship

book = Node(type="Book", id=f"9781098127107")

jesus = Node(type="Person", id="dr-jesus-barrasa")
jim = Node(type="Person", id="chief-scientist")
for author in [jesus, jim]:
    relationship = Relationship(





)

Două relații WRITTEN_BY care merg de la un nod Book la două noduri Person reprezentând autorii

Graph RAG cu LangChain și Neo4j

Relațiile conectează nodurile

from langchain_neo4j.graphs.graph_document \
  import Node, Relationship

book = Node(type="Book", id=f"9781098127107")

jesus = Node(type="Person", id="dr-jesus-barrasa")
jim = Node(type="Person", id="chief-scientist")
for author in [jesus, jim]:
    relationship = Relationship(

source=book,



)

Nodul sursă al relației WRITTEN_BY este nodul Book

Graph RAG cu LangChain și Neo4j

Relațiile conectează nodurile

from langchain_neo4j.graphs.graph_document \
  import Node, Relationship

book = Node(type="Book", id=f"9781098127107")

jesus = Node(type="Person", id="dr-jesus-barrasa")
jim = Node(type="Person", id="chief-scientist")
for author in [jesus, jim]:
    relationship = Relationship(

source=book,
target=author,


)

Nodul destinație al relației WRITTEN_IN este o persoană (Person)

Graph RAG cu LangChain și Neo4j

Relațiile conectează nodurile

from langchain_neo4j.graphs.graph_document \
  import Node, Relationship

book = Node(type="Book", id=f"9781098127107")

jesus = Node(type="Person", id="dr-jesus-barrasa")
jim = Node(type="Person", id="chief-scientist")
for author in [jesus, jim]:
    relationship = Relationship(

source=book,
target=author,
type="WRITTEN_BY"
properties=dict(...)
)

Diagrama cu nodul Book și două relații WRITTEN_BY către autori, demonstrând că nodurile pot avea mai multe relații.

Graph RAG cu LangChain și Neo4j

Conectarea la Neo4j

from langchain_neo4j import Neo4jGraph


graph = Neo4jGraph( url=NEO4J_URI, username=NEO4J_USERNAME, password=NEO4J_PASSWORD )
1 https://neo4j.com/docs/getting-started/
Graph RAG cu LangChain și Neo4j

Salvarea documentelor de graf

from langchain_neo4j.graphs.graph_document import GraphDocument


# Wrapper for Nodes and Relationships doc = GraphDocument(
nodes=[book, jesus, jim],
relationships=[jesus_wrote_book, jim_wrote_book]
)
# Save nodes and relationships to the database graph.add_graph_documents([graph_document])
Graph RAG cu LangChain și Neo4j

Deci, ce este GraphRAG?

Diagrama anterioară cu context din documente și vectorii lor de tip embedding

Graph RAG cu LangChain și Neo4j

Deci, ce este GraphRAG?

Diagrama anterioară cu context din documente, la care se adaugă un graf de cunoștințe cu noduri și relații extrase din documente

Graph RAG cu LangChain și Neo4j

Hai să exersăm!

Graph RAG cu LangChain și Neo4j

Preparing Video For Download...