热门搜索:和平精英 原神 街篮2 

您的位置:首页 > > 教程攻略 > ai资讯 >LlamaIndex中的数据加载和摄取

LlamaIndex中的数据加载和摄取

来源:互联网 更新时间:2026-08-03 13:33

说到底,数据的准备工作才是整个流程的基石。在把LLM引入数据操作之前,得先完成数据的处理与加载——这和机器学习里的ETL(提取、转换、加载)本质上是一回事。

LlamaIndex中的数据加载和摄取

LlamaIndex中,数据摄取管道通常由三个阶段构成:

  • 加载数据

  • 转换数据

  • 索引并存储数据

索引和存储部分后续再聊,本文先聚焦前两个环节。

加载数据

LlamaIndex使用Reader(数据连接器)来加载数据。Reader从不同数据源读取信息,并将其转化为Document对象——Document是一组数据(文本、图像、音频、视频)及其元数据的集合。

说到Reader,最简单的当属SimpleDirectoryReader,它内建在LlamaIndex中,能够根据给定目录中的每个文件自动生成Document,支持的格式包括Markdown、PDF、Word、PPT、图片、音频、视频等多种。用法也极简单:

from llama_index.core import SimpleDirectoryReader
documents = SimpleDirectoryReader("./data").load_data()

当然,现实世界的数据源远不止磁盘。LlamaIndex在LlamaHub上提供了大量针对不同数据源的Reader,你可以前往下面的地址按需下载:

https://llamahub.ai/

比如,想读数据库数据,先安装DatabaseReader

pip install llama-index-readers-database

然后初始化并查询:

from llama_index.core import download_loader
from llama_index.readers.database import DatabaseReader
reader = DatabaseReader(
    scheme=os.getenv("DB_SCHEME"),
    host=os.getenv("DB_HOST"),
    port=os.getenv("DB_PORT"),
    user=os.getenv("DB_USER"),
    password=os.getenv("DB_PASS"),
    dbname=os.getenv("DB_NAME"),
)
query = "SELECT * FROM users"
documents = reader.load_data(query=query)

这时DatabaseReader会对SQL数据库执行查询,并将结果的每一行作为一个Document对象返回。

如果只是为了快速实验或调试,也可以直接手动创建Document:

from llama_index.core import Document
doc = Document(text="your text")

处理和转换数据

加载完成后,下一步就是处理和转换,然后才能存入存储系统。典型的转换动作包括:文本分块、元数据提取、以及为每个块生成嵌入向量。这些步骤做得越到位,后续LLM检索和使用的效果就越好。

转换的输入和输出都是Node对象(Document是Node的子类),我们可以根据需求自由组合不同的转换步骤。

高级API

索引对象自带一个.from_documents()方法,接受Document数组,自动执行一系列转换和分块操作:

from llama_index.core import VectorStoreIndex
vector_index = VectorStoreIndex.from_documents(documents)
vector_index.as_query_engine()

如果想更精细地控制转换流程,比如调整文本切块方式,可以通过Settings全局设定,或者按索引单独设置:

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

如果希望完全掌控每一步,可以用LlamaIndex提供的转换模块(文本拆分器、元数据提取器等)作为独立组件,或者将它们组合成一个IngestionPipeline。处理Document的关键就是把它们拆分成LLM能直接使用的块(即Node对象)。LlamaIndex支持多种拆分器,从基于段落/句子/Token的拆分器,到基于文件格式(如HTML、JSON)的拆分器,一应俱全。

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)

添加元数据

另外,还可以手动或通过自动元数据提取器,给Document和Node附加额外的元信息:

document = Document(
    text="text",
    metadata={"filename": "", "category": ""}
)

Node对象可以直接插入到向量索引中:

from llama_index.core.schema import TextNode
node1 = TextNode(text="", id_="")
node2 = TextNode(text="", id_="")
index = VectorStoreIndex([node1, node2])
关于宇宙的好的网名有哪些
关于宇宙的好的网名有哪些

类型:角色扮演

大小:1

语言:简体中文

平台:互联网

游戏下载

热门手游

相关攻略

手机号码测吉凶
本站所有软件,都由网友上传,如有侵犯你的版权,请发邮件haolingcc@hotmail.com 联系删除。 版权所有 Copyright@2012-2013 haoling.cc