大模型RAG项目实战:向量数据库Faiss
注:此文章内容均节选自充电了么创始人,CEO兼CTO陈敬雷老师的新书《GPT多模态大模型与AI Agent智能体》(跟我一起学人工智能)【陈敬雷编著】【清华大学出版社】
清华《GPT多模态大模型与AI Agent智能体》书籍配套视频课程【陈敬雷】
文章目录
- GPT多模态大模型与AI Agent智能体系列一百一二十三
- 大模型RAG项目实战:向量数据库Faiss
- 导入所需的库
- 设置向量的维度和数量
- 设置随机种子以确保结果可复现
- 生成索引向量库的向量
- 生成待检索的query向量
- 创建一个FlatL2索引,使用L2范数(欧氏距离)作为相似度度量方法
- 将索引向量库中的向量添加到索引中
- 检索TopK相似query,这里K设为4
- 打印前五个query的TopK索引和距离
- 更多技术内容
- 总结
GPT多模态大模型与AI Agent智能体系列一百一二十三
大模型RAG项目实战:向量数据库Faiss
5.3.1 Faiss
Faiss的全称是Facebook AI Similarity Search,是FaceBook的AI团队针对大规模相似度检索问题开发的一个工具,使用C++编写,有Python接口,对10亿量级的索引可以做到毫秒级检索的性能。Faiss是免费且无需注册的,最早由Facebook AI Research 团队在2017年发布,它基于大规模语言模型的基础上发展而来,利用高效的索引结构和搜索算法,可以处理大规模数据集和高维向量。Faiss在发布后迅速受到了广泛的关注和应用。其高效的性能和优秀的扩展性使得它成为了许多大型公司和研究机构进行相似性搜索和向量检索的首选工具。随着时间的推移,Faiss不断进行更新和优化,增加了更多的功能和特性,为用户提供更好的体验。
1.安装与环境配置
在开始使用Faiss之前,首先需要确保它已经被正确安装在你的系统中。Faiss的安装过程非常简单。建议安装1.8.3及以上版本,因为新版本已经修复了旧版本中存在的诸多问题,安装过程也变得更加顺畅。可以通过pip命令轻松安装CPU版本的Faiss:
pip install faiss-cpu1.8.3
如果你的硬件环境支持GPU,并且你需要利用GPU来加速检索过程,可以安装GPU版本的Faiss:
pip install faiss-gpu1.8.3
新版本的Faiss还加强了对Windows操作系统的支持,这意味着无论你是在Linux、macOS还是Windows环境下工作,都可以无障碍地使用Faiss。
2.Faiss的基本使用方法
Faiss的使用流程可以分为三个基本步骤:
(1)准备向量库:首先,你需要准备一个向量库,这些向量将被用于后续的检索过程。向量库中的每个向量都应该具有相同的维度。
(2)构建索引:接着,使用Faiss提供的API构建一个索引。索引的类型可以根据你的具体需求进行选择,例如暴力检索(Flat)、倒排索引(IVF)等。
(3)检索相似向量:最后,使用构建好的索引进行相似向量的检索。Faiss会返回与查询向量最相似的TopK向量及其相似度得分。
以下是一个简单的示例代码,展示了如何使用Faiss进行相似向量的检索,代码如下:
#第5章/FaissSimpleUseDemo.py
导入所需的库
import numpy as np
import faiss
设置向量的维度和数量
d = 64 # 向量维度
nb = 100000 # 索引向量库的数据量
nq = 10000 # 待检索query的数目
设置随机种子以确保结果可复现
np.random.seed(1234)
生成索引向量库的向量
xb = np.random.random((nb, d)).astype(‘float32’) # 索引向量库的向量
xb[:, 0] += np.arange(nb) / 1000. # 在第一维上加上一个递增的偏移量
生成待检索的query向量
xq = np.random.random((nq, d)).astype(‘float32’) # 待检索的query向量
xq[:, 0] += np.arange(nq) / 1000. # 在第一维上加上一个递增的偏移量
创建一个FlatL2索引,使用L2范数(欧氏距离)作为相似度度量方法
index = faiss.IndexFlatL2(d)
将索引向量库中的向量添加到索引中
index.add(xb)
检索TopK相似query,这里K设为4
k = 4
D, I = index.search(xq, k) # 返回每个query最相似的TopK索引列表及其距离
打印前五个query的TopK索引和距离
print(I[:5])
print(D[-5:])
3.Faiss常用索引类型分析
Faiss有以下几种核心索引类型,包括但不限于:
(1)Flat:暴力检索,提供最高的召回率,但速度慢、内存占用大,适用于向量量级较小的情况。
(2)IVFx Flat:倒排索引与暴力检索结合,利用k-means聚类减少搜索空间,提高检索速度,适用于百万级向量。
(3)PQx:乘积量化索引,将向量分割成多个子空间独立检索,速度快、内存占用小,但牺牲召回率,适合内存紧张且速度敏感的应用。
(4)IVFxPQy:结合倒排和乘积量化,平衡了速度、内存和召回率,广泛用于工业界。
(5)LSH:局部敏感哈希,是一种特别适用于处理大规模数据集的检索技术。它通过一种巧妙的方式利用哈希技术来加速高维空间中相似向量的查找过程。与传统的哈希技术不同,局部敏感哈希并不试图避免哈希冲突,相反,它依赖于冲突来查找近邻。具体来说,如果两个向量在高维空间中彼此接近,那么通过精心设计的哈希函数对它们进行哈希处理后,它们被分配到同一个哈希桶的概率非常高。相反,如果两个向量相距较远,它们被分配到相同哈希桶的概率就会非常低。LSH的优势在于其训练过程非常迅速,支持分批导入数据,且索引占用的内存非常小,检索速度也相对较快。这些特性使得LSH非常适合于候选向量库非常庞大、内存资源受限的离线检索场景。尽管如此,LSH也有其局限性,最主要的是召回率较低。这意味着在检索过程中可能会遗漏一些实际上与查询向量相似的向量。因此,在实际应用中,需要在检索速度、内存占用和召回率之间做出权衡。
(5)HNSWx:HNSWx中的x为构建图时每个点最多连接多少个节点,x越大,构图越复杂,查询越精确,当然构建Index时间也就越慢,x取4~64中的任何一个整数。HNSW是基于图的高效近似最近邻搜索,检索速度快,召回率高,支持分批导入,但构建索引慢且内存消耗大,适用于对速度和召回率有极高要求,且不介意长时间构建和大内存占用的场景。
5.Faiss度量方法
度量方法是Faiss中用于计算向量间相似度的关键因素。Faiss支持多达八种不同的度量方式,以适应更广泛的相似度计算需求。
(1)METRIC_INNER_PRODUCT:内积,用于计算两个向量的点积,通常用于计算余弦相似度。在使用内积度量时,通常需要先对向量进行归一化处理,以确保结果的准确性。
(2)METRIC_L1:曼哈顿距离,计算两个向量在各个维度上差值的绝对值之和,适用于对向量各维度的差异性敏感的场景。
(3)METRIC_L2:欧氏距离是最常用的度量方法,计算两个向量之间直线距离的平方。
(4)METRIC_Linf:无穷范数,计算两个向量在各个维度上差值的最大值,适用于对向量最大差异敏感的场景。
(5)METRIC_Lp:p范数,是欧氏距离的一种泛化形式,允许调整距离计算的权重。
(6) METRIC_BrayCurtis:BC相异度是基于两个向量差值的相对大小的度量方法。
(7) METRIC_Canberra:兰氏距离/堪培拉距离,类似于曼哈顿距离,但是对较小的数值变化更加敏感。
(8) METRIC_JensenShannon:JS散度,是一种基于信息论的度量方法,用于计算两个概率分布的相似度。
在选择度量方法时,需要根据具体应用场景和数据特性来决定。例如,如果需要计算余弦相似度,可选择内积度量,并确保向量已经被归一化处理。如果你关心的是向量在各个维度上的绝对差异,那么曼哈顿距离或兰氏距离可能是更好的选择。而如果数据具有概率分布的特性,JS散度可能更适合。总之,Faiss提供的多样化的度量方法为处理不同类型的相似度检索问题提供了丰富的工具,使得Faiss成为一个非常灵活和强大的相似度检索框架。
6.Faiss的核心原理
Faiss是一个高效的向量数据库,它的核心功能是实现大规模的向量相似度搜索。在Faiss中,向量数据库的基础是由原始向量构成的集合,这些向量是数据库的基本单位。当执行搜索操作时,通常会输入一个查询向量x,然后Faiss会返回与x最相似的k个向量。在这个过程中,索引(Index对象)扮演着至关重要的角色。索引是对原始向量集进行预处理和封装的结构,它继承了一组向量库,并提供了一系列的操作,如训练(Train)和添加(Add)。通过训练和添加操作,可以建立一个索引对象并将其缓存在计算机内存中,以便进行快速的搜索操作。在构建索引之前,需要明确向量的维度d。对于大多数索引类型,还需要进行训练阶段来分析向量的分布,这一步骤对于提高搜索效率至关重要。只有当索引被成功建立后,才能进行后续的搜索操作。
训练的目的是为了生成原向量中心点,以及残差(向量中心点的差值)向量中心点,同时还会进行一部分预计算的距离计算。训练的过程大致如下:
(1)将原始向量分成m个子空间,并为每个子空间训练中心点。如果每个子空间的中心点为n,则PQ(Product Quantization,乘积量化)可以表达n的m次方个中心点。
(2)对于每个向量,找到它所属的子空间,并确定对应的中心点。
(3)将向量减去对应的中心点,生成残差向量。
(4)对残差向量生成二级量化器,进一步提高搜索的效率。
搜索操作是索引的重要组成部分,它涉及到实际的相似度计算。在执行搜索操作时,Faiss会返回两个矩阵,分别包含查询向量xq中元素与近邻的距离大小,以及近邻向量的索引序号。在使用Faiss进行查询向量的相似性搜索之前,需要将原始的向量集构建封装成一个索引文件,并将其缓存在内存中,以便提供实时的查询计算。在第一次构建索引文件时,需要经过训练和添加两个过程。如果后续有新的向量需要被添加到索引文件中,可以再次执行添加操作,从而实现增量构建索引。总的来说,Faiss通过高效的索引结构和算法,实现了在大规模向量集中进行快速相似度搜索的能力,这对于许多机器学习、数据挖掘和信息检索等领域的应用来说是非常有价值的。
7.实战经验与技巧
在使用Faiss的过程中,可能会遇到一些问题和挑战。以下是一些常见问题及经验技巧:
(1)索引的可分批导入:当向量数据量过大,无法一次性加载到内存中时,可以考虑使用支持分批导入的索引类型,如HNSW、Flat和LSH。
(2)PCA降维与分批添加:如果既想通过PCA降维来减少索引占用的内存,又想分批添加向量,可以使用sklearn中的增量PCA方法。
(3)HNSW的使用经验:HNSW虽然在检索速度和召回率上有出色的表现,但其构建索引的过程可能非常耗时,并且占用的内存也相当大。
(4)索引仅支持float32格式:Faiss的所有索引仅支持浮点数为float32格式,不支持其他格式。
(5)索引构建策略:推荐使用faiss.index_factory统一构建索引,简化参数配置,提高灵活性。
(6)性能与权衡:根据实际需求如向量量级、内存限制、检索速度要求等选择合适的索引类型,强调综合考量各因素的重要性。
Faiss作为一个高效的大规模相似度检索工具,其在检索增强的生成模型领域展现了巨大价值,尤其是与大模型结合时,极大地促进了知识密集型任务的表现。RAG框架通过先检索相关的信息片段,再依据这些片段生成回答,而Faiss正是这一过程中的加速器。具体而言,RAG模型运作时,首先面临的是如何从庞大的知识库中快速找到与用户查询最相关的片段。Faiss凭借其高度优化的索引结构,能够对向量化的文档或信息块进行亚秒级检索,即使面对亿级数据量也能保持高效。利用如HNSW这样的高级索引方法,Faiss在保持高召回率的同时,确保查询速度,这对于实时交互式应用至关重要。为了与RAG模型集成,通常会将知识库中的每个文档或关键信息点编码为高维向量,这一步骤可以通过预训练的语义嵌入模型完成。随后,Faiss建立索引,将这些向量组织成易于搜索的数据结构。当用户提出查询时,查询语句经过相同嵌入模型转换为向量,Faiss即刻在这海量向量库中找出最相似的Top-K向量,对应的知识片段随之被提取出来。这些片段作为额外的上下文,输入到语言模型中,引导生成更准确、信息丰富的回答。简言之,Faiss为RAG模型提供了一个强大的“记忆库”,使得模型能够在生成响应前即时访问到最相关的外部信息,有效提升了回答的质量和多样性,尤其在处理那些依赖丰富背景知识的任务上,如问答系统、对话系统或特定领域的文本生成,其效果尤为显著。这种结合不仅优化了资源利用,也为大模型的智能化和实用化开辟了新路径。
在企业数据量巨大的情况下,也就是稠密向量相似度检索时,Faiss并不太适合,它不支持分布式,不支持弹性伸缩,这种情况下Milvus就特别适合,接下来详细讲解Milvus。
下一篇内容详解更多…
更多技术内容
更多技术内容可参见
清华《GPT多模态大模型与AI Agent智能体》书籍配套视频【陈敬雷】。
更多的技术交流和探讨也欢迎加我个人微信chenjinglei66。
总结
此文章有对应的配套新书教材和视频:
【配套新书教材】
《GPT多模态大模型与AI Agent智能体》(跟我一起学人工智能)【陈敬雷编著】【清华大学出版社】
新书特色:《GPT多模态大模型与AI Agent智能体》(跟我一起学人工智能)是一本2025年清华大学出版社出版的图书,作者是陈敬雷,本书深入探讨了GPT多模态大模型与AI Agent智能体的技术原理及其在企业中的应用落地。
全书共8章,从大模型技术原理切入,逐步深入大模型训练及微调,还介绍了众多国内外主流大模型。LangChain技术、RAG检索增强生成、多模态大模型等均有深入讲解。对AI Agent智能体,从定义、原理到主流框架也都进行了深入讲解。在企业应用落地方面,本书提供了丰富的案例分析,如基于大模型的对话式推荐系统、多模态搜索、NL2SQL数据即席查询、智能客服对话机器人、多模态数字人,以及多模态具身智能等。这些案例不仅展示了大模型技术的实际应用,也为读者提供了宝贵的实践经验。
本书适合对大模型、多模态技术及AI Agent感兴趣的读者阅读,也特别适合作为高等院校本科生和研究生的教材或参考书。书中内容丰富、系统,既有理论知识的深入讲解,也有大量的实践案例和代码示例,能够帮助学生在掌握理论知识的同时,培养实际操作能力和解决问题的能力。通过阅读本书,读者将能够更好地理解大模型技术的前沿发展,并将其应用于实际工作中,推动人工智能技术的进步和创新。
【配套视频】
清华《GPT多模态大模型与AI Agent智能体》书籍配套视频【陈敬雷】
视频特色: 前沿技术深度解析,把握行业脉搏
实战驱动,掌握大模型开发全流程
智能涌现与 AGI 前瞻,抢占技术高地
上一篇:《GPT多模态大模型与AI Agent智能体》系列一》大模型技术原理 - 大模型技术的起源、思想
下一篇:DeepSeek大模型技术系列五》DeepSeek大模型基础设施全解析:支撑万亿参数模型的幕后英雄