Blog

宇宙最速!? を目指してAmazon Bedrockを本格活用したプロダクトを開発しました!

2023/10/03

KDDI ソフトウェア技術部 兼 KDDIアジャイル開発センター テックエバンジェリストの御田(みのるん)です。

先週9/28深夜、パブリッククラウド最大手のAWSより生成AIサービス「Amazon Bedrock」がついに正式リリースされ、世界中で大きな話題になっています。

KDDIでは先日にも生成AIの社会実装に向けAWSと連携する旨のニュースリリースを発表しておりました。そして本日10/3、AWS社の生成系AI担当Vice Presidentの来日に伴う記者会見にて弊社執行役員からもプレス発表がありましたが、KDDIおよびKDDIアジャイル開発センターにてAmazon Bedrockを活用しいち早くプロダクトを開発しましたのでご紹介します!

DX事業企画体験アプリ「ビジつく!」

Amazon Bedrockを本格活用してプロダクトを開発しようということで、KDDI DIGITAL GATEおよびKDDIアジャイル開発センターの有志でスクラムチームを編成し、短期間でアジャイル開発を行いました。

「まずは自分たちが普段の業務で使いたくなる便利なプロダクトを作ろう!そして使い物になりそうなら社外にも提供していこう」というアプローチで企画を開始。私自身はエンジニアとして開発に参加していたのですが、同じスクラムチームとしてプロダクトオーナーやデザイナーと一緒にサービス設計でも適宜協業していました。

KDDI DIGITAL GATEおよびKDDIアジャイル開発センターではお客様のDXを支援するために新規事業のサービスデザインやPoC開発を行うことが多いのですが、お客様と混成でスクラムチームを組成してサービスデザインを始める際に「事業企画に不慣れなメンバーでもアイディア立案をスムーズに進められるようにしたい」というニーズがあったため、事業企画を体験できるチュートリアルアプリを開発することになりました。

名付けて「ビジネスをつくろう!」、通称「ビジつく!」。ゲーム感覚で楽しく触ってもらえるようにと考えたところ、どこかで聞いた感じのネーミングになりました(笑)

ビジつく3

システムアーキテクチャ

短期間でしっかり価値を提供できるプロダクトを開発するため、AWS Amplifyを活用してインフラ部分は出来るだけマネージド&サーバーレスでの構築を試みました。

ビジつく アーキテクチャ図

今回の開発目的でもあり目玉のAmazon Bedrockでは、Anthropic社提供のClaude v2という基盤モデルを利用しました。OpenAI社の言語モデル、GPTシリーズの対抗馬と目されている生成系AIです。

アプリケーションの技術スタックとしては「DX事業企画の生成結果をSNSにシェアできるようにしたい」という要件が想定されていたことから、OGP(サムネイル画像)の生成ができるサーバーサイドレンダリング(SSR)に対応したNext.jsをフレームワークに採用。UIライブラリにはChakra UIを使っています。

AWS Lambdaで稼働させるバックエンドのアプリケーションとしては、LLM関連のエコシステムと相性のよいPythonを利用。OSSのライブラリとしてLangChainを活用し、Custom LLMとしてBedrockのClaudeをラップしアプリケーションに組み込みました。

どんな風にDX企画を体験できるの?

Webブラウザから本アプリケーションのURLにアクセスすると、最初に新規事業のお題をテキストで入力できるようになっています。

デフォルトでは「喫茶店の店舗のデザインを変更して、リモートワークを始めとした働く環境の変化に応じたお店にしたい」というサンプルが設定されており、こちらでそのまま体験を進めることもできます。

ビジつく1

事業企画のテーマを決めると、頼もしいチームメンバーがサービスデザインの基礎を説明しつつ、フィールドワークを進めてくれます。

ビジつく2

このアプリを操作するあなたは、あくまでクリックして画面を進めるだけでメンバーの作ってくれた叩き台から好きなものを選んで企画を進めることができます。

Annaさんがユーザーインタビューで収集してくれた「ジョブ」(顧客の課題例)が4パターン提示されるため、今回のソリューションのお題にしたいものを選びます。この「ジョブ」の生成にAmazon Bedrockを利用しています。

ビジつく3

ジョブの中から今回は「カフェでいつも同じ席が確保できずに困っている常連客」を選んで企画を進めてみます。次は別メンバーのDavidくんが打ち手となるサービスアイディアを沢山考えてくれるようです。

ビジつく4

出てきたサービスアイディアの中から面白そうな「ポイント抽選」というソリューションを選定してみます。来店ポイントに応じた席抽選機能ということで、かなり実用性のありそうなアイディアに見えます!もちろんこれも裏でAmazon Bedrockがアイディアを生成してくれています。

ビジつく5

最後にメンバーのLisaさんが、今回の事業企画のキャッチコピーを考えてくれます。

