API GatewayとLambdaで生成AI(Bedrock)との連携APIを作成してみる

最近、生成AIが流行りですね。
AWSでもBedrockという生成AIのサービスがあります。
少し前までは、東京リージョンでは使えなかったり、日本語が少し怪しかったりしましたが、
最近では十分に使えるレベルまで改善されてきました。
API GatewayとLambdaを使うことで、サービスとしてBedrockを使用する構成を紹介します。
AWSでもBedrockという生成AIのサービスがあります。
少し前までは、東京リージョンでは使えなかったり、日本語が少し怪しかったりしましたが、
最近では十分に使えるレベルまで改善されてきました。
API GatewayとLambdaを使うことで、サービスとしてBedrockを使用する構成を紹介します。
使用例
このページのLambdaとAPI Gatewayを使用することで、
生成AIの機能をWebサービスとして提供することができます。
自社サービスや自作ツールとBedrockを連携させて、サービスをレベルアップすることも可能です。
生成AIの機能をWebサービスとして提供することができます。
自社サービスや自作ツールとBedrockを連携させて、サービスをレベルアップすることも可能です。
構成図
API GatewayからLambdaを経由して、Bedrockへ生成AIへ問い合わせを行います。
※本ページに記載するLambdaは問い合わせ内容を固定にしています。
自社サービスや自作ツールにて入力フォーム等を用意して、APIGateway宛てに問い合わせ内容を送信できます。
API Gatewayに届いた問い合わせ内容は、LambdaからBedrockに問い合わせができるという仕組みです。
途中経路にLambdaを挟むことで、プロンプトの内容や生成AIのモデルをカスタマイズできるのもメリットです。
API Gatewayの作り方は、「API Gatewayを作成する」を参考に作成してください。
※本ページに記載するLambdaは問い合わせ内容を固定にしています。
自社サービスや自作ツールにて入力フォーム等を用意して、APIGateway宛てに問い合わせ内容を送信できます。
API Gatewayに届いた問い合わせ内容は、LambdaからBedrockに問い合わせができるという仕組みです。
途中経路にLambdaを挟むことで、プロンプトの内容や生成AIのモデルをカスタマイズできるのもメリットです。
API Gatewayの作り方は、「API Gatewayを作成する」を参考に作成してください。

Lambdaソースコード
import boto3
import json
def lambda_handler(event, context):
bedrock_client = boto3.client('bedrock-runtime')
prompt="Amazon Lambdaがどのようなサービスか教えてください。"
body = json.dumps({
"inputText": prompt,
"textGenerationConfig": {
"maxTokenCount": 3072,
"stopSequences": [],
"temperature": 0.7,
"topP": 0.9
}
})
response = bedrock_client.invoke_model(
modelId='amazon.titan-text-express-v1',
accept='application/json',
contentType='application/json',
body=body
)
response_body = json.loads(response.get('body').read())
output_text = response_body['results'][0]['outputText']
print(output_text)
return {
'statusCode': 200,
'body': output_text
}
権限(IAMロール設定)
LambdaにアタッチするIAMロールに「bedrock:InvokeModel」の権限を付与してください。
解説
紹介したLambdaのフローは以下の通りです。
問い合わせする内容にパラメータを含むため、生成AIからの回答精度を上げたい場合は、
「temperature」や「Top P」の値を変更することも可能です。
- prompt変数に問い合わせ格納
- json形式で問い合わせ形式に整形
- Bedrockに問い合わせ
- Bedrockからの回答をAPI Gateway経由で返答
問い合わせする内容にパラメータを含むため、生成AIからの回答精度を上げたい場合は、
「temperature」や「Top P」の値を変更することも可能です。