Resolução de entidades

Graph RAG com LangChain e Neo4j

Adam Cowley

Manager, Developer Education at Neo4j

LLMs são sem estado

Chamada #1

Liste os personagens no texto a seguir:

{text}
Os personagens deste texto são:

* Sampson - Um servo da casa Capuleto.
* Gregory - Outro servo da casa Capuleto.
* Abram - Um servo da casa Mon­tequio.
* Balthasar - Um servo da casa Mon­tequio.

Chamada #2

Liste os personagens no texto a seguir:

{text}
Os personagens listados neste texto são:

* Sampson - Servo Capuleto
* Gregory - Servo dos Capuletos
* Abram - Servo dos Mon­tequios
* Benvolio - Servo dos Mon­tequios
Graph RAG com LangChain e Neo4j

Sugestões de entidades

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": "Montague"},

{"id": "juliet-capulet", "name": "Julieta", "family": "Capuleto"},
{"id": "sampson", "name": "Sampson", "family": "Capuleto"},
...
Graph RAG com LangChain e Neo4j

Sugestões de entidades

SystemMessagePromptTemplate.from_template("""
Extraia as informações que correspondem às entidades a seguir.


Ignore quaisquer personagens que não estejam na lista a seguir:
{examples}
""",
partial_variables={"examples": [ dict(e) for e in examples ]}
)
Graph RAG com LangChain e Neo4j

Resolução de entidades baseada em grafo

resolução_de_entidades1.jpg

Graph RAG com LangChain e Neo4j

Resolução de entidades baseada em grafo

resolução_de_entidades2.jpg

Graph RAG com LangChain e Neo4j

Resolução de entidades baseada em grafo

resolução_de_entidades3.jpg

Graph RAG com LangChain e Neo4j

Resolução de entidades baseada em grafo

resolução_de_entidades4.jpg

Graph RAG com LangChain e Neo4j

Resolução de entidades baseada em grafo

resolução_de_entidades5.jpg

Graph RAG com LangChain e Neo4j

Identificando pessoas semelhantes

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

Usando relacionamentos de similaridade

um diagrama de grafo com nós de pessoa, dois nós de pessoa e um relacionamento de similaridade. Ambos têm relacionamentos com nós Line

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

Vamos praticar!

Graph RAG com LangChain e Neo4j

Preparing Video For Download...