Advertisement

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")
    
    
    python
    
    
复制代码
    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中要使用的数据库名
    
    
    python
    
    

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

复制代码
    kg = Neo4jGraph(
    url=NEO4J_URI, username=NEO4J_USERNAME, password=NEO4J_PASSWORD, database=NEO4J_DATABASE
    )
    
    
    python
    
    

1.2 查询电影知识图谱

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

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

1.2.2 匹配图形中的所有节点

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

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

复制代码
    cypher = """
      MATCH (n) 
      RETURN count(n) AS numberOfNodes
      """
    
    
    sql
在这里插入图片描述

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

复制代码
    cypher = """
      MATCH (n:Movie) 
      RETURN count(n) AS numberOfMovies
      """
    kg.query(cypher)
    
    
    sql

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

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

复制代码
    cypher = """
      MATCH (tom:Person {name:"Tom Hanks"}) 
      RETURN tom
      """
    kg.query(cypher)
    
    
    sql

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

复制代码
    cypher = """
      MATCH (cloudAtlas:Movie {title:"Cloud Atlas"}) 
      RETURN cloudAtlas
      """
    kg.query(cypher)
    
    
    sql

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

复制代码
    cypher = """
      MATCH (cloudAtlas:Movie {title:"Cloud Atlas"}) 
      RETURN cloudAtlas.released
      """
    kg.query(cypher)
    
    
    sql

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

复制代码
    cypher = """
      MATCH (cloudAtlas:Movie {title:"Cloud Atlas"}) 
      RETURN cloudAtlas.released, cloudAtlas.tagline
      """
    kg.query(cypher)
    
    
    sql
在这里插入图片描述

1.2.5 具有条件匹配的Cypher模式

复制代码
    cypher = """
      MATCH (nineties:Movie) 
      WHERE nineties.released >= 1990 
    AND nineties.released < 2000 
      RETURN nineties.title
      """
    
    
    
    sql
在这里插入图片描述

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

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

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

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

在这里插入图片描述
查询与演员 ‘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)
    
    
    sql
在这里插入图片描述

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)
    
    
    sql
复制代码
    # 删除 '演出' 关系
    cypher = """
    MATCH (emil:Person {name:"Emil Eifrem"})-[actedIn:ACTED_IN]->(movie:Movie)
    DELETE actedIn
    """
    kg.query(cypher)
    
    
    sql

1.5 添加数据

复制代码
    # 创建(CREATE) Person节点(andreas)
    cypher = """
    CREATE (andreas:Person {name:"Andreas"})
    RETURN andreas
    """
    
    kg.query(cypher)
    
    
    sql
复制代码
    #先查询出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)
    
    
    sql
在这里插入图片描述

全部评论 (0)

还没有任何评论哟~