はじめに
生成AIのRAGシステムを構築する前段階として、AWSのLambdaから生成AIモデルを呼び出してみました。
実行ロールの割り当てに引っかかって時間を使ったので、やり方をまとめました。
Amazon Bedrockの事前準備
まず、AWS CLIをインストールして認証します。
方法はAWS CLIを使い始めるまでに書いています。
次に、Bedrockへのモデルアクセスとトークンの発行を行います。
こちらは、「Amazon Bedrock API (Claude 3 Haiku)のはじめの第一歩」にまとめました。
Lambda関数の作成
Lambda
→Functions
→Create function
からLambda関数を作ります。
Create function
で関数を作成できたら、関数の設定を行います。
デフォルトではTimeoutが3秒となっていて、モデルの推論時間に間に合わない可能性が高いので、編集してTimeoutの時間を長くします。
Amazon Bedrock APIを使ってハンドラを実装
Code
タブに生成AIモデルを呼び出すプログラムを書きます。
プログラムを書いた後、Deploy
ボタンをクリックするのを忘れないでください。
プログラム自体は前回で使用したものと同じです。一箇所、プロンプトを引数で受け取れるように設定しています。
import boto3
import json
def lambda_handler(event, context):
brt = boto3.client(service_name="bedrock-runtime", region_name="ap-southeast-2")
body = json.dumps({
"anthropic_version": "bedrock-2023-05-31",
"messages": [{"role": "user", "content": event["prompt"]}],
"max_tokens": 300,
"temperature": 0.1,
})
modelId = "anthropic.claude-3-haiku-20240307-v1:0"
accept = "application/json"
contentType = "application/json"
response = brt.invoke_model(
body=body,
modelId=modelId,
accept=accept,
contentType=contentType
)
response_body = json.loads(response.get("body").read())
return json.dumps(response_body, indent=4, ensure_ascii=False)
ポリシーの割り当て
Lambda関数がAWSの他のサービスやリソースにアクセスするためには、Lambdaに実行ロールを割り当てなければなりません。
Bedrockへのアクセスは、AmazonBedrockFullAccess
ポリシーを割り当てることで解決します。
まず、Lambdaのロール名が必要なので、Configuration
→Permissions
からロール名を確認します。
AWS CLIの認証とアクセスキーの登録を済ませた状態で、ターミナルで以下のコマンドを入力します。下記のlambda-role-name
のところに、先ほど確認したロール名を入力してください。
aws iam attach-role-policy --role-name [lambda-role-name] --policy-arn arn:aws:iam::aws:policy/AmazonBedrockFullAccess
テスト
Test
ボタンをクリックして、テストを作成します。
テストはJSON形式で書く必要があり、ここで作成したテストは、lambda_handler
関数のevent
に渡されます。
{
"prompt": "日本固有の料理を教えてください。"
}
テストを実行すると、無事に実行結果が得られました。
"はい、日本には非常に豊かな食文化があります。日本固有の代表的な料理をいくつか紹介します。\\n\\n1. 寿司 - 生の魚介類を酢飯の上に乗せた料理。江戸時代に発祥し、世界的に有名な日本の料理です。\\n\\n2. 天ぷら - 野菜や魚介類を薄く切って衣をつけて揚げた料理。軽くて香ばしい食感が特徴です。\\n\\n3. 蕎麦 - 細長い麺を使った料理。そばつゆに浸して食べるのが一般的です。地域によって味付けや食べ方が異なります。\\n\\n4. 懐石料理 - 季節の食材を使った数種類の小皿料理が特徴の伝統的な日本料理。繊細な盛り付けと味付けが魅力です。\\n\\n5. 焼き鳥 - 鶏肉を串に刺して炭火\"