Grafuri de domeniu

Graph RAG cu LangChain și Neo4j

Adam Cowley

Manager, Developer Education at Neo4j

Grafuri de domeniu

un diagram de graf de cunoștințe care prezintă graful lexical în stânga cu o carte, capitole și pagini, iar în dreapta persoanele și companiile din carte împreună cu referințe din alte surse, inclusiv Wikipedia

Graph RAG cu LangChain și Neo4j

De la grafuri lexicale la grafuri de domeniu

Versurile cântecului Don't Stop Believing de Journey

Graph RAG cu LangChain și Neo4j

De la grafuri lexicale la grafuri de domeniu

Versurile cântecului Don't Stop Believing de Journey cu "Small Town Boy" evidențiat ca persoană

Graph RAG cu LangChain și Neo4j

De la grafuri lexicale la grafuri de domeniu

Versurile cântecului Don't Stop Believing de Journey cu "South Detroit" evidențiat ca locație

Graph RAG cu LangChain și Neo4j

De la grafuri lexicale la grafuri de domeniu

Versurile cântecului Don't Stop Believing de Journey cu "Born" evidențiat ca relație între nodul persoanei "Small Town Boy" și nodul locației "South Detroit"

Graph RAG cu LangChain și Neo4j

De la grafuri lexicale la grafuri de domeniu

Versurile cântecului Don't Stop Believing de Journey cu "Raised" evidențiat ca relație între nodul persoanei "Small Town Boy" și nodul locației "South Detroit"

Graph RAG cu LangChain și Neo4j

Un exemplu de graf de domeniu

Un exemplu de graf de domeniu format dintr-o persoană care lucrează la o companie situată la o adresă. Persoana deține un card de credit cu care a plasat o comandă la o companie din aceeași locație

Graph RAG cu LangChain și Neo4j

Rezultate structurate

from pydantic import BaseModel, Field

from typing import Optional
class Character(BaseModel): """A character from the play."""
id: str = Field(description="A unique identifier for the character in slug-case",
examples=["montague-romeo", "tybalt"])
name: str = Field(description="The full name of the character", examples=["Romeo", "Tybalt"])
family: Optional[str] = Field(description="The name of the family they belong to", examples=["Montague", "Capulet"])
class CharacterOutput(BaseModel): characters: list[Character] = Field(description="A list of characters")
Graph RAG cu LangChain și Neo4j

Utilizarea rezultatelor structurate

from langchain.chat_models import init_chat_model
llm = init_chat_model("gpt-4o-mini", model_provider="openai", api_key="...")


# With a structured output character_model = llm.with_structured_output(CharacterOutput)
# Use within a chain chain = extraction_prompt | character_model
# Handle the response output = chain.invoke(...)
CharacterOutput(characters=[Character, Character, Character...])
Graph RAG cu LangChain și Neo4j

Salvarea entităților

nodes = [

Node(
type="Character",
id=character.id,
properties={"name": character.name, "family": character.family}
)
for character in output.characters
]
# Build a GraphDocument graph_document = GraphDocument(nodes=nodes, relationships=[])
# Save to the graph graph.add_graph_documents([graph_document])
Graph RAG cu LangChain și Neo4j

Hai să exersăm!

Graph RAG cu LangChain și Neo4j

Preparing Video For Download...