Amazon Redshift ML と Amazon Bedrock の統合 - Amazon Redshift

Amazon Redshift ML と Amazon Bedrock の統合

このセクションでは、Amazon Redshift ML と Amazon Bedrock の統合を使用する方法について説明します。この機能では、SQL を使用して Amazon Bedrock モデルを呼び出すことができ、Amazon Redshift データウェアハウスのデータを使用して、テキスト生成、感情分析、翻訳などの生成 AI アプリケーションを構築できます。

Amazon Redshift ML と Amazon Bedrock の統合のための IAM ロールの作成または更新

このセクションでは、Amazon Redshift ML と Amazon Bedrock の統合で使用する IAM ロールの作成方法について説明します。

Amazon Redshift ML と Amazon Bedrock の統合で使用する IAM ロールに次のポリシーを追加します。

  • AmazonBedrockFullAccess

Amazon Redshift が他のサービスとやり取りするロールを引き受けることを許可するには、IAM ロールに以下の信頼ポリシーを追加します。

{ "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 コマンドには、メッセージをサポートするすべての基盤モデル (FM) 向けの Amazon Bedrock との統一され一貫したインターフェイスがあります。これは、 CREATE EXTERNAL MODEL コマンドを使用する場合、またはリクエストタイプを UNIFIED に明示的に指定する場合のデフォルトのオプションです。詳細については、「Amazon Bedrock API ドキュメント」の「Converse API documentation」を参照してください。

FM がメッセージをサポートしていない場合は、request_type 設定を RAW に設定する必要があります。request_typeRAW に設定する場合、選択した FM に基づいて推論関数を使用する際、Amazon Bedrock に送信するリクエストを作成する必要があります。

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 リクエストタイプのモデルを使用した推論関数には、関数に順番に渡される次の 3 つのパラメータがあります。

  • 入力テキスト (必須): このパラメータは、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 データタイプのパラメータが 1 つだけあります。このパラメータの構文は、使用する 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 ユーザーガイド」の「Quotas for Amazon Bedrock」を参照してください。

  • 保証された一貫したスループットが必要な場合は、Amazon Bedrock から必要なモデルのプロビジョニングされたスループットを取得することを検討してください。詳細については、「Amazon Bedrock ユーザーガイド」の「Increase model invocation capacity with Provisioned Throughput in Amazon Bedrock」を参照してください。

  • 大量のデータを含む推論クエリでは、スロットリング例外が発生する可能性があります。これは、Amazon Bedrock のランタイムクォータが限られているためです。Amazon Redshift は複数回リクエストを再試行しますが、プロビジョニングされていないモデルのスループットは可変である可能性があるため、クエリはスロットリングされる可能性があります。

  • データが少量にもかかわらず Amazon Bedrock によるスロットリング例外 (Too many requests, please wait before trying again. など) が発生する場合は、Amazon Bedrock アカウントの [サービスクォータ] でクォータを確認します。適用されているアカウントレベルのクォータが、使用しているモデルに対する 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