LlamaIndex中的概念与常用术语

很多人在基于RAG架构构建大型语言模型(LLM)应用程序时经常会遇到一些高级概念。本文对于基于RAG架构的应用开发时,所可能遇到的一些高级概念进行讲解,从而减少读者的搜索/学习成本。

什么是LlamaIndex

LlamaIndex是一个针对于基于LLM(大型语言模型)的应用程序的数据框架,为应用程序提供RAG能力。这类LLM系统被称为RAG系统,代表"检索增强生成"(Retrieval-Augmented Generation)。LlamaIndex提供了各种抽象,以便更容易地获取、结构化和访问私有或特定领域的数据,并安全、可靠地将这些数据注入LLM中,以生成更准确的响应。

目前LlamaIndex提供Python和Typescript的版本。

检索增强生成(RAG)

大型语言模型(LLM)在大量数据上进行训练,但这些数据通常是通用型的数据,包含各种专业方向的知识,但很多人只需要大模型在一个小领域提供服务即可。但大模型没有在你自己的数据上进行训练,在一个小专业领域上可能效果不够。

检索增强生成(RAG)通过将你的数据添加到LLM可访问的数据中来解决这个问题。简单地说,如果你没有显卡来训练模型,又有一些需要模型使用的知识,那就可以使用RAG架构,通过在模型的输入包含纵向的知识加强模型的效果,其实就是相当于为模型外挂一个数据库。

在RAG中,私有的数据需要经过预处理,构建"索引"以供查询。用户查询(用户输入给大模型的提问)作用于索引,搜索出与用户提问最相关的上下文。这个上下文和查询一起构建成一个提示发送给LLM,然后LLM提供回复。

从目前来说,如果考虑在不训练模型的前提下,将数据引入你的LLM,RAG是性价比最高的方式。RAG的基本架构如下图所示:

RAG的步骤

在RAG中,有五个关键步骤,他们属于是对于RAG过程的一个顶层抽象。它们是:

  1. 加载:这指的是在收集完各种数据(无论是文本文件、PDF、另一个网站、数据库还是API)后,将数据引入RAG pipeline中的过程。

  2. 索引:类似于数据库的索引,在收集完数据后需要创建一个高效查询数据的数据结构。对于LLM来说,这就是指意味着创建向量嵌入,即利用高维度向量表示原本的数据,以便于准确找到上下文相关的数据。

  3. 存储:数据被索引后,需要找个能够存储数据、数据上的索引、元数据的地方,从而避免反复建立索引。

  4. 查询:之前说过,RAG的本质就是给模型外挂一个数据库,用户输入查询后,需要检索出与用户查询相关的知识

  5. 评估:任何AI应用,都需要一个模块来可视化当前策略/整个pipeline中各个部件的性能,如准确率、响应速度、内存占用、回答结果的质量等等等

每个步骤中的重要概念

在利用一些成熟框架来构建RAG应用时,每个阶段都会有一些术语,其概念如下所示。

加载阶段

节点和文档(Nodes and Documents)

  • 文档是数据源的容器,举个例子,一个pdf就可以是一个文档,一个excel表也可以是一个文档,即文档代表的是数据的一种载体,格式任意,但是一个RAG应用中会使用一个标准化的文档格式。
  • 节点是数据的原子单位,代表源文档的"块"。每个节点都具有元数据,将它们与所在的文档和其他节点相关联。

连接器(Connectors):数据连接器将不同数据源和数据格式中的数据格式化到应用所指定类型的文档,并构建节点。

索引阶段

索引(index):即基于数据生成的嵌入向量,这些嵌入存储在一个专用于存储向量的数据库中。索引还可以存储有关数据的各种元数据。

嵌入(embedding):基于数据所生成的数值表示称为嵌入。在查询阶段会将查询转换为嵌入,而后在存储的向量中找到与查询嵌入数值相似的数据。

查询阶段

检索器(retriever):检索器定义了在给定查询时如何高效地从索引中检索相关上下文。一个检索器中可能实现了多种不同的检索策略

路由器(router):路由器决定使用哪个检索器从知识库中检索相关上下文。更具体地说,路由器负责选择一个或多个候选检索器来执行查询。

节点后处理器(node postprocessor):节点后处理器接收一组检索到的节点,并对它们应用转换、过滤或重新排名逻辑。

响应合成器(response synthesizer):响应合成器使用用户查询和给定的一组检索到的文本块从LLM生成回复。

LLM应用程序的三大部件

基于LLM的应用程序有很多种,但它们大致可以分为三类:

查询引擎:查询引擎是一个端到端的pipeline,你对数据提出问题。它接收自然语言形式的查询,并返回响应,以及检索并传递给LLM的参考上下文。

聊天引擎:聊天引擎也是一个端到端的pipeline,用于与数据进行对话(对话会有多个来回而不是单个问题和答案),对话的轮数就是查询引擎和聊天引擎之间的区别。

代理(Agents):代理是由LLM驱动的自动化决策者,通过一组工具与世界互动。代理可以采取任意数量的步骤来完成给定任务,动态决定最佳行动方案,而不是遵循预先确定的步骤。这为它提供了额外的灵活性来处理更复杂的任务。

相关推荐
可惜已不在34 分钟前
AI 搜索引擎工具集合
人工智能·ai
Landy_Jay38 分钟前
深度学习:基于MindSpore实现CycleGAN壁画修复
人工智能·深度学习
Langchain1 小时前
不可错过!CMU最新《生成式人工智能大模型》课程:从文本、图像到多模态大模型
人工智能·自然语言处理·langchain·大模型·llm·大语言模型·多模态大模型
龙的爹23331 小时前
论文翻译 | Generated Knowledge Prompting for Commonsense Reasoning
人工智能·gpt·机器学习·语言模型·自然语言处理·nlp·prompt
龙的爹23331 小时前
论文翻译 | Model-tuning Via Prompts Makes NLP Models Adversarially Robust
人工智能·gpt·语言模型·自然语言处理·nlp·prompt
方世恩2 小时前
【进阶OpenCV】 (5)--指纹验证
人工智能·opencv·目标检测·计算机视觉
幽影相随2 小时前
构建llama.cpp并在linux上使用gpu
llm·llama.cpp
A_lvvx2 小时前
OpenCV透视变换
人工智能·opencv·计算机视觉
百锦再2 小时前
自动驾驶的技术实现及原理
人工智能·机器学习·自动驾驶
AcademicIdeas学境思源2 小时前
避免学术欺诈!在ChatGPT帮助下实现严格引用并避免抄袭
人工智能