DIVX テックブログ

catch-img

Amazon Bedrock APIを使ってみた


目次[非表示]

  1. 1.はじめに
  2. 2.Amazon Bedrockとは?
  3. 3.Bedrockで何ができるの?
  4. 4.リージョンの違い
  5. 5.実際に試していきましょう
    1. 5.1.IAMユーザーに権限を付与する
    2. 5.2.基盤モデルへのアクセスをリクエストする
    3. 5.3.Play Groundsで試す
    4. 5.4.ターミナルの設定
  6. 6.料金体系
  7. 7.おわりに

こちらの記事はDIVXアドベントカレンダー2023の22日目の記事です。

はじめに

DIVXでエンジニアをしている蓮沼です。生成AIが簡単に利用できるAmazon Bedrockのサービスが、2023年9月に一般利用が開始されて話題になりました。さらに2023年11月には東京リージョンでも利用が始まったことで注目されています。弊社でもAIツールの使用を推奨しており、ChatGPTのような生成AIは、仕事をする上で必要不可欠な存在となりました。そんな生成AIを簡単に作れるAmazon Bedrockとは、実際にどのようなものか試してみたいと思います。

Amazon Bedrockとは?

一言で言うと「ChatGPTが簡単に作れるサービス」です。

いくつかのステップを踏むだけでChatGPTのような対話型AIを簡単に構築できてしまいます。しかもフルマネージドサービスなので、大変な部分はAWSが管理してくれるというわけですね。

ちなみにBedrockとは「底、岩盤、根幹」などという意味だそうです。生成AIでいう基盤モデル(Foundation Model)のイメージも含まれているように感じられます。

Bedrockで何ができるの?

既に大手企業が開発した基盤モデルを活用して、自分のアプリに生成AIを取り入れられます。その利用方法はアイディア次第で無限に広がるのは容易に想像できると思います。

さらにAgentという機能があります。これを利用すると、基盤モデルをカスタマイズしたAIモデルの構築も可能です。また、プロンプトに合ったナレッジベースから回答を探すことや、他のAWSサービスとの連携も行えます。

Amazon Bedrock のエージェントは、「保留中の書類があるすべての保険契約者にリマインダーを送る」などのユーザー要求タスクを、特定の期間の請求の取得、必要な書類の特定、リマインダーの送信などの小さなサブタスクに分割することでオーケストレーションを行います。エージェントはタスクの正しい順序を決定し、途中で発生するあらゆるエラーシナリオを処理します。(AWS Bedrock Agentのページより)

リージョンの違い

Bedrockを利用できるリージョンは限られています。

本記事の執筆時点では5つです。

・米国東部 (バージニア北部)

・米国西部 (オレゴン)

・アジアパシフィック (シンガポール)

・アジアパシフィック (東京)

・欧州 (フランクフルト)

その中でもリージョンによって使える機能やモデルに差があります。左が米国東部(バージニア北部)、右がアジアパシフィック(東京)に表示される機能です。Foundation models の Custom models、Orchestationといった機能が東京リージョンではまだ使えません。

実際に試していきましょう

早速、やっていきます。今回はシンプルにAPIと通信したいため、ターミナルにAWS SDK for Pythonを入れて、ローカルからBedrock APIを叩いてみようと思います。

IAMユーザーに権限を付与する

この辺は下準備なので、わかる方は飛ばしてください。

AWSのマネジメントコンソールにログインします。

そして実際に利用するIAMユーザーにBedrockのアクセス権限をつけておきましょう。

私は新規でBedrockUsersというユーザーグループを作り、AmazonBedrockFullAccessというプリセットで用意されたポリシーを添付しました。そこにIAMユーザーを追加しています。

今回はテストで利用するのでフルアクセスのプリセットを選択しましたが、必要に応じて適宜制限をかけてください。

基盤モデルへのアクセスをリクエストする

それでは、Bedrockのサービスにアクセスしていきます。

今回はリージョンを米国東部(バージニア北部)で進めていきます。

サイドバーからModel accessを選択し、Manage model accessをクリックします。

好きなモデルにチェックを入れてSave changesを押せば変更完了です。

今回はanthropic社の「Claude」で試してみましょう。ちなみに読み方は「クロード」です。Cloudeは実は弊社のslackにも住んでいまして、その印象は丁寧で優しい秘書さんという感じです。

