Graf dan RAG

Graph RAG dengan LangChain dan Neo4j

Adam Cowley

Manager, Developer Education at Neo4j

Kenali instruktur Anda

 

  • Manajer, Developer Education di Neo4j
  • Developer Education melalui Neo4j GraphAcademy
  • 20 tahun pengalaman pengembangan perangkat lunak

  • 10 tahun pengalaman Neo4j

 

Foto Adam

1 https://graphacademy.neo4j.com
Graph RAG dengan LangChain dan Neo4j

Huruf R pada RAG

Diagram aplikasi dengan masukan Pengguna ditambahkan ke prompt yang dikirim ke LLM

Graph RAG dengan LangChain dan Neo4j

Huruf R pada RAG

Prompt memerlukan konteks yang berasal dari dokumen dan sumber data

Graph RAG dengan LangChain dan Neo4j

Huruf R pada RAG

Data ini sering diubah menjadi vector embedding

Graph RAG dengan LangChain dan Neo4j

Kapan pencarian semantik gagal?

Vektor cocok untuk

  • Pertanyaan samar atau terbuka

Vektor kurang efektif untuk

  • Pertanyaan sangat spesifik atau berbasis fakta
  • Kueri numerik atau pencocokan persis
  • Kueri logis

Apa pendapat Paul Graham tentang Generative AI?

Berapa banyak startup Generative AI yang diinvestasi Paul Graham?

Graph RAG dengan LangChain dan Neo4j

Vektor vs. knowledge graph

Teks Vektor 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 graf yang menampilkan entitas dalam lirik Don't Stop Believin'. Seorang anak kota kecil, dengan relasi BORN dan RAISED ke South Detroit

Graph RAG dengan LangChain dan Neo4j

Vektor vs. knowledge graph

Teks Vektor 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]

Node-nya: seorang Person: Small town boy, sebuah Location: South Detroit, sebuah Train: Midnight Train, dan sebuah Location: Anywhere

Graph RAG dengan LangChain dan Neo4j

Vektor vs. knowledge graph

Teks Vektor 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]

Relasi BORN dan RAISED dari node Person ke Location. Relasi GOING dari node Midnight Train ke node Anywhere

Graph RAG dengan LangChain dan Neo4j

Knowledge graph dan Neo4j

 

  • Neo4j adalah database graf terdepan di dunia
  • Fleksibel, skema-opsional
  • Integrasi LangChain langchain-neo4j
  • LCEL: LangChain Expression Language

Logo neo4j dan langchain

1 https://db-engines.com/en/ranking/graph%20dbms
Graph RAG dengan LangChain dan Neo4j

Node merepresentasikan objek

from langchain_neo4j.graphs.graph_document \
  import Node

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

Sebuah node buku pada diagram graf dengan properti ID dan Title

Graph RAG dengan LangChain dan Neo4j

Relasi menghubungkan node

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(





)

Dua relasi WRITTEN_BY dari node Book ke dua node Person yang mewakili penulisnya

Graph RAG dengan LangChain dan Neo4j

Relasi menghubungkan node

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,



)

Node sumber dari relasi WRITTEN_BY adalah node Book

Graph RAG dengan LangChain dan Neo4j

Relasi menghubungkan node

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,


)

Node tujuan untuk relasi WRITTEN_IN adalah Person

Graph RAG dengan LangChain dan Neo4j

Relasi menghubungkan node

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(...)
)

Diagram node mencakup Book dan dua relasi WRITTEN_BY ke para penulis untuk menunjukkan bahwa node dapat memiliki banyak relasi.

Graph RAG dengan LangChain dan Neo4j

Menyambungkan ke 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 dengan LangChain dan Neo4j

Menyimpan dokumen graf

from langchain_neo4j.graphs.graph_document import GraphDocument


# Wrapper untuk Nodes dan Relationships doc = GraphDocument(
nodes=[book, jesus, jim],
relationships=[jesus_wrote_book, jim_wrote_book]
)
# Simpan node dan relasi ke database graph.add_graph_documents([graph_document])
Graph RAG dengan LangChain dan Neo4j

Jadi, apa itu GraphRAG?

Diagram sebelumnya dengan konteks dari dokumen dan embedding-nya

Graph RAG dengan LangChain dan Neo4j

Jadi, apa itu GraphRAG?

Diagram sebelumnya dengan konteks dari dokumen dan tambahan knowledge graph yang menampilkan node serta relasi yang diturunkan dari dokumen

Graph RAG dengan LangChain dan Neo4j

Ayo berlatih!

Graph RAG dengan LangChain dan Neo4j

Preparing Video For Download...