使用 Amazon Bedrock 和 AWS Step Functions 协调生成性 AI 工作

使用 Amazon Bedrock 和 AWS Step Functions 协调生成 AI 工作流

作者:Dimitri Restaino,2024 年 11 月 22 日

文章重点

  • 本文介绍如何使用 AWS Step Functions 协调多步骤的生成 AI 工作流。
  • 探讨了两种映射策略:内联映射和分布映射,用于处理小型和大型数据集。
  • 讨论了如何通过 Amazon Bedrock 使用 Retrieval Augmented Generation (RAG) 来增强输出。
  • 提供了具体的实作步骤和范例。

随著各行各业的公司利用 解决各种用例,云端供应商认识到需要通过 API 呼叫提供模型推理,显著简化了 AI 在应用程序中的实施。虽然单个 API呼叫可以处理简单的用例,但更复杂的用例可能需要多个呼叫和与其他服务的整合。

本文将探讨如何使用 高效协调多步骤的生成 AI 工作流,例如通过平行呼叫 来快速获取提交的问题清单的答案。我们还会介绍如何使用 (RAG)来优化输出,并提供额外的精确性层次,以及透过 Step Functions 进行的其他可能的整合。

Amazon Bedrock 与 Step Functions 简介

Amazon Bedrock 是一项完全管理的服务,通过单个 API 提供来自 AI 领先企业(如 AI21Labs、Anthropic、Cohere、Meta、Mistral AI、Stability AI 和 Amazon)的高性能基础模型(FMs)及其所需的大量功能,以安全、隐私和负责任的 AI 为核心。使用 AmazonBedrock,您可以轻松试验和评估适合您用例的顶级 FMs,使用精细调整和 RAG 等技术将其私有化,并构建能够使用企业系统和数据源执行任务的代理。由于 Amazon Bedrock 是无伺服器的,因此无需管理任何基础设施,您可以安全地将生成 AI 功能整合并部署到您已经熟悉的 AWS 服务中。

AWS Step Functions是一项完全管理的服务,使协调分布式应用程序和微服务中的组件变得更加容易,并且使用可视化工作流程。通过构建各执行单元执行独立功能的应用程序,可以更轻松地进行扩展并更快地更改应用程序。StepFunctions 可靠地协调组件,并按顺序执行应用程序的功能。Step Functions提供图形化控制台,将您应用程序的组件以系列步骤的形式排列和可视化。这使得构建和运行多步应用程序变得更加容易。Step Functions自动触发并跟踪每一步,并在出现错误时重试,因此您的应用程序按预期执行。Step Functions 纪录每一步的状态,因此当出现问题时,您可以 。您可以在几乎不写代码的情况下更改和添加步骤,使得应用程序的演化更加方便,创新速度更快。

使用映射功能协调平行任务

数组是编程中的基本数据结构,由有序元素的集合组成。在 Step Functions的上下文中,数组在实现平行处理和高效任务协调中起著至关重要的作用。Step Functions中的映射功能利用数组来并行执行多个任务,显著提高涉及重复操作的工作流的性能和可扩展性。Step Functions提供两种不同的映射策略来迭代数组:内联映射和分布映射,各有其优势和用例。

内联映射

内联映射功能允许您在单个 Step Functions状态机执行中并行处理数组元素。当需要处理的项目数量相对较少时,且每个项目的处理彼此独立,这种方法非常适合。
以下是其工作原理:

  1. 在您的 Step Functions 状态机中定义一个 Map 状态。
  2. Step Functions 迭代数组,并并行运行指定任务。
  3. 每次迭代的结果会被收集并提供于状态机的后续步骤中。

内联映射适合轻量级任务,帮助避免启动多个 Step Functions 执行的开销,这可能会更加昂贵且资源密集。但它也存在限制:使用内联映射时,仅接受 JSON 负载作为输入,工作流的执行历史不能超过 25,000 条目,而且同时运行的映射迭代不能超过 40 次。

分布映射

分布映射功能适用于需要处理许多项目的场景,或者每个项目的处理资源密集或耗时。Step Functions针对数组中的每个项目启动单独的执行,而不是在单个执行中处理所有项目,从而让您可以并行处理储存在 (Amazon S3)中的大规模数据源,例如包含大量数据的单个 JSON 或 CSV文件,或甚至是一大组 Amazon S3 对象。这种方法具有以下优势:

