开始使用免费开始使用

基于图的实体解析

糟了!即使提示词万无一失、加入了 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['____'])
编辑并运行代码