LlamaIndex是什么?LlamaIndex综述!看这一篇就够了!

LlamaIndex是什么?LlamaIndex综述!看这一篇就够了!

LlamaIndex是什么?LlamaIndex综述!看这一篇就够了!

3 人赞同了该文章

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 与外部数据,并提供了各种工具和功能来优化数据访问、查询和处理。

如果你对AI大模型感兴趣,在这里我给大家推荐一个非常优质的 AI 大模型资料,由我和鲁为民博士共同整理,鲁为民博士先后获得了北京清华大学学士和美国加州理工学院博士学位,在包括IEEE Transactions等学术期刊和诸多国际会议上发表了超过50篇学术论文、取得了多项美国和中国发明专利,同时还斩获了吴文俊人工智能科学技术奖。目前我正在和鲁博士共同进行人工智能的研究。

资料内容涵盖了从入门到进阶的各类视频教程和实战项目,无论你是小白还是有些技术基础的,这份资料都绝对能帮助你提升薪资待遇,转行大模型岗位。入口直接给放下面了,点击卡片链接即可领取⬇️⬇️⬇️

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?")
​

我们可以把框架的基本流程总结如下:

  1. 利用 Data Connectors 从不同数据源读取数据。
  2. 利用 Indexes 将数据结构化存储。
  3. 利用 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,并进行智能问答 了!

如果你对AI大模型感兴趣,在这里我给大家推荐一个非常优质的 AI 大模型资料,由我和鲁为民博士共同整理,鲁为民博士先后获得了北京清华大学学士和美国加州理工学院博士学位,在包括IEEE Transactions等学术期刊和诸多国际会议上发表了超过50篇学术论文、取得了多项美国和中国发明专利,同时还斩获了吴文俊人工智能科学技术奖。目前我正在和鲁博士共同进行人工智能的研究。

posted on 2026-05-18 16:43  漫思  阅读(44)  评论(0)    收藏  举报

导航