Nyantech マルチエージェントでぴったりのオトモを見つけよう !

2025-02-03
日常で楽しむクラウドテクノロジー

Author : 大渕 麻莉

うーん・・・やはり自動化が必要ですねぇ・・・。

ミケ、どうしたにゃ ?

あっ、タマ。私が経営する「ミケの酒場」が繁盛しすぎて手が回らなくなってきたので、自動化を検討してたんです。

えっ、酒場 ?

はい、冒険者に、ぴったりのオトモ猫を紹介するんです。

(いつからここはそういう世界に !?)

 はじめに

こんにちは、Generative AI Innovation Center の大渕です。
久々にミケとタマの会話が聞こえてきました。(前回は 一年前のマルチモーダル画像検索の記事 でしたね !)

どうやらミケは酒場を経営していて、そこが繁盛してしまいミケだけでは対応できなくなっているようです。また、そこの酒場では、冒険者がオトモを探しにくるので、その人にぴったりなオトモ猫を紹介するのがミケの仕事のようです。

はじめにネタバラシをしておくと、今回メインで使うサービスは、マネージドな AI エージェントを簡単に作れてしまう Amazon Bedrock Agents です。なお、この記事に出てくる猫さんたちの写真は、2022 年の AWS Nyantech というイベントを開催した際に世界中の猫好きの方からいただいたものです。ありがとうございます、いつも大事に使わせていただいております !

ご注意

本記事で紹介する AWS サービスを起動する際には、料金がかかります。builders.flash メールメンバー特典の、クラウドレシピ向けクレジットコードプレゼントの入手をお勧めします。

*ハンズオン記事およびソースコードにおける免責事項 »

Nyantech ハンズオンシリーズのその他の記事はこちら

選択
  • 選択
  • 機械学習を使って写真に写っている猫を見分けてみよう! ~ 前編 : Amazon SageMaker Ground Truth を使った画像のラベリング ~
  • 機械学習を使って写真に写っている猫を見分けてみよう! 〜中編:Amazon Rekognition Custom Labels を使った機械学習モデルの作成
  • 機械学習を使って写真に写っている猫を見分けてみよう! 〜後編:Amazon SageMaker を使った機械学習モデルの作成
  • たくさんの写真の中からうちの子 (猫) をみつけよう ! 〜機械学習と Amazon Elasticsearch Service で類似画像検索
  • Nyantech とはじめる MLOps 〜学習パイプランを使って効率的に猫を見分ける機械学習モデルを目指そう ! の巻〜
  • 猫の画像を使ってあそぶブラウザゲームを作ろう ! 〜AWS Cloud Development Kit (AWS CDK)で簡単デプロイ〜
  • Nyantech 画像生成選手権 ~ 画像生成 AI を使ってお題に近い猫の画像を生成しよう ! の巻
  • 1 クリックで立ち上がる自分だけの環境で、お猫様の画像生成をやってみた。
  • 1 クリックで立ち上がる自分だけの環境で、お猫様の画像生成をやってみた。- 拡張編 -
  • Nyantech であの猫のこんな写真を見つけたい ~ マルチモーダル埋め込みモデルを使って類似画像検索をパワーアップ ~
  • IoT を使ってお猫様の健康 (体重) をモニタリングしてみた
  • Nyantech マルチエージェントでぴったりのオトモを見つけよう !

このクラウドレシピ (ハンズオン記事) を無料でお試しいただけます »

毎月提供されるクラウドレシピのアップデート情報とともに、クレジットコードを受け取ることができます。 


 1. ミケがやりたいこと

冒険者の要望を聞いて、それに合うオトモ猫を紹介して、あわよくば課金アイテムも買ってもらうシステムを作ろうと思います。

なんだか難しそうにゃ。おれのこのクリームパンのような手ではどうすることもできなさそうにゃ。

タマのその気持ちだけで充分です。私もこの雪見だいふくのような手をあまり使わずなんとかしたいと考えています。

(ごそごそ) ミケ、なんか便利そうなものを見つけたにゃ。これを使ったらミケが欲しいものがサクッと作れるんにゃないかにゃ ?

AWS Black Belt オンラインセミナー:Amazon Bedrock Agents 自律型 AI の実現に向けて

検討編 【Amazon Bedrock Series #04a】
動作理解編 【Amazon Bedrock Series #04b】
開発・運用編 【Amazon Bedrock Series #04c】

ありがとうございます、タマ。動画見てみます。(ポチッ)

・・・なるほど、Amazon Bedrock Agents を使えば、ソースコードも書かずにやりたいことができそうです。

さすがミケ、のみこみが早いにゃ !


 2. Amazon Bedrock Agents とは

ここでちょっと、ミケが気に入った Amazon Bedrock Agents について簡単にご紹介します。

Amazon Bedrock Agents は、マネージドな AI エージェントを作ることができる機能です。AI エージェントとは、ユーザーからのリクエストを、基盤モデル、API、ナレッジベースなどの様々なツールを使って自律的に処理するしくみです。

たとえば今回ミケが作ろうとしている AI エージェントは、以下の図のようなイメージです。オトモ猫を探している、という冒険者のリクエストに対して、エージェントはそのリクエストに応えるためにどんなタスクが必要かを考えます。その上で、まずはどんな猫が良いのかを聞かないと紹介のしようがないから、冒険者の好みを聞いてみよう、と適切なアクションを実行していきます。

