构建一个具有读透功能的语义缓存,使用 Amazon OpenSearch Serverless 和

使用 Amazon OpenSearch Serverless 和 Amazon Bedrock 构建语义缓存

作者 : Kamran Razi, Anila Joshi, Sungmin Hong, 和 Yash Shah
发布日期 : 2024年11月26日
类别 : ,

关键要点

在生成性 AI 领域,延迟和成本是重大挑战。使用大型语言模型 (LLM) 时,通常会以自回归的方式顺序处理文本,导致延迟和用户体验不佳。本文展示了一种优化 LLM 应用程序的策略,使用无服务器的读取语义缓存,通过重复数据模式来提高效率和响应速度。该缓存方案结合了 和 ,实现了更快的响应时间和显著减少的开销。

解决方案概述

该解决方案中的缓存作为一个中介,拦截以自然语言表达的 LLM请求。语义缓存作为一种内存库,存储之前遇到的相似请求,并在效率和迅速匹配用户请求之间取得平衡。为了更好地理解此概念,我们可以通过几个示例进行说明。

举例来说,假设有一个为旅行公司设计的 LLM驱动的智能助理。它能够根据过去的互动提供个性化的响应,确保每个回复都是相关的并符合旅行者的需求。在这种情况下,我们可能更注重提高“召回率”,即希望缓存更多响应,即使这会导致部分重复的提示。

而在另一个场景中,一个为旅行公司的后端代理设计的 AI 助手,使用 LLM 把自然语言查询转换为 SQL命令,以便生成财务报告。在这种情况下,准确性至关重要,确保每个用户请求都能准确映射到对应的 SQL命令。此时,我们会选择更严格的相似性阈值,从而避免缓存碰撞。

而语义缓存系统的核心是存储文本查询的数值向量嵌入。在被存储之前,每个自然语言查询都会被转换为相应的嵌入向量。借助 AmazonBedrock,您可以选择多种托管的嵌入模型,包括 Amazon 自有的 Titan 嵌入模型或第三方解决方案。利用 OpenSearchServerless,您可以建立一个向量数据库,为搭建稳健的缓存系统奠定基础。

借助这些技术,开发人员可以构建一个有效存储和检索语义相关查询的缓存系统,从而提升系统的性能和响应速度。本文将展示如何利用各种 AWS技术来建立无服务器语义缓存系统,实现快速查找,从而避免耗时的 LLM 调用,提升用户体验并降低成本。

该解决方案可以通过 模板进行部署,所需的 AWS 服务包括:

  • Amazon Bedrock 管理的文本生成模型,例如
  • Amazon Bedrock 管理的文本嵌入模型,例如
  • OpenSearch Serverless 向量搜索集合
  • 作为缓存处理器

以下架构展示了可以整合到 LLM 基础解决方案中的无服务器读取语义缓存模式。

![语义缓存示意图](https://d2908q01vomqb2.cloudfront.net/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59/2024/11/18/semantic- 删除)

在该架构中,缓存未命中和命中的例子分别用红色和绿色表示。在此场景中,客户端发送一个查询,然后与之前见过的查询进行语义比对。作为缓存管理器的 Lambda函数,由于缺乏符合相似性阈值的缓存命中,会请求 LLM生成新的响应。新生成的内容将被发送到客户端,并用以更新向量数据库。在缓存命中(绿色路径)的情况下,之前生成的语义相似查询将立即返回给客户端。

对于这个短查询,以下表格总结了对“谁是第一位美国总统?”的查询响应延迟,使用了 Anthropic Claude V2 的测试结果。

查询无缓存命中有缓存命中
谁是第一位美国总统?2秒0.5秒以内

前提条件

Amazon Bedrock 用户需要

基础模型。一旦申请成功,您可以选择如 Cohere 嵌入英语或 Amazon Titan 文本嵌入等模型。对于文本生成,可以选择 Anthropic 的 Claude 模型。有关文本生成模型的完整列表,请参考 Amazon Bedrock 的文档。

![Bedrock删除)

部署解决方案

该解决方案涉及设置一个 Lambda 层,包含与 OpenSearch Serverless 和 Amazon Bedrock等服务交互所需的依赖项。一个预构建的层已被编译并添加到公共 (Amazon S3) 前缀,如提供的 CloudFormation模板所示。您也可以根据需要构建自己的层,详细信息请参见以下 。

可以使用提供的模板部署该解决方案,所需角色如图所示:

删除)](https://us- east-1.console.aws.amazon.com/cloudformation/home?region=us- east-1#/stacks/create/review?templateURL=https://aws-blogs-artifacts- public.s3.amazonaws.com/ML-16295/llm_cache.yaml&stackName=semantic-cache)

该解决方案使用了以下输入参数:

  • 嵌入模型
  • LLM
  • 相似性阈值

成功部署后(大约需要 2 分钟),您可以获取 Lambda 函数名称并开始实验。您可以在 CloudFormation 堆栈的 输出 标签中找到 Lambda 函数名称,示例如下图所示。

删除)

您可以从 Lambda 控制台或通过 (AWS CLI) 调用 Lambda函数:

bash aws lambda invoke \ --function-name YOUR_LAMBDA_FUNCTION_NAME \ --invocation-type RequestResponse \ --cli-binary-format raw-in-base64-out \ --payload '{"prompt": "你的问题这里"}' \ output.txt

您的负载可以有其他选项来控制缓存和生成,如下所示:

