使用Graph RAG进行知识图谱查询的示例

在本篇文章中,我们将探讨如何使用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

可能遇到的错误

在使用上述代码时,可能会遇到以下错误:

  1. API密钥错误:如果提供的API密钥不正确,可能会导致身份验证失败。确保API密钥的正确性。
  2. 网络连接问题:在连接到NebulaGraph或OpenAI时,网络连接不畅可能会导致请求失败。确保网络连接稳定。
  3. 环境变量未设置:确保在代码中正确设置了所有必要的环境变量,如API密钥、NebulaGraph连接信息等。

如果你觉得这篇文章对你有帮助,请点赞,关注我的博客,谢谢!

参考资料

如果你觉得这篇文章对你有帮助,请点赞,关注我的博客,谢谢!

参考资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值