Domänengraphen

Graph RAG mit LangChain und Neo4j

Adam Cowley

Manager, Developer Education at Neo4j

Domänengraphen

Ein Wissensgraph: links ein lexikalischer Graph mit Buch, Kapiteln und Seiten; rechts die Personen und Firmen im Buch sowie Verweise aus anderen Quellen wie Wikipedia

Graph RAG mit LangChain und Neo4j

Lexikalische zu Domänengraphen

Die Liedzeilen von Don't Stop Believin' von Journey

Graph RAG mit LangChain und Neo4j

Lexikalische zu Domänengraphen

Die Liedzeilen von Don't Stop Believin' von Journey, mit „Small Town Boy“ als Person hervorgehoben

Graph RAG mit LangChain und Neo4j

Lexikalische zu Domänengraphen

Die Liedzeilen von Don't Stop Believin' von Journey, mit „South Detroit“ als Ort hervorgehoben

Graph RAG mit LangChain und Neo4j

Lexikalische zu Domänengraphen

Die Liedzeilen von Don't Stop Believin' von Journey, mit „Born“ als Beziehung zwischen den Knoten „Small Town Boy“ (Person) und „South Detroit“ (Ort) hervorgehoben

Graph RAG mit LangChain und Neo4j

Lexikalische zu Domänengraphen

Die Liedzeilen von Don't Stop Believin' von Journey, mit „Raised“ als Beziehung zwischen den Knoten „Small Town Boy“ (Person) und „South Detroit“ (Ort) hervorgehoben

Graph RAG mit LangChain und Neo4j

Beispiel: Domänengraph

Ein Beispiel für ein Domänengraph-Modell: eine Person arbeitet bei einer Firma an einer Adresse. Die Person besitzt eine Kreditkarte, mit der eine Bestellung bei einer Firma am selben Ort aufgegeben wird

Graph RAG mit LangChain und Neo4j

Strukturierte 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 mit LangChain und Neo4j

Strukturierte Outputs verwenden

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 mit LangChain und Neo4j

Entitäten speichern

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 mit LangChain und Neo4j

Lass uns üben!

Graph RAG mit LangChain und Neo4j

Preparing Video For Download...