LlamaIndex中的转换:数据处理的魔法
在LlamaIndex的世界里,转换(Transformations)就像是一位魔法师,能够将一堆原始数据变成有用的信息。这些转换接受一列节点作为输入,然后返回一列节点。每个实现了Transformation基类的组件都有同步的__call__()定义和异步的acall()定义。
当前的转换组件
目前,以下组件是转换对象:
- TextSplitter:将文本分割成小块。
- NodeParser:解析节点。
- MetadataExtractor:提取元数据。
- Embeddingsmodel:嵌入模型(查看我们支持的嵌入模型列表)。
使用模式
虽然转换最好与摄取管道(IngestionPipeline)一起使用,但它们也可以直接使用。
from llama_index.core.node_parser import SentenceSplitter
from llama_index.core.extractors import TitleExtractor
node_parser = SentenceSplitter(chunk_size=512)
extractor = TitleExtractor()
# 直接使用转换
nodes = node_parser(documents)
# 或者异步使用转换
nodes = await extractor.acall(nodes)
与索引结合使用
转换可以传递给索引或全局设置,并在调用from_documents()或insert()时使用。
from llama_index.core import VectorStoreIndex
from llama_index.core.extractors import (
TitleExtractor,
QuestionsAnsweredExtractor,
)
from llama_index.core.ingestion import IngestionPipeline
from llama_index.core.node_parser import TokenTextSplitter
transformations = [
TokenTextSplitter(chunk_size=512, chunk_overlap=128),
TitleExtractor(nodes=5),
QuestionsAnsweredExtractor(questions=3),
]
# 全局设置
from llama_index.core import Settings
Settings.transformations = [text_splitter, title_extractor, qa_extractor]
# 每个索引设置
index = VectorStoreIndex.from_documents(
documents, transformations=transformations
)
自定义转换
你可以通过实现基类来实现任何自定义转换。以下是一个自定义转换的例子,它会移除文本中的任何特殊字符或标点符号。
import re
from llama_index.core import Document
from llama_index.embeddings.openai import OpenAIEmbedding
from llama_index.core.node_parser import SentenceSplitter
from llama_index.core.ingestion import IngestionPipeline
from llama_index.core.schema import TransformComponent
class TextCleaner(TransformComponent):
def __call__(self, nodes, **kwargs):
for node in nodes:
node.text = re.sub(r"[^0-9A-Za-z ]", "", node.text)
return nodes
这些自定义转换可以直接使用,也可以在任何摄取管道中使用。
# 在管道中使用
pipeline = IngestionPipeline(
transformations=[
SentenceSplitter(chunk_size=25, chunk_overlap=0),
TextCleaner(),
OpenAIEmbedding(),
],
)
nodes = pipeline.run(documents=[Document.example()])
通过这些转换,你可以将原始数据变成有用的信息,就像魔法师一样,用魔法棒一挥,就能变出你想要的任何东西。在LlamaIndex的世界里,转换就是你的魔法棒,让你的数据处理变得更加简单和高效。