Đồ thị và RAG

Graph RAG với LangChain và Neo4j

Adam Cowley

Manager, Developer Education at Neo4j

Gặp gỡ giảng viên của bạn

 

  • Quản lý, Đào tạo nhà phát triển tại Neo4j
  • Đào tạo nhà phát triển qua Neo4j GraphAcademy
  • 20+ năm kinh nghiệm phát triển phần mềm
  • 10+ năm kinh nghiệm với Neo4j

 

Ảnh của Adam

1 https://graphacademy.neo4j.com
Graph RAG với LangChain và Neo4j

Chữ R trong RAG

Sơ đồ ứng dụng với đầu vào Người dùng được thêm vào prompt gửi tới LLM

Graph RAG với LangChain và Neo4j

Chữ R trong RAG

Prompt cần ngữ cảnh đến từ tài liệu và nguồn dữ liệu

Graph RAG với LangChain và Neo4j

Chữ R trong RAG

Dữ liệu này thường được chuyển thành vector embedding

Graph RAG với LangChain và Neo4j

Tìm kiếm ngữ nghĩa thất bại ở đâu?

Vector hiệu quả cho

  • Câu hỏi mơ hồ hoặc mở

Vector kém hiệu quả cho

  • Câu hỏi rất cụ thể hoặc dựa trên sự kiện
  • Truy vấn số hoặc khớp chính xác
  • Truy vấn logic

Paul Graham nghĩ gì về Generative AI?

Paul Graham đã đầu tư vào bao nhiêu startup Generative AI?

Graph RAG với LangChain và Neo4j

Vector vs. knowledge graph

Văn bản 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]

Sơ đồ đồ thị hiển thị các thực thể trong lời bài hát “Don't Stop Believin’”. Một cậu bé thị trấn nhỏ, với quan hệ BORN và RAISED tới South Detroit

Graph RAG với LangChain và Neo4j

Vector vs. knowledge graph

Văn bản 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]

Các nút gồm một người: Small town boy, một địa điểm: South Detroit, một tàu: Midnight Train và một địa điểm: Anywhere

Graph RAG với LangChain và Neo4j

Vector vs. knowledge graph

Văn bản 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]

Các quan hệ BORN và RAISED đi từ người đến địa điểm. Quan hệ GOING của tàu đi từ nút Midnight Train đến nút Anywhere

Graph RAG với LangChain và Neo4j

Knowledge graph và Neo4j

 

  • Neo4j là cơ sở dữ liệu đồ thị hàng đầu thế giới
  • Linh hoạt, tùy chọn schema
  • Tích hợp LangChain langchain-neo4j
  • LCEL: LangChain Expression Language

Logo neo4j và langchain

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

Nút biểu diễn thực thể

from langchain_neo4j.graphs.graph_document \
  import Node

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

Một nút Sách trong sơ đồ đồ thị với thuộc tính ID và Title

Graph RAG với LangChain và Neo4j

Quan hệ kết nối các nút

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(





)

Hai quan hệ WRITTEN_BY đi từ nút Book đến hai nút Person đại diện cho tác giả

Graph RAG với LangChain và Neo4j

Quan hệ kết nối các nút

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,



)

Nút nguồn của quan hệ WRITTEN_BY là nút Book

Graph RAG với LangChain và Neo4j

Quan hệ kết nối các nút

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,


)

Nút đích của quan hệ WRITTEN_BY là một Person

Graph RAG với LangChain và Neo4j

Quan hệ kết nối các nút

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

Sơ đồ nút gồm Book và hai quan hệ WRITTEN_BY tới các tác giả, cho thấy một nút có thể có nhiều quan hệ.

Graph RAG với LangChain và Neo4j

Kết nối tới 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 với LangChain và Neo4j

Lưu tài liệu đồ thị

from langchain_neo4j.graphs.graph_document import GraphDocument


# Trình bao cho Node và Relationship doc = GraphDocument(
nodes=[book, jesus, jim],
relationships=[jesus_wrote_book, jim_wrote_book]
)
# Lưu node và quan hệ vào cơ sở dữ liệu graph.add_graph_documents([graph_document])
Graph RAG với LangChain và Neo4j

Vậy GraphRAG là gì?

Sơ đồ trước đó với ngữ cảnh từ tài liệu và embedding của chúng

Graph RAG với LangChain và Neo4j

Vậy GraphRAG là gì?

Sơ đồ trước đó với ngữ cảnh từ tài liệu, thêm một knowledge graph hiển thị các nút và quan hệ trích từ tài liệu

Graph RAG với LangChain và Neo4j

Ayo berlatih!

Graph RAG với LangChain và Neo4j

Preparing Video For Download...