12/9(月) 応用科学学会シンポジウムで自動運転に関する講演を担当します☆彡(試乗会もあります!来て!)

30-9. 【Amazon Bedrock + Cloude3】RAG構築マニュアル(③API構築編)

やること

このシリーズでは、AWSのサービスの1つであるAmazon Bedrockを使ってClaude3のRAG(検索拡張生成)を構築し、さらにAPI化して外部から呼び出すところまでを詳しく紹介しています。①準備編からご覧ください。

今回は、構築したRAGのAPI化です。

LambdaでBedrockを呼び出す関数を作成

検索欄に「Lambda」と入力し、出てきた「Lambda」をクリックします。

「関数の作成」をクリック。

関数名に任意の名前を入力します。ランタイムは「Python 3.11」とします。画面をスクロールし「関数の作成」をクリック。

次のようなページに移動します。

画面をスクロールし、「コード」のタブをクリック。

lambda_function.pyの中に以下のコードを貼り付けます。今回は省略しますが、IDなどの定数は環境変数やAWS Secrets Managerに記載することを推奨します。

import boto3
import json

knowledge_base_id = "自分のナレッジベースID"
model_arn = "arn:aws:bedrock:us-east-1::foundation-model/anthropic.claude-3-sonnet-20240229-v1:0"
bedrock_agent_runtime = boto3.client(service_name='bedrock-agent-runtime', region_name='us-east-1')

def lambda_handler(event, context):
    data = json.loads(event["body"])
    message = data.get("message")
    response = bedrock_agent_runtime.retrieve_and_generate(
        input={
            'text': message
        },
        retrieveAndGenerateConfiguration={
            'knowledgeBaseConfiguration': {
                'knowledgeBaseId': knowledge_base_id,
                'modelArn': model_arn
            },
            'type': 'KNOWLEDGE_BASE'
        }
    )

    outputText = response["output"]["text"]
    return {
        'statusCode': 200,
        'body': outputText
    }

コードを貼り付けたら「Deploy」をクリック。コードは編集するたびに「Deploy」してください。

LambdaでBedrockを呼び出す権限の設定

「設定」のタブをクリックし、ロール名の部分のリンクをクリックします。

「許可を追加」の「ポリシーをアタッチ」をクリックします。「ポリシー」も「アタッチ」もよくわからない単語ですが、AWSとはそういうものです。ちなみに公式によると、「ポリシーはAWSのオブジェクトであり、エンティティやリソースに関連付けて、これらのアクセス許可を定義します。AWSは、ユーザーなどのプリンシパルがリクエストを行ったときに、それらのポリシーを評価します」はい、わかりましたね?

検索欄に「bedrock」と入力し、「AmazonBedrockFullAccess」を選択し「許可を追加」をクリック。

すると次のようにポリシーが追加されています。

Lambda関数のテスト

「テスト」のタブをクリックします。

任意のイベント名を記入します。それ以外はデフォルトのままで。

画面をスクロールし、イベントJSONに以下のコードを貼り付けます。先ほどと同じ質問です。

{
  "body": "{\"message\": \"日本の口コミサイトの「食べログ」が規定する「お店へ悪影響を及ぼすかつ事実関係の確認が困難な事象の書き込み」とはどのような例がありますか?\"}"
}

「保存」をクリック。

「テスト」をクリックすると、関数が実行されます。

テストが成功するとチェックマークが表示され、「詳細」を開くとレスポンスの内容が確認できます。無事に前回と同じような回答が確認できました。

API Gatewayの作成

いま作成した関数をネット上から利用できるようにします。

検索欄に「API Gateway」と入力し、出てきた「API Gateway」をクリックします。

「APIを作成」をクリック。

「HTTP API」の「構築」をクリック。

統合の項目で「Lambda」を選択します。Lambda関数の項目では先ほど作成した「関数名」を選択します。API名にはわかりやすい名前をつけてください。すべて入力し終えたら「次へ」をクリックします。

何もせず「次へ」をクリック。

何もせず「作成」をクリック。

Lambda関数のダッシュボードへ移動すると、API Gatewayが追加されています。

APIのテスト

実際にAPIが使えるかテストしてみます。

Lambda関数のページの「設定」のタブに行き、サイドバーの「トリガー」をクリックします。ここの「API endpoint」をメモしておきます。

さっそく、外部からHTTPリクエストを実行してみます。わかる方はLinuxのcurlコマンドやPostmanで実行してみてください。

ここではPythonのRequestsライブラリを使用してみます。Google Colabに以下のコードを貼って実行します。

import requests

endpoint_url = '自分のエンドポイント'
data = {
    'message': '日本の口コミサイトの「食べログ」が規定する「お店へ悪影響を及ぼすかつ事実関係の確認が困難な事象の書き込み」とはどのような例がありますか?'
}
response = requests.post(endpoint_url, json=data)
print(response.text)

無事にAPI化して質問することができました。あとは自身のアプリケーションに組み込むだけです。

おわりに

今回は構築したRAGのAPI化を行いました。これでいろいろなアプリに組み込むことができますね。

最後に、ここまでに立ち上げたAWS各サービスの削除を行います。

タイトルとURLをコピーしました