Resolução de entidades baseada em grafo
Ah, não! Mesmo com um prompt à prova de falhas, exemplos few-shot e dedos cruzados, o LLM ainda alucinou um personagem chamado Romeo Capulet e atribuiu a ele algumas falas no banco de dados.
{
"id": "romeo-capulet",
"name": "Romeo Capulet",
"family": "Montague"
}
Por sorte, você pode usar os relacionamentos no grafo de conhecimento para decidir se esse nó provavelmente é um duplicado acidental de outro chamado Romeo Montague.
A instrução Cypher similarity_cypher usa os relacionamentos MEMBER_OF e INTERACTS_WITH para construir uma pontuação de similaridade arbitrária com as seguintes propriedades:
| Condição | Cypher | Modificador de pontos |
|---|---|---|
Um relacionamento MEMBER_OF com a mesma família |
af = bf |
+1 |
| A mesma propriedade de nome | a.name = b.name |
+2 |
Porcentagem de personagens com os quais a e b interagem |
size(inCommon) / size(aInteractsWith) |
Multiplicado pela porcentagem de b com quem a interage |
Pelo seu conhecimento do domínio, você sabe que uma pontuação de 2 indica uma forte correlação.
Este exercicio faz parte do curso
Graph RAG com LangChain e Neo4j
Instruções do exercicio
- Consulte
graphcom a consulta Cypher (similarity_cypher) para calcular as pontuações de similaridade entre"romeo-capulet"e os outros nós de personagens. - Extraia
"bId","bFamily"e"score", nessa ordem, de cadarowemresults.
exercicio interativo prático
Tente este exercicio completando este código de exemplo.
# 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['____'])