Giải quyết thực thể dựa trên đồ thị
Ôi không! Dù đã có prompt "chống đạn", ví dụ few-shot và cầu cho may mắn, LLM vẫn bịa ra một nhân vật tên Romeo Capulet và còn gán cho anh ta vài dòng trong cơ sở dữ liệu.
{
"id": "romeo-capulet",
"name": "Romeo Capulet",
"family": "Montague"
}
May mắn là bạn có thể dùng các quan hệ trong knowledge graph để quyết định liệu nút này có khả năng là bản trùng lặp do nhầm lẫn của một nút khác tên Romeo Montague hay không.
Câu lệnh Cypher similarity_cypher sử dụng các quan hệ MEMBER_OF và INTERACTS_WITH để xây dựng một điểm tương đồng tùy ý với các thuộc tính sau:
| Điều kiện | Cypher | Hệ số điểm |
|---|---|---|
Có quan hệ MEMBER_OF tới cùng một gia tộc |
af = bf |
+1 |
| Cùng giá trị thuộc tính name | a.name = b.name |
+2 |
Tỷ lệ phần trăm các nhân vật mà a và b cùng tương tác |
size(inCommon) / size(aInteractsWith) |
Nhân với tỷ lệ phần trăm các nhân vật của b mà a tương tác |
Từ hiểu biết miền của bạn, bạn biết rằng điểm 2 cho thấy mức tương quan mạnh.
Bài tập này là một phần của khóa học
Graph RAG với LangChain và Neo4j
Hướng dẫn bài tập
- Truy vấn
graphvới câu truy vấn Cypher (similarity_cypher) để tính điểm tương đồng giữa"romeo-capulet"và các nút nhân vật khác. - Trích xuất
"bId","bFamily", và"score", theo đúng thứ tự đó, từ mỗirowtrongresults.
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
# 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['____'])