Grafos de dominio

Graph RAG con LangChain y Neo4j

Adam Cowley

Manager, Developer Education at Neo4j

Grafos de dominio

Diagrama de grafo de conocimiento con el grafo léxico a la izquierda (libro, capítulos y páginas) y a la derecha las personas y empresas del libro, junto con referencias de otras fuentes como Wikipedia

Graph RAG con LangChain y Neo4j

De grafos léxicos a grafos de dominio

La letra de Don't Stop Believin' de Journey

Graph RAG con LangChain y Neo4j

De grafos léxicos a grafos de dominio

La letra de Don't Stop Believin' de Journey con «Small Town Boy» resaltado como persona

Graph RAG con LangChain y Neo4j

De grafos léxicos a grafos de dominio

La letra de Don't Stop Believin' de Journey con «South Detroit» resaltado como ubicación

Graph RAG con LangChain y Neo4j

De grafos léxicos a grafos de dominio

La letra de Don't Stop Believin' de Journey con «Born» resaltado como relación entre los nodos de la persona «Small Town Boy» y la ubicación «South Detroit»

Graph RAG con LangChain y Neo4j

De grafos léxicos a grafos de dominio

La letra de Don't Stop Believin' de Journey con «Raised» resaltado como relación entre los nodos de la persona «Small Town Boy» y la ubicación «South Detroit»

Graph RAG con LangChain y Neo4j

Ejemplo de grafo de dominio

Ejemplo de grafo de dominio: una persona que trabaja en una empresa, ubicada en una dirección. La persona tiene una tarjeta de crédito con un pedido hecho en una empresa en la misma ubicación

Graph RAG con LangChain y Neo4j

Salidas estructuradas

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 con LangChain y Neo4j

Usar salidas estructuradas

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 con LangChain y Neo4j

Guardar entidades

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 con LangChain y Neo4j

¡Vamos a practicar!

Graph RAG con LangChain y Neo4j

Preparing Video For Download...