Amazon Redshift 自 2025 年 11 月 1 日起不再支援建立新的 Python UDF。如果您想要使用 Python UDF,請在該日期之前建立 UDF。現有 Python UDF 將繼續正常運作。如需詳細資訊,請參閱部落格文章
Amazon Redshift ML 與 Amazon Bedrock 整合
本節說明如何使用 Amazon Redshift ML 與 Amazon Bedrock 整合。透過此功能即可使用 SQL 調用 Amazon Bedrock 模型,而且您可以使用 Amazon Redshift 資料倉儲中的自有資料來建置生成式 AI 應用程式,例如文字產生、情緒分析或翻譯。
主題
建立或更新 Amazon Redshift ML 與 Amazon Bedrock 整合的 IAM 角色
本節示範如何建立 IAM 角色,以搭配 Amazon Redshift ML 與 Amazon Bedrock 整合使用。
將下列政策新增至您搭配 Amazon Redshift ML 與 Amazon Bedrock 整合使用的 IAM 角色:
AmazonBedrockFullAccess
若要允許 Amazon Redshift 擔任與其他服務互動的角色,請將下列信任政策新增至 IAM 角色:
如果叢集或命名空間位於 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:');
CREATE EXTERNAL MODEL 命令與 Amazon Bedrock 之間有整合一致的介面,適用於支援訊息的所有基礎模型 (FM)。這是使用 CREATE EXTERNAL MODEL 命令或明確指定 UNIFIED 為請求類型時的預設選項。如需詳細資訊,請參閱 Amazon Bedrock API 文件中的 Converse API 文件。
如果 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 整合的提示工程。
如需有關 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 帳戶中的 Service Quotas 下查看配額。檢查套用的帳戶層級配額是否至少與您使用之模型的 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