构建基于 Elasticsearch 的企业级 AI 搜索应用
摘要:本文整理自阿里云搜索产品专家牛俊(南也)在云端问道 12 期实操教学关于构建基于 Elasticsearch 的企业级 AI 搜索应用的分享。
接下来开始关于动手实验环节的介绍,在上个环节,详细的解析 AI搜索中比较典型的 RAG 场景全链路的技术栈,以及包括每个技术的详细目前的解析,这个环节会从场景的角度出发,介绍阿里云 AI 搜索,动手搭建一套 AI 语义搜索的方案。
一、简单搜索形态
首先看简单搜索的形态,最左边的图是日常比较常见搜索的形态,通过搜索的输入框可以输入对应的关键词,和底层的数据库里面相关的信息进行匹配和检索,得到符合需求的商品内容,或者是相关知识的数据,输入对应的 Query,得到最后结果的过程是搜索的过程,也是目前应用最多搜索的形态,随着大语言模型的爆发以及技术的增长,以及爆发式的技术发展之后,看右边的结构是目前以及今后可能的一种新的搜索的产品形态,可以咨询相关的问题,用对话式的问答的方式呈现整个搜索的结果,包括得到符合预期的答案。搜索形态的变化不仅是整个产品交互的变化,它背后也是技术的重大升级,左边的图需要输入对应的关键词,一般使用像淘宝类的搜索产品的时候,会通过堆砌对应的关键词得到符合预期的商品的数据,这个过程中人类再去匹配机器的语言,让底层的检索引擎能够识别输入的关键词,从而得到符合预期的结果,可以看右边的结果,输入 Query,它可以是相对比较口语化的信息,它也不一定是关键词的堆砌。对于搜索 Query 的要求也不是非常的高,背后的底层逻辑是让机器理解人类的语言,能够解析出实际的诉求,从而得到符合预期的结果,过程是技术的重大突破,后续是可以用机器或者是用大语言的模型理解人类的语言,包括人类的意图,这里是搜索形态的升级,搜索的内容目前最常见的是对于文本的信息的检索,在后期会越来越多的逐渐开始接触到多模态的搜索,比如通过图片、音频或者是视频信息,做相关的检索以及互动,整个搜索的形态会非常的丰富,对于技术的要求也比较高。
二、搜索核心关键点
了解搜索的整个形态之后,看搜索最核心的关键点有什么。首先是最核心的,能够拿到最精准的结果是搜索的本质,如何通过搜索的内容获得最终符合预期的目标的结果,随着机器学习,或者是大语言模型的技术,爆发式的增长以及技术的发展,可以更好的理解用户输入 Query 的内容,智能理解的部分也越来越重要,理解用户的意图,找到符合预期的信息,也是搜索比较核心的关键,这样可以让搜索的整个过程更加智能化。不论搜索形态是传统的搜索框,还是对话式的搜索,对于语义的理解,包括智能化的搜索,这部分都是必不可少。最后一步也是最基础的,在搜索的架构下,需要比较高性能的搜索引擎的服务,可以让整个搜索的体验更加平滑有趣,这是目前搜索最核心的三个关键点。
三、阿里云搜索产品架构升级
基于这三个关键点,在阿里云的 AI 搜索产品也做架构的升级,阿里云 AI 搜索依托于自研的搜索引擎以及开源的 Elastic Search 引擎,可以提供高性能的检索的服务,阿里云 AI 搜索是从零八年开始,从阿里集团内部孵化而来,可以支持千亿级别的数据,毫秒级响应,这款是自研的搜索引擎,在一八年和 Elastic Search 做战略的合作,在今年做战略的升级,发布企业版的 Elastic Search,后续会全面的应用企业级的产品的能力,在检索引擎的基础之上,也孵化出非常多的智能搜索的组件化的服务,如何提升语义理解的能力,中间的微服务层里面就包括 RAG 全链路的组件化的能力,它可能包括离线的数据的解析,向量化以及在线查询的时候如何理解用户的意图,包括问题的补充拓展,这一系列的模型都会在 AI 搜索开放平台里面做组件化能力的突出,可以比较灵活的做能力的调用,结合 AI 搜索开放平台和高性能的检索引擎,也发布六款产品化的垂直场景的具体的产品,第一是开箱即用的比较成熟的智能问答的 RAG 产品,上传对应的数据知识库的非结构化的文档数据之后,就可以进行右边看到的对话式的问答,第二个是企业级的 ES 的整体的通用检索分析服务,以及在日志场景下的 Serverless 服务,还有在智能的语义理解的场景下,比如电商内容,或者是其他的垂直领域,如何提升智能搜索的效果,也推出行业的算法版本,比较底层的是销量检索和图检索的版本,以上是 AI 搜索产品整体的大图。
四、阿里云ai搜索方案
接下来基于阿里云 Elasticsearch 的整体 AI 搜索的方案,下面是关于 RAG 全链路的链路图,可以基于 ES 的 Influence API 和 AI 搜索开放平台的模型服务搭建语音搜索或者是 RAG 的整个链路框架,主要分成两个链路。在数据写入的阶段,可以对知识库的文档进行相关的解析理解,同时对它进行相关的切分,调用对应的模型做向量化,在阿里云 ES 中构建对应的索引,进行混合的检索,在线查询阶段,可以对用户输入的问题进行意图的识别,从而进行对应的向量化,和已经构建的索引库的数据进行混合的检索,将检索到的 Top 内容,可以再次利用语义的重排模型进行二次的重排,获取到最 Top 的内容,可以组成 Prompt 在调用最终的大模型生成用户所需要的答案,在过程中,也透出 RAG 的测评的服务可以对整体的结果进行整体的测评,了解大概的效果,是 AI 搜索整体在 RAG 场景下的全链路的流程,再简单看阿里云 ES 的 AI 搜索的典型的应用场景,在内容和企业知识库的对应的场景,需要有大量的内容数据,包括可能会有比较复杂的权限的隔离数据,可以用传统的搜索增强语义的理解,增强搜索效果,也可以只用对话式搜索助手的形式提供对应的交互。在电商的售前,售后,导购环节,是比较典型的应用场景,包括教育、搜题,或者是其他更加垂直的搜索的场景,应用都非常广。
五、电商导购demo
接下来看电商导购的 Demo,这里是用商品的数据作为底层的数据库进行相关的检索。问题是想购买女士的领带,可以看到基于下面的商品内容,给出对应的答复,接着追问这款型号的领带是否支持机洗,这里也基于实际上的商品相关的信息给出对应的答复,再次让推荐对应的大衣,也给出两款大衣的推荐。最后问题是给出身高和体重的信息,让助手推荐对应的尺码,看最终的结果。根据用户提供的信息给出对应尺码的建议,是比较典型的简单的电商导购的 Demo 过程,用电商相关的描述的商品信息作为底层的数据库,对商品的信息进行解析、切分,以及向量化的处理,进行混合的检索。最终的答案是结合大语言模型给出的回复,对应的参考链接是检索到相关的商品的信息。
六、多模态图书
接下来多模态图书的 Case,在 Case 里面上传的数据是纯图片的信息,只有书籍的封面的图片。这个场景下首先需要对上传的封面图片进行理解和内容的解析,将解析到的信息,构建对应的索引,做混合检索。当咨询对应的问题适合儿童的图书之后,对已经解析后的知识进行总结和回复,同时也可以给出比较相关的封面的图片。
七、电商多模态
接下来是电商多模态的场景,相比于电商的导购的 Demo,增加商品的图片数据,除已有的商品相关的描述信息之外,也可以把图片的信息作为一种知识库的数据,也同时存到的数据库里面进行解析,之后参与到对应的检索里面,就可以做到电商多模态的形式呈现。
八、实验
1.实验的具体链路上
本次实验以电商的场景为例,做一套 AI 语义搜索的 Demo,在场景里面上传对应的商品数据后,会对它进行简单的切分,构建稠密和稀疏向量,最后用阿里云的 ES 构建对应的索引,在线查询的时候,用户输入问题,也会用相同的向量化的服务给它转成向量,进行混合的检索,从而得到 Top 的问题,整个简单的过程,应用到对应的模型服务以及在线和离线处理的整个链路,在过程中,第一步需要开通阿里云 ES 的实例,需要开通 8.13 及以上的版本,同时在上海的区域需要开通搜索开放平台的服务,第二步是做基础的配置,比如 ES的 IP 的白名单,或者搜索开放工作台的健全相关的信息,第三步是使用 Es 的 Inference Api 创建所需要的一系列模型,第四步是配置语义的 Pipeline,Pipeline 是将切分和向量化组装在一起,当用户导入对应的数据,可以依托 Pipeline 自动做数据的处理,从而把处理好的数据写入对应的索引结构里面。第五步是整个索引的构建,数据的写入,以及对应的查询测试的过程,这是整个实验的链路过程。
2.实验demo
接下来看整个实验的 Demo,这里需要设置访问的白名单,添加需要访问的 IP 地址,接着再进入到 Kibana 中,进入开发工具,搭建 AI 语义搜索的链路主要有三个环节。第一步,在阿里云 ES 中使用 Inference API 创建模型。Influence API 是 ES 8.13 版本提供的能力,可以用于调用各类推理模型服务。阿里云 ES 已经集成搜索开发工作台,可以直接通过 Influence API 使用阿里云 AI 模型服务,搜索开发工作台是阿里云提供的搜索组件化服务平台,需要提前开通服务并获取配置信息。进入搜索开发工作台,因为已经提前开通服务,所以没有开通的入口,开通服务不需要付费,后续调用服务的时候按量付费。
这里是搜索开发工作台的服务广场,提供九类模型服务。可以根据实际的需要选择对应的服务。点击查看详情,可以看到这里面有多款可以选择的模型服务,如果需要对模型进行的简单的测试体验,可以进入体验中心,比如选择切片服务,体验数据获取结果,在右边就可以得到切片后的内容,使用搜索开发工作台的能力需要三个配置信息。第一是空间的名称,开通服务后默认有 Default 空间,第二个需要 API-KEY 用于服务的健全,可以在这里创建 API-KEY,第三个信息是访问域名,可以直接在这里复制对应的域名。
获取到这三个信息之后,可以继续进入 K8 的页面,在 ES 中已经创建切片模型,这里的配置信息从搜索开发工作台中获取,这里的零一模型。为方便演示,将切片的长度设置为 30,实际的长度与后续的链路限制有关,执行,这是稠密向量模型,零一的向量模型是一款最大输入长度为 300,输出稀疏为 1536 维的多语言模型,下面是一款稀疏向量模型,这款模型也是多语言模型,最大的输入长度是 8192,完成这三个模型的注册后,接下来做调试,在这里可以获取要输入内容的稠密向量,可以获取到输入内容的稀疏向量,对应的 Token ID 以及对应的权重。对模型可以将内容进行切分,在最大的长度线之内尽可能的保证语义的完整性。切分后的内容相对来都比较完整。第二步是配置 AI 语义搜索的 Pipeline 中包含文档的切片以及生成稠密向量,稀疏向量的过程,可以通过提前定义好的 Pipeline 写入数据,在这里执行。可以看到通过调用切片模型,将内容切分为Trunk ,将 Trunk 的内容生成稠密向量以及稀疏向量,完成 Pipeline 设置之后,来测试,执行之后,可以看到包含对应的稠密向量以及稀疏向量,这里是切封后的 Trunk 的信息,后面每个 Trunk 都会有对应的稀疏向量和稠密向量的信息。
第三步是数据的写入和检索的流程。首先进行索引的创建,这里的Mapping 结构包含文本的内容以及文本切分后的 Trunk 内容,包含文本稀疏向量以及稠密向量三个部分。接下来写入数据,最后做查询的测试。这里使用混合检索,这里包含三个部分,第一是对 Query 进行全文的检索,第二个是将 Query 转化为稀疏向量,进行稀疏向量检索。第三个部分是将 Query 转化为稠密向量,进行稠密向量检索,再使用融合排序召回 Top10 的内容。看对应的结果,最相关的内容排序在最靠上,在这里修改 Query 再测试。看到排序靠前的内容是更相关的内容,简单的 AI 语音搜索链路搭建好。Case 就演示到这里。
在用混合检索和单路的检索对比的效果过程中,可以用很多个性化的 Query 做测试,在典型场景下差异比较大,但上面有的 Case ,因为对应的数据里面也包含,所以暂时不是特别明显,但对于语义理解要求比较高场景下,它的差异性还是比较大。
最后是整个实验产品的计费的情况。阿里云 ES 目前支持包月、包年、包月和按量计费的计费的方式。它的计费项是按照具体的实例的规格和对应的节点数,以及存储的节点做计费。比如需要购买几核几 G 的对应资源,包括多少 G 的数据的存储的节点,目前起步的价格,包年,包月大概是 341,是开发测试型的机器的规格,大概是起步的价格,如果释放对应的实例,就可以在创建好的实例里面,点击释放实例就可以删除实例,删除之后对应的实例也不会做相关的计费。
搜索开放工作台的开通免费,只有调用模型之后才会付费,没有调用,即便开通的也没有任何的费用。目前产品前 100 次的调用免费,这里列和本次实验相关的费用为例,比如现在大多数的模型都按照Token 做相关的计费。文档切分的模型 1000 Tokens 大概是 0.05,一块钱大概有 200 个前 Tokens 的相关数据处理,这是整个模型相关的费用,如果做搜索平台的资源释放,日常不调用没有付费,如果担心其他人做相关的调用,或者担心在哪些地方调用不知道如何处理,可以删除掉刚刚在平台里面创建的 API-KEY 信息,所有的调用包括鉴权都是基于 API-KEY ,删除 API-KEY 之后,所有的调用就会终止,计费也会终止。如果自定义自己的工作空间,刚刚默认创建的是 Default 空间,如果有自己自定义空间,后续不需要使用,可以删除掉整个空间,它里面所有的 API-KEY 也会相关的进行关联的删除。