技术干货

高级检索增强生成(RAG)应用与LlamaIndex

2024-07-26

By Abhiram Sharma

高级检索增强生成(RAG)应用与LlamaIndex

**引言**

在最近由Zilliz(旧金山)主办的非结构化数据聚会上,LlamaIndex的开发者关系副总裁Laurie Voss发表了一场关于“使用LlamaIndex构建高级RAG应用”的演讲。他分享了如何使检索增强生成(RAG)框架更简单、更易于生产准备的知识,并通过LlamaIndex实现。

**观看Laurie的演讲**

让我们深入探讨RAG的概念,并看看LlamaIndex 🦙如何协助开发RAG应用。快速回顾一下LlamaIndex(以前称为GPTIndex),他们早期的许多工作是与像OpenAI这样的强大闭源技术合作。然而,随着开源模型开始迎头赶上,他们开始整合开源替代品。无论是大型语言模型(LLMs)、嵌入模型还是重新排名技术,他们现在都提供了许多选项,供用户使用自己的数据构建RAG应用。

**什么是检索增强生成(RAG)?**

**系统化RAG工作流程**

RAG是一个旨在通过检索能力帮助大型语言模型(LLMs)克服其局限性的框架。LLMs的主要缺点是它们有有限的上下文窗口,并且只能同时处理组织数据的一部分(一次不超过一百万个标记)。RAG通过选择性地检索最相关的文本/数据来提供最准确的响应,从而解决这个问题。

**RAG的关键优势:**

- **准确性**:当通过实施的检索方法检索到相关且简明的数据并发送到LLM时,它确保了准确的响应。

- **时效性**:一些人可能会问,为什么公司不使用他们的数据训练LLM。微调的挑战在于,将LLM加载到任何环境中,尤其是高质量的环境,已经是昂贵的。另一方面,检索增强生成(RAG)允许轻松、实时的数据更新。这使得RAG成为动态数据环境的实际解决方案,例如在大型私人律师事务所或工业公司中发现的环境。

- **出处**:RAG可以追溯信息的特定来源,这对于需要可验证数据的应用程序至关重要。

简单来说,还记得你小时候参加的理解测试吗?RAG与此非常相似。检索到的文本块充当理解内容,从中LLM(孩子)必须回答查询。就是这么简单 ;-)

**RAG如何工作**

RAG是解决LLMs有限上下文窗口的解决方案。它检索最相关的数据,用上下文增强查询,并生成响应。

**检索技术**

两种技术广泛用于信息检索。

- **关键词搜索**:传统的关键词搜索方法在基于特定术语检索数据时仍然有效。

- **向量搜索(最强大)**:将向量搜索视为将单词转换为称为向量的数字列表。这些向量捕捉每个单词含义的本质。我们可以通过比较这些向量的数字接近度(主要通过余弦相似度或点积来衡量)来找到相似的单词。向量搜索帮助我们更有效、更可靠地检索数据。一旦我们执行了向量搜索,LLM就可以访问最相关的文本来回答查询。

当您想到向量搜索时,请想象您的牛津词典。然而,按字母序列而不是按含义对单词进行分组。向量嵌入模型在维度上做同样的事情。

**使用向量搜索对术语进行维度和语义分组**

另外,开源向量数据库如Milvus可以免费设置向量存储!点击这里查看。

**LlamaIndex:简化RAG实现**

LlamaIndex是一个开源框架,将您的数据连接到LLMs,提供Python和TypeScript版本。它简化了RAG应用的创建,允许开发人员用最少的代码构建功能性RAG系统。借助LlamaIndex,您只需要五行Python代码即可实现基本的RAG功能。

```python

from llama_index.core import VectorStoreIndex, SimpleDirectoryReader

documents = SimpleDirectoryReader("data").load_data()

index = VectorStoreIndex.from_documents(documents)

query_engine = index.as_query_engine()

response = query_engine.query("作者在成长过程中做了什么?")

```

**LlamaIndex提供的高级RAG数据摄取和查询功能**

LlamaIndex还为您的RAG应用提供了广泛的高级数据摄取和查询功能。

**摄取**

- **数据连接器**:LlamaHub由LlamaIndex提供,为各种数据源提供连接器,包括Google Drive、Notion、Slack以及像Postgres和MongoDB这样的数据库。

