节点定义与自定义#
节点代表源文档的"片段",无论是文本块、图像还是其他内容。它们还包含与其他节点和索引结构之间的元数据及关联信息。
节点是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定义节点间关系等。
您也可以直接获取和设置任何TextNode的node_id。
print(node.node_id)
node.node_id = "My new node_id!"