购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.3 RAG开发中常用的外部模块

在AI和RAG系统的开发中,外部模块的使用是提高效率和加速开发的重要手段。本节将介绍几种常用的外部模块,包括用于数据采集的Requests与BeautifulSoup以及用于并行与异步处理的Multiprocessing与Asyncio。掌握这些模块的基本原理与使用方法,可以为复杂项目提供高效的解决方案,提升系统的整体性能与可维护性。

1.3.1 数据采集与预处理:Requests与BeautifulSoup

在AI项目中,数据是驱动系统开发和模型训练的关键。尤其在RAG系统中,需要大量高质量的数据来支撑知识检索和生成。而在网络上,数据往往存在于HTML页面中,以网页内容的形式呈现。因此,掌握数据采集和预处理的方法,能够更好地为系统提供可靠的数据支持。

在Python中,Requests用于发送HTTP请求,获取网页内容,BeautifulSoup则可以解析HTML结构,提取所需信息。下面的示例展示如何使用Requests获取网页数据(网页内容),并结合BeautifulSoup进行数据的结构化提取和预处理(提取网页的标题和所有段落内容)。该示例展示网页文本内容的基本采集和预处理流程。

【例1-7】使用Requests获取网页内容并使用BeautifulSoup解析文本数据。

运行结果如下:

在这个示例中,通过Requests成功获取了网页内容,然后通过BeautifulSoup解析出网页标题和文本段落。find_all()方法用于找到所有<p>标签,并提取其中的文本。通过列表生成式进一步处理,将所有段落内容提取成结构化文本,便于后续分析或处理。

某些页面内容可能存储在HTML表格中,采集这些结构化数据通常需要更多的解析技巧。以下示例展示如何获取包含表格数据的网页,并使用BeautifulSoup解析并结构化地存储表格内容。

假设目标网页包含一个表格,记录了公司名称、行业和市值。下面的示例展示如何从表格中提取这些数据。

【例1-8】从动态页面获取数据并处理表格内容。

运行结果如下:

以上代码通过BeautifulSoup提取包含表格数据的HTML代码,并将每行数据存储到Pandas的DataFrame中,使数据便于进一步分析。解析表格时,首先获取表头,再依次读取每行数据,将其转换为列表格式,最后转换成DataFrame结构,便于后续保存到CSV文件或其他格式。

在RAG系统中,这类结构化的数据采集和解析能够直接应用于知识库的构建、数据分析等应用场景。

Requests及BeautifulSoup中的常用函数、方法汇总如表1-5所示。

表1-5 Requests及BeautifulSoup中的常用函数、方法汇总表

(续表)

该表格涵盖Requests和BeautifulSoup库的常用方法,包括发送请求、获取响应、解析HTML结构、提取标签内容、查找元素等。掌握这些函数可以帮助开发者高效地采集和处理网页数据,为RAG系统和AI项目的数据准备提供支持。

1.3.2 并行与异步处理:Multiprocessing与Asyncio

在AI系统和RAG项目中,面对大量数据处理、模型训练或网络请求任务时,单线程处理会因性能瓶颈影响效率。因此,合理使用并行和异步处理技术可以极大地提升任务执行效率。Multiprocessing模块通过多进程实现任务的并行处理,而Asyncio模块则通过异步编程处理大量的I/O操作,如网络请求和文件读取。

接下来将通过两个示例分别介绍Multiprocessing和Asyncio的使用方法,以应对计算密集型和I/O密集型任务。

Multiprocessing模块适用于CPU密集型任务,可以利用多核CPU的优势。下面的示例展示如何使用multiprocessing.Pool在多个进程中并行计算大量数据的平方值,提高计算速度。

【例1-9】使用Multiprocessing进行多进程并行计算。

运行结果如下:

>> 前10个平方值: [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
>> 并行计算耗时: 0.58 秒

在该示例中,使用multiprocessing.Pool创建了一个包含4个进程的进程池,并通过pool.map()函数将任务分配到各个进程中并行处理。这种方式能够大大提高CPU密集型任务的处理效率,尤其是在处理大量数据时。compute_squares函数中定义的并行处理逻辑,通过在多个进程间分配任务,达到了加速计算的效果。

对于大量网络请求或文件读写等I/O密集型任务,Asyncio可以通过协程实现异步非阻塞操作,避免因I/O等待时间浪费资源。下面的示例展示如何使用Asyncio模块和aiohttp库并发发送多个网络请求,并处理结果。

【例1-10】使用Asyncio进行异步网络请求。

运行结果如下:

>> 获取内容长度:1256 字符
>> 获取内容长度:24134 字符
>> 获取内容长度:11823 字符
>> 获取内容长度:3411 字符
>> 获取内容长度:49786 字符
>> 异步网络请求耗时: 0.95 秒

在该示例中,通过aiohttp库和Asyncio模块实现了异步非阻塞的网络请求。每个请求通过async with session.get(url)获取内容,await关键字则等待请求完成。在fetch_multiple函数中,通过asyncio.gather()并发执行多个任务,将所有请求并发执行,大幅减少了总的执行时间。aiohttp会自动为每个请求分配一个协程,等待请求完成后立即处理下一个任务,从而避免了传统同步请求中的阻塞问题。

Multiprocessing及Asyncio中的常用函数、方法汇总如表1-6所示。

表1-6 Multiprocessing及Asyncio中的常用函数、方法汇总表

(续表)

该表涵盖multiprocessing和asyncio库的常用方法,包括创建与管理多进程、处理并发任务、队列操作以及协程与异步处理等内容。掌握这些函数和方法可以帮助开发者更高效地执行并行和异步任务,提高AI开发和RAG系统的处理效率。 oT+suMy9FqQRG44nbmcqsuRxBVrY5L9WCijQtC46Y7MBaDli0p0UKTNf+15sEInw

点击中间区域
呼出菜单
上一章
目录
下一章
×