なおClaudeを使用する場合のみanthropic社へ申請が必要です。アクセス権の変更をする前に申請画面に記入します。

多少反映に時間がかかる場合もあるようですが、Access statusAccess granted になっていればOKです。

Play Groundsで試す

マネジメントコンソール上で基盤モデルがちゃんと動くか試してみましょう。サイドバーのPlay GroundsからChatを選択します。

select modelを選んで基盤モデルを選択、ThroughputはOn-demand(ODT)を選択します。料金については後述します。

あとは好きなテキストを入力してRunを押せばリクエストを送信できます。

回答が返ってきたので、モデルへのアクセスが確認できました。

右側のパネルからはパラメータの調整も可能です。

パラメータの詳細はネット上でもたくさん紹介されているので省きますが、Temperrature(温度)を高くすると回答のばらつきが増えます。また回答が途中で途切れてしまう場合は、Maximum lengthで調整できます。

試しに「サンタクロースって本当にいるんですか?」ときいてみました。

なかなかにいいこと言ってます。

サンタクロースの存在についてはさまざまな見方があります。

小さい子どもたちにとって、サンタクロースは実在する魔法の存在です。プレゼントを届けてくれる優しいおじいさんとして信じられています。その夢を壊すことなく、想像力と信頼感を育むことが大切だと思います。

一方で、大人から見れば、サンタクロースの姿は友情や思いやりのシンボルのようなもの。実際にいるわけではないという認識です。

ですが、サンタクロースが実在しないからといって、サンタクロースの精神やストーリーを楽しむことを否定する必要はないでしょう。大切なのは、子どもたちの夢を育み、温かい気持ちを分かち合えるかどうか。その意味で、サンタクロースの魔法は実在しているのかもしれません。

結論としては、文字通りいるかどうかは個人の信念によるところが大きいと思います。大切なことは、サンタクロースが象徴する温かさと思いやりを、みんなで共有し合えることだと信じています。

ちなみにstable diffusionTitan Image Generator へのアクセス権を設定すると、画像生成のplay groundで試せます。

ターミナルの設定

APIのセットアップドキュメントを参考に進めていきます。

ターミナルからリクエストを送るために以下のインストールが必要です。(インストール方法についてはここでは省きます。)

・AWS CLI

・AWS SDK for Python(boto3)

・python

加えてCLIからAWSアカウントへアクセスするためにはアクセスキーの発行も必要です。もし持っていない場合は、マネジメントコンソールのユーザーメニューにある「セキュリティ認証情報」からアクセスキーを発行し、CSVファイルをダウンロードしておきましょう。

AWSアカウントの情報を設定する

aws configure
AWS Access Key ID : // Access Key IDを入力
AWS Secret Access Key : // Secret Access Key
Default region name : // us-east-1を入力
Default output format : // 入力せずそのままReturnでOK

python のファイルを用意する

vi runtime-test.py

今回利用したファイルの中身はこちらです。

プロンプトもコードに書いています。「クリスマスについて小学生でもわかるように説明してください。」と尋ねてみようと思います。

import boto3
import json
bedrock = boto3.client(service_name='bedrock-runtime')

body = json.dumps({
         "prompt": "\n\nHuman:クリスマスについて小学生でもわかるように説明してください。\n\nAssistant:",
         "max_tokens_to_sample": 1024,
         "temperature": 0.1,
         "top_p": 0.9,
})

modelId = 'anthropic.claude-v2'
accept = 'application/json'
contentType = 'application/json'

response = bedrock.invoke_model(body=body, modelId=modelId, accept=accept, contentType=contentType)

response_body = json.loads(response.get('body').read())

print(response_body.get('completion'))

ファイルを実行

python3 runtime-test.py

無事応答が返ってきました!

はい、クリスマスを小学生にわかりやすく説明します。
クリスマスは12月25日にある祝日です。イエス・キリストが生まれた日を記念する日です。
クリスマスにはサンタクロースがトナカイが引くソリに乗って各家庭を訪れ、プレゼントを届けてくれるという話があります。だからクリスマスの朝にはツリーの下にプレゼントが置いてあるのです。
クリスマスにはケーキやチキン、クリスマスソング、イルミネーションなどがつきものです。家族や友達と一緒に楽しむ休日です。学校ではクリスマス会をしたり、サンタクロースのコスプレをしたりして盛り上がります。
クリスマスはキリスト教の祝日ですが、今では多くの人が楽しむ世界共通の祝日になっています。

