Elasticsearch 作为 GenAI 缓存层

作者: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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

大数据毕业设计选题推荐-智慧消防大数据平台-Hadoop-Spark-Hive

✨作者主页:IT毕设梦工厂✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

迅为iTOP-RK3588开发板多屏同显多屏异显异触

迅为iTOP-RK3588开发板多屏同显多屏异显异触 iTOP-RK3588开发板采用四核Cortex-A76处理器和Cortex-A55架构,芯片内置VOP控制器,最多可以支持7个屏幕显示,支持HDMI、LVDS、MIPI、EDP四种显示接口的多屏同显、异显和异触,可有效提高…

如何查看网站的https的数字证书

如题 打开Chrome浏览器,之后输入想要抓取https证书的网址,此处以知乎为例点击浏览器地址栏左侧的锁的按钮,如下图 点击“连接是安全的”选项,如下图 点击“证书有效”选项卡,如下图 查看基本信息和详细信息 点击详细信…

点亮一个灯

.text .global _start _start: RCC时钟使能 GPIOE RCC_MP_AHB$ENSETR[4]->1 LDR R0,0x50000a28 LDR R1,[R0] ORR R1,R1,#(0x1<<4) ORR R1,R1,#(0x1<<5) STR R1,[R0]设置PE10为输出模式 GPIOE_MODER[21:20]->01 先清0 LDR R0,0x50006000 LDR R1,[R0] BI…

Geotrust证书

GeoTrust是著名的证书颁发机构DigiCert的品牌。GeoTrustSSL产品在Internet上提供从基本域名验证到扩展验证SSL标准支持的最高级验证的安全性。 GeoTrust OV&#xff08;组织验证&#xff09;证书验证域所有权和组织的存在。在颁发证书之前&#xff0c;会检查该组织在公共数据库…

商业计划书PPT怎么做?这个AI软件一键在线生成,做PPT再也不求人!

商业计划书是一份重要的书面文件&#xff0c;它通常被用作商业估值、筹资和进一步扩大业务的基础。一个好的商业计划书能够让团队向投资者、潜在客户和业务合作伙伴展示其企业的价值&#xff0c;并且清楚地阐述企业的产品或服务能够如何满足市场需求。作为商业计划书的重要组成…

Java 数据结构篇-实现双链表的核心API

&#x1f525;博客主页&#xff1a; 小扳_-CSDN博客 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 双链表的说明 1.1 双链表 - 创建 1.2 双链表 - 根据索引查找节点 1.3 双链表 - 根据索引插入节点 1.4 双链表 - 头插节点 1.5 双链表 - 尾插 1.6 双链表 - 根据索引来…

时间序列预测(1) — 时间序列预测研究综述

目录 1 什么是时间序列预测? 2 时间序列预测的应用场景与分类 3 时间序列数据的特性 4 时序预测评价指标 5 基于深度学习的时间序列预测方法 5.1 卷积神经网络 5.2 循环神经网络 5.3 Transformer类模型 1 什么是时间序列预测? 时间序列&#xff1a;指对某种事物发展…

下一代图片格式AVIF,赶紧用起!

介绍AVIF图片格式的特点和在Web端显示AVIF格式图片的两种方案。 1 简介 AVIF是一种基于AV1视频编码的新图像格式&#xff0c;相对于JPEG、Wep等图片格式压缩率更高&#xff0c;并且画面细节更好。AVIF通过使用更现代的压缩算法&#xff0c;在相同质量的前提下&#xff0c;AVI…

对比了10+网盘资源搜索工具,我最终选择了这款爆赞的阿里云盘、百度网盘、夸克网盘资源一站式搜索工具

盘友圈&#xff08;https://panyq.com&#xff09;是一个综合性的网盘搜索站&#xff0c;与其他网盘搜索工具相比&#xff0c;它具有多个独特的优点&#xff0c;使其成为用户们首选的平台。 首先&#xff0c;盘友圈汇集了阿里云盘、百度网盘和夸克网盘等主流网盘资源&#xff…

Git的进阶操作,在idea中部署gie

&#x1f3c5;我是默&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; ​​ &#x1f31f;在这里&#xff0c;我要推荐给大家我的专栏《git》。&#x1f3af;&#x1f3af; &#x1f680;无论你是编程小白&#xff0c;还是有一定基础的程序员&#xff0c;这…

【Linux网络】手把手实操Linux系统网络服务DHCP

目录 一、什么是dhcp 二、详解dhcp的工作原理 三、dhcp的实操 第一步&#xff1a;3台机器的防火墙和安全机制都需要关闭&#xff01;&#xff01;&#xff01; 第二步&#xff1a;Linux下载dhcp软件&#xff0c;并查看配置文件位置 第三步&#xff1a;读配置文件&#xf…

electron安装报错:Electron failed to install correctly...解决方案

问题描述&#xff1a; 按照官方文档在yarn dev时报错&#xff1a; 一般遇到Electron failed to install correctly&#xff0c;please delete node_moules/electron and try installing again这种错误时&#xff0c;就是electron本体没有下载成功 解决方案&#xff1a; 1、…

新品上市|米尔RZ/G2UL核心板上市,助力工业4.0发展!

浩瀚的芯片海洋中能被人记住的寥寥无几&#xff0c;那些在人们脑海中留下印记的往往是踩中了时代的脉搏。32位ARMv7架构的A7/A8系列处理器自发布以来&#xff0c;以ARM9处理器的价格&#xff0c;升级了工业领域绝大部分应用需求&#xff0c;成为最近十年最受欢迎的通用工业级AR…

使用反射调用私有内部类方法

使用反射调用私有内部类方法 通过反射机制调用私有内部类方法,反射机制允许在运行时检查和操作类和方法。可以使用反射机制创建内部类的实例,并调用其私有方法 🍓情况一: 注意这里的内部类是私有静态内部类 待测类如下: package jj;import java.lang.reflect.Constru…

深度学习之基于YoloV5的火灾检测系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 火灾检测系统基于YoloV5的介绍 火灾检测是一项重要的安全任务&#xff0c;它旨在及时发现和报警火灾风险。基于深度…

SQL第四次上机实验

1.查询借阅了计算机类或者文学类图书的读者的借书证号 USE TSGL GO SELECT DISTINCT Reader.Lno FROM Book,Lend,Reader WHERE Book.ISBNLend.ISBN AND Lend.LnoReader.Lno AND Class 计算机类 OR Class 文学类2.查询同时借阅了计算机类和文学类图书的读者的借书证号 USE T…

分享一个JavaScript后台管理项目超实用的提示框

目录 新建js文件 设置css样式 html布局 script代码 调用方式 展示效果 新建js文件 首先我们需要新建一个js文件夹&#xff0c;将下方代码丢进去 "use strict";function _typeof(obj) { "babel/helpers - typeof"; if (typeof Symbol "f…

2024 AI软件大盘点,再不上手就落后了!

在近年来的科技创新浪潮中&#xff0c;人工智能无疑扮演了重要角色。其中一种主要的应用就是AIGC&#xff08;人工智能游戏创建&#xff09;软件。自从这种软件出现以来&#xff0c;人工智能已经为游戏设计师提供了新的工具和方法&#xff0c;使他们能够创造出更富有创意和吸引…

3D Gaussian Splatting:用于实时的辐射场渲染

Kerbl B, Kopanas G, Leimkhler T, et al. 3d gaussian splatting for real-time radiance field rendering[J]. ACM Transactions on Graphics (ToG), 2023, 42(4): 1-14. 3D Gaussian Splatting 是 Siggraph 2023 的 Best Paper&#xff0c;法国团队在会议上展示了其实现的最…