노드 정의 및 커스터마이징
노드 정의 및 커스터마이징
Node가 소스 Document의 "청크"를 나타내며, 정의하고 커스터마이즈하는 방법을 알아봐요.
출처: 문서
본문
Node는 소스 Document의 "청크"를 나타내요 — 텍스트 청크든, 이미지든, 그 이상이든요. 또한 다른 노드와 인덱스 구조와의 메타데이터와 관계 정보를 담아요.
Node는 LlamaIndex에서 일급 시민이에요. 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!"