自律的に動けるところがエージェントの肝ともいえる部分で、たとえばインプット情報が足りない場合に、情報の追加が必要とエージェント自身が判断してアクションすることができるのが強みです。決まった処理フローを実行させる場合は、AWS Step Functions や Amazon Bedrock Flows できっちりフローを設計する方が適していますが、自律的な判断に基づいたアクションが必須なユースケースではエージェントが力を発揮することでしょう。


 3. オトモ猫紹介エージェントの構成

オトモ猫紹介エージェントの作り方の詳細は、この記事の最後でまとめて紹介しますが、ここでは概要を説明します。役割に応じて、以下の図のような 3 種類のエージェントを作成します。

1 つ目はおやぶんエージェントで、冒険者と直接やりとりするリーダー的エージェントです。エージェントに猫の紹介とアイテムの販売をさせたいので、それぞれの役割に特化した 2 つのエージェントを作成します。役割に応じてエージェントを分けることで、各エージェントが自分のタスクに集中することができるため、エージェントの正確な仕事が期待できます。

各エージェントの関係性と構成要素は以下の図のとおりです。おやぶんエージェントが必要に応じてオトモ猫紹介エージェントとアイテム紹介エージェントと、冒険者が購入するアイテムの合計金額を算出するための Code Interpreter を呼び出す構成になっています。オトモ猫紹介エージェントは、オトモ猫の情報が格納されたナレッジベースと、オトモ猫の誕生日から現在の年齢を算出するためにCode Interpreterをツールとして使えるよう設定されています。アイテム紹介エージェントは、アイテムの情報が格納されたナレッジベースをツールとして使えるよう設定されています。これらの機能は、すべて Amazon Bedrock で実現することができます。

ここをこうして・・・よし、できました !

(展開が早すぎるにゃ !)

ちなみに、私の酒場の猫たちは電脳猫なので無限に派遣可能です。アイテムも無限増殖します。

(つまり派遣中かどうかの状態管理や在庫管理が不要ということにゃッ !)


 4. 冒険者とオトモ猫紹介エージェントのやりとり

では、ミケが開発したオトモ猫紹介エージェントと冒険者のやりとりをちょっとのぞいてみましょう。冒頭の丸カッコで囲まれた部分をのぞいて、実際のエージェントの回答をまるっとそのまま持ってきました。

(冒険者) こんにちは、オトモ猫を紹介してください。

(エージェント) こんにちは。オトモ猫をお探しですね。どのような特徴や性格の猫をお探しでしょうか?例えば、活発な猫や大人しい猫、毛色や年齢などの希望はありますか?

元気な子がいいです。

元気な性格の猫を 2 匹見つけました。

  1. マル : 軽やかな体型で活発な性格の猫です。楽しい旅のお供になりそうです。
  2. ノン : すばやさが特徴的で、やんちゃな性格の猫です。元気いっぱいで旅を盛り上げてくれそうです。

この 2 匹のうち、どちらをお供にしたいですか ?

どちらの猫が年上ですか。

ノンの方が年上です。ノンは 7 歳で、マルは 5 歳です。ノンの方が 2 歳年上になります。どちらも元気で活発ですが、ノンの方がより落ち着いた大人の猫の年齢になっています。この情報を踏まえて、どちらをお供に選びますか ?

マルにします。

マルにぴったりのアイテムが見つかりました。冒険に役立つ黄色いケープをおすすめします。 このケープの特徴は :

  1. マルの好みにマッチする明るい黄色
  2. 活発な動きにも快適なふわふわとした柔らかい素材
  3. 冒険心をくすぐるフード付きで、ポンポンやタッセルの装飾つき
  4. 価格は 140 nyan と手頃

このケープを着てマルと一緒に冒険すれば、きっと楽しい時間が過ごせると思います。このケープを購入しますか ?

購入します。

黄色いケープの購入ありがとうございます。マルにとても似合うと思います。これで冒険の準備が整いました。マルと一緒に素晴らしい冒険をお楽しみください。何か他に質問やご要望はありますか ?

もう 1 匹オトモ猫を連れて行くことはできますか ?

はい、もう 1 匹のオトモ猫を連れて行くことができます。マルとは異なるタイプの猫、メグをご紹介します。 メグは 2 歳の若い猫で、以下のような特徴があります:

  1. 性格:冷静 (マルの活発な性格とは対照的)
  2. 好きな色 : 青
  3. 特徴 : 非常に高い知性、適応力が高い

メグは落ち着いた性格で、マルの活発さとバランスが取れそうです。高い知性を持っているので、旅先でのさまざまな状況にも冷静に対応できると考えられます。 マルとメグ、この 2 匹を旅のお供として選びますか ?

白い子が好きなのですが、いますか ?

はい、白い猫がいます。ミミという名前の 4 歳の猫をご紹介します。ミミの特徴は以下の通りです:

  1. 外見:ふわふわの長い白い毛並み、丸い顔と大きな目が特徴的
  2. 性格:おとなしい
  3. 好きな色:青
  4. 特徴:高い知性、大型の猫

ミミは落ち着いた性格で、美しい白い毛並みが特徴的です。高い知性を持っているので、新しい環境にも適応しやすいでしょう。大型の猫なので、存在感があり、写真映えもする素敵な旅のパートナーになりそうです。 ミミを旅のお供として選びますか ?

ミミの強さはどれくらいですか ?

ミミの強さについて詳しい情報が分かりました。ミミの「つよさ」は 16 です。これは、かしこさ、おおきさ、すばやさ、くいいじの各要素を考慮して計算されています。 比較のために、以前紹介した猫たちの強さも見てみましょう。

  1. マル : つよさ 4
  2. メグ : つよさ 19
  3. ミミ : つよさ 16

