RailsでAmazon Bedrock Agents呼び出したけど需要ある?

はじめに

はじめまして!クラウド・インフラ インテグレーション事業部の古川原です。


私は、AWSを活用したクラウド基盤開発部隊の中にある、アプリチームに所属しています。

開発言語は、Ruby on Railsを使用し、webアプリケーションの開発を行なっています。

初めてのブログ投稿になりますが、よろしくお願いします。


さて本題ですが、今回は、Ruby on Railsのwebアプリケーションから、Amazon Bedrock Agentsを呼び出す方法をご紹介します。

目次

  1. Amazon Bedrockとは?
  2. エージェントとは?
  3. やりたいこと
  4. 事前に知っておきたいポイント
  5. ①利用するメソッド

    ②Bedrockの認証方法

    ③リクエストの必須項目

  6. 実装
  7. ①エージェント作成

    ②Gemのインストール

    ③エージェント呼び出しロジック

  8. 動作確認してみよう!
  9. まとめ
  10. 公式ドキュメント

1. Amazon Bedrockとは?

今回利用するサービスについて少しだけ触れておきます。

Amazon Bedrockは、主要なAI企業やAmazonが提供する高パフォーマンスな基盤モデル(FM)を、統合APIを通じて利用できるようにするフルマネージドサービスです。 開発者は自分で機械学習モデルを構築・運用することなく、大規模言語モデル(LLM)や画像生成モデルをAPI経由で簡単に呼び出すことができます。

トークン数やリクエスト数に制限がありますが、AWSで生成AIを気軽に検証するには、十分かなと思っています。


※利用可能なFMの一部(例)

・Amazon-Titan

・AI21 Labs-Jamba

・Anthropic-Claude

・DeepSeek-DeepSeek-R1

・Meta-Llama

2. エージェントとは?

エージェントは、事前に決められた目的を達成するために、必要なデータを収集しそのデータに基づいて自律的に選択を行う仕組みのことです。

例えば、私が「旅行に行きたい」という目的をエージェントに伝えたときに、旅行の目的地を確認し、飛行機や宿泊施設の予約、観光地の候補などを提案してくれます。


今回使用する、Amazon Bedrock Agentsは、Amazon Bedrock内でこのエージェント機能を利用できるようにする仕組みを持っているサービスです。 アクショングループや、メモリ、ナレッジベースなど様々な活用方法があります。

3. やりたいこと

今回実現したいことは、Ruby on Railsの環境から、AWS SDK for Rubyを使用し、Amazon Bedrock Agentsを呼び出すことです。

Ruby on RailsのwebアプリケーションはEC2上に構築してあります。 また、メモリ機能を使用し、エージェントに会話の履歴を記憶させることで、連続性のある対話を実現します。


構成図(新②).png

4. 事前に知っておきたいポイント

今回、Amazon Bedrock AgentsをRailsから呼び出す際に、必要になる知識をまとめてみました。


①利用するメソッド


対話を実現するにはAWS SDK for Rubyが提供するinvoke_agentメソッドを使用してAmazon Bedrock Agentsと対話します。 ほかにも、様々なメソッドが用意されていますが、対話を行うためにはこのメソッドを一つ使用すれば、対話することができます。

 ※参考:AWS SDK for Ruby Aws::BedrockAgentRuntime::Client


②Bedrockの認証方法


Amazon BedrockをAPI経由で利用するには、AWSの認証情報を設定する必要があります。

この認証により、どのユーザーやアプリケーションがどのリソースにアクセスできるのかを制御することができます。

 ※参考:Amazon Bedrock-APIの開始方法


【IAMロールを使用した認証】

EC2上でアプリケーションを構築している場合、IAMロールをEC2にアタッチすることで認証を行うことが可能です。 アプリケーションを構築しているEC2に対して、AmazonBedrockFullAccessをアタッチすることで、アクセスが可能になります。

 ※デフォルトでエージェントごとにIAMロールが作成されるので、権限を狭めたい場合はそちらをアタッチしてください。


【アクセスキーを使用した認証】

