Ontotext GraphDB 是一个符合 RDF 和 SPARQL 的图数据库和知识发现工具。
本笔记本展示了如何使用 LLM 为Ontotext GraphDB提供自然语言查询(NLQ 到 SPARQL,也称为text2sparql)。
GraphDB LLM 功能
GraphDB 支持一些 LLM 集成功能,如此处所述:
gpt-queries
- 使用知识图(KG)中的数据向 LLM 询问文本、列表或表格的魔法谓词
- 查询解释
- 结果解释、摘要、改写、翻译
- 在向量数据库中索引 KG 实体
- 支持任何文本嵌入算法和向量数据库
- 使用与 GraphDB 用于 Elastic、Solr、Lucene 相同的强大连接器(索引)语言
- 自动同步 RDF 数据中的更改到 KG 实体索引
- 支持嵌套对象(GraphDB 版本 10.5 中无 UI 支持)
- 将 KG 实体序列化为文本,如下所示(例如,对于葡萄酒数据集):
- 使用定义的 KG 实体索引的简单聊天机器人
SPARQL。我们将使用 Star Wars API (SWAPI) 本体和数据集,您可以在此处查看。
设置
您需要一个运行中的 GraphDB 实例。本教程展示了如何使用 GraphDB Docker 镜像在本地运行数据库。它提供了一个 docker compose 设置,用 Star Wars 数据集填充 GraphDB。包括此笔记本在内的所有必要文件都可以从 GitHub 仓库 langchain-graphdb-qa-chain-demo 下载。- 安装 Docker。本教程使用 Docker 版本
24.0.7创建,该版本捆绑了 Docker Compose。对于较早的 Docker 版本,您可能需要单独安装 Docker Compose。 - 在您机器上的本地文件夹中克隆 GitHub 仓库 langchain-graphdb-qa-chain-demo。
- 从同一文件夹执行以下脚本启动 GraphDB
http://localhost:7200/ 上启动。Star Wars 数据集 starwars-data.trig 会自动加载到 langchain 存储库中。本地 SPARQL 端点 http://localhost:7200/repositories/langchain 可用于运行查询。您也可以从您喜欢的网络浏览器打开 GraphDB Workbench http://localhost:7200/sparql,在那里您可以交互式地进行查询。
- 设置工作环境
conda,创建并激活一个新的 conda 环境,例如:
指定本体
为了使 LLM 能够生成 SPARQL,它需要知道知识图模式(本体)。可以通过OntotextGraphDBGraph 类的两个参数之一提供:
query_ontology:在 SPARQL 端点上执行的CONSTRUCT查询,返回 KG 模式语句。我们建议您将本体存储在自己的命名图中,这样可以更容易地仅获取相关语句(如下面的示例)。不支持DESCRIBE查询,因为DESCRIBE返回对称简洁有界描述(SCBD),即还包括传入的类链接。对于有数百万实例的大型图,这效率不高。查看 github.com/eclipse-rdf4j/rdf4j/issues/4857local_file:本地 RDF 本体文件。支持的 RDF 格式有Turtle、RDF/XML、JSON-LD、N-Triples、Notation-3、Trig、Trix、N-Quads。
- 包含关于类、属性、属性附加到类(使用 rdfs:domain、schema:domainIncludes 或 OWL 限制)和分类法(重要个体)的足够信息。
- 不包括过于冗长且不相关的定义和示例,这些对 SPARQL 构建没有帮助。
Turtle 格式提供给 LLM,因为带有适当前缀的 Turtle 最紧凑,LLM 最容易记住。
Star Wars 本体有点不寻常,因为它包含许多关于类的特定三元组,例如物种 :Aleena 生活在 <planet/38> 上,它们是 :Reptile 的子类,具有某些典型特征(平均身高、平均寿命、皮肤颜色),特定个体(角色)是该类的代表:
OntotextGraphDBGraph 之前设置环境变量 ‘GRAPHDB_USERNAME’ 和 ‘GRAPHDB_PASSWORD’。
针对 StarWars 数据集的问答
我们现在可以使用OntotextGraphDBQAChain 提出一些问题。
链修饰符
Ontotext GraphDB QA 链允许提示优化,以进一步改进您的 QA 链并增强应用程序的整体用户体验。“SPARQL 生成”提示
该提示用于基于用户问题和 KG 模式生成 SPARQL 查询。-
sparql_generation_promptDefault value:
“SPARQL 修复”提示
有时,LLM 可能会生成带有语法错误或缺少前缀等的 SPARQL 查询。链将通过提示 LLM 多次纠正来尝试修复此问题。-
sparql_fix_promptDefault value: -
max_fix_retriesDefault value:5
”回答”提示
该提示用于根据从数据库返回的结果和初始用户问题来回答问题。默认情况下,LLM 被指示仅使用返回结果中的信息。如果结果集为空,LLM 应告知它无法回答问题。-
qa_promptDefault value:
docker compose down -v --remove-orphans