1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

生成AIに関する記事を書こう!
Qiita Engineer Festa20242024年7月17日まで開催中!

【AWS】BedrockのClaudeモデルを使用してLambdaからリクエストを送信する方法

Posted at

はじめに

本記事は、Amazon BedrockのClaudeモデルを使用してLambda関数からリクエストを送信し、生成されたレスポンスを取得する方法について備忘録も兼ねてまとめたものです。

環境

Python 3.12

前提

  • Bedrockのclaude2.1が使用できる状態であること

Lambda関数の作成

マネジメントコンソールからLambda関数を作成します。

image.png

デフォルトの権限ではIAMポリシーが不足しているため権限を追加します。
今回はBedrockのフルアクセス権限付与しておきます。

image.png

Lambdaにデフォルトで設定されてるタイムアウトの設定は3秒ですが、これではBedrockへのリクエスト時にタイムアウトしてしまうことがあるので、20秒くらいにしておきます。

image.png

ソース

下記のソースではBedrockのClaudeモデルにプロンプトを送信し生成された回答を取得します。
プロンプトはLambda関数のイベントJSONに記載しておきます。

import json
import boto3

def invoke_claude_model(prompt):
    bedrock_runtime = boto3.client(service_name='bedrock-runtime')
    
    # モデルのIDと最大トークン数を設定
    model_id = 'anthropic.claude-v2:1'
    max_tokens = 1000

    # リクエストボディを作成
    body = json.dumps(
        {
            "anthropic_version": "bedrock-2023-05-31",
            "max_tokens": max_tokens,
            "messages": [
                {"role": "user", "content": prompt}
            ]
        }
    )
    
    # Bedrockモデルを呼んでレスポンスを取得
    response = bedrock_runtime.invoke_model(body=body, modelId=model_id)
    response_body = json.loads(response.get('body').read())
    
    # レスポンスから生成された回答を抽出
    text_content = response_body["content"][0]["text"]
    
    return text_content


def lambda_handler(event, context):
    try:
        # イベントからプロンプトを取得
        prompt = event['prompt']
        
        # Bedrockモデルを呼び出して回答を取得
        response = invoke_claude_model(prompt)

        return {
            'statusCode': 200,
            'body': json.dumps(response, ensure_ascii=False)
        }

    except Exception as e:
        # エラーが発生した場合
        return {
            'statusCode': 500,
            'body': json.dumps({'error': str(e)})
        }

実行 & 結果確認

LambdaのイベントJSONにはBedrockモデルに渡すプロンプトを記載しておく。

イベントJSON
{
    "prompt": "claudeは何が得意ですか?一言で簡単に教えてください。"
}

プロンプトを設定出来たらLambdaでテスト(ctrl+shift+i)実行をさせてみます。

image.png

3秒程度でレスポンスが返ってくる事を確認できました。

Response
{
  "statusCode": 200,
  "body": "\"はい、ClaudeはAIシステムですので、その機能に関して一言で簡単に説明すると「会話」が得意です。\""
}

参考

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?