Résolution d’entités

Graph RAG avec LangChain et Neo4j

Adam Cowley

Manager, Developer Education at Neo4j

Les LLM sont sans état

Appel n°1

Listez les personnages dans le texte suivant :

{text}
Les personnages de ce texte sont :

* Sampson - Un serviteur de la maison Capulet.
* Gregory - Un autre serviteur de la maison Capulet.
* Abram - Un serviteur de la maison Montaigu.
* Balthasar - Un serviteur de la maison Montaigu.

Appel n°2

Listez les personnages dans le texte suivant :

{text}
Les personnages listés dans ce texte sont :

* Sampson - Serviteur Capulet
* Gregory - Serviteur des Capulet
* Abram - Serviteur des Montaigu
* Benvolio - Serviteur des Montaigu
Graph RAG avec LangChain et Neo4j

Suggestions d’entités

examples = graph.query("""
MATCH (c:Character)-[:BELONGS_TO]->(f:Family)
RETURN c.id AS id, c.name AS name, f.name AS belongsToFamily
""")

for character in example:
    print(character)
{"id": "romeo-montague", "name": "Roméo", "family": "Montague"},

{"id": "juliet-capulet", "name": "Juliette", "family": "Capulet"},
{"id": "sampson", "name": "Sampson", "family": "Capulet"},
...
Graph RAG avec LangChain et Neo4j

Suggestions d’entités

SystemMessagePromptTemplate.from_template("""
Extrayez les informations correspondant aux entités suivantes.


Ignorez tout personnage qui n’est pas dans la liste suivante :
{examples}
""",
partial_variables={"examples": [ dict(e) for e in examples ]}
)
Graph RAG avec LangChain et Neo4j

Résolution d’entités basée sur les graphes

résolution_d’entités1.jpg

Graph RAG avec LangChain et Neo4j

Résolution d’entités basée sur les graphes

résolution_d’entités2.jpg

Graph RAG avec LangChain et Neo4j

Résolution d’entités basée sur les graphes

résolution_d’entités3.jpg

Graph RAG avec LangChain et Neo4j

Résolution d’entités basée sur les graphes

résolution_d’entités4.jpg

Graph RAG avec LangChain et Neo4j

Résolution d’entités basée sur les graphes

résolution_d’entités5.jpg

Graph RAG avec LangChain et Neo4j

Identifier des personnes similaires

MATCH path = (c:Character {id: "romeo-capulet"})-[r]-(inCommon:Character),

(inCommon)-[r2]-(other:Character)
RETURN c.id AS id, c.name AS name, other.name AS otherName, other.id AS otherId,
c.name = other.name AS shareName,
EXISTS { (c)-[:BELONGS_TO]->(:Family)<-[:BELONGS_TO]-(other) } AS belongToFamily,
count(*) as nodesInCommon,
collect(path) AS paths
ORDER BY nodesInCommon DESC LIMIT 10
Graph RAG avec LangChain et Neo4j

Utiliser des relations de similarité

un schéma de graphe de nœuds Person avec deux nœuds Person et une relation Similar. Tous ont des relations vers des nœuds Line

MATCH (:Character {id: 'romeo-montague'})-[:SIMILAR_TO*0..1]-(character),
  (character)-[:HAS_LINE]->(line),
  (line)-[:SPOKEN_TO]->(target)
RETURN character, line
Graph RAG avec LangChain et Neo4j

Passons à la pratique !

Graph RAG avec LangChain et Neo4j

Preparing Video For Download...