0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

お題は不問!Qiita Engineer Festa 2024で記事投稿!
Qiita Engineer Festa20242024年7月17日まで開催中!

AWS ECS上からRailsアプリケーションにBedrock+Claude 3 Haikuを取り込んでみた

Last updated at Posted at 2024-07-12

Claude 3 Haikuは安い・美味い・速い

基本的に応答スピードが早く、日本語入出力にも長け、速いのが特徴です。

以下Bedrock経由での価格ですが、Claude 3 Sonnetは他と比較して1/10以下の金額で使えるのが非常に良いです。応

image.png

詳細はコチラ

2024年7月時点で、応答速度もSonnetの2倍程度はやく、非常に魅力的です。個人で使ったり、製品のプロトタイプとして活用するには非常に魅力的です。

AWS Bedrockを使うメリット

  • 学習・管理コスト
    • AWSに慣れているエンジニアが弊社には多かった
    • AIだけAzureに外出しせずとも、AWS内ですべて完結出来る
  • セキュリティ
    • ECSタスクロールのみで実行出来る為、設定が容易
    • TOKENなどを発行する必要が無い
    • S3上のファイルを呼び出したりも、アクセス権をそこまで気にせず可能
  • AWS系のリソースとの相性が良い
    • Lambda+API Gatewayとか、いろいろ使えそう

とりあえずRails上で試してみる

基本モデルのアクセス申請

AWS Bedrockに移動し、基盤モデルを選択。2024年7月現在、日本のリージョン(東京、大阪)では利用不可なので、利用可能なリージョンに変更しましょう。今回は安定のus-east-1を利用しました。

まずはモデルの利用申請をしましょう。
モデルの利用申請をする際に「何に使うの?」とか聞かれると思いました。私の場合「本アカウントのECS上で動いているWEBアプリケーションにて、言語モデルを使った機能開発を行う」としたところ、1分程度で即アクセス権が付与されました。

image.png

IAMの変更

ECSのアプリケーションで設定しているタスクロール(タスク実行ロールじゃないよ)に、AmazonBedrockFullAccessを紐付けてください。

尚、ReadOnlyの権限では、実行時エラーが起きました。

image.png

Gemfileの設定

Gemfileに以下の一行を追加してください。

Gemfile
gem 'aws-sdk-bedrockruntime'

やることはそれだけです。とりあえず使うだけであれば、configなどの設定は基本不要です。(やったら便利な場合もあるが、必須ではない)

試しにWEB(ECS EXEC)に入ってRailsコンソールから呼び出してみる

コードを実装するのが面倒なので、ECS EXECで環境に入り、コードを直打ちしてみます。

サンプルコード
bedrock_client = Aws::BedrockRuntime::Client.new(region: 'us-east-1', credentials: Aws::ECSCredentials.new)

body_hash = {
  "anthropic_version": "bedrock-2023-05-31",
  "max_tokens": 1000,
  "system": "Respond only in Japanese.",
  "messages": [
    { "role": "user", "content": "ポケモンユナイトで勝つ方法を教えて" }
  ]
}

body = body_hash.to_json

response = bedrock_client.invoke_model({
  accept: "application/json",
  content_type: "application/json",
  body: body,
  model_id: "anthropic.claude-3-haiku-20240307-v1:0"
})


answer_hash = JSON.parse(response.body.string)

ポイントは、ECSの環境上ではcredentialにAws::ECSCredentials.newを入れることです。手元開発環境の場合は、おとなしく環境変数などに入れたACCESS_KEYなどを使いましょう。手元開発とそれ以外でクレデンシャルの設定を分けておくことをおすすめします。

最終的にanswer_hashの中身はこんな感じになりました。

{"id"=>"msg_bdrk_xxxxxxxxxx",
 "type"=>"message",
 "role"=>"assistant",
 "model"=>"claude-3-haiku-20240307",
 "content"=>
  [{"type"=>"text",
    "text"=>
     "ポケモンユナイトで勝つポイントはいくつかありますね。\n\n1. 自分のキャラクターやアイテムを十分に理解し、状況に応じて最適な戦略を立てることが重要です。\n\n2. チームメイトとコミュニケーションを取り、お互いに協力して戦うことが大切です。\n\n3. マップの状況を把握し、重要なエリアを確保するタイミングを逃さないよう気をつける必要があります。\n\n4. アイテムの取得や進化、スキルの使い分けなどを意識して、戦闘力を高めましょう。\n\n5. 相手チームの動きを読み、機会を逃さずにタイミングよく攻撃することも勝利への鍵となります。\n\nこれらのポイントを意識しながら、自分のプレイスタイルに合わせて戦略を立てていくことが重要です。試行錯誤を重ね、慣れていくことで、きっと勝つことができるはずです。頑張ってください!"}],
 "stop_reason"=>"end_turn",
 "stop_sequence"=>nil,
 "usage"=>{"input_tokens"=>33, "output_tokens"=>321}}

私の場合、リクエストをClaude3+Bedrockに合わせて生成するのに時間がかかりました。が、そこさえなければ、わずか10分程度でWEBアプリケーションからAIが使えるようになります。

超絶簡単なので、是非皆さん試してみてください。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?