152 KnowledgeGraphIndex(已被弃用)

Llama Index中的知识图谱索引:从入门到精通

在现代数据科学和人工智能领域,知识图谱(Knowledge Graph)已成为处理复杂信息的重要工具。知识图谱通过结构化的方式表示实体及其关系,使得信息的检索和理解变得更加高效。本文将深入探讨Llama Index中的KnowledgeGraphIndex类,帮助程序员全面理解其工作原理及实际应用。

前置知识

在开始之前,确保你具备以下基础知识:

  1. Python基础:熟悉Python编程。
  2. OpenAI API密钥:你需要一个OpenAI API密钥来使用OpenAI模型。
  3. Llama Index:使用pip install llama-index安装Llama Index库。

环境设置

首先,让我们通过安装所需的包并配置OpenAI API密钥来设置环境。

# 安装Llama Index
%pip install llama-index

# 设置OpenAI API密钥
import os
os.environ["OPENAI_API_KEY"] = "sk-..."

# 配置日志
import logging
import sys
logging.basicConfig(stream=sys.stdout, level=logging.INFO)

KnowledgeGraphIndex概述

KnowledgeGraphIndex类已被弃用,建议使用新的PropertyGraphIndex类。本文将详细介绍KnowledgeGraphIndex的工作原理,并提供代码示例和解释。

参数说明

参数名类型描述默认值
kg_triplet_extract_templateBasePromptTemplate用于提取三元组的提示模板。None
max_triplets_per_chunkint每个块中提取的最大三元组数量。10
storage_contextOptional[StorageContext]存储上下文。None
graph_storeOptional[GraphStore]图存储。必需
show_progressbool是否显示tqdm进度条。False
include_embeddingsbool是否在索引中包含嵌入。False
max_object_lengthint三元组中对象的最大长度。128
kg_triplet_extract_fnOptional[Callable]用于提取三元组的函数。None

主要方法

初始化方法

def __init__(
    self,
    nodes: Optional[Sequence[BaseNode]] = None,
    objects: Optional[Sequence[IndexNode]] = None,
    index_struct: Optional[KG] = None,
    llm: Optional[LLM] = None,
    embed_model: Optional[BaseEmbedding] = None,
    storage_context: Optional[StorageContext] = None,
    kg_triplet_extract_template: Optional[BasePromptTemplate] = None,
    max_triplets_per_chunk: int = 10,
    include_embeddings: bool = False,
    show_progress: bool = False,
    max_object_length: int = 128,
    kg_triplet_extract_fn: Optional[Callable] = None,
    **kwargs: Any,
) -> None:
    """Initialize params."""

描述:初始化KnowledgeGraphIndex对象。

as_retriever方法

def as_retriever(
    self,
    retriever_mode: Optional[str] = None,
    embed_model: Optional[BaseEmbedding] = None,
    **kwargs: Any,
) -> BaseRetriever:

描述:将索引转换为检索器。

_extract_triplets方法

def _extract_triplets(self, text: str) -> List[Tuple[str, str, str]]:

描述:从文本中提取三元组。

_llm_extract_triplets方法

def _llm_extract_triplets(self, text: str) -> List[Tuple[str, str, str]]:

描述:使用LLM从文本中提取三元组。

_parse_triplet_response方法

@staticmethod
def _parse_triplet_response(
    response: str, max_length: int = 128
) -> List[Tuple[str, str, str]]:

描述:解析LLM的响应以提取三元组。

_build_index_from_nodes方法

def _build_index_from_nodes(
    self, nodes: Sequence[BaseNode], **build_kwargs: Any
) -> KG:

描述:从节点构建索引。

_insert方法

def _insert(self, nodes: Sequence[BaseNode], **insert_kwargs: Any) -> None:

描述:插入文档。

upsert_triplet方法

def upsert_triplet(
    self, triplet: Tuple[str, str, str], include_embeddings: bool = False
) -> None:

描述:插入三元组并可选地插入嵌入。

add_node方法

def add_node(self, keywords: List[str], node: BaseNode) -> None:

描述:添加节点。

upsert_triplet_and_node方法

def upsert_triplet_and_node(
    self,
    triplet: Tuple[str, str, str],
    node: BaseNode,
    include_embeddings: bool = False,
) -> None:

描述:插入知识图谱三元组和节点。

_delete_node方法

def _delete_node(self, node_id: str, **delete_kwargs: Any) -> None:

描述:删除节点(未实现)。

ref_doc_info属性

@property
def ref_doc_info(self) -> Dict[str, RefDocInfo]:

描述:检索已摄取文档及其节点和元数据的字典映射。

get_networkx_graph方法

def get_networkx_graph(self, limit: int = 100) -> Any:

描述:获取图结构的networkx表示。

query_context属性

@property
def query_context(self) -> Dict[str, Any]:

描述:获取查询上下文。

代码示例

创建KnowledgeGraphIndex

from llama_index.core import KnowledgeGraphIndex, StorageContext
from llama_index.core.graph_stores import SimpleGraphStore
from llama_index.llms.openai import OpenAI

# 定义LLM
llm = OpenAI(temperature=0, model="gpt-3.5-turbo")

# 创建图存储
graph_store = SimpleGraphStore()
storage_context = StorageContext.from_defaults(graph_store=graph_store)

# 创建KnowledgeGraphIndex
kg_index = KnowledgeGraphIndex(
    storage_context=storage_context,
    max_triplets_per_chunk=10,
    include_embeddings=True,
)

插入三元组

triplet = ("Peter Quill", "is leader of", "Guardians of the Galaxy")
kg_index.upsert_triplet(triplet, include_embeddings=True)

添加节点

from llama_index.core.node_parser import SentenceSplitter

node_parser = SentenceSplitter()
nodes = node_parser.get_nodes_from_documents(documents)

kg_index.add_node(["Peter Quill", "Guardians of the Galaxy"], nodes[0])

插入三元组和节点

triplet = ("Peter Quill", "is leader of", "Guardians of the Galaxy")
kg_index.upsert_triplet_and_node(triplet, nodes[0], include_embeddings=True)

获取networkx图

import networkx as nx
from pyvis.network import Network

g = kg_index.get_networkx_graph(limit=100)
net = Network(notebook=True, cdn_resources="in_line", directed=True)
net.from_nx(g)
net.show("example.html")

总结

通过Llama Index的KnowledgeGraphIndex,我们可以轻松地构建和查询知识图谱。无论是手动插入三元组和节点,还是获取图结构的networkx表示,Llama Index都提供了强大的工具来处理知识图谱任务。希望这篇博客能帮助你更好地理解和应用知识图谱技术。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

需要重新演唱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值