LlamaIndex --- Transformations

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()

在这个示例中,VectorStoreIndexdocuments 数组创建索引,并在内部将 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中的数据转换功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

需要重新演唱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值