Ontotext GraphDB 是一个符合 RDF 和 SPARQL 的图数据库和知识发现工具。
本笔记本展示了如何使用 LLM 为Ontotext GraphDB提供自然语言查询(NLQ 到 SPARQL,也称为text2sparql)。
GraphDB LLM 功能
GraphDB 支持一些 LLM 集成功能,如下所述:这里: gpt-queries- 使用知识图谱(KG)中的数据,向 LLM 请求文本、列表或表格的魔法谓词
- 查询解释
- 结果解释、摘要、改写、翻译
- 在向量数据库中索引知识图谱实体
- 支持任何文本嵌入算法和向量数据库
- 使用 GraphDB 用于 Elastic、Solr、Lucene 的相同强大的连接器(索引)语言
- 将 RDF 数据中的更改自动同步到知识图谱实体索引
- 支持嵌套对象(GraphDB 10.5 版本中无 UI 支持)
- 将知识图谱实体序列化为文本,例如(对于葡萄酒数据集)
- 使用定义的知识图谱实体索引的简单聊天机器人
SPARQL。我们将使用 星球大战 API (SWAPI) 本体和数据集,您可以在这里查看。
设置
您需要一个正在运行的 GraphDB 实例。本教程展示了如何使用 GraphDB Docker 镜像在本地运行数据库。它提供了一个 docker compose 设置,用星球大战数据集填充 GraphDB。所有必需的文件,包括本笔记本,都可以从 GitHub 仓库 langchain-graphdb-qa-chain-demo 下载。- 安装 Docker。本教程使用 Docker 版本
24.0.7创建,该版本捆绑了 Docker Compose。对于较早的 Docker 版本,您可能需要单独安装 Docker Compose。 - 将 GitHub 仓库 langchain-graphdb-qa-chain-demo 克隆到您机器上的本地文件夹中。
- 从同一文件夹执行以下脚本启动 GraphDB
https://:7200/ 启动。星球大战数据集 starwars-data.trig 会自动加载到 langchain 仓库中。本地 SPARQL 端点 https://:7200/repositories/langchain 可用于运行查询。您还可以从您喜欢的网络浏览器 https://:7200/sparql 打开 GraphDB 工作台,在那里您可以交互式地进行查询。
- 设置工作环境
conda,请创建并激活一个新的 conda 环境,例如
指定本体
为了使 LLM 能够生成 SPARQL,它需要知道知识图谱模式(本体)。可以通过OntotextGraphDBGraph 类的两个参数之一提供:
query_ontology:一个在 SPARQL 端点上执行并返回知识图谱模式语句的CONSTRUCT查询。我们建议您将本体存储在其自己的命名图中,这将使您更容易只获取相关的语句(如下面的示例)。不支持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 记住。 星球大战本体有些不寻常,因为它包含了许多关于类的特定三元组,例如物种 :Aleena 居住在 <planet/38>,它们是 :Reptile 的子类,具有某些典型的特征(平均身高、平均寿命、肤色),并且特定的个体(角色)是该类的代表:OntotextGraphDBGraph 之前设置环境变量“GRAPHDB_USERNAME”和“GRAPHDB_PASSWORD”。
针对星球大战数据集的问题回答
我们现在可以使用OntotextGraphDBQAChain 提出一些问题。
链修改器
Ontotext GraphDB QA 链允许提示优化,以进一步改进您的 QA 链并增强您应用的整体用户体验。“SPARQL 生成”提示
此提示用于根据用户问题和知识图谱模式生成 SPARQL 查询。-
sparql_generation_prompt默认值:
“SPARQL 修复”提示
有时,LLM 可能会生成带有语法错误或缺少前缀等的 SPARQL 查询。该链将尝试通过提示 LLM 更正它一定次数来弥补这一点。-
sparql_fix_prompt默认值: -
max_fix_retries默认值:5
“回答”提示
此提示用于根据从数据库返回的结果和初始用户问题回答问题。默认情况下,LLM 被指示仅使用返回结果中的信息。如果结果集为空,LLM 应告知无法回答问题。-
qa_prompt默认值:
docker compose down -v --remove-orphans 来关闭 Docker 环境。
以编程方式连接这些文档到 Claude、VSCode 等,通过 MCP 获取实时答案。