当前位置: 首页 > news >正文

【自然语言处理与大模型】LlamaIndex的数据连接器和对话引擎

        LlamaIndex 是领先的开发框架,专为结合大型语言模型(LLM)与个性化工作流打造高效的数据驱动型智能代理而设计。一般我们用它来做RAG检索增强生成。

(1)RAG的介绍

        大型语言模型(LLM)虽然在海量数据上进行了训练,但通常并未基于自己的特定数据进行学习。为了解决这一问题,检索增强生成(Retrieval-Augmented Generation,RAG)技术通过将您的数据整合到 LLM 已有的知识中,实现对模型输入的个性化增强。

LamaIndex框架实现RAG的原理图


在构建大多数大型应用时,RAG通常包含五个核心阶段。这些阶段构成了整个流程的基础:

1. 数据加载(Loading)
        这是将数据从原始来源导入工作流程的过程。无论数据存储在文本文件、PDF、网页、数据库还是通过 API 提供,LlamaIndex 都提供了丰富的工具来完成这一任务。LlamaHub 更是提供了数百种现成的数据连接器,便于快速集成各类数据源。

2. 索引构建(Indexing)
        索引阶段的目的是创建一种高效的数据结构,以便后续查询使用。对于 LLM 应用而言,这通常涉及将数据转化为语义向量(vector embeddings),并结合多种元数据策略,从而实现对上下文相关数据的快速准确检索。

3.数据存储(Storage)
        一旦数据被索引,通常需要将索引结果及相关的元数据持久化存储下来,以避免重复执行耗时的索引过程。LlamaIndex 支持多种本地和远程存储方式,确保数据可复用且易于管理。

4. 查询处理(Querying)
        针对不同的索引策略,您可以采用多种方式进行查询操作。LlamaIndex 提供了灵活的查询接口,支持子查询、多步骤查询、混合检索策略等,帮助您充分利用 LLM 和底层数据结构的能力。

5. 效果评估(Evaluation)
        在任何系统中,评估都是不可或缺的一环。它可以帮助您客观地衡量不同策略的效果,或在进行更改后评估其影响。通过评估机制,您可以量化查询响应的准确性、信息忠实度以及响应速度,从而持续优化系统性能。

RAG通用处理流程

(2)LlamaIndex如何实现RAG?

① 加载HF模型

        使用 LlamaIndex 中的 HuggingFaceLLM 类来加载一个本地的大规模语言模型(LLM),并利用它来进行对话是必须要掌握的技能。

from llama_index.core.llms import ChatMessage
from llama_index.llms.huggingface import HuggingFaceLLM#使用HuggingFaceLLM加载本地大模型
llm = HuggingFaceLLM(model_name="/home/Qwen/Qwen1.5-1.8B-Chat",tokenizer_name="/home/Qwen/Qwen1.5-1.8B-Chat",model_kwargs={"trust_remote_code":True},tokenizer_kwargs={"trust_remote_code":True}
)
#调用模型chat引擎得到回复
rsp = llm.chat(messages=[ChatMessage(content="llamaindex是什么?")])print(rsp)

② 数据连接器

         数据连接器的作用是将不同数据源的数据提取到LlamaIndex中,最简单易用的阅读器是内置的 SimpleDirectoryReader。它可以遍历指定目录中的所有文件,并为每个文件创建对应的文档对象。该阅读器原生集成于 LlamaIndex 中,支持多种文件格式,包括 Markdown、PDF、Word 文档、ppt、图像、音频以及视频等。

from llama_index.embeddings.huggingface import HuggingFaceEmbedding
from llama_index.core import Settings,SimpleDirectoryReader,VectorStoreIndex
from llama_index.llms.huggingface import HuggingFaceLLM# 初始化一个HuggingFaceEmbedding对象,用于将文本转换为向量表示
embed_model = HuggingFaceEmbedding(#指定了一个预训练的sentence-transformer模型的路径model_name="/home/sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2"
)# 将创建的嵌入模型赋值给全局设置的embed_model属性,这样在后续的索引构建过程中,就会使用这个模型
Settings.embed_model = embed_model# 使用HuggingFaceLLM加载本地大模型
llm = HuggingFaceLLM(model_name="/home/Qwen/Qwen1.5-1.8B-Chat",tokenizer_name="/home/Qwen/Qwen1.5-1.8B-Chat",model_kwargs={"trust_remote_code": True},tokenizer_kwargs={"trust_remote_code": True}
)# 设置全局的llm属性,这样在索引查询时会使用这个模型。
Settings.llm = llm# 从指定目录读取文档,将数据加载到内存
documents = SimpleDirectoryReader("/home/data").load_data()
# print(documents)# 创建一个VectorStoreIndex,并使用之前加载的文档来构建向量索引
# 此索引将文档转换为向量,并存储这些向量(内存)以便于快速检索
index = VectorStoreIndex.from_documents(documents)# 创建一个查询引擎,这个引擎可以接收查询并返回相关文档的响应。
query_engine = index.as_query_engine()
rsp = query_engine.query("llamaindex是什么?")
print(rsp)

相关文章:

  • 二、Python变量基础(2)
  • 30天开发操作系统 第27天 -- LDT与库
  • 工业主义与民主的兴衰:历史逻辑与未来危机
  • uniswap v4 合约解析1 pool初始化
  • VTK 数据结构和算法类介绍
  • pyqt写一个单片机配置界面
  • 基于YOLOv的目标检测训练数据构建方法研究—图像采集、标注、划分与增强一体化流程设计
  • java单元测试代码
  • Python中的JSON库,详细介绍与代码示例
  • 《RESTful API版本控制的哲学思辨:稳定性与创新性的终极平衡》
  • Node.js 是什么?
  • 深入理解 TensorFlow 的模型保存与加载机制(SavedModel vs H5)
  • 蓝桥杯单片机国赛模板——基于柳离风模板
  • 列日-巴斯通-列日:与VELO Senso TT+见证精彩时刻
  • java类=null的回收
  • PostgreSQL 的 pg_ls_waldir 函数
  • Scala day6(Class,field,Single Object)
  • 【Flask】ORM模型以及数据库迁移的两种方法(flask-migrate、Alembic)
  • 学习路线(嵌入式软件)
  • 【C/C++】无锁编程——compare_exchange_strong
  • 五一假期前三日多景区客流刷新纪录,演艺、古镇、山水都很火
  • 出现这几个症状,说明你真的老了
  • 徐丹任武汉大学药学院院长:研究领域在国际上处领跑地位
  • 韩国经济副总理崔相穆宣布辞职
  • 今年4月上海一二手房成交面积同比增21%,二手房成交2.07万套
  • 视频丨英伟达总裁黄仁勋:美勿幻想AI领域速胜中国