当前位置: 首页 > 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)
http://www.xdnf.cn/news/294031.html

相关文章:

  • TS 函数中的类型兼容性
  • 20250505下载VLC for Android
  • 集合-探索
  • 观察者模式
  • 论文答辩讲稿脚本分享(附我自己用的版本)
  • Model Context Protocol (MCP) 技术解析
  • Kotlin中 StateFlow 或 SharedFlow 或 LiveData的区别
  • **集合**实验**
  • 基于SpringBoot的漫画网站设计与实现
  • 迭代器模式(Iterator Pattern)
  • Numpy随机分布
  • Lesson 17 Always young
  • Multi Agents Collaboration OS:专属多智能体构建—基于业务场景流程构建专属多智能体
  • 数据库MySQL学习——day9(聚合函数与分组数据)
  • 2025系统架构师---论软件可靠性设计范文
  • c++代码_加密_解密
  • 【了解】数字孪生网络(Digital Twin Network,DTN)
  • Sliding Window Attention(Longformer)
  • R7打卡——糖尿病预测模型优化探索
  • 【STM32单片机】#13 RTC实时时钟
  • cpp学习笔记1--class
  • CloudCompare 中 ccDrawableObject
  • 在Java中,什么是checked exception(即compile-time exception、编译时异常)?
  • 基于DGI框架的最佳实践
  • 数字化工厂中央控制室驾驶舱系统 - Windows 部署笔记
  • 计算机体系结构 第九章
  • 不小心把当前的环境变量路径覆盖掉怎么办
  • Gemini 解释蓝图节点的提示词
  • Lesson 15 Good news
  • 功率放大器设计