技术动态 | LangChain已经添加了Cypher Search

转载公众号 | RowanFYI


通过使用LangChain库,您可以方便地生成Cypher查询,从而高效地从Neo4j中检索信息。

如果您已经开发或计划实施任何使用大型语言模型的解决方案,您很可能听说过LangChain库。LangChain库是最广为人知的Python库,用于开发使用LLM的应用程序,具备各种功能。它被设计为模块化,允许我们在可用的模块中使用任何LLM,例如链式结构、工具、内存或代理。

一个月前,我花了一周的时间研究和实施了一个解决方案,使任何人都可以直接从LangChain库中检索Neo4j的信息,并在他们的LLM应用程序中使用它。我对LangChain库的内部有了很多了解,并在博客文章中记录了我的经验。

我的一位同事给我看了一个LangChain的功能请求,用户要求将我从Neo4j数据库中检索信息的工作作为一个模块直接添加到LangChain库中,这样就不需要额外的代码或外部模块来集成Neo4j到LangChain应用程序中。由于我已经熟悉LangChain的内部结构,我决定尝试自己实现Cypher搜索功能。我花了一个周末进行研究和编码解决方案,并确保它符合贡献标准,以便将其添加到库中。幸运的是,LangChain的维护者非常积极和开放,Cypher搜索已经在最新版本的LangChain库中添加了。感谢非常感谢您维护这个出色的图书馆,并且对新想法非常积极响应。

在这篇博客文章中,我将向您展示如何使用LangChain库中新增的Cypher搜索功能从Neo4j数据库中检索信息。

什么是知识图谱

LangChain已经与Vector和SQL数据库进行了集成,那么为什么我们还需要与Neo4j这样的图数据库进行集成呢?

d7ed48ba84b61dd64e0f9081dfa29d07.png

知识图谱非常适合存储异构且高度连接的数据。例如,上面的图像包含有关人物、组织、电影、网站等的信息。虽然直观地建模和存储各种数据集的能力令人难以置信,但我认为使用图形的主要好处是能够通过它们之间的关系分析数据点。图形使我们能够发现传统数据库和分析方法往往忽视的个别数据点周围的上下文中的连接和相关性。

图数据库的威力在处理复杂系统时真正展现出来,其中相互依赖和交互对于理解系统至关重要。

它们使我们能够超越个别数据点,深入探索定义其背景的复杂关系。这提供了对数据的更深入、更全面的视角,促进了更好的决策和知识发现。

搭建Neo4j环境

如果您已经有一个现有的Neo4j数据库,您可以使用它来尝试新添加的Cypher搜索功能。Cypher搜索模块利用图模式信息生成Cypher语句,这意味着您可以将其插入到任何Neo4j数据库中。

如果您还没有任何Neo4j数据库,您可以使用Neo4j Sandbox,它提供了一个免费的Neo4j数据库的云实例。您需要注册并实例化任何可用的预填充数据库。在本博客文章中,我将使用ICIJ Paradise Papers数据集,但您也可以使用其他任何数据集。该数据集是由国际调查记者合作组织作为其离岸泄漏数据库的一部分提供的。

6ff05332adf63b6f5e74f8894d05abf8.png

图中包含四种类型的节点:

  • **Entity** - 离岸法律实体。这可以是在低税收管辖区创建的公司、信托、基金会或其他法律实体。

  • **Officer** - 一个在离岸实体中扮演角色的个人或公司,例如受益人、董事或股东。图表中显示的关系只是现有关系的一部分样本。

  • **Intermediary** - 一个为寻求离岸公司和离岸服务提供商之间牵线搭桥的中间人 — 通常是律师事务所或中介机构,他们会要求离岸服务提供商创建一个离岸公司。

  • **Address** - ICIJ所获得的原始数据库中显示的注册地址。

知识图谱Cypher搜索

Cypher Search这个名字来源于Cypher,它是一种用于与Neo4j等图数据库进行交互的查询语言。

dac85f8a59159acf75ab3a3cc5e3dc16.png

知识图谱Cypher链工作流程

为了让LangChain能够从图数据库中检索信息,我实现了一个模块,可以将自然语言转换为Cypher语句,用它来从Neo4j中检索数据,并以自然语言形式将检索到的信息返回给用户。这种自然语言和数据库语言之间的双向转换过程不仅增强了数据检索的整体可访问性,还极大地提升了用户体验。

LangChain库的美妙之处在于其简洁性。我们只需要几行代码,就能够使用自然语言从Neo4j中获取信息。

from langchain.chat_models import ChatOpenAI
from langchain.chains import GraphCypherQAChain
from langchain.graphs import Neo4jGraph
graph = Neo4jGraph(
    url="bolt://54.172.172.36:7687",
    username="neo4j",
    password="steel-foreheads-examples")
chain = GraphCypherQAChain.from_llm(
    ChatOpenAI(temperature=0), 
    graph=graph, verbose=True,)

在这里,我们使用OpenAI的gpt-3.5-turbo模型来生成Cypher语句。这些Cypher语句是基于图模式生成的,这意味着理论上你可以将Cypher链插入任何Neo4j实例中,它应该能够回答自然语言问题。不幸的是,我还没有测试其他LLM提供商生成Cypher语句的能力,因为我无法访问它们中的任何一个。不过,如果你愿意尝试一下,我很想听听你对其他LLM生成Cypher语句的评价。当然,如果你想摆脱对LLM云服务提供商的依赖,你也可以通过对开源LLM进行微调来生成Cypher语句。

让我们从一个简单的测试开始。

chain.run("""Which intermediary is connected to most entites?""")

结果

b4994a61940266dd40e9026506a11938.png

生成的答案

我们可以观察生成的Cypher语句和从Neo4j检索到的信息,用于形成答案。这是一个非常简单的设置。让我们继续下一个例子。

chain.run("""Who are the officers of ZZZ-MILI COMPANY LTD.?""")

结果

814a634852a4a3a25a53c7593b240082.png

生成的答案

既然我们正在使用图形,那么让我们构建一个能够充分利用图形数据库优势的问题。

chain.run("""How are entities SOUTHWEST LAND DEVELOPMENT LTD. and Dragon Capital Markets Limited related?""")

一开始看起来,生成的Cypher语句似乎没问题。然而,问题在于Cypher语句使用了变长路径查找语法,并且将关系视为无向的。结果,这种类型的查询非常不优化,会导致行数爆炸增长。

gpt-3.5-turbo的好处在于它能够根据我们在输入中提供的提示和指示进行操作。例如,我们可以要求它只找到最短的路径。

chain.run("""How are entities SOUTHWEST LAND DEVELOPMENT LTD. and Dragon Capital Markets Limited connected?Find a shortest path.""")

072a38cdbf36556b39e12b90c125a1ef.png

生成的答案

现在我们暗示只应该检索最短路径,这样就不会再遇到基数爆炸的问题了。然而,我注意到一个问题,就是如果返回了一个路径对象,LLM有时候并不能提供最佳结果。生成的Cypher语句在Neo4j浏览器中返回以下可视化结果。

eaff8d384d5b00a3ddc3ae88326c33ec.png

图形可视化

生成的自然语言回复并没有真正提到这两家公司在同一地址注册,而是根据节点属性自己生成了最短路径。然而,我们也可以通过指示模型使用哪些信息来修复这个问题。

chain.run("""How are entities SOUTHWEST LAND DEVELOPMENT LTD. and Dragon Capital Markets Limited connected?Find a shortest path.Return only name properties of nodes and relationship types""")

结果

b78140e354235467ec4785618e720d1d.png

生成的答案

现在我们可以得到更好的响应和更恰当的响应。你给LLM提供的线索越多,你可以期望得到的结果就越好。例如,你还可以指示它可以遍历哪些关系。

chain.run("""How are entities SOUTHWEST LAND DEVELOPMENT LTD. and Dragon Capital Markets Limited connected?Find a shortest path and use only officer, intermediary, and connected relationships.Return only name properties of nodes and relationship types""")

结果

9006df48892f1502d6fd1756085cd505.png

生成的答案

你可以看到生成的Cypher语句只允许遍历OFFICER_OF、INTERMEDIARY_OF和CONNECTED_TO关系。同样的Cypher语句会生成以下图形可视化。

