Domängrafar

Graph RAG med LangChain och Neo4j

Adam Cowley

Manager, Developer Education at Neo4j

Domängrafar

ett kunskapsgrafsdiagram som visar det lexikala grafen till vänster med en bok, kapitel och sidor, och till höger personer och företag i boken tillsammans med referenser från andra källor, inklusive Wikipedia

Graph RAG med LangChain och Neo4j

Från lexikala grafar till domängrafar

Texten till Don't Stop Believing av Journey

Graph RAG med LangChain och Neo4j

Från lexikala grafar till domängrafar

Texten till Don't Stop Believing av Journey med "Small Town Boy" markerat som en person

Graph RAG med LangChain och Neo4j

Från lexikala grafar till domängrafar

Texten till Don't Stop Believing av Journey med "South Detroit" markerat som en plats

Graph RAG med LangChain och Neo4j

Från lexikala grafar till domängrafar

Texten till Don't Stop Believing av Journey med "Born" markerat som en relation mellan noden för personen "Small Town Boy" och noden för platsen "South Detroit"

Graph RAG med LangChain och Neo4j

Från lexikala grafar till domängrafar

Texten till Don't Stop Believing av Journey med "Raised" markerat som en relation mellan noden för personen "Small Town Boy" och noden för platsen "South Detroit"

Graph RAG med LangChain och Neo4j

Ett exempel på en domängraf

Ett exempel på en domängraf med en person som arbetar på ett företag, beläget på en adress. Personen innehar ett kreditkort kopplat till en order placerad hos ett företag på samma plats

Graph RAG med LangChain och Neo4j

Strukturerade utdata

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 med LangChain och Neo4j

Använda strukturerade utdata

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 med LangChain och Neo4j

Spara entiteter

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 med LangChain och Neo4j

Nu kör vi en övning!

Graph RAG med LangChain och Neo4j

Preparing Video For Download...