Elasticsearch 作为 GenAI 缓存层

news2024/11/25 3:23:08

作者:JEFF VESTAL,BAHA AZARMI

探索如何将 Elasticsearch 集成为缓存层,通过降低 token 成本和响应时间来优化生成式 AI 性能,这已通过实际测试和实际实施进行了证明。

随着生成式人工智能 (GenAI) 不断革新从客户服务到数据分析等各个领域,它也面临着一系列挑战,包括计算成本和响应时间。 通过使用 Elasticsearch 作为缓存层,我们可以正面解决这些问题,优化效率和效果。 让我们了解一下这种组合如何为部署生成式人工智能模型的固有复杂性提供真正的解决方案。

RAG 概述

检索器增强生成(Retriever-Augmented Generation),俗称 RAG,是自然语言处理中的一种高效机制。 它通过接受给定的提示或问题并从大型数据集中检索相关信息来进行操作。 对于 Elasticsearch,通常使用语义搜索来检索此结果。 然后,相关文档和提示会发送到生成式大语言模型 (LLM),以创建易于人类使用的响应。 理想的最终结果是更准确但上下文更丰富的响应,比简单的基于关键字的答案提供更多深度。

大规模 GenAI 的问题

首先,存在每个生成调用的 token 成本问题。 token 是转换为模型可以理解的输入文本。 它们可以短至单个字符,也可以长至单词。 这很重要,因为你需要根据处理的 token 数量进行计费。 现在,想象一个场景,多个用户询问完全相同的问题或向模型提供类似的提示。 每个调用都需要花费 token,因此如果处理两个相同的提示,则成本实际上会加倍。

然后是响应时间的问题。 生成模型需要时间来接收数据、处理数据,然后生成响应。 根据模型大小、提示的复杂性、运行位置以及其他因素,此响应时间可能会增长到数秒。 这就像等待网页加载一样; 几秒钟的时间感觉就像是永恒,并可能阻止用户进一步参与。

Token 成本和响应时间这两个问题尤其重要,因为它们不仅影响运营效率,而且对用户体验和整体系统性能有直接影响。 随着对更新的实时、智能响应的需求不断增长,这些挑战不容忽视。 因此,我们发现自己正处于一个迫切需要寻找可扩展且高效的解决方案的时刻。

Elastic 作为缓存层

Elasticsearch 是一个向量数据库。 这意味着 Elasticsearch 不仅可以存储问题和答案的原始文本,还可以以数值向量格式存储它们的语义或 “基于含义” 的表示形式。 然后可以快速比较这些向量的相似性,从而提供一种稳健且有效的方法来识别已回答的相关问题。

实现这种智能匹配的一个关键方面是 k 最近邻 (kNN) 相似性参数。 借助 kNN,Elasticsearch 可以快速识别与新传入提示最相似的提示。 结果是一个快速而高效的检索过程,如果已经回答了足够相似的问题,则可以绕过资源密集的生成模型。 这会带来更快的响应时间,而无需支付 token 成本。 Elasticsearch 通过 similarity 参数在 knn 查询中启用了此功能。

要将 Elasticsearch 集成为缓存层,工作流程可以如下进行:出现新提示并查询 Elasticsearch,包括对提示进行向量化,以查找任何紧密匹配的现有向量。 如果找到匹配项,则返回先前生成的针对先前提示的答案。 如果没有,问题将经历通常的 RAG 流程,新生成的答案将存储回 Elasticsearch 以供将来使用。 你甚至可以为用户提供坚持要求 “新鲜” 答案的选项,从而在他们愿意的情况下绕过缓存。

Elasticsearch 可以被配置为类似于其他缓存系统中的 TTL 一样,自动清除旧数据。这确保缓存保持最新且有用。类似地,可以使用 Elasticsearch 的 Frozen Searchable Snapshot 功能来采用分层的方法。这将允许你构建一个庞大的缓存层,成本较低,用于不经常访问的数据,同时仍然比生成新响应更快。