IAMユーザでアクセスキーを発行し、credentials等に設定を行い認証を行う方法です。

Railsの環境がEC2上にない場合、この方法で認証を行う必要があります。


③リクエストの必須項目


今回使用するinvoke_agentメソッドは、リクエスト時に必須のパラメータが3つあります。


【agentId】

呼び出しを行うエージェントを指定します。

AWSコンソール>Amzaon Bedrock>オーケストレーション-エージェントから、使用したいエージェントを開き「エージェントの概要」に記載されていIDがこのagentIdです。


エージェント.png

【agentAliasId】

呼び出しを行うエージェントのエイリアスを指定します。

このエイリアスは、必須項目であるため、AWSコンソールから必ずエイリアスを作成してください。


エイリアス.png

【sessionId】

セッションを指定し、対話の履歴を保持するために使用します。

Rails側で値を作成する値で、文字数の制約は下記です。


文字数の制約

・Min:2文字

・Max:100文字

・利用可能な文字パターン:^[0-9a-zA-Z._:-]+$

5. 実装


①エージェント作成


今回、エージェントの作成方法は割愛しますが、メモリ機能を有効にして作成しています。


②Gemのインストール


・Gemfileに下記を追加


 gem 'aws-sdk-bedrockagentruntime'


・bunlde install


 bundle install


③エージェント呼び出しロジック


  

# app/models/aws/amazon_bedrock.rb require 'aws-sdk-bedrockagentruntime' class Aws::AmazonBedrock class << self def call_bedrock_agents_test(message, session_id: 'test-user') # クライアント作成 client = Aws::BedrockAgentRuntime::Client.new(region: 'ap-northeast-1') # エージェントのID agent_id = 'DTSCLL2ABA' # エージェントのエイリアスID agent_alias_id = 'DTSDIGITAL' # Amazon Bedrock Agents呼び出し response = client.invoke_agent( agent_id: agent_id, agent_alias_id: agent_alias_id, session_id: session_id, input_text: message ) # レスポンス形成 response_text = response.completion.map do |event| Rails.logger.debug "event: #{event}" event.bytes.force_encoding('UTF-8') end.join Rails.logger.info "Bedrock Response: #{response_text}" response_text rescue Aws::Errors::ServiceError => e Rails.logger.error "Bedrock AWS Error: #{e.message}" "エラーが発生しました。再度送信してください。" rescue StandardError => e Rails.logger.error "StandardError: #{e.message}" "エラーが発生しました。再度送信してください。" end end end

6. 動作確認してみよう!

rails consoleを使用して動作確認をしてみます。


  

[1] pry(main)> Aws::AmazonBedrock.call_bedrock_agents_test("私は、ドライブをして 遠出し、美味しいご飯を食べるのが好きです。私に合う旅行先を提案してください。", session_id: "test-user") event: {:attribution=>nil, :bytes=>"[FILTERED]", :event_type=>:chunk} Bedrock Response: - 北海道:広大な自然の中を車で走り回り、新鮮な海の幸や地元の郷土料理を 楽しめます。 - 九州:温泉地や歴史的な街並み、豊かな自然に囲まれ、地元の美味しい料理を堪能できます。 - 瀬戸内海沿岸:島々を巡るドライブや、新鮮な魚介類、瀬戸内の景色を楽しめます。 これらの地域はユーザーの好みに合っているかもしれません。予算や滞在期間など、 他の条件がわかれば、より詳細な提案ができると思います。ご検討ください。 [2] pry(main)> Aws::AmazonBedrock.call_bedrock_agents_test("北海道は良いですね。 どのようなグルメを食べられますか?", session_id: "test-user") event: {:attribution=>nil, :bytes=>"[FILTERED]", :event_type=>:chunk} Bedrock Response: 北海道には、以下のようなおすすめのグルメがたくさんあります: - 新鮮な海鮮料理:北海道は日本有数の漁業地域なので、海の幸が豊富です。特に、海鮮丼、 カニ料理、海鮮鍋などが有名です。 - ジンギスカン:羊肉を使った焼肉料理で、北海道の郷土料理の代表的なものです。ビールとの 相性が抜群です。 - 札幌ラーメン:札幌発祥のラーメンで、豚骨や味噌をベースにした濃厚な味わいが特徴です。 - じゃがいもグルメ:北海道はじゃがいもの生産量が日本一なので、じゃがいもを使ったグルメが 人気です。ポテトコロッケやじゃがバター、じゃがいもグラタンなどがおすすめです。 - スイーツ:北海道産の乳製品を使ったケーキやアイスクリームなどのスイーツも有名です。 このように、新鮮な海の幸や乳製品、野菜を使った北海道ならではのグルメを楽しめると思います。

