開始使用免費開始

以圖為基礎的實體解析

糟糕!就算有萬無一失的提示詞、few-shot 範例,再加上雙手合十祈禱,LLM 還是幻覺出一個名為 Romeo Capulet 的角色,並在資料庫裡替他安排了幾句台詞。

{
  "id": "romeo-capulet",
  "name": "Romeo Capulet",
  "family": "Montague"
}

幸好,你可以利用知識圖中的關係來判斷,這個節點是否很可能是另一個名為 Romeo Montague 的不小心重複。

similarity_cypher 這段 Cypher 陳述式使用 MEMBER_OFINTERACTS_WITH 關係,建立一個任意的相似度分數,並具有以下特性:

條件 Cypher 分數調整
與相同家族有 MEMBER_OF 關係 af = bf +1
name 屬性相同 a.name = b.name +2
ab 互動的角色百分比 size(inCommon) / size(aInteractsWith) 乘上 ab 互動的百分比

根據你的領域知識,你知道分數達到 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['____'])
編輯並執行程式碼