Domeingrafen

Graph RAG met LangChain en Neo4j

Adam Cowley

Manager, Developer Education at Neo4j

Domeingrafen

Een kennisgraaf met links de lexicale graaf (boek, hoofdstukken, pagina's) en rechts de personen en bedrijven uit het boek, plus verwijzingen uit andere bronnen zoals Wikipedia

Graph RAG met LangChain en Neo4j

Lexicale grafen naar domeingrafen

De songtekst van Don't Stop Believin' van Journey

Graph RAG met LangChain en Neo4j

Lexicale grafen naar domeingrafen

De songtekst van Don't Stop Believin' van Journey met "Small Town Boy" gemarkeerd als persoon

Graph RAG met LangChain en Neo4j

Lexicale grafen naar domeingrafen

De songtekst van Don't Stop Believin' van Journey met "South Detroit" gemarkeerd als locatie

Graph RAG met LangChain en Neo4j

Lexicale grafen naar domeingrafen

De songtekst van Don't Stop Believin' van Journey met "Born" gemarkeerd als relatie tussen de knooppunten voor de persoon "Small Town Boy" en de locatie "South Detroit"

Graph RAG met LangChain en Neo4j

Lexicale grafen naar domeingrafen

De songtekst van Don't Stop Believin' van Journey met "Raised" gemarkeerd als relatie tussen de knooppunten voor de persoon "Small Town Boy" en de locatie "South Detroit"

Graph RAG met LangChain en Neo4j

Voorbeeld van een domeingraaf

Een voorbeeld van een domeingraaf: een persoon werkt bij een bedrijf op een adres. De persoon heeft een creditcard, waarmee een bestelling is geplaatst bij een bedrijf op dezelfde locatie

Graph RAG met LangChain en Neo4j

Gestructureerde outputs

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 met LangChain en Neo4j

Gestructureerde outputs gebruiken

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 met LangChain en Neo4j

Entiteiten opslaan

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 met LangChain en Neo4j

Laten we oefenen!

Graph RAG met LangChain en Neo4j

Preparing Video For Download...