json { "max_tokens_to_sample": int, // 可选。控制缓存未命中时 LLM 生成的长度,默认值为 1000。 "reset": bool // 可选。用于重置缓存 }

测试解决方案

要使用 Lambda 控制台测试您的缓存,请打开函数页面,导航到您从堆栈输出中获取的函数,并设置一个测试事件,如下图所示。

![Lambda删除)

成功运行后,结果显示如下图所示。

![Lambda删除)

我们可以尝试另一个实验,深入了解我们的缓存功能。对于此实验,我们使用了 Amazon Bedrock 上的 Cohere 嵌入模型,并设置相似性阈值为 0.75。我们询问如下问题,模型生成完整响应约需 15 秒:

提示 : 人工智能和区块链技术对全球金融行业的潜在长期影响是什么?

生成 : 以下是人工智能和区块链对全球金融行业的一些潜在长期影响:

  • 自动化常规任务 – 人工智能和机器学习可以自动化许多常规金融任务,如贷款处理、欺诈检测、客户入职等。这可能会降低运营成本,提高金融公司的效率。
  • 更好的数据分析和洞察力 – 人工智能能够比人类更有效地分析大量金融数据。这可能会带来更好的洞察、个性化的客户建议,以及改善公司的风险管理。
  • 改进的交易和投资平台 – 人工智能算法能够比人类交易者更快、更优化地执行交易,并能支持提供自动投资建议和组合管理的机器人顾问。
  • 加强安全性和欺诈检测 – 机器学习模型可以识别数据中的模式,以发现潜在的欺诈、洗钱或网络安全威胁。区块链提供了一个去中心化的、加密的交易记录,更难以篡改。

当我们尝试这些提示变体时,缓存系统成功返回了先前生成的响应(0.5 秒以内 ):

类似提示 1 : 人工智能和区块链对全球金融领域的潜在未来影响是什么?

类似提示 2 : 讨论人工智能和区块链技术进步在未来几十年对全球金融格局的可能影响。

如果我们将“金融领域”一词替换为“医疗领域”,我们期待没有缓存碰撞并生成新的内容:

提示 : 请概述人工智能和区块链对全球医疗领域的未来影响。

生成 : 以下是人工智能对医疗领域的一些潜在长期影响:

  • 个性化医疗 – 人工智能可以分析关于遗传、生活方式、医疗历史等的大规模数据集,为每位患者提供量身定制的治疗方案,这可能会改善效果并减少系统中的浪费。
  • 早期疾病检测 – 算法在分析医学图像和数据方面变得非常有效,能够比人工医生更早识别潜在的疾病和情况。这可以促使更早的治疗和预防严重疾病。
  • 降低成本 – 人工智能能够自动化和简化医疗中的许多流程,提高效率并降低成本。例如,人工智能聊天机器人和虚拟助手可以以远低于人工工作人员的成本提供一些基本服务。

以下表格总结了在 uncache hit 和 cache hit 测试的查询延迟测试结果,使用了 Anthropic 的 Claude V2。

查询无缓存命中有缓存命中
请概述人工智能和区块链对全球医疗领域的未来影响。15秒0.5秒以内

除了延迟外,您还可以为 LLM 系统节省成本。通常情况下,嵌入模型的成本效率高于生成模型。例如,Amazon Titan 文本嵌入 V2 的成本为每 1000 个输入标记 0.00002 美元,而 Anthropic 的 Claude V2 的成本为每 1000 个输入标记 0.008 美元和每 1000个输出标记 0.024 美元。即使考虑到 OpenSearch 服务的额外成本,根据缓存数据的规模,缓存系统也可以在许多用例中实现成本效率。

清理

在完成 Lambda 函数的实验后,您可以快速删除用于构建此语义缓存的所有资源,包括您的 OpenSearch Serverless 集合和 Lambda函数。要执行此操作,请在 AWS CloudFormation 控制台上找到您的 CloudFormation 堆栈并将其删除。

确保堆栈的状态从 删除中 更改为 已删除 。

结论

在本文中,我们演示了设置无服务器读取语义缓存的过程。通过实现此处概述的模式,您可以提升基于 LLM的应用程序的延迟,同时优化成本并丰富用户体验。我们的解决方案还支持对不同规模的嵌入模型进行实验,并能够微调相似性阈值,以达到缓存命中率与缓存碰撞率之间的完美平衡。采用这种方法,您将能够在项目中解锁更高的效率和有效性。

欲了解更多信息,请参考 和 。

关于作者

Kamran Razi 是 Amazon 生成 AI 创新中心的数据科学家。他热衷于提供尖端的生成 AI 解决方案,帮助客户充分发挥 AWSAI/ML 服务的潜力,以解决现实业务挑战。他拥有十多年的软件开发经验,专注于构建 AI 驱动的解决方案,包括聊天机器人、文件处理和检索增强生成 (RAG) 管道。Kamran 拥有女王大学电气工程博士学位。

Sungmin Hong 是 Amazon 生成 AI 创新中心的高级应用科学家,帮助加速 AWS 客户的各种用例。在加入 Amazon之前,Sungmin 曾担任哈佛医学院的博士后研究员。他拥有纽约大学计算机科学博士学位。在工作之余,Sungmin 喜欢远足、阅读和烹饪。

Yash Shah 是 AWS 生成 AI创新中心的科学经理,带领他的应用科学家和机器学习工程师团队开展医疗、体育、汽车和制造等领域的一系列机器学习用例。

Anila Joshi 拥有十多年的 AI 解决方案开发经验。作为 AWS 生成 AI 创新中心的高级经理,她开创了将 AI创新的应用推向可能性边界的方案,帮助客户构思、识别和实施安全的生成 AI 解决方案,从而促进 AWS 服务的采用。

标签:

Leave a Reply

Required fields are marked *