とても簡単にAPIへとのやりとりができちゃいました。

料金体系

主にオンデマンドとプロビジョンドスループットの2つがあります。

オンデマンドはトークンを使った分だけ、プロビジョンドスループットは量と期間を決めて先払いする方式です。

オンデマンド

使用した分のみを支払う方式。入力トークンの処理、出力トークンの生成ごとに課金される。


プロビジョンドスループット

事前に使いそうな量を決め、先払いする方式。欲しいリソースを確保できるが、使用量が少ない場合だと損することもある。


2023年12月現在の価格を抜粋で載せてみました。実際に利用する際は公式の料金表を確認するようにしてください。

リージョンや基盤モデルによって1トークンあたりの金額が違ってきます。トークンとはプロンプトを理解するためにモデルが学習する基本単位を指します。1単語1トークンというわけではないですが、英語より日本語の方がトークンの消費量が激しくなります。

AWSではないですけど、ChatGPTがトークンをどのように判定しているかをビジュアライズするページがあります。トークンのイメージが掴みたい方は試してみてみてください。

OpenAI Tokenizer

当然と言えば当然ですが、AWSユーザーにTitanを使ってもらいたい!という気持ちが見える料金設定になっていますね。

米国東部(バージニア北部)

企業

基盤モデル

入力トークン 1,000 個あたりの価格

出力トークン 1,000 個あたりの価格

Amazon

Titan Text – Lite

0.0003USD

0.0004USD

Amazon

Titan Text – Express

0.0008USD

0.0016USD

Anthropic

Claude Instant

0.00163 USD

0.00551 USD

Anthropic

Claude

0.00800 USD

0.02400 USD

Cohere

Command

0.0015 USD

0.0020 USD

Cohere

Command - lite

0.0003 USD

0.0006 USD

AI21 Labs

Jurassic-2 Mid

0.0125 USD

0.0125 USD

AI21 Labs

Jurassic-2 Ultra

0.0188 USD

0.0188 USD

アジアパシフィック (東京)

企業

基盤モデル

入力トークン 1,000 個あたりの価格

出力トークン 1,000 個あたりの価格

Amazon

Titan Text – Express

0.0011USD

0.0022USD

Anthropic

Claude Instant

0.00163 USD

0.00551 USD

Anthropic

Claude

0.00800 USD

0.02400 USD

おわりに

僅か数ステップでAPI通信が簡単にできてしまったことに驚きです。自分のアプリへ生成AIを組み込みたいという要望を簡単に実現できそうな印象を受けました。 AWSのアカウントを通じて大手の基盤モデルへ気軽にアクセスできる気軽さが便利ですね。またフルマネージドサービスなので、

ユーザーは自分のアプリのメンテナンスだけで済むのはありがたいと感じました。
米国東部(バージニア北部)リージョンでは、先に紹介した基盤モデルへのアクセスのほか、基盤モデルへの独自のファインチューニングを設定したり、Agentを使ってサービスの連携、リクエストの内容によってKnowledge Baseを変えてより専門的な回答をするといった機能も提供されています。チュートリアルも用意されていたので、興味のある方はぜひ試してみてはいかがでしょうか?(私は冬休みに時間とってやってみようかなと思ってます)

東京リージョンではまだはじまったばかりで、使えるモデルも少ないのが現状です。しかし今後モデルのカスタマイズやAgentが東京リージョンでも使えるようになれば、自分好みにカスタムした生成AIが広く利用できそうです。またリージョンからの距離が近くなれば応答も早くなるはずなので、更なる展開を期待したいところです。

最後まで読んでいただきありがとうございました!

divxでは一緒に働ける仲間を募集しています。

興味があるかたはぜひ採用ページを御覧ください。

  採用情報 | 株式会社divx(ディブエックス) 可能性を広げる転職を。DIVXの採用情報ページです。 株式会社divx(ディブエックス)


お気軽にご相談ください


ご不明な点はお気軽に
お問い合わせください

サービス資料や
お役立ち資料はこちら

DIVXブログ

テックブログ タグ一覧

人気記事ランキング

GoTopイメージ