来源:互联网 更新时间:2026-08-03 13:33
说到底,数据的准备工作才是整个流程的基石。在把LLM引入数据操作之前,得先完成数据的处理与加载——这和机器学习里的ETL(提取、转换、加载)本质上是一回事。

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,你可以前往下面的地址按需下载:
比如,想读数据库数据,先安装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的子类),我们可以根据需求自由组合不同的转换步骤。
索引对象自带一个.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]
)
如果希望完全掌控每一步,可以用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]) Ondo将于今日上线股票永续合约
Intel喜讯连连:18A工艺良率提升到85%、CPU将涨价15%
晶核艾尔莎角色盘点 晶核艾尔莎强度分析与实战表现
区块链OTC交易所有哪几家比较正规?
黄金价格不断创新高!黄金稳定币XAU、PAXG市值达11亿美元
AMD英特尔集体失眠!英伟达Rosa CPU搭载Rigel核:单核性能碾压x86
遗忘之海密室通关教程 遗忘之海密室全关卡解谜思路与难点解析
CC币价格预测(2026-2035):Canton币今日价格走势+长期价格预测
新浪机器学习热点小时报丨2026年07月25日18时_今日实时机器学习热点速递
异环伊洛伊阵容怎么搭配
新破天一剑太极刀任务攻略 破天一剑怎么取太极刀
潜水员戴夫丛林DLC接吻的鱼任务攻略
五千元以下的笔记本几乎消失!经销商:至少一年看不到涨价尽头
Windows环境下Claude Code从C盘迁移至D盘的完整操作教程
华为Mate 70系列首发的红枫镜头下放至千元档:全员普及原色影像
币安投票上币与下币机制解析:买票争议与规则边界
合集38个项目筹集5.406亿美元 Figure融资2亿
微软Copilot AI漏洞可致敏感数据泄露,企业用户需及时更新
《探索流放之路物品等级的奥秘》 揭秘物品等级的效果和怎么查看
逆战未来s3出什么新角色 逆战未来S3赛季新角色爆料
手机号码测吉凶
本站所有软件,都由网友上传,如有侵犯你的版权,请发邮件haolingcc@hotmail.com 联系删除。 版权所有 Copyright@2012-2013 haoling.cc