Knowledge Graphs for RAG -- Query Knowledge Graphs (吴恩达-知识图谱在RAG中的应用 1) jupyter + langchain 版

Knowledge Graphs for RAG – Query Knowledge Graphs (吴恩达)

1导包并配置Neo4

from dotenv import load_dotenv
import os

from langchain_community.graphs import Neo4jGraph

# Warning control
import warnings
warnings.filterwarnings("ignore")
load_dotenv('.env', override=True)
NEO4J_URI = os.getenv('NEO4J_URI')#Neo4j的链接字符串,指明Neoc4j 运行于哪个端口
NEO4J_USERNAME = os.getenv('NEO4J_USERNAME')#用户名
NEO4J_PASSWORD = os.getenv('NEO4J_PASSWORD')#密码
NEO4J_DATABASE = os.getenv('NEO4J_DATABASE')#在DBMS中要使用的数据库名

1.1 使用LangChain的Neo4j初始化一个知识图谱实例

kg = Neo4jGraph(
    url=NEO4J_URI, username=NEO4J_USERNAME, password=NEO4J_PASSWORD, database=NEO4J_DATABASE
)

1.2 查询电影知识图谱

1.2.1 简单实例:人和电影的关系

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

1.2.2 匹配图形中的所有节点

# 查询图谱中的总节点数
cypher = """
  MATCH (n) 
  RETURN count(n)
  """
result = kg.query(cypher)
result

在这里插入图片描述
给 count(n) 新的命名使其显示更优雅

cypher = """
  MATCH (n) 
  RETURN count(n) AS numberOfNodes
  """

在这里插入图片描述

1.2.3 通过指定节点标签仅匹配电影节点

cypher = """
  MATCH (n:Movie) 
  RETURN count(n) AS numberOfMovies
  """
kg.query(cypher)

在这里插入图片描述
换个节点模式匹配中变量名增加可读性(movie 首字母是m,所以我们可以把n变量换成m)
在这里插入图片描述

1.2.4 通过在“person”节点上指定name属性的值来匹配单个个人

cypher = """
  MATCH (tom:Person {name:"Tom Hanks"}) 
  RETURN tom
  """
kg.query(cypher)

在这里插入图片描述
通过指定title属性的值来匹配单个Movie

cypher = """
  MATCH (cloudAtlas:Movie {title:"Cloud Atlas"}) 
  RETURN cloudAtlas
  """
kg.query(cypher)

在这里插入图片描述
如果不想返回整个cloudAtlas节点,而是只想要发行日(released):

cypher = """
  MATCH (cloudAtlas:Movie {title:"Cloud Atlas"}) 
  RETURN cloudAtlas.released
  """
kg.query(cypher)

在这里插入图片描述
想要多个属性值时:

cypher = """
  MATCH (cloudAtlas:Movie {title:"Cloud Atlas"}) 
  RETURN cloudAtlas.released, cloudAtlas.tagline
  """
kg.query(cypher)

在这里插入图片描述

1.2.5 具有条件匹配的Cypher模式

cypher = """
  MATCH (nineties:Movie) 
  WHERE nineties.released >= 1990 
    AND nineties.released < 2000 
  RETURN nineties.title
  """

在这里插入图片描述

1.3 多节点+关系的模式匹配

cypher = """
  MATCH (actor:Person)-[:ACTED_IN]->(movie:Movie) 
  RETURN actor.name, movie.title LIMIT 10
  """
kg.query(cypher)

在这里插入图片描述
只查询某个名字的演员参演的电影及演员全名

cypher = """
  MATCH (tom:Person {name: "Tom Hanks"})-[:ACTED_IN]->(tomHanksMovies:Movie) 
  RETURN tom.name,tomHanksMovies.title
  """
kg.query(cypher)

在这里插入图片描述
查询与演员 ‘Tom Hanks’ 共同出演电影的演员名字及电影名字

# 两个node 变量: m 和 coActors, 先由Tom Hanks 查出m, 然后查出m 中的其他演员 coActors
cypher = """
  MATCH (tom:Person {name:"Tom Hanks"})-[:ACTED_IN]->(m)<-[:ACTED_IN]-(coActors) 
  RETURN coActors.name, m.title
  """
kg.query(cypher)

在这里插入图片描述

1.4 删除数据

# 查询Emil Eifrem 演过的电影及Emil Eifrem名字
cypher = """
MATCH (emil:Person {name:"Emil Eifrem"})-[actedIn:ACTED_IN]->(movie:Movie)
RETURN emil.name, movie.title
"""
kg.query(cypher)
# 删除 '演出' 关系
cypher = """
MATCH (emil:Person {name:"Emil Eifrem"})-[actedIn:ACTED_IN]->(movie:Movie)
DELETE actedIn
"""
kg.query(cypher)

1.5 添加数据

# 创建(CREATE) Person节点(andreas)
cypher = """
CREATE (andreas:Person {name:"Andreas"})
RETURN andreas
"""

kg.query(cypher)
#先查询出andreas 和emil ,然后创建(MERGE )同事关系
cypher = """
MATCH (andreas:Person {name:"Andreas"}), (emil:Person {name:"Emil Eifrem"})
MERGE (andreas)-[hasRelationship:WORKS_WITH]->(emil)
RETURN andreas, hasRelationship, emil
"""
kg.query(cypher)

在这里插入图片描述

  • 14
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值