ミミはマルよりもかなり強く、メグにはやや劣りますが、非常に近い強さを持っています。ミミは特に知性 (かしこさ) と体格 (おおきさ) で優れており、全体的にバランスの取れた能力を持っています。 ミミの穏やかな性格と高い適応力は、様々な状況で役立つでしょう。旅のお供としては十分な強さを持っていると言えます。

ではミミも連れて行きます。

ミミにぴったりのアイテムが見つかりました。冒険に役立つ青いケープをおすすめします。 このケープの特徴は:

  1. ミミの好みの青色
  2. 柔らかくふわふわとした素材で、長い毛並みにも優しい
  3. やわらかさが高く、おとなしい性格にも適している
  4. 大型の猫にも快適に着用可能
  5. 価格は 100 nyanと手頃

このケープを着ることで、ミミは快適に冒険を楽しめると思います。青色が好きなミミにとって、このケープは特別なアイテムになるでしょう。このケープを購入しますか?

購入します。合計金額はいくらですか ?

ありがとうございます。青いケープの購入を承りました。 合計金額を計算いたします :

  1. マルの黄色いケープ : 140 nyan
  2. ミミの青いケープ : 100 nyan

合計金額は 240 nyan になります。 これで、マルとミミの両方に素敵なケープが用意できました。2 匹のオトモ猫と一緒に、素晴らしい冒険が待っていることでしょう。他に何かご質問やご要望はありますか ?

もう大丈夫です。冒険に行ってきます。

わかりました。素晴らしい冒険の準備が整いましたね。マルとミミという 2 匹の素敵なオトモ猫と、それぞれに合ったケープを用意できて良かったです。 冒険に出発されるあなたに、心からエールを送ります。マルの元気さとミミの落ち着きが、きっとバランスの取れた素晴らしい旅のお供になることでしょう。 安全に気をつけて、たくさんの素晴らしい思い出を作ってください。楽しい冒険になりますように ! お気をつけてお出かけください。

この記事の後半で、Amazon Bedrock Agents を使ってこのエージェントを作る方法を解説するので、お楽しみに ! なお、さきほどの冒険者と同じ入力をしても、まったく同じ回答は返ってきません。一期一会の会話になります。


 5. 冒険者とエージェントの会話の裏側

冒険者は、マルとミミというオトモとともに冒険に出発できたようです。また、それぞれに似合うケープも購入して、準備万端でした。先ほどの冒険者とエージェントのやり取りの裏で何が起こっていたのか、気になりますよね ? Amazon Bedrock Agents のコンソールをちょっとのぞいてみましょう。

先程のやりとりで冒険者が、「元気な子がいいです。」とリクエストしたときのエージェントの思考を見てみます。

こちらの図は、Amazon Bedrock Agents のテスト画面です。この画面では、冒険者とエージェントの会話を見ることができますが、エージェントの会話のエリアの右下に「Show trace/トレースを表示」というリンクがあるのでここをクリックします。

画像をクリックすると拡大します

すると、このような画面が表示されました。この画面は、おやぶんエージェントである mike-bar エージェントから、オトモ猫紹介エージェント find-cat が呼ばれていることを示します。冒険者から元気な子をリクエストされたので、オトモ猫紹介エージェントに「元気な猫」を探してもらっていることがうかがえます。

画像をクリックすると拡大します

その下には、このような画面があり、回答を生成するために 4 つのステップが実行されたことを示しています。

クリックすると拡大します

それぞれのステップでは、ざっくり以下のことが行われています。

ステップ 1 : <おやぶんエージェント> オトモ猫紹介エージェントに元気な猫の紹介を依頼
ステップ 2 : <オトモ猫紹介エージェント> オトモ猫ナレッジベースから元気な猫を検索
ステップ 3 : <オトモ猫紹介エージェント> 検索結果から元気な猫の情報を抽出しておやぶんエージェントに回答
ステップ 4 : <おやぶんエージェント> オトモ猫紹介エージェントからの回答を元に冒険者に回答

では、それぞれのステップを詳しく見てみましょう。

ステップ 1 の中に、以下のような記述がありました (説明に必要な部分のみ抜粋)。”rationale” の部分で、冒険者からのリクエストを受けてやるべきタスクを考え、オトモ猫紹介エージェントに問い合わせするための入力テキストを作成しています。

"rationale": {
    "text": "ユーザーが元気な猫を希望していることがわかりました。この情報を基に、cat-finder エージェントに適切な猫を探してもらいましょう。",
  },
"invocationInput": [
  {
    "agentCollaboratorInvocationInput": {
      "agentCollaboratorName": "cat-finder",
      "input": {
        "text": "元気な性格の猫を探しています。ユーザーのお供になるのにふさわしい猫を2匹まで紹介してください。",
        "type": "TEXT"
      }
    },
    "invocationType": "AGENT_COLLABORATOR",
  }
]

ちょっと下までスクロールしたところ、オトモ猫紹介エージェントからの結果が、以下のように記載されていました。元気そうな猫として、マルとノンが提示されています。 ちなみに、マルとノンはこんな感じの猫で、確かに元気そうです。

"observation": [
    {
      "agentCollaboratorInvocationOutput": {
        "agentCollaboratorName": "cat-finder",
        "output": {
          "text": "元気な性格の猫を2匹ご紹介します。\n\n1. マル\nマルは2019年2月23日生まれの元気な性格の猫です。黄色が好きで、軽やかな体型をしています。活発で楽しい旅のお供になりそうです。\n\n2. ノン\nノンは2017年4月8日生まれのやんちゃな性格の猫です。赤色が好きで、すばやさが特徴的です。元気いっぱいで、旅を盛り上げてくれそうです。\n\nこの2匹のうち、どちらか1匹を選んでいただけますか?",
          "type": "TEXT"
        }
      },
      "type": "AGENT_COLLABORATOR"
    }
  ]