このように、非常に簡単に生成AIを呼び出し、自然言語で答えてくれることが確認できました。

また、メモリ機能を有効にしているため、前の会話を記憶し回答してくれます。


  

[3] pry(main)> Aws::AmazonBedrock.call_bedrock_agents_test("おすすめのドライブ先を 教えてください。", session_id: "test-user") event: {:attribution=>nil, :bytes=>"[FILTERED]", :event_type=>:chunk} Bedrock Response: 北海道でおすすめのドライブコースは以下のようなものがあります: - 支笏湖ドライブ:支笏湖は北海道の代表的な湖で、湖畔の景色を楽しめます。湖畔の道路を走る ドライブは気持ちがよいです。 - 洞爺湖ドライブ:洞爺湖は美しい湖畔の景色と温泉地で知られています。湖畔を一周する ドライブコースがおすすめです。 - 知床半島ドライブ:知床半島は世界自然遺産に登録されている自然豊かな地域です。海沿いの ドライブコースから、雄大な自然景観を楽しめます。 - 富良野・美瑛ドライブ:美しい丘陵地帯が広がる富良野と美瑛は、四季折々の絶景を楽しめる ドライブスポットです。 これらのドライブコースでは、北海道ならではの大自然の景色を堪能できると思います。 ぜひ、お気に入りのコースを見つけてみてください。

北海道という言葉を使用しなくても、前の会話からどこをドライブするかを理解し、北海道のおすすめのドライブコースを提案してくれました。

異なるセッション(session_id)を使用することで、会話する相手を認識させることも可能です。


  

[4] pry(main)> Aws::AmazonBedrock.call_bedrock_agents_test("おすすめのドライブ先を 教えてください。", session_id: "hoge-user") event: {:attribution=>nil, :bytes=>"[FILTERED]", :event_type=>:chunk} Bedrock Response: 日本国内でおすすめのドライブ先としては、以下のようなスポットが人気です: - 富士山周辺 - 富士山の絶景を楽しめる人気のドライブコース - 瀬戸内海沿岸 - 島々の美しい景色を楽しめる - 北海道 - 広大な大自然の中を走るドライブが魅力的 - 九州 - 温泉地や火山、海沿いの景色が楽しめる これらの地域は季節によって楽しみ方が変わるので、ご希望の旅行時期に合わせてプランを立てるのが おすすめです。旅行会社やインターネットで詳細な情報を確認するのが良いでしょう

同じ質問をしてみましたが、北海道ではなく、全国の提案をしてきました。

7. まとめ

今回は、Ruby on Railsの環境から、Amazon Bedrock Agents呼び出す方法に関して調べてみました。

Amazon Bedrock Agentsを活用することで、非常に簡単に生成AIと対話する機能を作成することが出来ました。

動作確認としては、あまりエージェントらしさを伝えることができませんでしたが、この呼び出し方法を基本として、Amazon Bedrock Agents側でナレッジベースやアクショングループを設定することで、より強力な生成AIを活用することができると思います。


是非、あなたのRailsアプリケーションでも、生成AIの力をぜひ試してみてください!

8. 公式ドキュメント

https://docs.aws.amazon.com/bedrock/latest/APIReference/welcome.html

https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/BedrockAgentRuntime.html

https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_InvokeAgent.html

https://rubygems.org/gems/aws-sdk-bedrockagentruntime

クラウド基盤ソリューション