

 从补丁 198 开始，Amazon Redshift 将不再支持创建新的 Python UDF。现有的 Python UDF 将继续正常运行至 2026 年 6 月 30 日。有关更多信息，请参阅[博客文章](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。

# Amazon Redshift ML 与 Amazon Bedrock 集成
<a name="machine-learning-br"></a>

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

**Topics**
+ [为 Amazon Redshift ML 与 Amazon Bedrock 的集成创建或更新 IAM 角色](#machine-learning-br-iam)
+ [为 Amazon Redshift ML 与 Amazon Bedrock 的集成创建外部模型](#machine-learning-br-create)
+ [为 Amazon Redshift ML 与 Amazon Bedrock 的集成使用外部模型](#machine-learning-br-use)
+ [Amazon Redshift ML 与 Amazon Bedrock 的集成的提示工程](#machine-learning-br-prompt)

## 为 Amazon Redshift ML 与 Amazon Bedrock 的集成创建或更新 IAM 角色
<a name="machine-learning-br-iam"></a>

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

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

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

------
#### [ JSON ]

****  

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

------

如果集群或命名空间位于 VPC 中，请按照 [为 Amazon Redshift ML 配置集群和管理设置](getting-started-machine-learning.md#admin-setup) 中的说明进行操作。

如果需要限制性更强的策略，可以创建一个仅包含以下页面中指定的 Amazon Bedrock 权限的策略：
+ [为 Amazon Redshift ML 配置集群和管理设置](getting-started-machine-learning.md#admin-setup)
+ [使用 Amazon Redshift 机器学习（ML）所需的权限](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-access-control-identity-based.html#iam-permission-ml?)

有关创建 IAM 角色的信息，请参阅《AWS Identity and Access Management 用户指南》**中的 [IAM 角色创建](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create.html)。

## 为 Amazon Redshift ML 与 Amazon Bedrock 的集成创建外部模型
<a name="machine-learning-br-create"></a>

此部分介绍如何创建外部模型，作为 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 文档](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_Converse.html)。

如果 FM 不支持消息，则您必须将 `request_type` 设置为 `RAW`，如下例所示。如果将 `request_type` 设置为 `RAW`，则在使用基于所选 FM 的推理函数时，必须构造发送到 Amazon Bedrock 的请求。运行以下示例之前，请确保在 Amazon Bedrock 中启用对 Titan Text G1 – Express 模型的访问权限。

```
CREATE EXTERNAL MODEL titan_raw
FUNCTION func_titan_raw
IAM_ROLE '<IAM role arn>'
MODEL_TYPE BEDROCK
SETTINGS (
   MODEL_ID 'amazon.titan-text-express-v1',
   REQUEST_TYPE RAW,
   RESPONSE_TYPE SUPER);
```

如果您需要有关输入请求的更多信息（例如词元总数），可以在创建模型时请求将 `super` 设置为 `RESPONSE_TYPE`。

```
CREATE EXTERNAL MODEL patient_recommendations_v2
FUNCTION patient_recommendations_func_v2
IAM_ROLE '<IAM role arn>'
MODEL_TYPE BEDROCK
SETTINGS (
   MODEL_ID 'anthropic.claude-v2',
   PROMPT 'Generate personalized diet plan for following patient:',
   RESPONSE_TYPE SUPER);
```

`CREATE EXTERNAL MODEL` 命令的 `PROMPT` 参数是静态提示。如果您的应用程序需要动态提示，则必须在使用推理功能时指定。有关更多详细信息，请参阅[Amazon Redshift ML 与 Amazon Bedrock 的集成的提示工程](#machine-learning-br-prompt)。

有关 `CREATE EXTERNAL MODEL` 语句及其参数和设置的更多信息，请参阅 [CREATE EXTERNAL MODEL](r_create_external_model.md)。

## 为 Amazon Redshift ML 与 Amazon Bedrock 的集成使用外部模型
<a name="machine-learning-br-use"></a>

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

**Topics**
+ [使用 `UNIFIED` 请求类型模型进行推理](#machine-learning-br-use-unified)
+ [使用 `RAW` 请求类型模型进行推理](#machine-learning-br-use-raw)
+ [推理函数作为仅领导节点函数](#machine-learning-br-use-leader)
+ [推理函数使用说明](#machine-learning-br-use-usage)

### 使用 `UNIFIED` 请求类型模型进行推理
<a name="machine-learning-br-use-unified"></a>

请求类型为 `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` 请求类型模型进行推理
<a name="machine-learning-br-use-raw"></a>

请求类型为 `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;
```

### 推理函数作为仅领导节点函数
<a name="machine-learning-br-use-leader"></a>

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

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

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

### 推理函数使用说明
<a name="machine-learning-br-use-usage"></a>

对 Amazon Redshift ML 与 Amazon Bedrock 的集成使用推理函数时，请注意以下几点：
+ 所有 Amazon Bedrock 模型的参数名称都区分大小写。如果您的参数与模型要求的参数不一致，Amazon Bedrock 可能会悄悄忽略它们。
+ 推理查询的吞吐量受限于 Amazon Bedrock 在不同区域提供的不同模型的运行时配额。有关更多信息，请参阅《Amazon Bedrock 用户指南》**中的 [Amazon Bedrock 的配额](https://docs.aws.amazon.com/bedrock/latest/userguide/quotas.html)。
+ 如果您需要有保证且一致的吞吐量，请考虑从 Amazon Bedrock 获取所需模型的预置吞吐量。有关更多信息，请参阅《Amazon Bedrock 用户指南》**中的[使用 Amazon Bedrock 中的预置吞吐量增加模型调用容量](https://docs.aws.amazon.com/bedrock/latest/userguide/prov-throughput.html)。
+ 具有大量数据的推理查询可能会出现节流异常。这是因为 Amazon Bedrock 的运行时配额有限。Amazon Redshift 会多次重试请求，但由于非预置模型的吞吐量可能会有变化，因此查询仍会受到节流。
+ 如果您遇到来自 Amazon Bedrock 的节流异常（例如 `Too many requests, please wait before trying again.`），即使数据量很少，也可以在 Amazon Bedrock 账户的**服务配额**下检查配额。检查所应用的账户级配额是否至少与针对您正在使用的模型的 **InvokeModel** 请求的 AWS 默认配额值相同。

## Amazon Redshift ML 与 Amazon Bedrock 的集成的提示工程
<a name="machine-learning-br-prompt"></a>

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

要为外部模型使用静态前缀和后缀提示，请使用 `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
```