一、什么是LlamaIndex
1. 简介
LlamaIndex 是一个用于 LLM 应用步调的数据框架,用于注入,结构化,并访问私有或特定范畴数据。就是将大模型部署到本地或是公司服务器上,然后将自有数据结合大模型为个人或是企业服务。
2. 作用
在本质上,LLM(如 GPT,DeepSeek等)为人类和推断出的数据提供了基于天然语言的交互接口。广泛可用的大模型通常在大量公开可用的数据上举行的预训练,包括来自维基百科、邮件列表、册本和源代码等。构建在LLM模型之上的应用步调通常需要使用私有或特定范畴数据来加强这些模型。不幸的是,这些数据大概分布在差别的应用步调和数据存储中。它们大概存在于API之后、SOL数据库中,大概存在在PDF文件以及幻灯片中。Llamalndex应运而生。总体来说就是将特定范畴数据和大模型相结合。
二、LlamaIndex焦点组件
LlamaIndex 提供的五大焦点工具如下:
1. 数据连接器(Data Connectors)
数据连接器用于从各种数据源中摄取数据,并将其转换为统一的文档表示形式。支持的数据源包括本地文件、PDF、API、SQL 数据库、Notion、Google 文档等。
2. 数据索引(Data Indexes)
数据索引将数据组织成可查询的索引形式,支持多种索引范例:
向量索引(Vector Store Index):基于向量相似度检索数据。
列表索引(List Index):按顺序存储节点,支持关键字过滤。
树形索引(Tree Index):构建层次化结构,支持从根节点到叶节点的查询。
关键字表索引(Keyword Table Index):通过关键字映射快速检索节点。
3. 引擎(Engines)
提供对数据的天然语言访问,主要包括:查询引擎(Query Engines):用于问答,比方 RAG 流程中结合上下文和 LLM 天生答案。谈天引擎(Chat Engines):用于与数据举行多轮对话交互。
4. 数据署理(Data Agents)
数据署理是由大语言模型(LLM)驱动的知识工作者,通过工具加强,能够执行各种任务,如研究、数据提取等。署理可以使用 RAG 管道等多种工具来完成任务。
5. 应用集成(Application Integrations)
LlamaIndex 提供了丰富的应用集成选项,包括:
向量数据库集成:如 Pinecone、Chroma、Weaviate、Milvus 等。应用框架集成:如 Streamlit、Chainlit。
其他集成:如与 OpenAI API、Hugging Face Transformers、Azure OpenAI 等模型服务的对接.
三、LlamaIndex焦点概念
L1amaIndex 帮助构建 LLM 驱动的,基于个人或私域数据的应用。RAG(Retrieval AugmentedGeneration)是 LlamaIndex 应用的焦点概念,
1. RAG
RAG,也称为检索加强天生,是使用个人或私域数据加强 LLM 的一种范式。通常,它包罗两个阶段:
1,索引
构建知识库
2,查询
从知识库检索相关上下文信息,以辅助LLM答复问题.
LlamaIndex提供了工具包帮助开发者及其便捷地完成这两个阶段工作。
2. 索引阶段
LlamaIndex 通过提供 Data connectors(数据连接器)和 Indexes (索引)帮助开发者构建知识库该阶段会用到如下工具或组件:
1,Data connectors
数据连接器。它负责将来自差别数据源,差别格式的数据注入,并转换为 lamaIndex 支持的文档(Document)体现形式,其中包罗了文本和元数据。
2,Documents /Nodes
Document是 LlamaIndex 中容器的概念,它可以包罗任何数据源,包括,PDF文档,API相应,或来自数据库的数据。Node是 LlamaIndex 中数据的最小单元,代表了一个 Document的分块。它还包罗了元数据,以及与其他Node的关系信息。这使得更精确的检索操作成为大概。
3,Data Indexes
LlamaIndex 提供便利的工具,帮助开发者为注入的数据创建索引,使得未来的检索简单而高效,最常用的索引是向量存储索引-vectorstoreIndex。
中的来说,就是连接用户的数据,然后存起来,切成小段,再给它们创建索引,方便背面查找相关信息。
3. 查询阶段
在查询阶段, RAG 管道根据的用户査询,检索最相关的上下文,并将其与査询一起,传递给 LLM,以合成相应。这使 LLM 能够获得不在其原始训练数据中的最新知识,同时也减少了虚构内容。该阶段的关键寻衅在于检索、编排和基于知识库的推理。
LlamaIndex 提供可组合的模块,帮助开发者构建和集成 RAG 管道,用于问答、谈天机器人或作为署理的一部门。这些构建块可以根据排名偏好举行定制,并组合起来,以结构化的方式基于多个知识库举行推理。
该阶段的构建块包括:
1,Retrievers
检索器。它定义怎样高效地从知识库,基于查询,检索相关上下文信息。
2,Node Postprocessors
Node后处理器。它对一系列文档节点(Node)实施转换,过滤,或排名。
3,Response Synthesizers
相应合成器。它基于用户的查询,和一组检索到的文本块(形成上下文),,使用 LLM 天生相应。
RAG管道包括:
4,Query Engines
查询引擎-端到端的管道,允许用户基于知识库,以天然语言提问,并获得答复,以及相关的上下女
5,Chat Engines
谈天引擎-端到端的管道,允许用户基于知识库举行对话(多次交互,会话汗青)。
6,Agents
署理,它是一种由 LLM 驱动的自动化决定器。署理可以像査询引擎或谈天引擎一样使用。主要区别在于,署理动态地决定最佳的动作序列,而不是遵循预定的逻辑。这为其提供了处理更复杂任务的额外机动性。
四、个性化配置
LlamaIndex 对 RAG 过程提供了全面的配置支持,允许开发者对整个过程举行个性化设置。常见的配置场景包括:
自定义文档分块
自定义向量存储
自定义检索
指定 LLM
注,个性化配置主要通过 LlamaIndex 提供的 ServiceContext 类实现。
配置场景示例
接下来通过简明示例代码段展示 LlamaIndex 对各种配置场景的支持。
1. 自定义文档分块
这里先定义500一个块,根据自己数据量大小,数据量大的话就可以大点,数据量小就设置小点。
- from llama_index import ServiceContext
- service_context = ServiceContext.from_defaults(chunk_size=500)
复制代码 2. 自定义向量存储
ChromaDB 是一个开源的嵌入式向量数据库,专为存储和查询高维向量数据而设计,特殊适用于与大型语言模型(LLMs)和嵌入模型(Embeddings)相关的应用场景。其焦点目标是帮助开发者高效地存储、检索和管理嵌入向量数据,从而支持天然语言处理、保举系统、问答系统等任务。还有许多别的库,也可以存储向量数据,Milvus,LanceDB等。这也是区别于传统数据MySQL,Redis等。
- import chromadb
- from llama_index.vector_stores import chromaVectorstore
- from 1lama_index import StorageContext
- chroma_client =chromadb.PersistentClient()
- chroma_collection= chroma_client.create_collection("quickstart")
- vector store = ChromaVectorstore(chroma_collection=chroma_collection)
- storage_context = StorageContext.from-defaults(vector_store=vector_store)
复制代码 3. 自定义检索
自定义检索中,我们可以通过参数指定査询引擎(Query Engine)在检索时请求的相似文档数。
下面就是通过查询引擎,选出排名最高前的5条.
- index=VectorstoreIndex.from_documents(documents)
- query_engine = index.as_query_engine(similarity_top_k=5)
复制代码 4. 指定LLM
基座大模型可以自己随便选,Qwen,DeepSeek也可以.
- service_context = ServiceContext.from_defaults(llm=OpenAI())
复制代码 五、总结
大模型开发,对于基座模型一样平常需要很高的算法基本功,以及很强的数学功底,比如DeepSeek基本都是名校博士。但是对于大模型的应用开发,要求就没有那么高,也是未来大部门开发职员从事的方向,主要涉及就是以下2个方向,一个就是微调,一个就是RAG。
1. 微调:
功能:能够让现有的开源大模型明白我们自己的(私有化)数据。
特点:需要做模型的二次训练(成本、风险)
应用场景:当需要去改变大模型自身特性时,就得用微调去调整的是大模型的风格,而不是它的本领(智商)。加强盛模型对当前私有化数据的明白本领。
关于微调可以参考:
XTuner大模型微调
2.RAG
应用场景:事前不训练模型,但需要让模型直接根据我们的数据来举行作答。
功能:能够让现有的开源大模型明白我们自己的(私有化)数据。
特点:相比较于微调来讲,成本更低,风险更小
1.如果不涉及模型问答风格,仅需模型对当下的私有化数据做出答复,那么就用RAG;
2如果涉及到大模型答复风格,大概当前模型对私有数据明白不够准确,再用模型微调技术。
code:
环境配置
- conda create -n llamaindex python==3.12 -y
- conda activate llamaindex
- conda init bash
- conda activate llamaindex
- source ~/.bashrc
- conda activate llamaindex
复制代码 SimpleDirectoryReader就是读取本地文件,如果不指定格式,那就读取当前文件夹下所有格式,也可以指定读取的后缀,也可以是具体的文件名。
- from llama_index.core import SimpleDirectoryReader
- #加载本地文档进行解析
- # documents = SimpleDirectoryReader(input_dir = "/root/autodl-tmp/data",required_exts=[".txt"]).load_data()
- #加载某个文档
- documents = SimpleDirectoryReader(input_files=["/root/autodl-tmp/data/README_zh-CN.md"]).load_data()
- print(documents)
复制代码 下面就是对于一个md文档的读取
加载网页数据,需要再安装一个包
pip install llama-index llama-index-readers-web
- #加载网页数据
- from llama_index.readers.web import SimpleWebPageReader
- documents = SimpleWebPageReader(html_to_text=True).load_data(
- ["https://finance.eastmoney.com/a/202502033310108421.html"]
- )
- print(documents)
复制代码 可以看到一个财经新闻加载乐成
通例文件都是可以直接读取的,但是如果确实非常特殊文件,需要装一个包,可以去llamanhub上下载,内里有非常多的特殊文件格式。可以看到右侧滚动条非常小,说明内里格式有许多。
https://llamahub.ai/
链接: 实战环节
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |