【AI大模型应用开发】【LlamaIndex教程】1. 数据连接模块教程(附代码)
同学小张 2024-06-19 13:01:12 阅读 100
大家好,我是 同学小张,持续学习C++进阶知识和AI大模型应用实战案例,持续分享,欢迎大家点赞+关注,共同学习和进步。
上篇文章我们通过一个简单的例子,学习了LlamaIndex的安装和基本使用,使用 LlamaIndex 构建了一个简单的RAG问答系统。今天我们开始系统化学习,首先看一下LlamaIndex的Load部分。Load部分负责文件数据链接。
文章目录
0. 文件类型加载器:SimpleDirectoryReader1. LlamaHub 中的加载器1.1 使用方式 2. 可以直接将文字转换成 LlamaIndex 需要的 Document 结构3. 文档内容转换3.1 一步到位的简单方法3.2 自定义转换 4. 总结5. 参考
0. 文件类型加载器:SimpleDirectoryReader
上篇文章代码的一开始,我们就使用了这个Reader:
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader# 使用SimpleDirectoryReader从指定路径加载数据documents = SimpleDirectoryReader("D:\GitHub\LEARN_LLM\LlamaIndex\data").load_data()
这是 LlamaIndex 中最容易使用的一个文件夹加载器。它会读取传入的文件夹路径中的所有文件,可以读取各种格式,包括Markdown、PDF、Word、PowerPoint、图像、音频和视频等。
来看下其具体集成的类型:
参考:https://llamahub.ai/l/readers/llama-index-readers-file?from=
from llama_index.core import SimpleDirectoryReaderfrom llama_index.readers.file import ( DocxReader, HWPReader, PDFReader, EpubReader, FlatReader, HTMLTagReader, ImageCaptionReader, ImageReader, ImageVisionLLMReader, IPYNBReader, MarkdownReader, MboxReader, PptxReader, PandasCSVReader, VideoAudioReader, UnstructuredReader, PyMuPDFReader, ImageTabularChartReader, XMLReader, PagedCSVReader, CSVReader, RTFReader,)# PDF Reader with `SimpleDirectoryReader`parser = PDFReader()file_extractor = { ".pdf": parser}documents = SimpleDirectoryReader( "./data", file_extractor=file_extractor).load_data()# Docx Reader exampleparser = DocxReader()file_extractor = { ".docx": parser}documents = SimpleDirectoryReader( "./data", file_extractor=file_extractor).load_data()# HWP Reader exampleparser = HWPReader()file_extractor = { ".hwp": parser}documents = SimpleDirectoryReader( "./data", file_extractor=file_extractor).load_data()# Epub Reader exampleparser = EpubReader()file_extractor = { ".epub": parser}documents = SimpleDirectoryReader( "./data", file_extractor=file_extractor).load_data()# Flat Reader exampleparser = FlatReader()file_extractor = { ".txt": parser}documents = SimpleDirectoryReader( "./data", file_extractor=file_extractor).load_data()# HTML Tag Reader exampleparser = HTMLTagReader()file_extractor = { ".html": parser}documents = SimpleDirectoryReader( "./data", file_extractor=file_extractor).load_data()# Image Reader exampleparser = ImageReader()file_extractor = { ".jpg": parser, ".jpeg": parser, ".png": parser,} # Add other image formats as neededdocuments = SimpleDirectoryReader( "./data", file_extractor=file_extractor).load_data()# IPYNB Reader exampleparser = IPYNBReader()file_extractor = { ".ipynb": parser}documents = SimpleDirectoryReader( "./data", file_extractor=file_extractor).load_data()# Markdown Reader exampleparser = MarkdownReader()file_extractor = { ".md": parser}documents = SimpleDirectoryReader( "./data", file_extractor=file_extractor).load_data()# Mbox Reader exampleparser = MboxReader()file_extractor = { ".mbox": parser}documents = SimpleDirectoryReader( "./data", file_extractor=file_extractor).load_data()# Pptx Reader exampleparser = PptxReader()file_extractor = { ".pptx": parser}documents = SimpleDirectoryReader( "./data", file_extractor=file_extractor).load_data()# Pandas CSV Reader exampleparser = PandasCSVReader()file_extractor = { ".csv": parser} # Add other CSV formats as neededdocuments = SimpleDirectoryReader( "./data", file_extractor=file_extractor).load_data()# PyMuPDF Reader exampleparser = PyMuPDFReader()file_extractor = { ".pdf": parser}documents = SimpleDirectoryReader( "./data", file_extractor=file_extractor).load_data()# XML Reader exampleparser = XMLReader()file_extractor = { ".xml": parser}documents = SimpleDirectoryReader( "./data", file_extractor=file_extractor).load_data()# Paged CSV Reader exampleparser = PagedCSVReader()file_extractor = { ".csv": parser} # Add other CSV formats as neededdocuments = SimpleDirectoryReader( "./data", file_extractor=file_extractor).load_data()# CSV Reader exampleparser = CSVReader()file_extractor = { ".csv": parser} # Add other CSV formats as neededdocuments = SimpleDirectoryReader( "./data", file_extractor=file_extractor).load_data()
1. LlamaHub 中的加载器
除了上面的读取文件之外,实际生活中还有很多地方可以获取数据,例如GitHub,网页,数据库等。这些数据加载器在 LlamaHub 中实现,可以按需使用。下图是 LlamaHub 中加载器列表:
1.1 使用方式
首先得安装相应的包,例如使用DatabaseReader:
pip install llama-index-readers-google# 或者在使用之前加下面这一行应该也行:# from llama_index.core import download_loader
否则会报错:
然后就可以正常使用了:
from llama_index.core import download_loaderfrom llama_index.readers.database import DatabaseReaderreader = 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)
2. 可以直接将文字转换成 LlamaIndex 需要的 Document 结构
from llama_index.core import Documentdoc = Document(text="text")
3. 文档内容转换
加载数据后,下一步是将数据进行处理和转换。这些转换包括分块、提取元数据和对每个块进行向量化,从而确保大模型能够检索数据。
3.1 一步到位的简单方法
其中最简单的转换做法,是上篇文章中我们使用的:from_documents
方法。
from llama_index.core import VectorStoreIndexvector_index = VectorStoreIndex.from_documents(documents)vector_index.as_query_engine()
from_documents()方法,接受一个Document对象数组,并自动解析和拆分它们。
3.2 自定义转换
有时候我们需要自己控制分块等这些转换的逻辑。有以下两种方式:
(1)使用 from_documents 的 transformations 参数,传入一个自定义的分块器。
from llama_index.core.node_parser import SentenceSplittertext_splitter = SentenceSplitter(chunk_size=512, chunk_overlap=10)# per-indexindex = VectorStoreIndex.from_documents( documents, transformations=[text_splitter])
(2)使用全局设置,设置默认的分块器。
from llama_index.core.node_parser import SentenceSplittertext_splitter = SentenceSplitter(chunk_size=512, chunk_overlap=10)# globalfrom llama_index.core import SettingsSettings.text_splitter = text_splitter# per-indexindex = VectorStoreIndex.from_documents(documents)
4. 总结
本文我们介绍了 LlamaIndex 中加载器,以及如何使用它们。LlamaIndex提供了内置的文件加载器,同时也支持 LlamHub 中提供的各种其它类型加载器。
文章最后,简单介绍了下 LlamaIndex 中如何将加载到的文档数据转换成索引。
5. 参考
https://docs.llamaindex.ai/en/stable/understanding/loading/loading/https://docs.llamaindex.ai/en/stable/understanding/loading/llamahub/如果觉得本文对你有帮助,麻烦点个赞和关注呗 ~~~
大家好,我是 同学小张,持续学习 C++进阶知识和 AI大模型应用实战案例欢迎 点赞 + 关注 👏, 持续学习, 持续干货输出。+v: jasper_8017 一起交流💬,一起进步💪。
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。