5c21b978f35b1c31ae3195825596339f.png

图形可视化

摘要

图形数据库是检索或分析人与组织等各种实体之间连接的绝佳工具。在这篇博客文章中,我们看了一个简单的最短路径用例,其中关系的数量和关系类型的顺序事先是未知的。这些类型的查询在向量数据库中几乎是不可能的,而在SQL数据库中也可能非常复杂。

我对将Cypher Search添加到LangChain库中感到非常兴奋。请测试一下,并告诉我它对你来说效果如何,特别是如果你在其他LLM模型上进行测试或有令人兴奋的用例。另外,请记得关注,因为我已经准备好了一些博客文章,将探索LangChain库中的Cypher Search功能。


OpenKG

OpenKG(中文开放知识图谱)旨在推动以中文为核心的知识图谱数据的开放、互联及众包,并促进知识图谱算法、工具及平台的开源开放。

3a6d99e9a662ca0714a8f2e05775e95b.png

点击阅读原文,进入 OpenKG 网站。

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Cypher 是 Neo4j 图数据库的一种语言,用于查询和操作图数据。Cypher 类似于 SQL,但是专门用于处理图数据。它具有简单易用的语法,可以描述节点和关系之间的关系,支持高级查询和数据可视化。 例如,下面的 Cypher 查询将返回所有名为 "Alice" 的人: ``` MATCH (n:Person {name: "Alice"}) RETURN n; ``` 如果你想查看更多关于 Cypher 的信息和示例,可以访问 Neo4j 官网或者其他相关资料。 ### 回答2: Cypher Demo是一个展示Cypher查询语言功能的演示示例。Cypher是Neo4j图数据库的查询语言,用于为图数据库提供数据查询和操作。通过使用Cypher语言,我们可以轻松地从图数据库中检索、操纵和管理数据。 Cypher Demo提供了一个交互式界面,用户可以在该界面中输入Cypher查询语句并执行。演示示例通常会提供一些示例数据集,以供用户进行查询和操作的练习。在这些演示示例中,用户可以通过编写Cypher查询来探索和理解图数据库中存储的数据。 演示示例通常包含一些常见的查询场景,例如查找特定节点的属性、查找节点之间的关系、查找符合特定条件的节点等。在执行这些Cypher查询之后,用户可以查看查询的结果,并根据需要进行进一步的操作或分析。 Cypher Demo还可以帮助用户了解Cypher查询语言的语法和语义。用户可以通过观察演示示例中的查询语句和它们的结果来逐步学习和理解Cypher的用法。 总结来说,Cypher Demo是一个展示Cypher查询语言功能和用法的演示示例,它可以帮助用户熟悉和理解Cypher,并通过实践查询和操作图数据库中的数据。 ### 回答3: Cypher Demo是一个用于演示Cypher查询语言的示例。Cypher是一种专门用于图数据库Neo4j的查询语言,它允许用户在图中进行复杂的数据操作和查询。 在Cypher Demo中,我们可以通过一系列的示例来学习和理解Cypher的使用方法。首先,我们需要了解Cypher的基本语法和关键词。例如,通过使用MATCH关键词来定义一个查询模式,然后使用WHERE关键词来添加约束条件,最后使用RETURN关键词来返回我们感兴趣的结果。 在Cypher Demo中,我们可以学习如何创建节点和关系,如何查询特定节点或关系,如何使用属性查询,以及如何使用聚合函数进行计算。此外,我们还可以学习如何使用Cypher语句的管道操作符来进一步加工和组合查询结果。 在Cypher Demo的实例中,我们可能会看到一些示例数据,比如人员关系图或地理位置图。通过对这些示例数据的查询和操作,我们可以更好地理解Cypher查询语言的应用场景。 通过Cypher Demo,我们可以通过实际操作和练习来加深对Cypher查询语言的理解和熟练程度。这对于想要更好地利用图数据库进行数据分析、图形可视化和关系网络发现的人来说是非常有帮助的。 总结来说,Cypher Demo是一个教学工具,旨在通过示例和操作演示Cypher查询语言的使用方法和技巧,帮助用户更好地掌握和应用这种强大的图数据库查询语言。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值