Ontotext GraphDB 是一款符合 RDF 和 SPARQL 标准的图数据库和知识发现工具。
本 notebook 展示如何使用 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。包括本 notebook 在内的所有必要文件可从 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,它需要了解知识图谱 schema(本体)。可以通过OntotextGraphDBGraph 类的两个参数之一来提供:
query_ontology:一个在 SPARQL 端点上执行的CONSTRUCT查询,返回 KG schema 语句。建议将本体存储在独立的命名图中,这样更容易只获取相关语句(如下面的示例)。不支持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 chain 允许通过提示词优化来进一步改善 QA chain,并提升应用的整体用户体验。“SPARQL 生成”提示词
该提示词用于根据用户问题和 KG schema 生成 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
将这些文档连接到 Claude、VSCode 等工具,通过 MCP 获取实时答案。

