以圖為基礎的實體解析
糟糕!就算有萬無一失的提示詞、few-shot 範例,再加上雙手合十祈禱,LLM 還是幻覺出一個名為 Romeo Capulet 的角色,並在資料庫裡替他安排了幾句台詞。
{
"id": "romeo-capulet",
"name": "Romeo Capulet",
"family": "Montague"
}
幸好,你可以利用知識圖中的關係來判斷,這個節點是否很可能是另一個名為 Romeo Montague 的不小心重複。
similarity_cypher 這段 Cypher 陳述式使用 MEMBER_OF 和 INTERACTS_WITH 關係,建立一個任意的相似度分數,並具有以下特性:
| 條件 | Cypher | 分數調整 |
|---|---|---|
與相同家族有 MEMBER_OF 關係 |
af = bf |
+1 |
name 屬性相同 |
a.name = b.name |
+2 |
a 與 b 互動的角色百分比 |
size(inCommon) / size(aInteractsWith) |
乘上 a 與 b 互動的百分比 |
根據你的領域知識,你知道分數達到 2 代表高度相關。
本練習屬於課程
使用 LangChain 與 Neo4j 的 Graph RAG
練習說明
- 使用 Cypher 查詢(
similarity_cypher)查詢graph,計算"romeo-capulet"與其他角色節點之間的相似度分數。 - 從
results中每個row依序擷取"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['____'])