Transformations 相关内容
概念解释
Transformations(转换):在数据加载之后,通常需要对数据进行处理和转换,以便将其存储到存储系统中。这些转换包括分块(chunking)、提取元数据(extracting metadata)和嵌入每个块(embedding each chunk)。这些步骤是为了确保数据能够被有效地检索和最优地被大型语言模型(LLM)使用。
Node(节点):在LlamaIndex中,Node对象是Document的子类,包含文本和元数据。Node对象之间的关系可以表示文档的层次结构。
高层次转换API
LlamaIndex提供了高层次的API来处理文档的转换。Indexes
类有一个 .from_documents()
方法,该方法接受一个 Document
对象数组,并正确地解析和分块这些文档。
示例代码:
from llama_index.core import VectorStoreIndex
# 从文档创建索引
vector_index = VectorStoreIndex.from_documents(documents)
query_engine = vector_index.as_query_engine()
在这个示例中,VectorStoreIndex
从 documents
数组创建索引,并在内部将 Document
对象分割成 Node
对象。
如果需要自定义核心组件(如文本分割器),可以通过传递自定义的转换列表或应用到全局设置来实现:
from llama_index.core.node_parser import SentenceSplitter
# 自定义文本分割器
text_splitter = SentenceSplitter(chunk_size=512, chunk_overlap=10)
# 全局设置
from llama_index.core import Settings
Settings.text_splitter = text_splitter
# 每个索引单独设置
index = VectorStoreIndex.from_documents(
documents, transformations=[text_splitter]
)
低层次转换API
除了高层次API,LlamaIndex还提供了低层次的API来显式定义这些转换步骤。可以使用独立的转换模块(如文本分割器、元数据提取器等),或者通过声明式的转换管道接口来组合这些模块。
示例代码:
from llama_index.core import SimpleDirectoryReader
from llama_index.core.ingestion import IngestionPipeline
from llama_index.core.node_parser import TokenTextSplitter
# 加载文档
documents = SimpleDirectoryReader("./data").load_data()
# 定义转换管道
pipeline = IngestionPipeline(transformations=[TokenTextSplitter(), ...])
# 运行转换管道
nodes = pipeline.run(documents=documents)
在这个示例中,我们使用 TokenTextSplitter
将文档分割成节点对象。
添加元数据
可以选择手动或自动地为文档和节点添加元数据。
示例代码:
from llama_index.core import Document
# 自定义文档元数据
document = Document(
text="text",
metadata={"filename": "<doc_file_name>", "category": "<category>"},
)
添加嵌入
为了将节点插入向量索引,节点应该包含嵌入向量。可以参考LlamaIndex的嵌入指南了解更多细节。
直接创建和传递节点
如果需要,可以直接创建节点对象,并将节点列表直接传递给索引器:
示例代码:
from llama_index.core.schema import TextNode
# 创建节点
node1 = TextNode(text="<text_chunk>", id_="<node_id>")
node2 = TextNode(text="<text_chunk>", id_="<node_id>")
# 创建索引
index = VectorStoreIndex([node1, node2])
总结
通过本课程,我们详细讲解了Transformations的概念及其在LlamaIndex中的应用。我们介绍了高层次和低层次的转换API,如何分割文档为节点、添加元数据和嵌入,以及如何直接创建和传递节点。这些内容将帮助学生更好地理解和应用LlamaIndex中的数据转换功能。