

 从补丁 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/)。

# CREATE EXTERNAL MODEL
<a name="r_create_external_model"></a>

**Topics**
+ [CREATE EXTERNAL MODEL 的先决条件](#r_create_external_model_prereqs)
+ [所需的权限](#r_simple_create_model-privileges)
+ [成本控制](#r_create_model_cost)
+ [CREATE EXTERNAL MODEL 语法](#r_create_external_model_syntax)
+ [CREATE EXTERNAL MODEL 参数和设置](#r_create_external_model_parameters_settings)
+ [CREATE EXTERNAL MODEL 推理函数参数](#r_create_external_model_if_parameters)

## CREATE EXTERNAL MODEL 的先决条件
<a name="r_create_external_model_prereqs"></a>

在使用 CREATE EXTERNAL MODEL 语句之前，请完成 [用于使用 Amazon Redshift ML 的集群设置](getting-started-machine-learning.md#cluster-setup) 中的先决条件。下面简要概述了这些先决条件。
+ 使用 AWS 管理控制台或 AWS 命令行界面 (AWS CLI) 创建 Amazon Redshift 集群。
+ 在创建集群时附加 AWS Identity and Access Management (IAM) policy。
+ 要允许 Amazon Redshift 和 Amazon Bedrock 代入角色以便与其它服务交互，请向 IAM 角色添加相应的信任策略。
+ 支持从 Amazon Bedrock 控制台访问您要使用的特定 LLM。
+ （可选）如果您遇到来自 Amazon Bedrock 的节流异常（例如 `Too many requests, please wait before trying again`），即使数据量很少，也可以在 Amazon Bedrock 账户的**服务配额**下检查配额。检查所应用的账户级配额是否至少与针对您正在使用的模型的 **InvokeModel** 请求的 AWS 默认配额值相同。

有关 IAM 角色、信任策略和其他先决条件的详细信息，请参阅[用于使用 Amazon Redshift ML 的集群设置](getting-started-machine-learning.md#cluster-setup)。

## 所需的权限
<a name="r_simple_create_model-privileges"></a>

以下是 CREATE EXTERNAL MODEL 所需的权限：
+ Superuser
+ 具有 CREATE MODEL 权限的用户
+ 具有 GRANT CREATE MODEL 权限的角色

## 成本控制
<a name="r_create_model_cost"></a>

 Amazon Redshift ML 使用现有集群资源创建预测模型，因此您无需支付额外费用。不过，AWS 会根据您选择的模型收取使用 Amazon Bedrock 的费用。有关更多信息，请参阅[使用 Amazon Redshift ML 的成本](https://docs.aws.amazon.com/redshift/latest/dg/cost.html)。

## CREATE EXTERNAL MODEL 语法
<a name="r_create_external_model_syntax"></a>

以下是 CREATE EXTERNAL MODEL 语句的完整语法。

```
CREATE EXTERNAL MODEL model_name 
FUNCTION function_name
IAM_ROLE {default/'arn:aws:iam::<account-id>:role/<role-name>'}
MODEL_TYPE BEDROCK
SETTINGS (
   MODEL_ID model_id
   [, PROMPT 'prompt prefix']
   [, SUFFIX 'prompt suffix']
   [, REQUEST_TYPE {RAW|UNIFIED}]
   [, RESPONSE_TYPE {VARCHAR|SUPER}]
);
```

`CREATE EXTERNAL MODEL` 命令会创建一个推理函数，用于生成内容。

下面是 `CREATE EXTERNAL MODEL` 使用 `RAW` `REQUEST_TYPE` 创建的推理函数的语法：

```
SELECT inference_function_name(request_super) 
[FROM table];
```

下面是 `CREATE EXTERNAL MODEL` 使用 `UNIFIED` `REQUEST_TYPE` 创建的推理函数的语法：

```
SELECT inference_function_name(input_text, [, inference_config [, additional_model_request_fields]])
[FROM table];
```

有关如何使用推理函数的信息，请参阅 [为 Amazon Redshift ML 与 Amazon Bedrock 的集成使用外部模型](machine-learning-br.md#machine-learning-br-use)。

## CREATE EXTERNAL MODEL 参数和设置
<a name="r_create_external_model_parameters_settings"></a>

此部分介绍 `CREATE EXTERNAL MODEL` 命令的参数和设置。

**Topics**
+ [CREATE EXTERNAL MODEL 参数](#r_create_external_model_parameters)
+ [CREATE EXTERNAL MODEL 设置](#r_create_external_model_settings)

### CREATE EXTERNAL MODEL 参数
<a name="r_create_external_model_parameters"></a>

model\$1name  
外部模型的名称。schema 中的模型名称必须是唯一的。

FUNCTION *function\$1name (data\$1type [,...] )*  
`CREATE EXTERNAL MODEL` 创建的推理函数的名称。您可以使用推理函数向 Amazon Bedrock 发送请求并检索 ML 生成的文本。

IAM\$1ROLE * \$1 default \$1 'arn:aws:iam::<account-id>:role/<role-name>' \$1*  
Amazon Redshift 用于访问 Amazon Bedrock 的 IAM 角色。有关 IAM 角色的信息，请参阅 [为 Amazon Redshift ML 与 Amazon Bedrock 的集成创建或更新 IAM 角色](machine-learning-br.md#machine-learning-br-iam)。

MODEL\$1TYPE BEDROCK  
指定模型类型。唯一有效值为 `BEDROCK`。

SETTINGS ( MODEL\$1ID model\$1id [,...] )  
指定外部模型设置。详见下一节。

### CREATE EXTERNAL MODEL 设置
<a name="r_create_external_model_settings"></a>

MODEL\$1ID model\$1id  
外部模型的标识符，例如 `anthropic.claude-v2`。有关 Amazon Bedrock 模型 ID 的信息，请参阅 [Amazon Bedrock 模型 ID](https://docs.aws.amazon.com/bedrock/latest/userguide/model-ids.html)。

PROMPT 'prompt prefix'  
指定 Amazon Redshift 添加到每个推理请求开头的静态提示。只有在 `REQUEST_TYPE` 为 `UNIFIED` 时受支持。

SUFFIX 'prompt suffix'  
指定 Amazon Redshift 添加到每个推理请求末尾的静态提示。只有在 `REQUEST_TYPE` 为 `UNIFIED` 时受支持。

REQUEST\$1TYPE \$1 RAW \$1 UNIFIED \$1  
指定发送到 Amazon Bedrock 的请求的格式。有效值包括：  
+ **RAW**：推理函数以单个 super 值作为输入，并始终返回一个 super 值。super 值的格式取决于所选的 Amazon Bedrock 模型。super 是一种预测模型，它将多种算法结合在一起，产生一个改进的预测结果。
+ **UNIFIED**：推理函数使用统一 API。所有模型都与 Amazon Bedrock 拥有统一一致的接口。这适用于所有支持消息的模型。此值是默认值。

  有关更多信息，请参阅 *Amazon Bedrock API 文档*中的 [Converse API 文档](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_Converse.html)。

RESPONSE\$1TYPE \$1 VARCHAR \$1 SUPER \$1  
指定响应的格式。如果 `REQUEST_TYPE` 为 `RAW`，则需要 `RESPONSE_TYPE`，而且唯一有效的值为 `SUPER`。对于所有其它 `REQUEST TYPE` 值，默认值为 `VARCHAR`，而且 `RESPONSE_TYPE` 是可选的。有效值包括：  
+ **VARCHAR**：Amazon Redshift 仅返回模型生成的文本响应。
+ **SUPER**：Amazon Redshift 会将模型生成的整个响应 JSON 作为 super 返回。这包括文本响应、停止原因等信息，以及模型输入和输出标记的使用情况。super 是一种预测模型，它将多种算法结合在一起，产生一个改进的预测结果。

## CREATE EXTERNAL MODEL 推理函数参数
<a name="r_create_external_model_if_parameters"></a>

此部分介绍 `CREATE EXTERNAL MODEL` 命令创建的推理函数的有效参数。

### `REQUEST_TYPE` 为 `RAW` 的 CREATE EXTERNAL MODEL 推理函数参数
<a name="r_create_external_model_if_parameters_raw"></a>

当 `REQUEST_TYPE` 为 `RAW` 时创建的推理函数有一个 super 输入参数，并且始终返回 super 数据类型。输入 super 的语法遵循从 Amazon Bedrock 中选择的特定模型的请求语法。

### `REQUEST_TYPE` 为 `UNIFIED` 的 CREATE EXTERNAL MODEL 推理函数参数
<a name="r_create_external_model_if_parameters_unified"></a>

input\$1text  
Amazon Redshift 发送给 Amazon Bedrock 的文本。

inference\$1config  
一个 super 值，其中包含 Amazon Redshift 发送给 Amazon Bedrock 的可选参数。包括以下参数：  
+ maxTokens
+ stopSequences
+ temperature
+ topP
这些参数均为可选参数，且区分大小写。有关这些参数的信息，请参阅《Amazon Bedrock API 参考》**中的 [InferenceConfiguration](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InferenceConfiguration.html)。