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
语句的 PROMPT
和 SUFFIX
参数提供它们。这些提示会添加到使用外部模型的每个查询中。
下面的示例显示了如何在外部模型中添加前缀和后缀提示:
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