Skip to content

定义和自定义节点#

节点代表源文档中的“块”,无论是文本块、图像还是其他内容。它们还包含与其他节点和索引结构的元数据和关系信息。

在 LlamaIndex 中,节点是一等公民。您可以选择直接定义节点及其所有属性。您还可以选择通过我们的 NodeParser 类将源文档“解析”为节点。

例如,您可以这样做

from llama_index.core.node_parser import SentenceSplitter

parser = SentenceSplitter()

nodes = parser.get_nodes_from_documents(documents)

您还可以选择手动构建节点对象,跳过第一部分。例如,

from llama_index.core.schema import TextNode, NodeRelationship, RelatedNodeInfo

node1 = TextNode(text="<text_chunk>", id_="<node_id>")
node2 = TextNode(text="<text_chunk>", id_="<node_id>")
# 设置关系
node1.relationships[NodeRelationship.NEXT] = RelatedNodeInfo(
    node_id=node2.node_id
)
node2.relationships[NodeRelationship.PREVIOUS] = RelatedNodeInfo(
    node_id=node1.node_id
)
nodes = [node1, node2]

RelatedNodeInfo 类还可以存储额外的 metadata(元数据),如果需要的话:

node2.relationships[NodeRelationship.PARENT] = RelatedNodeInfo(
    node_id=node1.node_id, metadata={"key": "val"}
)

自定义 ID#

每个节点都有一个 node_id 属性,如果没有手动指定,它将自动生成。此 ID 可用于各种用途;包括能够更新存储中的节点,能够定义节点之间的关系(通过 IndexNode),等等。

您还可以直接获取和设置任何 TextNodenode_id

print(node.node_id)
node.node_id = "My new node_id!"