Risoluzione delle entità

Graph RAG con LangChain e Neo4j

Adam Cowley

Manager, Developer Education at Neo4j

Gli LLM sono senza stato

Chiamata n. 1

Elenca i personaggi nel seguente testo:

{text}
I personaggi in questo testo sono:

* Sampson - Un servo della casa Capuleti.
* Gregory - Un altro servo della casa Capuleti.
* Abram - Un servo della casa Montecchi.
* Balthasar - Un servo della casa Montecchi.

Chiamata n. 2

Elenca i personaggi nel seguente testo:

{text}
I personaggi elencati in questo testo sono:

* Sampson - Servo dei Capuleti
* Gregory - Servo dei Capuleti
* Abram - Servo dei Montecchi
* Benvolio - Servo dei Montecchi
Graph RAG con LangChain e Neo4j

Suggerimenti di entità

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": "Romeo", "family": "Montecchi"},

{"id": "juliet-capulet", "name": "Giulietta", "family": "Capuleti"},
{"id": "sampson", "name": "Sampson", "family": "Capuleti"},
...
Graph RAG con LangChain e Neo4j

Suggerimenti di entità

SystemMessagePromptTemplate.from_template("""
Estrai le informazioni corrispondenti alle seguenti entità.


Ignora qualsiasi personaggio non incluso nel seguente elenco:
{examples}
""",
partial_variables={"examples": [ dict(e) for e in examples ]}
)
Graph RAG con LangChain e Neo4j

Risoluzione di entità basata su grafi

risoluzione_entita1.jpg

Graph RAG con LangChain e Neo4j

Risoluzione di entità basata su grafi

risoluzione_entita2.jpg

Graph RAG con LangChain e Neo4j

Risoluzione di entità basata su grafi

risoluzione_entita3.jpg

Graph RAG con LangChain e Neo4j

Risoluzione di entità basata su grafi

risoluzione_entita4.jpg

Graph RAG con LangChain e Neo4j

Risoluzione di entità basata su grafi

risoluzione_entita5.jpg

Graph RAG con LangChain e Neo4j

Identificare persone simili

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

Usare relazioni di similarità

un diagramma a grafo di nodi Persona con due nodi Persona e una relazione di similarità. Entrambi hanno relazioni con nodi Linea

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

Passiamo alla pratica!

Graph RAG con LangChain e Neo4j

Preparing Video For Download...