在本篇文章中,我们将探讨如何使用Graph RAG(知识图谱增强的检索生成)技术来进行知识图谱查询。Graph RAG是一种结合了知识图谱和传统检索生成方法的技术,能够在处理复杂问题时提供更加准确和丰富的答案。
什么是Graph RAG?
Graph RAG是一种基于知识图谱的RAG方法,它通过从知识图谱中检索与任务相关的子图,构建上下文来完成任务。通常情况下,这是基于与任务相关的实体子图来构建上下文。
Graph RAG与向量存储RAG的对比
Graph RAG采用了知识图谱这一独特的信息格式,能够减轻"分割与嵌入"RAG方法固有的一些问题。在某些使用场景中,Graph RAG的表现优于传统的向量存储RAG。
准备工作
在进行Graph RAG查询之前,我们需要进行一些基础准备工作,包括安装必要的库以及设置相应的API密钥。
安装Llama Index库
!pip install llama-index
import os
import logging
import sys
logging.basicConfig(
stream=sys.stdout, level=logging.INFO
) # 使用INFO级别的日志记录
配置OpenAI API
from llama_index.llms.openai import OpenAI
from llama_index.core import Settings
os.environ["OPENAI_API_KEY"] = "sk-..." # 请替换为您的实际API密钥
Settings.llm = OpenAI(temperature=0, model="gpt-3.5-turbo")
Settings.chunk_size = 512
配置Azure OpenAI API
from llama_index.llms.azure_openai import AzureOpenAI
from llama_index.embeddings.azure_openai import AzureOpenAIEmbedding
api_key = "<api-key>"
azure_endpoint = "https://<your-resource-name>.openai.azure.com/"
api_version = "2023-07-01-preview"
llm = AzureOpenAI(
model="gpt-35-turbo-16k",
deployment_name="my-custom-llm",
api_key=api_key,
azure_endpoint=azure_endpoint,
api_version=api_version,
)
embed_model = AzureOpenAIEmbedding(
model="text-embedding-ada-002",
deployment_name="my-custom-embedding",
api_key=api_key,
azure_endpoint=azure_endpoint,
api_version=api_version,
)
Settings.llm = llm
Settings.embed_model = embed_model
Settings.chunk_size = 512
配置NebulaGraph
在这个示例中,我们使用NebulaGraph作为知识图谱存储。首先,我们需要安装NebulaGraph客户端,并准备定义NebulaGraph的图空间。
!pip install ipython-ngql nebula3-python
os.environ["NEBULA_USER"] = "root"
os.environ["NEBULA_PASSWORD"] = "nebula" # 默认密码
os.environ["NEBULA_ADDRESS"] = "127.0.0.1:9669" # 假设本地安装了NebulaGraph
space_name = "llamaindex"
edge_types, rel_prop_names = ["relationship"], ["relationship"] # 默认设置
tags = ["entity"] # 默认设置
from llama_index.core import StorageContext
from llama_index.graph_stores.nebula import NebulaGraphStore
graph_store = NebulaGraphStore(
space_name=space_name,
edge_types=edge_types,
rel_prop_names=rel_prop_names,
tags=tags,
)
storage_context = StorageContext.from_defaults(graph_store=graph_store)
执行Graph RAG查询
现在,我们可以演示如何针对现有的知识图谱执行Graph RAG查询。
配置RetrieverQueryEngine和KnowledgeGraphRAGRetriever
from llama_index.core.query_engine import RetrieverQueryEngine
from llama_index.core.retrievers import KnowledgeGraphRAGRetriever
graph_rag_retriever = KnowledgeGraphRAGRetriever(
storage_context=storage_context,
verbose=True,
)
query_engine = RetrieverQueryEngine.from_args(
graph_rag_retriever,
)
执行查询
from IPython.display import display, Markdown
response = query_engine.query(
"Tell me about Peter Quill?",
)
display(Markdown(f"<b>{response}</b>")) # 输出查询结果
示例代码:使用中转API进行Graph RAG查询
以下是一个使用中转API的完整示例代码:
import os
from llama_index.llms.openai import OpenAI
from llama_index.core import Settings
from llama_index.core.query_engine import RetrieverQueryEngine
from llama_index.core.retrievers import KnowledgeGraphRAGRetriever
from llama_index.core import StorageContext
from llama_index.graph_stores.nebula import NebulaGraphStore
from IPython.display import display, Markdown
# 设置OpenAI API密钥
os.environ["OPENAI_API_KEY"] = "sk-..." # 请替换为实际密钥
# 配置OpenAI
Settings.llm = OpenAI(temperature=0, model="gpt-3.5-turbo")
Settings.chunk_size = 512
# 配置NebulaGraph
os.environ["NEBULA_USER"] = "root"
os.environ["NEBULA_PASSWORD"] = "nebula" # 默认密码
os.environ["NEBULA_ADDRESS"] = "127.0.0.1:9669"
space_name = "llamaindex"
edge_types, rel_prop_names = ["relationship"], ["relationship"]
tags = ["entity"]
graph_store = NebulaGraphStore(
space_name=space_name,
edge_types=edge_types,
rel_prop_names=rel_prop_names,
tags=tags,
)
storage_context = StorageContext.from_defaults(graph_store=graph_store)
# 配置RetrieverQueryEngine
graph_rag_retriever = KnowledgeGraphRAGRetriever(
storage_context=storage_context,
verbose=True,
)
query_engine = RetrieverQueryEngine.from_args(
graph_rag_retriever,
)
# 执行查询
response = query_engine.query(
"Tell me about Peter Quill?",
)
display(Markdown(f"<b>{response}</b>")) # 输出查询结果
//中转API
可能遇到的错误
在使用上述代码时,可能会遇到以下错误:
- API密钥错误:如果提供的API密钥不正确,可能会导致身份验证失败。确保API密钥的正确性。
- 网络连接问题:在连接到NebulaGraph或OpenAI时,网络连接不畅可能会导致请求失败。确保网络连接稳定。
- 环境变量未设置:确保在代码中正确设置了所有必要的环境变量,如API密钥、NebulaGraph连接信息等。
如果你觉得这篇文章对你有帮助,请点赞,关注我的博客,谢谢!
参考资料
- LlamaIndex官方文档
- NebulaGraph官方文档
*:确保在代码中正确设置了所有必要的环境变量,如API密钥、NebulaGraph连接信息等。
如果你觉得这篇文章对你有帮助,请点赞,关注我的博客,谢谢!