- **PDF解析**:LlamaIndex提供高级PDF解析功能,将复杂的PDF转换为Markdown,以更好地理解LLM,因为LLM是在大量Markdown数据上训练的。

- **嵌入模型**:LlamaIndex支持各种开源和闭源嵌入模型,允许根据领域进行定制。

- **向量存储**:LlamaIndex与多个向量数据库集成,包括Milvus和Zilliz Cloud,用于高效存储和检索。

**查询**

- **子问题查询引擎**:对于需要多个简单查询的复杂问题,子问题查询引擎将主查询分解为更小的部分,从不同的来源检索答案,并将它们组合成单个响应。

- **查询分解以更好地检索**

- **单独响应收集**

- **最终编译响应**

- **从小到大数据检索**

这种方法涉及将文本的极小片段(与用户查询高度相关的可能性很高的句子)嵌入向量,并检索该句子周围的向量窗口,包括上下文。

- **从小到大数据检索方法可视化**

- **实际实现**

- **元数据过滤**

预标记文档的元数据(例如,年份、用户、公司、关键词),如下面的例子,允许更精确的过滤和检索,提高LLM响应的准确性。此功能可以帮助关键词搜索。将元数据视为文本的自定义属性。

- **混合搜索**

通过结合关键词搜索和向量搜索,混合搜索通过指定的方法运行查询。它根据置信度分数合并结果,确保检索到最相关的数据 - 这里有一个详细的示例和代码。

**代理**

LlamaIndex代理是半自主的软件片段,使用各种工具来实现目标。它们可以结合多种检索策略和工具,有效回答复杂查询。

这样想:工具是用户可以设置其功能描述的预定义用户功能,而代理是与这些工具合作的工程师。如果用户直接提示LLM两个大数的乘积结果,它很可能会给出接近实际真实答案的答案,但不是相同的。但如果我们给它一个乘法工具,它可以根据设置的描述调用,无论数字大小,它都将始终获得正确的答案。

- **简单代理工作流程**

同样,用户可以通过给LLM提供工具及其描述,并让它决定对于特定的RAG查询使用哪个工具,来构建代理RAG工作流程。

**总结**

Laurie的演讲展示了基本和高级RAG应用框架,我们可以使用LlamaIndex用最少的代码行构建。LlamaIndex还为我们提供了LlamaParse,这可以帮助我们将数据索引到我们最喜欢的向量数据库,如Milvus,无论是本地还是云端。最终取决于用户选择最适合他们用例的内容。这次演讲还展示了各种RAG策略,人们可以选择优化检索和生成。

**引用**

Liu, Jerry. “Llamahub.” Llamahub, 2023, https://cloud.llamaindex.ai/parse.

Liu, Jerry. “Starter Tutorial (OpenAI).” LlamaIndex, 2023, https://docs.llamaindex.ai/en/stable/getting_started/starter_example/.

“Llama Hub.” Llama Hub, 2023, https://llamahub.ai/.

LlamaIndex. “Hybrid Search.” LlamaIndex, 2023, https://docs.llamaindex.ai/en/stable/examples/vector_stores/MilvusHybridIndexDemo/.

LlamaIndex. “LLM based Agents.” LlamaIndex, 2023, https://docs.llamaindex.ai/en/stable/use_cases/agents/.

LlamaIndex. “Metadata Replacement + Node Sentence Window.” LlamaIndex, 2023, https://docs.llamaindex.ai/en/stable/examples/node_postprocessor/MetadataReplacementDemo/.

LlamaIndex. “Sub Question Query Engine.” LlamaIndex, 2023, https://docs.llamaindex.ai/en/stable/examples/query_engine/sub_question_query_engine/.

Milvus. “Milvus.” Milvus: Vector database, 2019, https://milvus.io/.

Milvus. “Milvus Vector Datbases.” Milvus: Vector database, 2023, https://milvus.io/.

Milvus. “Quickstart Milvus documentation.” Milvus, 5 May 2024, https://milvus.io/docs/quickstart.md.

  • Abhiram Sharma

    Abhiram Sharma

    Freelance Technical Writer

    准备好开始了吗?

    立刻创建 Zilliz Cloud 集群,存储和检索您的向量。

    免费试用 Zilliz Cloud