Risoluzione di entità basata su grafo
Oh no! Anche con un prompt a prova di bomba, esempi few-shot e le dita incrociate, l'LLM ha comunque allucinato un personaggio chiamato Romeo Capulet e gli ha assegnato alcune battute nel database.
{
"id": "romeo-capulet",
"name": "Romeo Capulet",
"family": "Montague"
}
Per fortuna, puoi usare le relazioni nel knowledge graph per decidere se questo nodo è probabilmente un duplicato accidentale di un altro chiamato Romeo Montague.
L'istruzione Cypher similarity_cypher usa le relazioni MEMBER_OF e INTERACTS_WITH per costruire un punteggio di similarità arbitrario con le seguenti proprietà:
| Condizione | Cypher | Modificatore punti |
|---|---|---|
Una relazione MEMBER_OF verso la stessa famiglia |
af = bf |
+1 |
| La stessa proprietà name | a.name = b.name |
+2 |
Percentuale di personaggi con cui a e b interagiscono |
size(inCommon) / size(aInteractsWith) |
Moltiplicata per la percentuale di b con cui a interagisce |
In base alla tua conoscenza del dominio, sai che un punteggio di 2 indica una forte correlazione.
Questo esercizio fa parte del corso
Graph RAG con LangChain e Neo4j
Istruzioni dell'esercizio
- Interroga
graphcon la query Cypher (similarity_cypher) per calcolare i punteggi di similarità tra"romeo-capulet"e gli altri nodi dei personaggi. - Estrai
"bId","bFamily"e"score", in quest'ordine, da ognirowinresults.
esercizio interattivo pratico
Prova questo esercizio completando questo codice di esempio.
# 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['____'])