AWS x dentsu GenAI Hackathonとは
CCIのkawak3nです。今回、AWSと電通グループが主催する生成AIをテーマにしたハッカソンに参加してきたので
- 3日のハッカソンでAWSの生成AI関連サービスを使ったチャットボットサービスを作ってみた
- Amazon Kendraを使うとチャットボットの回答に会社独自の情報を気軽に含ませることができた
という話を書こうと思います。
AWS x dentsu GenAI Hackathonは現在成長の目まぐるしい生成AIをテーマにしたハッカソンです。 ハッカソンの流れは
- 2時間 x 5日間の事前講義でAWSの生成AI関連サービスについて勉強
- 3日間の開発期間でチームごとにサービス開発
- 最後に制作物の発表資料を提出
という感じでした。AWSのサービスの中でも普段業務の中でなかなか触れることのない生成AIに関するサービスを色々と試しながら、自分たちのプロダクトを作ることができるいい機会でした。
5日間の事前講義
事前講義ではAmazon Bedrock、Amazon SageMakerやAmazon Kendraなどのサービスの説明とそれらのサービスを使った自然言語生成や画像生成などの解説をしていただきました。
個人的に注目したのは、Kendraというサービスで、ExcelやPDFなどのさまざまなフォーマットのデータを学習させて検索可能にすることができます。このKendraのサービスと大規模言語モデル(LLM)を組み合わせることで検索拡張生成(RAG)を実装することができます。
RAGというのは、LLMに外部のデータを渡して検索可能にすることで、汎用的な知識しか持たないLLMにユーザー独自のデータを回答に含めさせる手法です。
例えば、
- 会社で保有している大量のPDF資料を学ばせることで会社独自の情報を簡単に検索
- 会社で提供しているサービスに関する過去の問い合わせ一覧が入っているExcelを学ばせることで、ユーザーの問い合わせに応対するチャットボットを構築
とさまざまな応用例が考えられます。
さらに、Kendraを使ってRAGを構築する場合には、LLMが回答をする際に参考にしたデータソースの場所も返すことができます!つまり、構築したRAGチャットが回答する際に、どのPDFのどのページを参考にしたというリンク付きのリファレンスリストを回答と一緒にユーザーに返すことができるのです!これはかなり便利そう。
こんなことを考えながら、5日間の事前講義が終わりました。
3日間のハッカソン開始!
いよいよハッカソンの開始です。
僕たちのチームは様々ある自社の広告に関連するサービスの案内ができるチャットボットを作ろうという話になりました。
会社名は知っているけど、実際自分たちの商品をどうやって広告してくれるのかイメージが湧かないユーザーがチャットに自分たちの商品に関する情報を入力することによって、適切なサービスを提案して、かつ、そのサービスの資料へのリンクが提案されるようなイメージです。
アーキテクチャとしてはまず、S3に設置した弊社サービスを概説した資料をKendraに学習させます。資料をインデックスしたKendraにBedrockを通して問い合わせるような構成でいこうと考えました。Bedrockは学習済みモデルを基盤モデルとして選択し、簡単に生成AIアプリケーションのAPIを作成できます。使えるモデルには、Claudeのようなテキスト生成モデルやStable Diffusionのような画像生成モデルなどがあります。
まずは触って検証してみる
チーム全員がAWSの生成AI系のサービスについて無知な状態から始まったので、まずは実際にAWSのサービスを触ってみて、どれくらいの精度が出るものなのか確かめるところから始めました。僕たちの考えたサービスは
- ユーザーが訴求したい商品に合ったサービスを提案
- サービスを提案した根拠の資料のリンクを表示
が根幹の機能なので、この2つの機能が問題なく実現できそうかを検証してみました。
Kendraの自社サービスに関するデータを与えるところから始めます。
使うデータはいろいろ模索しましたが、結果的に会社のサービス概要を説明したPDF資料を使用しました。使いたいと思っていたサービス概要を説明した資料はPPTX形式で作られており、Kendraに対応している形式であるPPT形式にエクスポートして学習しようと試みたのですが、なぜかうまくいかず。原因を特定するのに時間がかかりそうだったので、PPTX形式の資料をPDF形式へエクスポートして対応しました。
30分程度でKendraへのインデックスが終わり、実際に弊社サービスに多少関連のあるような単語を入力してみると資料の内、関連のある資料のページリンクを返してくれました。KendraはCLIからリクエストをしなくとも、AWS Console上からリクエストをして動作確認をするインターフェースが備わっているので、その機能を使って学習したKendraの動作確認をします。
弊社サービスの概要PDFを学習して動作確認した時のスクリーンショットを撮り忘れてしまったので、参考画像↑に載せたのは、その前に試しで学習させていた弊社の運営しているWebサイトのKnowHowNowを学習させた際のスクリーンショットになります。Kendraのデータ参照先はS3やGoogle DriveだけでなくウェブサイトのURLを指定してクローリングができるのが便利だなと感じました。
これで資料のリンクを表示させる能力は十分かなと感じたので、次にユーザーが訴求したい商品を問い合わせたときに適切なサービスが提案されるか検証していきます。
「日本酒を売りたいです。販売支援してほしい。」みたいに問い合わせを投げた際に、いい感じにサービスが提案されて欲しいので、Bedrockには
あなたはお客さんの悩みに応じてCCIという会社のサービスを適切に提案するAIアシスタントです。 CCIには<cci-services></cci-services>のサービスが存在しています。 <cci-services> * DataDig * KNOTBOX * Commerce Container * Social AdTrim * Lakebi * CCI ANALYTICS * Media Digital Connect * Z世代研究会 * Lifestyle Digital Connect </cci-services> あなたは<cci-services></cci-services>のサービスの中から一つ以上のサービスを選択して、お客さんに提案する必要があります。
のような感じにプロンプトを与えてあげます。その上でBedrockとKendraを繋げてあげると、問い合わせに応じていい感じにサービスを提案してくれるようになりました!
あとはハッカソンの時間ギリギリまでサービスを調整したり資料を作っていたりしていたら、あっという間に制限時間になってしまいました。
成果物
最終的に次のようなサービスを作ることができました!
「日本酒を売りたいです。販売支援してほしい。」という問い合わせに対してCommerce Containerという弊社のサービスを提案しながらユーザーの問い合わせに回答することができていそうです。
所感
生成AIをプロダクトに組み込むことは結構手間がかかると考えていたのですが、AWSのサービスを利用することにより(技術的な意味で)簡単に組み込むことができるんだなと感じました。 また、LLMだけだとビジネスへの応用が限られてきますが、AWS Kendraを使うことによって気軽にLLMに自社独自のデータを組み込めることが可能になり、様々な応用例が生まれるかなと考えています。