导读 在当今的信息时代,随着大型语言模型(LLM)如 GPT-4 和检索增强生成(RAG)技术的蓬勃发展,企业在处理和分析海量数据时需要强大的工具来支持复杂搜索和高效数据处理。Elasticsearch 这款领先的搜索引擎通过其全面的搜索功能、向量处理能力、硬件加速、模型应用以及精细化权限控制,为大规模数据处理和检索提供了强有力的支持。本文将聚焦于 RAG 中 R 的部分,介绍 Elasticsearch 如何助力 RAG 应用落地。
1. 搜索需求发展背景
2. RAG 范式下 Elasticsearch 的落地实现
3. 未来展望
分享嘉宾|朱杰 Elastic中国首席解决方案架构师
编辑整理|陈康
内容校对|李瑶
出品社区|DataFun
搜索需求发展背景
搜索是一件非常复杂的事情,上图中列出了很多搜索相关的技术,每一个名词背后都有着复杂的逻辑和大量的工作。而现在之所以说搜索简单,是因为 Elasticsearch 为大家屏蔽了底层各种复杂的数据结构和优化的工作。Lucene 和 Elasticsearch 之所以长盛不衰,是因为其能够准确把握用户需求并及时跟进。最开始只是全文搜索(full-text search),即在整个文档或数据集中查找包含特定词汇、短语或其他字符串的所有位置。但后来发现仅有全文搜索是不够的,还要有标量搜索,即结构化搜索。在结构化搜索中倒排性能很差,因此又引入了正排,即列式存储。后面为了更好地支持经纬度搜索和数字范围的搜索,还引入了 BKD-Tree 等数据结构。Lucene 和 Elasticsearch 凭借功能、速度和易用性等各方面综合的优势获得了广大用户的青睐。搜索实实在在地改变了世界利用数据的方式。海量的私域数据已经存在于 ES 生态中。正是由于 ES 生态中有如此庞大的数据,ES 必须去做向量搜索、语义搜索,完善 RAG 的整个工具链,让用户可以更容易地去创建一个 RAG 的应用,这也是 ES 做向量检索的初衷。从上图中可以看到,Elasticsearch 在过去支持的全文搜索、结构化搜索以及聚合统计的基础上,又针对当前的需求,支持了向量搜索、语义搜索、向量和经典搜索的混合、模型重排序,以及 RAG 等等多种复杂的搜索,以满足现代企业多样化的信息检索需求。RAG 范式下 Elasticsearch 的落地实现
上图展示了经典的 RAG 应用流程,Elasticsearch 通过云提供整套的解决方案。本次分享主要聚焦于 Elasticsearch 本身,包括索引构建、重排序和多路召回。不同于其他企业的基于数据库外挂插件的方式实现传统数据库到向量数据库转换从而实现全文搜索的路线,ES 社区采用相反的技术,ES 已经拥有了全文检索的能力,从零开始编码,基于 Lucene 实现混合搜索(包括向量+标量+搜索过滤+BM2.5 混合过滤),从而更好地满足后续的优化、召回、协同搜索,保证所有技术的自控性。硬件加速:利用 CPU 硬件指令加速向量索引和计算速度;
-
增加单个查询并发:增加查询并发度,充分利用更多的计算核心;
向量量化:向量有损压缩,float 到 int8、int4 来平衡精度、速度和成本;
并发查询间协同:一个查询的多个并发线程间协同共享信息,提前终止一些查询线程。
运用多种硬件指令和优化后的本地代码,Elasticsearch 显著加速了向量索引和计算,提升系统性能,支持大规模数据处理。包括使用编译器自动向量化技术、利用 JDK 的 Panama 技术实现 Lucene 硬件加速,更多地利用本地代码,实现资源节约和性能优化。原本的 ES 主要看重整体吞吐,正因为此限制了单个查询的资源,以前并发的微观粒度只能到一个分片。这与很多分析型数据库不同,分析型数据库通常会优先保证一个 query 的查询能够快速完成。现在我们希望把选择权交给客户,如果有更多的计算核心数,那么就允许客户充分利用硬件,牺牲一定的整体吞吐,让每个搜索的延迟降到最低。这对于向量搜索非常重要,因为向量搜索是计算密集的场景。另外,并发度提升后,并发间还需要一个好的协调机制,因为分别去查,信息共享,所以可能会提前终止一些没有必要的搜索。向量量化压缩比是很高的,但是是有损的,对精度有影响,将 float 转换到 int8/int4 可以更好地平衡精度、速度和成本,在海量数据场景下带来的收益是很可观的。前文中提到,Elasticsearch 的目标是成为一个最佳的混合搜索平台。目前已支持 BM25 文本搜索及第三方 Embedding 模型的混合搜索,使得 Elasticsearch 在与大型语言模型结合时展现出强大的灵活性和适应性。不容忽视的一点是,向量搜索为语义搜索带来的提升,远超过 RAG,因为 Embedding 能够很好地捕捉语义层面的信息,又不丧失原有的精确搜索的能力。稀疏向量也是文本召回领域备受关注的一个方向,可以通过扩展词放到文本中,还可以基于模型对权重做很好的调整。通过 RRF 算法,任意多路的召回都可以混合起来。基于外连 API 接口,将 ES 与其他 rerank 模型进行解耦,对长文本、半结构化文本等数据都可以产生更好的召回效果。多向量支持,涵盖从文档加工、切片到索引构建的全流程操作,高效支持复杂文档管理和查询。5. Elasticsearch 部署运行 NLP 模型Elasticsearch 支持直接在其上部署运行 NLP 模型。比如不希望有很复杂的技术栈,只想要做 embedding,那么可以将模型市场比如 Huggingface 上的模型,直接通过 eland 工具传到 Elasticsearch 上,后续文档写入时会自动调用这个模型转成向量,落到索引中,搜索时原始的文本进来也会自动调用这个模型转成向量,从而轻松实现 embedding。6. Elasticsearch 集成第三方推理服务通过 Inference API 进行解耦,可以适配 Elasticsearch 之中部署的模型,或私有化部署的模型,还可以利用阿里云上的在线推理服务。7. Elasticsearch 加强 RAG 隐私和安全Elasticsearch 可以集成企业的认证服务,提供精细化的权限控制,可显著提升系统的安全性和操作便利性,适合企业级应用。8. Elasticsearch
融入阿里云 AI 搜索平台Elasticsearch 已融入阿里云 AI 搜索平台,推荐使用 8.13 以上的版本。通过推理 API 可以与平台上很多的大语言模型和推理服务进行对接。未来展望
最后提供一些学习资源,在上图所示的地址可以获得相关的文档和样例代码。资深开发者,2010 年开始从事大数据相关研发和架构工作,并从那时候开始一直伴随 Elasticsearch 的成长,使用 Elasticsearch 构建过大规模文档和财经资讯搜索平台。除了熟悉 Elastic 相关的技术栈外,也对大数据生态的各种技术栈有着广泛的涉猎。现在负责 Elastic 解决方案架构、技术咨询、社区布道等工作。