Розв'язання сутностей на основі графа
О ні! Попри бездоганний промпт, приклади few-shot і наші схрещені пальці, LLM усе ж «галюцинував» персонажа на ім'я Romeo Capulet і додав йому кілька реплік у базі даних.
{
"id": "romeo-capulet",
"name": "Romeo Capulet",
"family": "Montague"
}
На щастя, ви можете використати зв'язки у графі знань, щоб визначити, чи не є цей вузол випадковим дублем іншого з іменем Romeo Montague.
Оператор Cypher similarity_cypher використовує зв'язки MEMBER_OF і INTERACTS_WITH, щоб побудувати довільний показник схожості з такими властивостями:
| Умова | Cypher | Модифікатор балів |
|---|---|---|
Зв'язок MEMBER_OF з тією самою родиною |
af = bf |
+1 |
| Така сама властивість name | a.name = b.name |
+2 |
Відсоток персонажів, з якими взаємодіють a та b |
size(inCommon) / size(aInteractsWith) |
Помножено на відсоток b, з яким взаємодіє a |
З вашого предметного досвіду ви знаєте, що бал 2 означає сильну кореляцію.
Ця вправа є частиною курсу
Graph RAG з LangChain і Neo4j
Інструкції до вправи
- Виконайте запит до
graphза допомогою Cypher-запиту (similarity_cypher), щоб обчислити показники схожості між"romeo-capulet"та іншими вузлами персонажів. - З кожного
rowуresultsдістаньте"bId","bFamily"і"score"— у такому порядку.
Інтерактивна практична вправа
Спробуйте виконати цю вправу, доповнивши цей зразок коду.
# Query the graph with similarity_cypher
result = ____
# Extract and print the results
for row in result:
print(row['____'], 'from', row['____'], 'has similarity score of ', row['____'])