

 Amazon Redshift 將不再支援從修補程式 198 開始建立新的 Python UDFs。現有 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 資料倉儲中的自有資料來建置生成式 AI 應用程式，例如文字產生、情緒分析或翻譯。

**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:');
```

`CREATE EXTERNAL MODEL` 命令與 Amazon Bedrock 之間有整合一致的介面，適用於支援訊息的所有基礎模型 (FM)。這是使用 `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);
```

如果您需要輸入請求 (例如字符總數) 的詳細資訊，您可以在建立模型時請求 `RESPONSE_TYPE` 為 `super`。

```
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 帳戶中的 **Service Quotas** 下查看配額。檢查套用的帳戶層級配額至少與您正在使用的模型之 **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
```