続いて、ステップ 2 を見ていきます。ステップ 2 では、オトモ猫紹介エージェントがオトモ猫ナレッジベースを検索する部分を確認することができました。どのようにオトモ猫ナレッジベースを作ったかは記事の後半で詳しく説明するので、ここでは「元気な性格の猫」をナレッジベースで検索した結果、元気な「マル」を含むチャンク (ナレッジベースに登録したデータの一部) がヒットしていることだけ確認しておきましょう。省略してしまいましたが、次にヒットしていたチャンクの中にやんちゃな「ノン」がいました。

以下のログの中に <figure> xxx </figure> というタグがあります。これは、Amazon Bedrock Knowledge Bases の機能を使って、PDF の中の猫の画像をテキストに変換させた部分になります。ここに猫の毛の色の情報が含まれるので、さきほどの会話のように冒険者が「白い子が好きなのですが、いますか ?」と聞いた際に、白い猫であるミミを正しく紹介できたというわけです。ここの設定については「マルチエージェントを作ってみよう !」のパートの「1. オトモ猫ナレッジベースを作成」のところで詳しく説明します。

次は、ステップ 3 です。ここは引き続きオトモ猫紹介エージェントのターンで、ナレッジベースを検索して得られた結果を吟味して最終出力を作っています。ナレッジベースの検索結果として得られたチャンクには、複数の猫の情報が記載されていましたが、元気そうな性格の猫はマルとノンだけだったため、最終的な回答にはその 2 匹のみが含まれています。

最後のステップ 4 で何が起きているのか、見てみましょう。最後なので、おやぶんエージェントのターンに戻っています。オトモ猫紹介エージェントの出力を受け取り、冒険者への回答を作成しています。

こんな感じで、Amazon Bedrock Agents では裏側で何が行われているのかをステップごとに詳しく確認できるので、意図しない回答が返ってきた際にどこでどう間違えたのかを確認し、対策を打つのが簡単です。

すべてのトレース情報を見るのは大変なので、あとは Code Interpreter がどのように使われているかがわかる部分のみ確認して、トレース情報確認のパートはおしまいにします。

エージェントからマルとノンが紹介された冒険者が「どちらの猫が年上ですか。」と聞いた際のエージェントの動きを見てみます。このときは、全部で 5 つのステップが実行されていました。以下、ダイジェストです。

ステップ 1 : <おやぶんエージェント> オトモ猫紹介エージェントに猫の年齢を問い合わせ

ステップ 2 : <オトモ猫紹介エージェント> Code Interpreter を使用して、マルの現在の年齢を算出。生成、実行された Python コードは以下のとおり。

ステップ 3 : <オトモ猫紹介エージェント> マルと同様にノンの年齢も Code Interpreter を使って算出

ステップ 4 : <オトモ猫紹介エージェント> 算出したマルとノンの年齢をおやぶんエージェントに回答

ステップ 5 : <おやぶんエージェント> オトモ猫紹介エージェントからの回答を元に冒険者に回答

年齢を算出するところで、意図通り Code Interpreter が使われていることがわかりました。なお、Code Interpreter を使わないで同様のことをさせようとすると、エージェントは現在の日時がわからないためでたらめな年齢を回答しがちです。


 6. マルチエージェントを作ってみよう !

では最後に、AI エージェントをどうやって作ったかを説明して行きます。全体の流れはこんな感じです。

0. 使用する基盤モデルの有効化
1. オトモ猫ナレッジベースを作成
2. オトモ猫紹介エージェントを作成
3. アイテムナレッジベースを作成
4. アイテム紹介エージェントを作成
5. おやぶんエージェントを作成

この記事では、オレゴン (us-west-2) リージョンを使う想定で説明します。リージョンによって使用できる機能が異なるのでご注意ください。自分でも作ってみたいな、と思ってくださった場合は 素材つめあわせパック をダウンロードしてご利用ください。

 6-0. 使用する基盤モデルの有効化

ナレッジベースやエージェントで使用する基盤モデルを有効化して、利用できる状態にします。Amazon Bedrock コンソールの左側にあるメニューの「Bedrock configurations」->「モデルアクセス」をクリックします。

モデルアクセスを変更」ボタンをクリックし、以下の基盤モデルにチェックを入れて、「次へ」ボタンをクリックし、最後に「送信」ボタンをクリックします。

  • Amazon, Titan Text Embeddings V2
  • Anthropic, Claude 3.5 Sonnet v2
  • Anthropic, Claude 3.5 Sonnet

 6-1. オトモ猫ナレッジベースを作成

まずは、Amazon Bedrock Knowledge Bases を使って、オトモ猫のナレッジベースを作ります。

