趋近智
为有效连接外部数据源与大型语言模型,LlamaIndex 引入了两个基本构建模块:节点 (Nodes) 和 索引 (Indexes)。理解它们是使用该库进行数据摄取和检索的根本。
可将 节点 (Node) 视为源文档中最小的、独立的信息“块”或片段。当您将数据(如 PDF 文件、网页或数据库中的文本)载入 LlamaIndex 时,它通常被分解成这些易于管理的 Node 对象。
每个 Node 不仅包含原始文本的一个片段,还包含相关的元数据和关系。Node 的主要组成部分是:
例如,如果您载入一份 10 页的报告,LlamaIndex 可能会将其解析成多个 Node 对象。一个 Node 可能包含第 3 页的一个段落,其元数据表明 {"source_document": "report.pdf", "page_number": 3}。另一个 Node 可能包含下一个段落,通过关系链接。这种将大型文档分解成更小的、可索引的 Node 对象的过程通常被称为“分块”。
# 节点对象的简化表示
class Node:
def __init__(self, text, metadata=None, relationships=None):
self.text = text # 数据块的实际文本内容
self.metadata = metadata or {} # 例如,{'file_name': 'chapter_1.txt', 'section': 'Introduction'}
self.relationships = relationships or {} # 例如,{'previous': node_id_1, 'next': node_id_3}
# 示例:
node_text = "LlamaIndex uses Nodes to represent chunks of data..."
node_metadata = {"source_doc": "documentation.html", "chunk_id": 101}
a_node = Node(text=node_text, metadata=node_metadata)
print(f"节点文本: {a_node.text}")
print(f"节点元数据: {a_node.metadata}")
虽然 节点 (Nodes) 代表单个数据片段,但 索引 (Index) 是组织这些 Node 的数据结构,以实现高效的搜索和检索。您可以在 Node 对象集合上构建一个 Index。
Index 的主要目的是让您能够根据查询(可以是自然语言问题、关键词或另一段文本)快速找到最相关的 Node。不同类型的索引采用不同的组织策略。
Node 文本嵌入(捕获语义含义的数值表示)存储在专门的数据库(向量存储)中。查询也被嵌入,索引会找到其嵌入与查询嵌入意义最接近的节点。这对于语义搜索非常有用。LlamaIndex 抽象了创建和管理这些结构的许多复杂性。您通常加载数据,这会创建 Node,然后用这些 Node 实例化一个 Index 类。
一个图表,显示源文档如何被分解成节点,然后被组织在 LlamaIndex 索引结构中,以方便根据用户查询进行检索。
将数据分离成 Node 并将其组织成 Index,带来了几个优势:
Node。Index 为快速检索进行了优化,这在处理大量数据时非常必要。在原始文档中搜索相关段落对于实时应用来说会太慢。Index 满足不同的检索需求(语义搜索、关键词搜索、总结)。Node,您可以为大型语言模型提供集中、简洁的上下文,遵守上下文窗口限制并提高响应质量。当您查询 LlamaIndex Index 时,它会返回最相关的 Node。这些 Node 的文本和元数据随后通常被格式化成提示并发送给大型语言模型。这是检索增强生成(RAG)背后的主要机制,使大型语言模型能够根据您特定的外部数据回答问题或生成文本,而不仅仅是依靠其内部训练知识。您将在下一章中了解更多关于构建完整 RAG 系统的信息。
简洁的语法。内置调试功能。从第一天起就可投入生产。
为 ApX 背后的 AI 系统而构建
这部分内容有帮助吗?
© 2026 ApX Machine Learning用心打造