Rozwiązywanie konfliktów encji na podstawie grafu
O nie! Nawet z dopracowanym promptem, przykładami few-shot i odrobiną szczęścia, LLM nadal wygenerował halucynację — postać o imieniu Romeo Capulet, której przypisał kilka kwestii w bazie danych.
{
"id": "romeo-capulet",
"name": "Romeo Capulet",
"family": "Montague"
}
Na szczęście możesz wykorzystać relacje w grafie wiedzy, żeby ocenić, czy ten węzeł to prawdopodobnie przypadkowy duplikat węzła o nazwie Romeo Montague.
Instrukcja Cypher similarity_cypher korzysta z relacji MEMBER_OF i INTERACTS_WITH, aby wyliczyć arbitralny wynik podobieństwa na podstawie następujących reguł:
| Warunek | Cypher | Modyfikator punktów |
|---|---|---|
Relacja MEMBER_OF do tej samej rodziny |
af = bf |
+1 |
| Taka sama właściwość name | a.name = b.name |
+2 |
Odsetek postaci, z którymi a i b wchodzą w interakcje |
size(inCommon) / size(aInteractsWith) |
Pomnożony przez odsetek postaci b, z którymi a wchodzi w interakcje |
Z wiedzy dziedzinowej wiesz, że wynik 2 wskazuje na silną korelację.
To ćwiczenie jest częścią kursu
Graph RAG z LangChain i Neo4j
Instrukcje do ćwiczenia
- Odpytaj
graphza pomocą zapytania Cypher (similarity_cypher), aby wyliczyć wyniki podobieństwa między"romeo-capulet"a pozostałymi węzłami postaci. - Wyodrębnij
"bId","bFamily"oraz"score", w tej kolejności, z każdego wierszarowwresults.
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
# 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['____'])