1、什么是LlamaIndex
本篇将为各位同学介绍一下LlamaIndex, 它是一个强大的开源工具,它能帮助开发者构建各种基于大型语言模型 (LLM) 的应用程序。它提供了一套工具和 API,使开发者能够轻松地将 LLM 与外部数据源连接起来,从而赋予 LLM 更强大的能力,从功能上看它与LangChian有点类似。
1、 初识LlamaIndex
LlamaIndex (前身为 GPT Index) 是一个数据框架,它诞生的目的是帮助开发人员将外部数据轻松桥接到大型语言模型 (LLM) 应用中。它提供了一种结构化的方法来连接 LLM 与各种数据资源,从而使 LLM 能够访问并利用这些数据来完成更复杂的任务,例如它能实现:
- 增强问答能力:通过连接到外部文档、数据库或 API,LLM 可以提供更准确、更全面的答案,而不仅仅依赖于模型训练数据。
- 个性化体验:LlamaIndex 可以根据用户的特定数据定制 LLM 的响应,例如根据用户的购买历史推荐产品。
- 自动化工作流程:LlamaIndex 可以帮助自动化需要访问和处理外部数据的任务,例如生成报告、总结文档或创建聊天机器人。
2、核心功能
LlamaIndex的核心功能包括:
1. 数据连接器: LlamaIndex 提供了各种数据连接器,可以轻松地将 LLM 连接到不同类型的数据源,包括:
-
文档:PDF、Word、文本文件等。
-
API:RESTful API、GraphQL API 等。
-
数据库:PostgreSQL、MySQL、MongoDB 等。
-
Notion、Slack、Google Docs 等
2. 数据索引: LlamaIndex 提供了多种索引结构,可以有效地组织和存储外部数据,以便 LLM 可以快速访问和检索相关信息。例如:
-
列表索引:将数据存储为简单的列表。
-
向量存储索引:使用向量嵌入将数据存储在向量数据库中,以便进行语义搜索。
-
树索引:将数据组织成树状结构,以便进行分层导航。
-
关键字表索引:使用关键字来索引数据,以便快速查找特定信息。
3. 查询接口: LlamaIndex 提供了用户友好的查询接口,可以轻松地向 LLM 提出问题并获取答案。它支持各种查询类型,例如:
- 基于关键字的查询: 查找包含特定关键字的数据。
- 语义查询:查找与查询语义相似的数据。
- 基于模板的查询:使用预定义的模板生成查询。
LlamaIndex 是一个强大的数据框架,可以帮助开发人员充分发挥 LLM 的潜力,构建更智能、更强大的应用程序。它提供了一种便捷的方式来连接 LLM 与外部数据,并提供了各种工具和功能来优化数据访问、查询和处理。
3、框架结构
LlamaIndex 框架的核心结构可以概括为三个主要组成部分:数据连接器(Data Connectors)、索引(Indexes) 和查询接口(Query Interface)。这三个部分协同工作,使得 LLM 能够有效地访问、理解和利用外部数据。
1. 数据连接器(Data Connectors):
-
作用:数据连接器的主要作用是将各种不同类型的数据源连接到 LlamaIndex 框架中。 它们充当了 LLM 与外部世界之间的桥梁,使得 LLM 能够访问并读取各种数据。
-
类型:LlamaIndex 提供了丰富的内置数据连接器,支持连接到各种常见的数据源,包括:
-
文档:PDF、Word、TXT、Markdown 等各种文档格式。
-
API:RESTful API、GraphQL API 等。
-
数据库:PostgreSQL、MySQL、MongoDB 等关系型和非关系型数据库。
-
云服务:Google Docs、Notion、Slack、Twitter 等。
-
可扩展性: 除了内置的连接器之外,LlamaIndex 还允许用户自定义数据连接器,以满足连接到特定数据源的需求。
示例:
from llama_index import SimpleDirectoryReader
# 加载本地文件夹中的所有文档
documents = SimpleDirectoryReader('data_directory').load_data()
2、 索引(Indexes):
-
作用:索引是 LlamaIndex 框架的核心组件,负责将连接器获取的数据结构化地组织起来,以便 LLM 能够高效地访问和理解数据。不同的索引结构适用于不同的数据类型和查询场景。
-
类型:LlamaIndex 提供了多种不同类型的索引,每种索引都有其独特的结构和优势:
-
列表索引(List Index):将数据存储为一个简单的列表,适用于顺序访问数据,例如逐句读取一篇文章。
-
向量存储索引(Vector Store Index):使用嵌入模型将数据转换为向量,并存储在向量数据库中,支持语义搜索,能够找到与查询语义相似的文本片段。
-
树索引(Tree Index):将数据组织成树状结构,适用于处理具有层次关系的数据,例如代码文件或目录结构。
-
关键字表索引(Keyword Table Index):根据数据的关键字构建索引,适用于快速查找包含特定关键字的信息。
-
选择合适的索引:选择合适的索引类型取决于数据的特点和应用场景。例如,对于需要进行语义搜索的任务,向量存储索引通常是最佳选择。
-
示例:
from llama_index import VectorStoreIndex
# 使用向量存储索引构建索引
index = VectorStoreIndex.from_documents(documents)
3、查询接口(Query Interface):
-
作用:查询接口为用户提供了一种与 LLM 交互并查询索引中数据的方式。用户可以通过查询接口向 LLM 提出问题,LLM 会利用索引中的数据来生成答案。
-
灵活性:LlamaIndex 提供了灵活的查询接口,支持多种不同的查询方式,例如:
-
基于关键字的查询:查找包含特定关键字的数据。
-
语义查询:查找与查询语义相似的文本片段。
-
基于模板的查询:使用预定义的模板来生成查询。
-
自定义查询:用户还可以自定义查询逻辑,以满足特定的应用需求。
-
示例:
from llama_index import QueryEngine
# 创建查询引擎
query_engine = index.as_query_engine()
# 查询索引
response = query_engine.query("What is the main topic of this document?")
我们可以把框架的基本流程总结如下:
-
利用
Data Connectors
从不同数据源读取数据。 -
利用
Indexes
将数据结构化存储。 -
利用
Query Interface
查询数据并获得LLM的回复。
2、 LLamaIndex 入门教程
1、安装 LLamaIndex
pip install llama-index langchain llama-cpp-python chromadb
2 、读取文档数据
LLamaIndex 提供 多种数据加载方式,下面以 TXT 文档 为例:
from llama_index.core import SimpleDirectoryReader
# 读取本地文件夹中的所有文档
documents = SimpleDirectoryReader("files/").load_data()
print(f"文档数量: {len(documents)}")
print(documents[0].text[:500]) # 预览前 500 个字符
LLamaIndex 还支持读取 PDF、Notion、数据库等数据源。
3 、构建索引
打开huggingface官网,搜索embedding模型,然后把embedding模型下载到本地
# 下载nomic-embed-text-v2-moe 到models文件夹
huggingface-cli download nomic-ai/nomic-embed-text-v2-moe --local-dir ./models
from llama_index.core import VectorStoreIndex
from llama_index.core import SimpleDirectoryReader
from llama_index.embeddings.huggingface import HuggingFaceEmbedding
# 读取本地文件夹中的所有文档
documents = SimpleDirectoryReader("files/").load_data()
# 创建索引
embedding = HuggingFaceEmbedding(model_name='./models', trust_remote_code=True)
index = VectorStoreIndex.from_documents(documents, embed_model=embedding)
# 保存索引
index.storage_context.persist("index_storage/")
LLamaIndex 会自动 分块、转换向量并存储索引。
4 、查询文档
from langchain.llms import Ollama
from llama_index.core import load_index_from_storage, StorageContext
from llama_index.embeddings.huggingface import HuggingFaceEmbedding
# 自定义本地 Embedding 模型
embedding_model = HuggingFaceEmbedding(model_name="./models", trust_remote_code=True)
# 加载索引
storage_context = StorageContext.from_defaults(persist_dir="index_storage/")
index = load_index_from_storage(storage_context, embed_model=embedding_model)
# 自定义Chat模型
llm = Ollama(
model='deepseek-r1:7b',
)
# 创建查询引擎
query_engine = index.as_query_engine(llm=llm)# 进行查询response = query_engine.query("这篇文档的主要内容是什么?")
print(response)
这样,我们就可以 用 LlamaIndex 读取 PDF,并进行智能问答 了!
那么,如何系统的去学习大模型LLM?
作为一名从业五年的资深大模型算法工程师,我经常会收到一些评论和私信,我是小白,学习大模型该从哪里入手呢?我自学没有方向怎么办?这个地方我不会啊。如果你也有类似的经历,一定要继续看下去!这些问题啊,也不是三言两语啊就能讲明白的。
所以我综合了大模型的所有知识点,给大家带来一套全网最全最细的大模型零基础教程。在做这套教程之前呢,我就曾放空大脑,以一个大模型小白的角度去重新解析它,采用基础知识和实战项目相结合的教学方式,历时3个月,终于完成了这样的课程,让你真正体会到什么是每一秒都在疯狂输出知识点。
由于篇幅有限,⚡️ 朋友们如果有需要全套 《2025全新制作的大模型全套资料》,扫码获取~
👉大模型学习指南+路线汇总👈
我们这套大模型资料呢,会从基础篇、进阶篇和项目实战篇等三大方面来讲解。
👉①.基础篇👈
基础篇里面包括了Python快速入门、AI开发环境搭建及提示词工程,带你学习大模型核心原理、prompt使用技巧、Transformer架构和预训练、SFT、RLHF等一些基础概念,用最易懂的方式带你入门大模型。
👉②.进阶篇👈
接下来是进阶篇,你将掌握RAG、Agent、Langchain、大模型微调和私有化部署,学习如何构建外挂知识库并和自己的企业相结合,学习如何使用langchain框架提高开发效率和代码质量、学习如何选择合适的基座模型并进行数据集的收集预处理以及具体的模型微调等等。
👉③.实战篇👈
实战篇会手把手带着大家练习企业级的落地项目(已脱敏),比如RAG医疗问答系统、Agent智能电商客服系统、数字人项目实战、教育行业智能助教等等,从而帮助大家更好的应对大模型时代的挑战。
👉④.福利篇👈
最后呢,会给大家一个小福利,课程视频中的所有素材,有搭建AI开发环境资料包,还有学习计划表,几十上百G素材、电子书和课件等等,只要你能想到的素材,我这里几乎都有。我已经全部上传到CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费
】
相信我,这套大模型系统教程将会是全网最齐全 最易懂的小白专用课!!