Amazon Redshift ML 與 Amazon Bedrock 整合 - Amazon Redshift

自 2025 年 11 月 1 日起,Amazon Redshift 將不再支援建立新的 Python UDFs。如果您想要使用 Python UDFs,請在該日期之前建立 UDFs。現有的 Python UDFs將繼續如常運作。如需詳細資訊,請參閱部落格文章

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

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 角色:

JSON
{ "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:');

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 的請求。

CREATE EXTERNAL MODEL 命令的 PROMPT 參數是靜態提示。如果您需要應用程式的動態提示,則必須在使用推論函數時指定它。如需詳細資訊,請參閱Amazon Redshift ML 與 Amazon Bedrock 整合的提示工程以下內容。

如需 CREATE EXTERNAL MODEL陳述式及其參數和設定的詳細資訊,請參閱 建立外部模型

使用外部模型與 Amazon Bedrock 進行 Amazon Redshift ML 整合

本節說明如何叫用外部模型來產生文字,以回應提供的提示。若要叫用外部模型,請使用您透過 建立的推論函數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陳述式的 PROMPTSUFFIX 參數提供它們。這些提示會使用外部模型新增至每個查詢。

下列範例示範如何將字首和尾碼提示新增至外部模型:

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