ダウンロードした素材つめあわせパックの中の cat-list.pdf をオレゴンリージョンにある任意の Amazon S3 バケットにアップロードし、アップロード先の S3 URI (s3://bucket-name/folder/cat-list.pdf のような形式のテキスト) をメモしておいてください。S3 URI は、S3 コンソールでアップロードしたファイルにチェックを入れて、画面の左上にある「S3 URI をコピー」ボタンをクリックすることで取得できます。

Cat-list.pdf はこんな感じの PDF ファイルで、猫の写真とプロフィールが記載されています。

画像をクリックすると拡大します

Amazon Bedrock コンソールの左側のメニューにある、「Builder tools/オーケストレーション」->「Knowledge Bases/ナレッジベース」をクリックします。次に「Create/ナレッジベースを作成」ボタンをクリックして、「Knowledge Base with vector store」をクリックします。代表的な設定項目は以下のように設定します。言及がないものはデフォルトのままで OK です。

<ナレッジベース作成手順>

  • ナレッジベース名 : cat-kb
  • IAM 許可 : 新しいサービスロールを作成して使用 (デフォルトのまま)
  • Choose data source : Amazon S3 (デフォルトのまま)

次へ」ボタンをクリック

  • S3 の URI : さきほどメモしておいた、cat-list.pdf をアップロードした S3 URI をペースト
  • Parsing strategy (ここが、PDF の中の画像をテキストに変換する設定) : Foundation models as a parser
  • Choose foundation model for parsing (どの基盤モデルで画像をテキストに変換するかを指定) : Claude 3.5 Sonnet v1
  • Instrunctions for the parser (画像をテキストに変換する際に使用するプロンプト) :
    4. If the element is an image (not table) の中のプロンプトを以下のように変更 (太字)。このテキストを parsing プロンプトに追加することで、猫の写真をテキストに変換する際に、猫の毛の長さや色や模様についての情報を含むことができ、これらの情報で猫を検索することができるようになります。
    (変更前) Otherwise provide a detailed description about the information in image
    (変更後) Otherwise provide a detailed description about the information in image, especially the length and color and pattern of the cat's hair

次へ」ボタンをクリック

  • 埋め込みモデル : Titan Text Embeddings v2

次へ」ボタンをクリック

ナレッジベースを作成」ボタンをクリックして、少し待つ


<ナレッジベースのテスト>
作成したナレッジベースの画面が表示されたら、「データソース」エリアに表示されているデータソース「knowledge-base-quick-start-…」のチェックボックスにチェックを入れて「同期」ボタンをクリックしてください。数分で同期が完了します。

画面右上にある アイコン か「テスト」ボタンをクリックして、テスト画面を表示します。
モデルを選択」ボタンをクリックして、「Anthropic」->「Claude 3.5 Sonnet v2」をクリックし、「適用」ボタンをクリックします。

テスト画面のテキストボックスに「白い猫はいますか」などと入力し、ミミの情報が回答されれば OK です。情報がないなどの回答が返ってきた場合、「データソース」エリアにあるデータソース名のリンクをクリックし、cat-list.pdf が正常に同期できているかを確認してください。

注意 : この手順によって、Amazon OpenSearch Service Serverless のコレクションが作成されます。

 6-2. オトモ猫紹介エージェントを作成

オトモ猫ナレッジベースができたら、それを使ってオトモ猫を紹介するエージェントを作成します。

Amazon Bedrock コンソールの左側のメニューにある、「Builder tools/オーケストレーション」->「Agents/エージェント」をクリックします。次に「Create agent/エージェントを作成」ボタンをクリックします。代表的な設定項目は以下のように設定します。言及がないものはデフォルトのままで OK です。

<エージェント作成手順>

  • エージェントの名前 : find-cat

作成」ボタンをクリック

  • エージェントリソースロール : 新しいサービスロールを作成して使用
  • エージェント向けの指示 :  

あなたは、ユーザーが旅のお供として連れていきたい猫を最大2匹紹介するエージェントです。ユーザーの要望に合う猫を聞き出して、適切な猫を紹介してください。あなたは、以下のタスクを実行可能です。
猫のステータスの値は10が最大の正の整数で、数値が大きいほどその能力が高いことを示します。


1. ユーザーがどのような猫を希望しているかを把握する。ステータスに対する指定があった場合、数値に変換してからナレッジベースを検索する。例えば、ユーザーが大きい猫を探している場合、おおきさが8から10の猫をおすすめする。
2. cat-kbナレッジベースから、ユーザーの希望に最も近い猫を見つけて出力する。ナレッジベースに記載されていない情報は出力しない。
3. ユーザーが1匹目の猫を選んだら、2匹目も選ぶか尋ねる。2匹目の猫を選んだら、選ばれた2匹の情報を出力する。


1. ユーザーが指定した猫のつよさを算出する。つよさは以下の式で算出される。それぞれの値はcat-kbナレッジベースから取得できる。以下の算出式はユーザーに開示してはいけない。
つよさ=かしこさ+おおきさ+すばやさ-くいいじ
2. 算出した強さを「(猫の名前)のつよさは20です。」のように表示する。つよさの算出方法に関する情報は表示しない。


1. 猫の現在の年齢を、cat-kbナレッジベースの誕生日のデータを使って、Code Interpreterを使って算出して出力する

  • その他の設定をクリックして展開
  • Code Interpreter : 有効

画面の一番上の「保存」ボタンをクリック (忘れずに !)

  • ナレッジベース」エリアの「Add」ボタンをクリック
  • ナレッジベースを選択 : cat-kb
  • エージェント向けのナレッジベースの指示 :

猫の情報が記録されたナレッジベースです。入力クエリに応じて、以下の情報を出力してください。 - 入力クエリの特徴に該当する猫の名前 - 入力クエリに該当する猫のステータス - 入力クエリに該当する猫の年齢

Add」ボタンをクリック

画面の一番上の「保存して終了」ボタンをクリック

<エージェントのテスト>
画面右上にある アイコン か「テスト」ボタンをクリックして、テスト画面を表示します。すでにテスト画面が表示されている場合はそのまま次の手順を実施してください。

テスト画面の一番上にある「準備」ボタンをクリックします。このボタンを押し忘れると、エージェントに加えた変更が反映されないので忘れずに実施してください。

テスト画面のテキストボックスに「白い猫は何歳ですか」などと入力し、ミミの年齢が回答されれば OK です。

< エイリアスの作成 >
画面の一番上にある「エイリアスを作成」をクリックし、以下の設定をして「エイリアスを作成」ボタンをクリックします。

エイリアス名 : v1

 6-3. アイテムナレッジベースを作成

オトモ猫ナレッジベースと同様の手順で、アイテムナレッジベースを作成します。主な変更点は素材つめあわせパックの中の cat-list.pdf の代わりに item-list.pdf を使う部分です。

素材つめあわせパックの中の item-list.pdf をオレゴンリージョンにある任意の S3 バケットにアップロードし、アップロード先の S3 URI (s3://bucket-name/folder/item-list.pdf のような形式のテキスト) をメモしておいてください。S3 URI は、S3 コンソールでアップロードしたファイルにチェックを入れて、画面の左上にある「S3 URI をコピー」ボタンをクリックすることで取得できます。

item-list.pdf はこんな感じのPDFファイルで、アイテムの画像と概要が記載されています。

画像をクリックすると拡大します

Amazon Bedrock コンソールの左側のメニューにある、「Builder tools/オーケストレーション」->「Knowledge Bases/ナレッジベース」をクリックします。次に「Create/ナレッジベースを作成」ボタンをクリックして、「Knowledge Base with vector store」をクリックします。代表的な設定項目は以下のように設定します。言及がないものはデフォルトのままで OK です。

< ナレッジベース作成手順 >

  • ナレッジベース名 : item-kb
  • IAM 許可 : 新しいサービスロールを作成して使用 (デフォルトのまま)
  • Choose data source : Amazon S3 (デフォルトのまま)

次へ」ボタンをクリック

  • S3のURI : さきほどメモしておいた、item-list.pdf をアップロードした S3 URI をペースト
  • Parsing strategy : Foundation models as a parser
  • Choose foundation model for parsing : Claude 3.5 Sonnet v1
  • Instrunctions for the parser : 4. If the element is an image (not table) の中のプロンプトを以下のように変更 (太字のテキストを追加)。
    (変更前) Otherwise provide a detailed description about the information in image
    (変更後) Otherwise provide a detailed description about the information in image , especially color and shape

次へ」ボタンをクリック

  • 埋め込みモデル : Titan Text Embeddings v2

次へ」ボタンをクリック

  • 「ナレッジベースを作成」ボタンをクリックして、少し待つ

<ナレッジベースのテスト>
作成したナレッジベースの画面が表示されたら、「データソース」エリアに表示されているデータソース「knowledge-base-quick-start-…」のチェックボックスにチェックを入れて「同期」ボタンをクリックしてください。数分で同期が完了します。
画面右上にある アイコン か「テスト」ボタンをクリックして、テスト画面を表示します。
モデルを選択」ボタンをクリックして、「Amthropic」->「Claude 3.5 Sonnet v2」をクリックし、「適用」ボタンをクリックします。

テスト画面のテキストボックスに「赤いアイテムは」などと入力し、赤いケープと赤いロッドの情報が回答されれば OK です。情報がないなどの回答が返ってきた場合、「データソース」エリアにあるデータソース名のリンクをクリックし、item-list.pdf が正常に同期できているかを確認してください。

注意 : この手順によって、Amazon OpenSearch Service Serverless のコレクションが作成されます。

 6-4. アイテム紹介エージェントを作成

アイテムナレッジベースができたら、それを使ってアイテムをおすすめするエージェントを作成します。

Amazon Bedrock コンソールの左側のメニューにある、「Builder tools/オーケストレーション」->「Agents/エージェント」をクリックします。次に「Create agent/エージェントを作成」ボタンをクリックします。代表的な設定項目は以下のように設定します。言及がないものはデフォルトのままで OK です。

< エージェント作成手順 >

  • エージェントの名前 : find-item

作成」ボタンをクリック

  • エージェントリソースロール : 新しいサービスロールを作成して使用
    エージェント向けの指示 :

あなたは、ユーザーがお供につれている猫にぴったりのアイテムをおすすめするエージェントです。ユーザーがお供につれている猫の好みに合わせてアイテムをおすすめしてください。
ナレッジベースに含まれるアイテムのみをおすすめしてください。
ユーザーがアイテムを選び終わったら、合計金額を算出して、ユーザーに支払いを求めてください。通貨の単位はnyanです。

画面の一番上の「保存」ボタンをクリック (忘れずに !)

ナレッジベース」エリアの「Add」ボタンをクリック

  • ナレッジベースを選択 : item-kb
  • エージェント向けのナレッジベースの指示 :

お供に選んだ猫が装備するアイテムのナレッジベースです。猫が好きな色のアイテムをユーザーにおすすめしてください。

Add」ボタンをクリック

画面の一番上の「保存して終了」ボタンをクリック


< エージェントのテスト >
画面右上にある アイコン か「テスト」ボタンをクリックして、テスト画面を表示します。すでにテスト画面が表示されている場合はそのまま次の手順を実施してください。
テスト画面の一番上にある「準備」ボタンをクリックします。このボタンを押し忘れると、エージェントに加えた変更が反映されないので忘れずに実施してください。

テスト画面のテキストボックスに「黄色いアイテムは」などと入力し、お星様の杖、黄色いステッキ、黄色いケープが回答されれば OK です。


< エイリアスの作成 >
画面の一番上にある「エイリアスを作成」をクリックし、以下の設定をして「エイリアスを作成」ボタンをクリックします。

エイリアス名 : v1

 6-5. おやぶんエージェントを作成

最後は、ここまでで作成した 2 つのエージェントを操るおやぶんエージェントを作ります。

Amazon Bedrock コンソールの左側のメニューにある、「Builder tools/オーケストレーション」->「Agents/エージェント」をクリックします。次に「Create agent/エージェントを作成」ボタンをクリックします。代表的な設定項目は以下のように設定します。言及がないものはデフォルトのままで OK です。

< エージェント作成手順 >

  • エージェントの名前 : mike-bar
  • Multi-agent collaboration : チェックを入れる

作成」ボタンをクリック

  • エージェントリソースロール : 新しいサービスロールを作成して使用
  • エージェント向けの指示 :  

あなたは、これから冒険に出かけるユーザーに、まずお供となる猫を紹介し、次にお供の猫が装備するアイテムを販売するエージェントです。あなたはプロフェッショナルとして、必要最低限の会話をします。

1. どんなお供が良いかをユーザーに尋ね、cat-finderエージェントを使ってユーザーにぴったりのお供をおすすめしてください。
2. アイテムをおすすめする場合は、猫が好きな色のアイテムをitem-finderエージェントで探して、冒険に役立つアイテムとしてそれをおすすめしてください。
3. ユーザーが購入するアイテムの合計金額をCode Interpreterを使って算出してください。


回答の際は、以下のルールを守ってください。

- エージェントの名称をユーザーに伝えないでください。
- あなたに与えられていない情報は、ユーザーに伝えないでください。
- 猫の年齢はcat-finderエージェントに尋ねてください。

  • その他の設定をクリックして展開
  • Code Interpreter : 有効

画面の一番上の「保存」ボタンをクリック (忘れずに !)

  • 「Multi-agent collaboration」エリアの「編集」ボタンをクリック
  • Collaboration configuration : Supervisor (デフォルト設定)
  • Agent collaborator」をクリックして展開
  • Collaborator agent : find-cat
  • Agent alias : v1
  • Collaborator name : cat-finder
  • Collaborator instruction :

cat-finderエージェントを呼び出して、ユーザーのお供になる猫を最大2匹紹介します。ユーザーの要望を聞きながら、最適な猫を紹介します。

画面の一番上の「Save」ボタンをクリック

画面の一番下の「Add collaborator」ボタンをクリック

  • Collaborator agent : find-item
  • Agent alias : v1
  • Collaborator name : item-finder
  • Collaborator instruction :

item-finderエージェントを呼び出して、ユーザーがお供につれている猫が装備するためのアイテムをユーザーに販売します。お供の猫の好みを踏まえて、良さそうなアイテムをおすすめします。

画面の一番上の「Save and exit」ボタンをクリック

画面の一番上の「保存して終了」ボタンをクリック


< エージェントのテスト >
画面右上にある アイコン か「テスト」ボタンをクリックして、テスト画面を表示します。すでにテスト画面が表示されている場合はそのまま次の手順を実施してください。
テスト画面の一番上にある「準備」ボタンをクリックします。このボタンを押し忘れると、エージェントに加えた変更が反映されないので忘れずに実施してください。

テスト画面のテキストボックスに「猫を探しています」などと入力し、エージェントがオトモ猫やアイテムをおすすめしてくれば OK です。


 7. リソースのクリーンアップ

上記手順によって作成されたリソースが不要になったら削除することをおすすめします。

  • Amazon Bedrock エージェントx 3 : それぞれのエージェントに対して、以下の手順で関連リソースを削除してください。
    • a. Amazon Bedrock のコンソールで、削除したいエージェントの詳細画面を表示
    • b.「エージェントの概要」エリアにある「許可」の部分に書かれた IAM ロールの ARN をメモしておく
    • c. Amazon Bedrock のコンソールのエージェント一覧画面で削除したいエージェントを指定して「削除」ボタンをクリック
  • Amazon Bedrock ナレッジベース x 2 : それぞれのナレッジベースに対して、以下の手順で関連リソースを削除してください。
    • a. ナレッジベース詳細画面の「ナレッジベースの概要」エリアにある「サービスロール」の部分に書かれた IAM ロール名をメモしておく
    • b. ナレッジベース詳細画面の下の方にある「ベクトルデータベース」エリアにある「コレクション ARN」をメモしておく
    • c. Amazon Bedrock のコンソールのナレッジベース一覧画面で削除したいナレッジベースを選択して「削除」ボタンをクリック
  • IAM ロール x 5 : IAM コンソールから、上記手順でメモしておいた IAM ロールを削除する
    • a. エージェント用に作成したもの : AmazonBedrockExecutionRoleForAgents_xxxx
    • b. ナレッジベース用に作成したもの : AmazonBedrockExecutionRoleForKnowledgeBase_xxxx
  • Amazon OpenSearch Service Serverless コレクション
    • a. Amazon OpenSearch Service のコンソールの左側のメニューの「サーバーレス」->「コレクション」をクリックし、コレクション一覧のテキストボックスに、ナレッジベース削除手順 b でメモしておいたコレクション ARN をペースト
    • b. 表示されたコレクション名をクリックし、「ネットワーク」エリアと「データアクセス」エリアに書かれた「関連づけられたポリシー」の名前をそれぞれメモしておく
    • c. 再度コレクション一覧画面で削除手順aを実行し、コレクションを選択して「削除」ボタンをクリック
    • d. Amazon OpenSearch Service のコンソールの左側のメニューの「サーバーレス」->「セキュリティ」->「データアクセスポリシー」と「ネットワークポリシー」をクリックし、削除手順 b でメモした名前のポリシーを探して削除
  • S3 バケットにアップロードした PDF ファイル
    • a. ナレッジベースを作成する際に S3 バケットにアップロードした 2 つの PDF ファイルを削除

 8. さいごに

この記事では、Amazon Bedrock Agents でどんなことができるのかを紹介しました。コードを一切書かなくても、コンセプトを検証するところまではサクッと実装できることを感じていただけたと思います。本番利用する際は、本記事では紹介しきれなかった便利機能を駆使して、より高度なエージェントを作成することになりますが、その場合でもマネージドで AI エージェントを作れる便利さを存分に味わっていただけるはずです。今回紹介しきれなかった機能については、下の方に参考情報としてピックアップした動画や記事をチェックいただければと思います。

~ 後日談 ~

あのぉ〜・・・。

(今日は時間があるのでミケがカウンター当番です) はい、どうしましたか ?

紹介いただいたマルとミミなんですが、防具だと思って購入したケープにくるまってずっと寝てるんです。

・・・猫だからにゃ。ふわふわしたものがあればくるまれたくなるのは猫のサガにゃ。本能には逆らえないにゃ。

そうですね、猫ですからね。・・・何か問題でも ?

あっ、かわいすぎるだけで、問題はないです。素敵なオトモ猫を紹介していただきありがとうございます。

満足いただけてよかったにゃ。またのご利用をお願いするにゃ。

すみません、先日オトモ猫を紹介いただいたものですが・・・。

はい、どうしましたか ?

武器かと思って購入したアイテムにオトモ猫がじゃれてくるんです。

赤いロッドに飛びつくとスーと、お星様の杖 (の一部) をかじってるジロにゃね。共感しかないにゃ。

楽しく過ごしているようでなによりです。・・・何か問題でも ?

問題・・・は・・・ないですね。お星様の杖が折れてしまったので、もうひとつください。

はい、300 nyan です。毎度ありがとうございます。

エージェント導入後、いまだクレームゼロで売り上げはうなぎのぼりにゃ。ミケの読みどおりにゃ。

はい、よかったです。今後はさらなるエージェントの安定感と売り上げ向上のために、構造化データはデータベースに入れて Amazon Bedrock Knowledge Bases の自然言語 to SQL クエリ機能と組み合わせるとか、冒険者の好みを長期的に反映するためにエージェントメモリ機能を使うとか、ガードレールを組み込むとか、時間を見つけてエージェントを強化していこうと思います。

よくわからにゃいけど、がんばるにゃ !

〜おまけ・冒険者のみなさまから寄せられたスナップショット〜

いつの間にかよその子も一緒になってスヤスヤ。

これは好きな色じゃないと怒るスー氏。

※冒険者から寄せられたスナップショットとアイテム画像は、Amazon Bedrock で使える画像生成モデル Amazon Nova Canvas を使って作成しました。

参考情報

Nyantech ハンズオンシリーズのその他の記事はこちら

選択
  • 選択
  • 機械学習を使って写真に写っている猫を見分けてみよう! ~ 前編 : Amazon SageMaker Ground Truth を使った画像のラベリング ~
  • 機械学習を使って写真に写っている猫を見分けてみよう! 〜中編:Amazon Rekognition Custom Labels を使った機械学習モデルの作成
  • 機械学習を使って写真に写っている猫を見分けてみよう! 〜後編:Amazon SageMaker を使った機械学習モデルの作成
  • たくさんの写真の中からうちの子 (猫) をみつけよう ! 〜機械学習と Amazon Elasticsearch Service で類似画像検索
  • Nyantech とはじめる MLOps 〜学習パイプランを使って効率的に猫を見分ける機械学習モデルを目指そう ! の巻〜
  • 猫の画像を使ってあそぶブラウザゲームを作ろう ! 〜AWS Cloud Development Kit (AWS CDK)で簡単デプロイ〜
  • Nyantech 画像生成選手権 ~ 画像生成 AI を使ってお題に近い猫の画像を生成しよう ! の巻
  • 1 クリックで立ち上がる自分だけの環境で、お猫様の画像生成をやってみた。
  • 1 クリックで立ち上がる自分だけの環境で、お猫様の画像生成をやってみた。- 拡張編 -
  • Nyantech であの猫のこんな写真を見つけたい ~ マルチモーダル埋め込みモデルを使って類似画像検索をパワーアップ ~
  • IoT を使ってお猫様の健康 (体重) をモニタリングしてみた
  • Nyantech マルチエージェントでぴったりのオトモを見つけよう !

builders.flash メールメンバーへ登録することで
AWS のベストプラクティスを毎月無料でお試しいただけます

筆者プロフィール

大渕 麻莉
アマゾン ウェブ サービス ジャパン合同会社
Generative AI Innovation Center

組込みソフトウェア開発から画像処理アルゴリズム開発を経てクラウドに辿り着き、2019 年にアマゾン ウェブ サービス ジャパン合同会社に入社。以来、社内外のイベントで機械学習セッションをしたりサンプルコードを書いたりしながら、お客様の機械学習導入・運用の技術サポートに従事。
脳内 CPU の半分が猫のことで占められており、視界に入るすべての生き物がうちの猫に見えるという日々を過ごしている。

AWS を無料でお試しいただけます

AWS 無料利用枠の詳細はこちら ≫
5 ステップでアカウント作成できます
無料サインアップ ≫
ご不明な点がおありですか?
日本担当チームへ相談する