还可以实施质量保证措施,例如某些响应的 “approved” 标志。 这允许人工审核员在向最终用户提供缓存的响应之前进行审查,从而增加了额外的可靠性。

通过将 Elasticsearch 实现为缓存层,你可以实现更具可扩展性、更高效且在许多方面更智能的系统,解决部署 RAG 等生成式 AI 模型时常见的限制。

评估语义相似性:容忍与抵抗 - Tolerance vs. Resistance

在利用 Elasticsearch 作为缓存层时,一个关键方面在于评估新提出的问题和之前存储的问题之间的语义相似性。 我们的缓存机制的有效性很大程度上取决于我们将新查询与现有查询匹配的程度。 该评估的核心有两个截然不同的概念:语义容忍和语义抵抗。

语义抵抗通常指系统或模型对语义相似性的严格度或抵抗力。在信息检索或自然语言处理的语境中,语义抵抗表示系统对于确定两段文本或查询是否在语义上相似的标准更为严格。

语义容忍度

语义容忍度(Semantic Tolerance),反映了召回率(Recall),是一个用更广泛的视角评估相似性函数的概念,允许问题之间更广泛的语义相似性。 这种宽大处理可以带来更多匹配,从而有可能减少 LLM 的计算负载。 然而,它也可能导致匹配不太精确,从而影响生成响应的准确性和相关性。

语义抵抗

另一方面,与精确性相一致的语义抵抗采用更严格的相似性函数,缩小了被视为 “匹配” 的范围。这种严格性往往会在可能更高的计算成本的情况下产生更准确和相关的匹配,因为较少的存储问题可能符合严格的相似性标准。

与语义宽容性和语义抵抗之间的平衡,类似于召回和精确性之间的权衡,对于优化 Elasticsearch 缓存层的性能和效果至关重要。通过微调 KNN 搜索中的 similarity 参数,可以在特定的操作需求和用户期望方面找到这种权衡,使缓存机制达到最佳状态。

用 HR 示例说明语义相似性

