Зіставлення сутностей

Graph RAG з LangChain і Neo4j

Adam Cowley

Manager, Developer Education at Neo4j

LLM не зберігають стан

Виклик №1

Перелічіть персонажів у такому тексті:

{text}
Персонажі в цьому тексті:

* Sampson — слуга дому Капулетті.
* Gregory — інший слуга дому Капулетті.
* Abram — слуга дому Монтеккі.
* Balthasar — слуга дому Монтеккі.

Виклик №2

Перелічіть персонажів у такому тексті:

{text}
Персонажі, згадані в цьому тексті:

* Sampson — слуга Капулетті
* Gregory — слуга Капулетті
* Abram — слуга Монтеккі
* Benvolio — слуга Монтеккі
Graph RAG з LangChain і Neo4j

Підказки щодо сутностей

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": "Juliet", "family": "Capulet"},
{"id": "sampson", "name": "Sampson", "family": "Capulet"},
...
Graph RAG з LangChain і Neo4j

Підказки щодо сутностей

SystemMessagePromptTemplate.from_template("""
Витягніть інформацію, що відповідає наведеним сутностям.


Ігноруйте персонажів, яких немає в такому списку:
{examples}
""",
partial_variables={"examples": [ dict(e) for e in examples ]}
)
Graph RAG з LangChain і Neo4j

Графове зіставлення сутностей

розв'язання сутностей 1

Graph RAG з LangChain і Neo4j

Графове зіставлення сутностей

розв'язання сутностей 2

Graph RAG з LangChain і Neo4j

Графове зіставлення сутностей

розв'язання сутностей 3

Graph RAG з LangChain і Neo4j

Графове зіставлення сутностей

розв'язання сутностей 4

Graph RAG з LangChain і Neo4j

Графове зіставлення сутностей

розв'язання сутностей 5

Graph RAG з LangChain і Neo4j

Визначення подібних персонажів

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 з LangChain і Neo4j

Використання зв'язків подібності

схема графа з вузлами «person»: два вузли person і зв'язок similar; обидва мають зв'язки до вузлів Line

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

Давайте потренуємось!

Graph RAG з LangChain і Neo4j

Preparing Video For Download...