Graphes de domaine

Graph RAG avec LangChain et Neo4j

Adam Cowley

Manager, Developer Education at Neo4j

Graphes de domaine

Un schéma de graphe de connaissances montrant à gauche le graphe lexical (livre, chapitres, pages) et à droite les personnes et entreprises du livre, avec des références d'autres sources comme Wikipedia

Graph RAG avec LangChain et Neo4j

Des graphes lexicaux aux graphes de domaine

Les paroles de « Don't Stop Believin' » de Journey

Graph RAG avec LangChain et Neo4j

Des graphes lexicaux aux graphes de domaine

Les paroles de « Don't Stop Believin' » de Journey avec « Small Town Boy » surligné comme personne

Graph RAG avec LangChain et Neo4j

Des graphes lexicaux aux graphes de domaine

Les paroles de « Don't Stop Believin' » de Journey avec « South Detroit » surligné comme lieu

Graph RAG avec LangChain et Neo4j

Des graphes lexicaux aux graphes de domaine

Les paroles de « Don't Stop Believin' » de Journey avec « Born » surligné comme relation entre les nœuds « Small Town Boy » (personne) et « South Detroit » (lieu)

Graph RAG avec LangChain et Neo4j

Des graphes lexicaux aux graphes de domaine

Les paroles de « Don't Stop Believin' » de Journey avec « Raised » surligné comme relation entre les nœuds « Small Town Boy » (personne) et « South Detroit » (lieu)

Graph RAG avec LangChain et Neo4j

Exemple de graphe de domaine

Exemple de graphe de domaine : une personne travaille pour une entreprise située à une adresse. Cette personne détient une carte de crédit, utilisée pour une commande passée auprès d'une entreprise au même endroit

Graph RAG avec LangChain et Neo4j

Sorties structurées

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 avec LangChain et Neo4j

Utiliser des sorties structurées

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 avec LangChain et Neo4j

Enregistrer des entités

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 avec LangChain et Neo4j

Passons à la pratique !

Graph RAG avec LangChain et Neo4j

Preparing Video For Download...