优势说明
可扩展性通过分散处理到多个执行,您可以更高效地扩展并利用 Step Functions 的内置平行性
故障隔离如果一个执行失败,不会影响其他执行,提供更好的容错性和可靠性
资源管理每个执行可以分配其自己的资源,帮助防止资源竞争并提供一致的性能

然而,由于启动多个 Step Functions 执行的开销,分布映射可能会产生额外的成本。

选择映射方法

总结而言,内联映射适合轻量级任务且待处理项目数量相对较少,而分布映射则更适合资源密集型任务或需要更好可扩展性和故障隔离的大型数据集。两种映射策略之间的选择取决于应用程序的具体需求,例如项目的数量、处理的复杂性以及所需的平行性和容错性。

在使用 Amazon Bedrock 和 Step Functions Map 状态来构建生成 AI 应用程序时,另一个重要考虑因素是 。通常,这些模型配额允许每分钟进行数百甚至数千个请求。然而,当您尝试在处理低请求量的模型时运行大映射时,可能会遭遇问题。例如,图像生成模型。在这种情况下,您可以在 Map 状态的错误处理中包含 。

解决方案概览

在接下来的部分中,我们将通过实际操作来展示这一解决方案是如何运作的。Amazon Bedrock提供多种模型选择以满足各种个别用例的具体需求。在这次演练中,我们使用 Amazon Bedrock 对 Anthropic 的 Claude 3.5Haiku 模型进行推理,以获取一系列问题的答案,因为这是一个性能优越、快速且具成本效益的选项。

我们的目标是创建一个 Step Functions 中的快速状态机,利用内联 Map 状态解析由应用程序的 API 呼叫发送的问题 JSON数组。对于每个问题,Step Functions 将横向扩展,并同时对 Amazon Bedrock 发出调用。在所有答案返回后,StepFunctions 将它们合并为单响应,然后原始调用应用程序可以进一步处理或显示给最终用户。

我们发送的 包含一组九个提案请求(RFP)问题,以及公司描述:

`json { "questions": 在 us-west-2 地区提供所需的 AWS 资源。 为开发人员和企业提供了一种简单的方法,可以有条不紊地创建相关的 AWS 和第三方资源集合,并进行配置和管理。

前提条件

跟随这一解决方案实现需要以下几项前提条件:

  • AWS帐户
  • 拥有访问 Amazon Bedrock 和 Step Functions 的 (IAM)用户
  • 至 Anthropic Claude 3.5 Haiku 模型,在 中(我们将使用 us-west-2

创建状态机并添加 Map 状态

在 AWS 控制台的 us-west-2 区域,启动 Step Functions,选择“开始使用”并选择“创建自己的”来打开 StepFunctions 工作流工作室的空白画布。

编辑状态机,添加一个内联 Map 状态,数据来源是 JSON 有效负载。

删除)

接下来,告诉 Map 状态数组的位置,选择“提供数组项目的路径 ”并指向问题数组,使用 。选择“使用 ItemSelector 修改项目 ”可以结构化有效负载,然后发送给每个子工作流执行。在这里,我们通过不变化的方式将描述映射并使用 $$.Map.Item.Value 从数组中映射出对应于当前迭代索引的问题。

删除)

调用 Amazon Bedrock 模型

接下来,在 Map 状态中的下一个状态添加 Bedrock: InvokeModel 操作任务。

删除)

现在,您可以通过工作流工作室结构化您的 Amazon Bedrock API 调用。由于我们使用的是 Anthropic 的 Claude 3.5Haiku 模型,因此选择相应的模型 ID 作为“Bedrock 模型标识符 ”,并编辑提供的示例以包含进来的有效负载。根据您选择的模型,有效负载可能会有不同的结构和提示语法。

删除)

构建有效负载

您构建的提示使用 本征函数 ,将 {} 替换为在字符串之后声明的变数。我们还必须在 text 键后包含 .$ 以引用当前状态 JSON 输入中的某个节点。

在构建此提示时,您应该非常具体地要求模型:

  • 透过回应描述反馈问题,并不重复问题
  • 只回应问题答案

我们将 max_tokens 设置为 800

Leave a Reply

Required fields are marked *