主题
Node 表示源 Document 的“块”,可以是文本块、图像,或更多形态。它们同样包含元数据,以及与其他节点和索引结构之间的关联信息。
在 LlamaIndex 里 Node 是一等公民。你可以直接定义 Node 及其全部属性,也可以用我们的 NodeParser 类把源 Document “解析”成 Node。
例如,你可以这样写
from llama_index.core.node_parser import SentenceSplitter
parser = SentenceSplitter()
nodes = parser.get_nodes_from_documents(documents)你也可以跳过上面这一步,直接手工构造 Node 对象。例如:
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>")
# set relationships
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!"