ビジつく6

こちらが今回企画したDX事業アイディアのキャッチフレーズとプロモーションコピーです。この画面をそのまま上司の方に見せてエレベーターピッチ…なんてことも出来るかも!?

ビジつく7

MVPの時点では未実装ですが、この画面はSNS等で結果をシェア出来るようにしたいなと考えています。

実際に使って分かったBedrockの良い点&これから期待したい点

Amazon Bedrockの良い点

  • 多くのエンジニアが使い慣れたAWSをフルに活用してLLMアプリを開発できる!トップシェアのクラウドサービスだからこそ、サードパーティ含めた周辺エコシステムが充実していることに加え、もともとAWSは仮想マシンインフラの延長ではなく「開発者がインフラを意識せずに使いやすいマネージドサービス」に力を入れているため、ビジネス価値を高めるための開発に集中しやすいメリットがあります。

  • AWSは利用者のコミュニティも活発なため、多くの情報をWeb上で見つけることができます。Bedrockの正式リリース直後から既にQiitaやDevelopersIO等、多数のブログ媒体などで利用者からの情報発信が始まっています。

  • Bedrockで利用可能なAnthropic社のClaudeモデルは高性能かつコスパ良し。LLMのベンチマーク(Rakuda)でもClaude v2はOpenAI社のGPT-3.5とGPT-4モデルの間に位置する日本語性能と言われていますが、ユースケースによってはGPT-4にも劣らない有用なテキスト生成が得られつつも、価格設定はGPT-4よりもかなり安価に利用することができます。

Amazon Bedrockにこれから期待したい点

  • 熾烈な生成AI競争でようやくスタートラインに立てた、という段階のBedrockは成熟がまだまだこれからです。東京リージョンでの基盤モデル稼働やエンタープライズ現場でニーズの多いPrivateLinkによる閉域ネットワーク対応、ReActに基づいたタスク実行を実現するAgent機能など、対応予定が発表されているものの正式公開されていない機能も多数控えているため、今後のスピーディな市場展開に期待したいところです。

  • BedrockのAPIから返却される生成テキストを、アプリケーションが処理しやすいようにJSON形式へ加工するところで少しつまずきました。今回はLangChainに組み込まれているPydanticというパーサーを利用したのですが、開発環境起因のエラーに悩まされトラブルシューティングに時間を費やしてしまったため、OpenAIのFunction Callingのような機能がBedrockでも利用できればより便利だなと思いました。

  • 生成AIトレンドにいち早く追従した競合クラウドサービスのMicrosoft Azureでは、On Your DataやPrompt FlowなどLLM開発をローコードかつマネージドに行える機能を先行して多数展開しています。アプリケーション開発において「余計なシステム対応を減らし、ビジネス価値を高めるためのタスクに集中したい」のは全てのエンジニアに共通するニーズだと思いますので、AWSも負けないように便利なマネージド機能を打ち出してほしいなと非常に期待しています!

また、本開発においてBedrockを利用する箇所は比較的スムーズに進んだのですが、苦戦して多くの時間を使ったのは直接Bedrockと関係しない部分でした。

  • サーバーサイドレンダリングを利用できるようNext.jsの最新版(v13)を選定したのですが、以前のバージョンと比べてルーティング・レンダリング周りの仕組みが一新されており(App Router / RSC)、コードの記述方法が大きく変わり情報もまだ少なかったため苦労しました。

  • Lambda関数でLangChainを利用するために特定のPythonバージョンを利用する必要があったのですが、AWS AmplifyのCI/CD機能が別のバージョンのPythonをインストールしてしまうため、内部的に使われているAWS CodeBuildの定義(buildspec.yaml)を書き換える対応が発生しました。この他にもAmplifyは全般的に、マネージドで隠蔽されている裏の部分を意識しないとトラブルシューティングが困難なことが多く結構苦労しました。

  • 複数のLambda関数で共通的に利用したいモジュールがあったためLambdaレイヤーの利用を検討したのですが、Amplifyのモック機能によるローカルテストにLambdaレイヤーが対応していなかったため断念しました。

上記のような苦労はありつつも、AWS Amplifyが使えたおかげでインフラ部分の面倒ごとを比較的意識せずビジネスロジックやUIデザインの開発に集中できた点には感謝しています。

おわりに

本記事では「ビジつく!」アプリのシステム面を中心とした紹介を行いましたが、同時にKDDIアジャイル開発センターの公式NoteにてPOの岸田より、よりプロダクト面にフォーカスした紹介記事もリリースされています。こちらも併せてご覧ください!

https://note.com/kag_makishy/n/nda608a8baf50

また、この他にもAmazon BedrockのGA直後から弊社メンバーが多数のブログ記事をアウトプットしています。是非ご活用ください!