Graphes de domaine

Graph RAG avec LangChain et Neo4j

Adam Cowley

Manager, Developer Education at Neo4j

Graphes de domaine

Diagramme 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 dont Wikipédia

Graph RAG avec LangChain et Neo4j

Des graphes lexicaux aux graphes de domaine

Paroles de Don't Stop Believin' de Journey

Graph RAG avec LangChain et Neo4j

Des graphes lexicaux aux graphes de domaine

Paroles de Don't Stop Believin' de Journey avec « Small Town Boy » mis en évidence comme personne

Graph RAG avec LangChain et Neo4j

Des graphes lexicaux aux graphes de domaine

Paroles de Don't Stop Believin' de Journey avec « South Detroit » mis en évidence comme lieu

Graph RAG avec LangChain et Neo4j

Des graphes lexicaux aux graphes de domaine

Paroles de Don't Stop Believin' de Journey avec « Born » mis en évidence comme relation entre les nœuds pour la personne « Small Town Boy » et le lieu « South Detroit »

Graph RAG avec LangChain et Neo4j

Des graphes lexicaux aux graphes de domaine

Paroles de Don't Stop Believin' de Journey avec « Raised » mis en évidence comme relation entre les nœuds pour la personne « Small Town Boy » et le lieu « South Detroit »

Graph RAG avec LangChain et Neo4j

Exemple de graphe de domaine

Exemple de graphe de domaine : une personne travaille dans une entreprise située à une adresse. La personne détient une carte bancaire, 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...