Amazon Redshift ML 与 Amazon Bedrock 集成 - Amazon Redshift

Amazon Redshift ML 与 Amazon Bedrock 集成

此部分介绍如何使用 Amazon Redshift ML 与 Amazon Bedrock 的集成。借助此功能,您可以使用 SQL 调用 Amazon Bedrock 模型,也可以使用 Amazon Redshift 数据仓库中的数据来构建生成式人工智能应用,如文本生成、情绪分析或翻译。

为 Amazon Redshift ML 与 Amazon Bedrock 的集成创建或更新 IAM 角色

此部分演示如何创建 IAM 角色,以便用于 Amazon Redshift ML 与 Amazon Bedrock 的集成。

将以下策略添加到用于 Amazon Redshift ML 与 Amazon Bedrock 的集成的 IAM 角色中:

  • AmazonBedrockFullAccess

要允许 Amazon Redshift 代入角色以与其它服务交互,请在 IAM 角色中添加以下信任策略:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "redshift.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }

如果集群或命名空间位于 VPC 中,请按照 为 Amazon Redshift ML 配置集群和管理设置 中的说明进行操作。

如果需要限制性更强的策略,可以创建一个仅包含以下页面中指定的 Amazon Bedrock 权限的策略:

有关创建 IAM 角色的信息,请参阅《AWS Identity and Access Management 用户指南》中的 IAM 角色创建

为 Amazon Redshift ML 与 Amazon Bedrock 的集成创建外部模型

此部分介绍如何创建外部模型,作为 Amazon Redshift 数据仓库中 Amazon Bedrock 的接口。

要从 Amazon Redshift 调用 Amazon Bedrock 模型,必须先运行 CREATE EXTERNAL MODEL 命令。此命令将在数据库中创建一个外部模型对象,以及一个相关的用户函数,用于使用 Amazon Bedrock 生成文本内容。

以下代码示例显示了一个基本 CREATE EXTERNAL MODEL 命令:

CREATE EXTERNAL MODEL llm_claude FUNCTION llm_claude_func IAM_ROLE '<IAM role arn>' MODEL_TYPE BEDROCK SETTINGS ( MODEL_ID 'anthropic.claude-v2:1', PROMPT 'Summarize the following text:');

对于所有支持消息的基础模型(FM),CREATE EXTERNAL MODEL 命令与 Amazon Bedrock 具有统一一致的接口。在使用 CREATE EXTERNAL MODEL 命令或将请求类型明确指定为 UNIFIED 时,这是默认选项。有关更多信息,请参阅 Amazon Bedrock API 文档中的 Converse API 文档

如果 FM 不支持消息,则必须将 request_type 设置为 RAW。如果将 request_type 设置为 RAW,则在使用基于所选 FM 的推理函数时,必须构造发送到 Amazon Bedrock 的请求。

CREATE EXTERNAL MODEL 命令的 PROMPT 参数是静态提示。如果您的应用程序需要动态提示,则必须在使用推理功能时指定。有关更多详细信息,请参阅下面的 Amazon Redshift ML 与 Amazon Bedrock 的集成的提示工程

有关 CREATE EXTERNAL MODEL 语句及其参数和设置的更多信息,请参阅 CREATE EXTERNAL MODEL

为 Amazon Redshift ML 与 Amazon Bedrock 的集成使用外部模型

此部分将展示如何调用外部模型来生成文本,以响应所提供的提示。要调用外部模型,请使用您通过 CREATE EXTERNAL MODEL 创建的推理函数。

使用 UNIFIED 请求类型模型进行推理

请求类型为 UNIFIED 的模型的推理函数有以下三个参数,依次传递给函数:

  • 输入文本(必需):此参数指定 Amazon Redshift 传递给 Amazon Bedrock 的输入文本。

  • 推理配置其它模型请求字段(可选):Amazon Redshift 会将这些参数传递给 Converse 模型 API 的相应参数。

以下代码示例演示如何使用 UNIFIED 类型推理函数:

SELECT llm_claude_func(input_text, object('temperature', 0.7, 'maxtokens', 500)) FROM some_data;

使用 RAW 请求类型模型进行推理

请求类型为 RAW 的模型的推理函数只有一个 SUPER 数据类型的参数。此参数的语法取决于所使用的 Amazon Bedrock 模型。

以下代码示例演示如何使用 RAW 类型推理函数:

SELECT llm_titan_func( object( "inputText", "Summarize the following text: " | input_text, "textGenerationConfig", object("temperature", 0.5, "maxTokenCount", 500) ) ) FROM some_data;

推理函数作为仅领导节点函数

当使用 Amazon Bedrock 模型的查询不引用任何表时,该模型的推理函数可作为仅领导节点函数运行。如果您想快速向 LLM 提问,这将很有帮助。

下面的代码示例展示了如何使用仅领导节点推理函数:

SELECT general_titan_llm_func('Summarize the benefits of LLM on data analytics in 100 words');

推理函数使用说明

对 Amazon Redshift ML 与 Amazon Bedrock 的集成使用推理函数时,请注意以下几点:

  • 所有 Amazon Bedrock 模型的参数名称都区分大小写。如果您的参数与模型要求的参数不一致,Amazon Bedrock 可能会悄悄忽略它们。

  • 推理查询的吞吐量受限于 Amazon Bedrock 在不同区域提供的不同模型的运行时配额。有关更多信息,请参阅《Amazon Bedrock 用户指南》中的 Amazon Bedrock 的配额

  • 如果您需要有保证且一致的吞吐量,请考虑从 Amazon Bedrock 获取所需模型的预置吞吐量。有关更多信息,请参阅《Amazon Bedrock 用户指南》中的使用 Amazon Bedrock 中的预置吞吐量增加模型调用容量

  • 具有大量数据的推理查询可能会出现节流异常。这是因为 Amazon Bedrock 的运行时配额有限。Amazon Redshift 会多次重试请求,但由于非预置模型的吞吐量可能会有变化,因此查询仍会受到节流。

  • 如果您遇到来自 Amazon Bedrock 的节流异常(例如 Too many requests, please wait before trying again.),即使数据量很少,也可以在 Amazon Bedrock 账户的服务配额下检查配额。检查所应用的账户级配额是否至少与针对您正在使用的模型的 InvokeModel 请求的 AWS 默认配额值相同。

Amazon Redshift ML 与 Amazon Bedrock 的集成的提示工程

此部分介绍如何将静态提示与外部模型一起使用。

要为外部模型使用静态前缀和后缀提示,请使用 CREATE EXTERNAL MODEL 语句的 PROMPTSUFFIX 参数提供它们。这些提示会添加到使用外部模型的每个查询中。

下面的示例显示了如何在外部模型中添加前缀和后缀提示:

CREATE EXTERNAL MODEL llm_claude FUNCTION llm_claude_func IAM_ROLE '<IAM role arn>' MODEL_TYPE BEDROCK SETTINGS ( MODEL_ID 'anthropic.claude-v2:1', PROMPT 'Summarize the following text:', SUFFIX 'Respond in an analytic tone');

要使用动态提示,可以在使用推理函数时通过在函数输入中连接动态提示来提供它们。下面的示例展示了如何在推理函数中使用动态提示:

SELECT llm_claude_func('Summarize the following review:' | input_text | 'The review should have formal tone.') FROM some_data