Grafy dziedzinowe

Graph RAG z LangChain i Neo4j

Adam Cowley

Manager, Developer Education at Neo4j

Grafy dziedzinowe

diagram grafu wiedzy przedstawiający po lewej stronie graf leksykalny z książką, rozdziałami i stronami, a po prawej osoby i firmy z tej książki oraz odniesienia z innych źródeł, w tym z Wikipedii

Graph RAG z LangChain i Neo4j

Od grafów leksykalnych do dziedzinowych

Tekst piosenki „Don't Stop Believing" zespołu Journey

Graph RAG z LangChain i Neo4j

Od grafów leksykalnych do dziedzinowych

Tekst piosenki „Don't Stop Believing" zespołu Journey z wyróżnionym „Small Town Boy" jako osobą

Graph RAG z LangChain i Neo4j

Od grafów leksykalnych do dziedzinowych

Tekst piosenki „Don't Stop Believing" zespołu Journey z wyróżnionym „South Detroit" jako miejscem

Graph RAG z LangChain i Neo4j

Od grafów leksykalnych do dziedzinowych

Tekst piosenki „Don't Stop Believing" zespołu Journey z wyróżnionym „Born" jako relacją między węzłem osoby „Small Town Boy" a węzłem miejsca „South Detroit"

Graph RAG z LangChain i Neo4j

Od grafów leksykalnych do dziedzinowych

Tekst piosenki „Don't Stop Believing" zespołu Journey z wyróżnionym „Raised" jako relacją między węzłem osoby „Small Town Boy" a węzłem miejsca „South Detroit"

Graph RAG z LangChain i Neo4j

Przykładowy graf dziedzinowy

Przykładowy graf dziedzinowy: osoba pracuje w firmie znajdującej się pod określonym adresem, posiada kartę kredytową powiązaną ze złożonym zamówieniem w firmie w tej samej lokalizacji

Graph RAG z LangChain i Neo4j

Ustrukturyzowane odpowiedzi

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 z LangChain i Neo4j

Korzystanie z ustrukturyzowanych odpowiedzi

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 z LangChain i Neo4j

Zapisywanie encji

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 z LangChain i Neo4j

Czas na praktykę!

Graph RAG z LangChain i Neo4j

Preparing Video For Download...