为了更好地理解语义相似性的细微差别,让我们考虑一下公司环境中的一个常见场景:员工询问有关家庭活动(例如孩子的婚礼)的带薪休假 (PTO) 政策。 这里有两个这样的查询:

  • [A]:“I have a wedding in the family, my son is getting married. Am I eligible for some PTO?(我家里要举行婚礼,我的儿子要结婚了。我有资格获得一些 PTO 吗?”
  • [B] : “My child is getting married soon, can I take some PTO for the event? (我的孩子即将结婚,我可以请 PTO 参加婚礼吗?)”

乍一看,很明显这两个查询都在寻求相同的信息,尽管措辞不同。 我们的目标是确保系统能够识别这些查询的语义接近度,并提供一致且准确的响应,而不管措辞有何差异。

相似度参数对语义容忍度和抵抗的影响

在这种情况下,语义匹配的有效性受 Elasticsearch 中 KNN 搜索中 similarirty 参数的选择的影响。该参数确定被视为匹配所需的最小相似度。我们可以通过检查两个具有不同相似性阈值的假设情景来说明该参数的影响:

  • 情景 A(高阈值 - 抵抗力):设置严格的相似度参数,比如说 0.95,封装语义抵抗力。这只允许具有高度相似性的查询检索缓存的答案,以提高精确度为代价来牺牲召回率。
  • 情景 B(低阈值 - 容忍度):设置更宽松的相似度参数,比如说 0.75,封装语义容忍度。这允许更广泛的语义相关查询检索缓存的答案,有利于召回而不是精确度。

通过比较这些情景,我们可以观察相似度参数如何影响语义抵抗和语义容忍之间的平衡,以及随后召回率和精确率之间的权衡。下表说明了在这些情景下,根据查询与有关孩子婚礼 PTO 的原始查询的假设相似度分数,不同查询可能如何处理:

QueryHypothetical Similarity ScoreRetrieved in Scenario A (High Threshold - 0.95)Retrieved in Scenario B (Low Threshold - 0.75)
Can I take PTO for my son's wedding?0.94NoYes
Is there a leave policy for family events?0.80NoYes
I need time off for my daughter's marriage, is that possible?0.97YesYes
How do I apply for leave for personal family occasions?0.72NoNo
What's the process to get time off for family ceremonies?0.78NoYes
Can I get some days off for my sibling's wedding?0.85NoYes

该表演示了不同的相似性阈值如何影响缓存答案的检索,显示了响应准确性(场景 A)和计算效率(场景 B)之间的权衡。

用例

最简单的应用程序之一是在新查询出现时存储问题和响应。当用户与人工智能模型交互时,他们的问题以及生成的答案都会被缓存。 随着时间的推移,这会构建一个有机缓存,随着每次用户交互而变得更加丰富和多样化。 这是一个双赢的局面。 未来的用户查询不仅可以从这些预先存在的知识财富中受益,而且还可以节省 token 成本并减少延迟。

另一个引人注目的用例是向系统预加载常见问题的答案。 如果你已经在监控用户输入的查询类型,则可以针对常见问题预先生成响应并存储它们以供立即检索。 这有双重目的:它可以实现更快的响应时间,并提供一个评估人工智能响应的质量和一致性的平台。 可以将其视为具有常见问题 (FAQ) 部分,但该部分具有令人难以置信的动态性并针对用户需求不断优化。

从用户问题中识别趋势和常见主题开辟了另一条实用途径。 通过分析问题及其相应的回答,你可以将这些数据反馈到生成模型中以进行摘要报告甚至基于主题的分组。 你还可以对存储的提示使用情绪分析来评估用户交互的语气和情绪。 这提供了一个有价值的分析层,可以为产品开发、客户服务改进甚至营销策略提供信息。

测试一下

虽然特定的应用程序取决于你的最终用例,但可以从此 Github 存储库复制示例设置。

考虑一个涉及查询响应计时指标的场景。 在没有缓存的第一次运行中,假设用户查询需要 300 毫秒才能从 RAG 接收生成的答案。 现在,将该响应存储在 Elasticsearch 中后,会出现第二个类似的查询。这一次,由于我们的智能缓存层,响应时间降至仅 50 毫秒。 这表明系统响应能力得到了切实的改进 —— 这对任何实时应用程序来说都是一个福音,也证明了所获得的成本和时间效率。

在示例项目中,你将找到两个主要文件。
elasticsearch_llm_cache.py 是包含 Python 类 ElasticsearchLLMCache 的示例存储库,你的应用程序将在启动时实例化该类。 该类包含以下方法:

  • create_index 这将在 Elasticsearch 中创建一个新的缓存索引(如果不存在)
  • query 执行 kNN 搜索,包括对提示进行向量化。 它将返回相似度范围内的前 k 个相似文档。
  • add 通过调用 _generate_vector 对提示进行向量化,并以文本形式对提示和生成响应以及向量化提示进行索引

elasticRAG_with_cache.py 是一个利用 elasticsearch_llm_cache 的 Streamlit 应用程序示例。

但这不仅仅与速度有关;还与速度有关。 这也与见解有关。 如果你使用 Elasticsearch 的 Python 应用程序性能监控 (APM) 库,你可以获得有关查询时间、资源利用率甚至错误率的丰富指标。 这些数据对于持续的系统优化非常宝贵,并且可以成为寻求微调性能的数据科学家和工程师的宝库。 监控这些指标不仅可以改善用户体验,还可以更有效地管理资源。

这是一条 APM 跟踪,显示输入新提示(没有匹配的缓存)时所花费的时间。 我们可以看到,在此示例中,示例应用程序中从用户点击提交到应用程序从 GenAI 模式返回响应的总时间花费了 7,150 毫秒,即大约 7 秒。

现在,该提示和响应已缓存在 Elasticsearch 中以供将来使用,下面的 APM 跟踪显示了何时回答类似的提示。 这里我们看到,因为找到了足够接近的提示,所以我们可以直接返回之前生成的响应。 现在,此快捷方式的总时间为 124 毫秒。

通过查看这些示例用例,你可以清楚地看出,将 Elasticsearch 实现为缓存层不仅仅是一项学术练习;它也是一项实践。 它对性能、成本和用户体验具有现实意义。

总结

通过利用 Elasticsearch 作为向量数据库的功能及其相似性参数,我们为响应速度更快、更具成本效益且可扩展的生成 AI 系统打开了大门。 无论是改善查询时间、实现细致的匹配,还是通过人工监督增加另一层可靠性,其好处都是显而易见的。

准备好开始了吗? 查看 Python 库和示例代码并开始免费试用 Elastic Cloud。

原文:https://www.elastic.co/search-labs/elasticsearch-as-a-genai-caching-layer

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1193704.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

云栖大会-简单易用的智能云网络

云布道师 10 月 31 日,杭州云栖大会,在阿里云网络技术分论坛,阿里云网络产品线负责人祝顺民带来《Leadership:简单易用的智能云网络——阿里云网络持续演进之路》的主题演讲,全面阐释阿里云飞天洛神云网络(…

基于Python的pyAV读取H265(HEVC)编码的视频文件

1.问题出现 利用海康威视相机拍出来的视频是H265格式的,相比于常规的H264编码,压缩率更高,但因此如果直接用之前的方法读取,会出现无法读取的情况,如下。 可以看到,对于帧间没有改变的部分&#xf…

测试用例怎么样写?怎么搞懂方法和流程?

前言 作为一个测试新人,刚开始接触测试,对于怎么写测试用例很头疼,无法接触需求,只能根据站在用户的角度去做测试,但是这样情况会导致不能全方位的测试APP,这种情况就需要一份测试用例了,但是不…

java学习part01

15-Java语言概述-单行注释和多行注释的使用_哔哩哔哩_bilibili 1.命令行 javac编译出class文件 然后java运行 2. java文件每个文件最多一个public类 3.java注释 单行注释 // 多行注释 文档注释 文档注释内容可以被JDK提供的工具javadoc所解析,生成一套以网页文…

SQLChat 的 RBAC 之旅

去年 ChatGPT 在科技圈大火,到今年彻底破圈。各个领域都有相应的一些产品,数据库领域集中在 AI SQL,自然语言转 SQL,或者利用自然语言来管理数据库等。今天我们来体验一下该领域的 SQLChat 这款 AI 数据库客户端。 今天我们预设一…

C++智能指针的使用:shared_ptr、weak_ptr、unique_ptr的使用,使用案例说明。

系列文章目录 本章内容: (1)shared_ptr、weak_ptr、unique_ptr的介绍 (2)单独使用share_ptr造成的内存泄漏 (3)shared_ptr和weak_ptr的配合使用 文章目录 系列文章目录前言一、shared_ptr、wea…

PHP编写采集药品官方数据的程序

在 PHP 中编写爬虫程序,首先我们需要引入一些必要的库,如 curl 和 file_get_contents。然后,我们需要设置爬虫ip信息,以便我们可以从指定的爬虫ip服务器上获取数据。 // 引入必要的库 require_once curl.php;// 设置爬虫ip信息 $p…

振南技术干货集:振南当年入门C语言和单片机的那些事儿(3)

注解目录 第一章《振南当年入门 C 语言和单片机的那些事儿》 1、注定堕入单片机 1.1 懵懂好奇的我 (小时候好奇的性格经常让我屁股开花。初中开始对计算机产生兴趣,并一发不可收拾。) 1.2 我的 C 语言学习经历 (上大学后自学…

虚拟机网络没有有效的ip配置

虚拟机网络没有有效的ip配置: 原因猜测:或许是之前使用的操作系统把网络给占了。 解决方法:点击虚拟机的 遍历->网络编辑器->移除不要的网络,然后添加网络。(下面的图就是我把虚拟网络全部移除,然后…

ke10javaweb停更

<jsp:getProperty property"isval" name "username"/> property来修改属性,name是类 所以如果调用tip在前面那么就是没有设置值 证明是先到java里面去运转

JNPF开发平台:加速企业数字化转型,提升业务效率

如今&#xff0c;随着信息化的深入发展&#xff0c;数字化转型已经成为企业生存和发展的关键。为了在竞争激烈的市场中保持领先地位&#xff0c;企业需要快速地适应变化&#xff0c;优化业务流程&#xff0c;并提供优质的用户体验。而在这其中&#xff0c;低代码开发平台JNPF是…

VulnHub Nullbyte

一、信息收集 1.nmap扫描 arp-scan -l扫描内网存活主机 ┌──(root&#x1f480;kali)-[~/桌面] └─# nmap -sS -A -p- 192.168.103.201/24 -sS 半扫描 -A 扫描详细信息 -p- 扫描全端口发现开放了80、111、777、50978端口 且发现777端口开放了ssh服务&#xff0c;说明他把…

SQL Server 2022 安装步骤——SQL Server设置身份验证教程

目录 前言: 安装详细步骤: 第一步: 第二步: 第三步: 第四步: SQL Server 连接的方式: Window验证: SQL Server验证: 两者之间区别: 总结: SQL Server身份验证登录配置教程:​ 第一步: 第二步: 第三步: 番外篇: 前言: 本文讲解&#xff0c;如何安装SQL Server安…

Android修行手册-POI操作Excel实现超链接并且变为蓝色

点击跳转>Unity3D特效百例点击跳转>案例项目实战源码点击跳转>游戏脚本-辅助自动化点击跳转>Android控件全解手册点击跳转>Scratch编程案例点击跳转>软考全系列 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分享&…

RESTFUL是什么,为什么使用,有什么优点

ESTful&#xff08;Representational State Transfer&#xff09;是一种软件架构风格&#xff0c;用于设计网络应用程序和服务。它是一种面向资源的设计理念&#xff0c;强调资源的标识、表现层和统一接口。RESTful 架构的设计原则和优点使得它成为构建分布式系统和 Web 服务的…

【CMU 15-445】Proj1 Buffer Pool Manager

Buffer Pool Manager 通关记录Task1 LRU-K Replacement PolicyTask2 Disk SchedulerTask3 Buffer Pool ManagerFlushPageFlushAllPagesUnpinPageNewPageFetchPageDeletePage Optimizations CMU-15445汇总 本文对应的project版本为CMU-Fall-2023的project1 由于Andy要求&#xf…

切换数据库的临时表空间为temp1 / 切换数据库的undo表空间为 undotbs01

目录 ​编辑 一、切换临时表空间 1、登录数据库 2、查询默认临时表空间 3、创建临时表空间temp1&#xff08;我们的目标表空间&#xff09; 4、修改默认temp表空间 5、查询用户默认临时表空间 6、命令总结&#xff1a; 二、切换数据库的undo表空间 1、查询默认undo表…

护眼台灯横评|书客、明基、松下品牌大测评告诉你谁才是最亮的星!

护眼台灯哪个牌子好&#xff1f;随着护眼台灯普及率的日渐提高&#xff0c;护眼台灯市场也是十分火爆&#xff0c;但很多商家为了盈利&#xff0c;总是把重心放在宣传和营销手段上&#xff0c;从而导致护眼台灯的产品质量不过关&#xff0c;在使用过后不仅没有起到缓解眼睛疲劳…

【CASS精品教程】cass 3d基于osgb三维模型生成等高线的两种方法

对于植被、房屋稀少的地方,可以基于osgb模型直接生成等高线。本文讲解在cass11.0 3d中基于osgb三维模型生成等高线的两种方法。 一、加载osgb三维模型 二、生成等高线 1. 绘制等高线 cass11版本提供了绘制单个等高线的功能。 点击【绘制等高线】,提示输入等高距。 输入固定…

JVM中jhat虚拟机堆转储快照分析工具

jhat虚拟机堆转储快照分析工具 1、jhat jhat也是jdk内置的工具之一。主要是用来分析java堆的命令&#xff0c;可以将堆中的对象以html的形式显示出来&#xff0c;包括对 象的数量&#xff0c;大小等等&#xff0c;并支持对象查询语言。 使用jmap等方法生成java的堆文件后&a…