こんにちは、アプリケーションサービス部ディベロップメントサービス1課の外崎です。
今回は、Generative AI Use Cases JP (略称:GenU)を使いRAGチャットアプリを構築してみたので、その概要と特徴について紹介します。
RAG(Retriever-Augmented Generation)とは?
RAG(Retriever-Augmented Generation)は、LLM(大規模言語モデル)の応答力をさらに高めるための手法です。具体的には、LLMに対して外部の情報ソースを取り込むことで、最新の情報や専門的な知識を活用し、通常のLLM単体では対応が難しい質問に対しても正確に回答できるようにします。
- RAG は LLM が苦手な最新の情報やドメイン知識を外部から伝えることで、本来なら回答できない内容にも答えられるようにする手法です。それと同時に、根拠に基づいた回答のみを許すため、LLM にありがちな「それっぽい間違った情報」を回答させないという効果もあります。例えば、社内ドキュメントを LLM に渡せば、社内の問い合わせ対応が自動化できます。
GenUとは?
Generative AI Use Cases JP(略称:GenU)は、GenU は、生成 AI を安全に業務活用するための、ビジネスユースケース集を備えたアプリケーション実装です。Amazon BedrockやAmazon KendraなどのAWSサービスを活用し、生成AIを用いた多様なビジネスユースケース素早く試すことができます。
例えば、RAGを用いた生成AIチャットボットを迅速に構築することができます。
OSSとして公開されており、GitHubリポジトリからダウンロードして利用することができます。
引用元:generative-ai-use-cases-jp
参考:社内知識を活用した生成 AI チャットボットを構築したい
GenUのアーキテクチャ
GenUは、以下のようなアーキテクチャをcdk.json
のBool値を変更することで、簡単に構築できます。
GenUの主な機能
多様なビジネスユースケースに対応する以下の機能を提供します。
- Webアプリケーションをプログラミング不要で構築可能
- チャットボット
- 文章生成機能
- 画像生成機能
- カスマイズ可能
- データアナリスト向けにSQL生成機能をカスタマイズすることも可能です。
- 引用元:Generative AI Use Cases JP をカスタマイズする方
- 拡張性とスケーラビリティ
- AWSのサーバレスリソースを活用して、スケーラビリティを確保
GenUを使ったRAGチャットアプリの特徴
GenUを利用すると、RAG(Retriever-Augmented Generation)をベースとしたチャットボットが迅速に構築できます。Amazon KendraやAmazon Bedrock Knowledge Basesとの連携により、特定の知識を用いてユーザーの質問に的確な回答を提供するアプリケーションが簡単に実現可能です。また、GenUは会話履歴を保持する機能も備えており、ユーザーの過去のやり取りを踏まえた応答が可能です。さらに、これらの基本的なチャットボット機能については、プログラミング不要で構築できるため、エンジニアリングリソースを抑えつつ、迅速なアプリケーション開発が可能です。
GenUを実際にやってみた
GenUリポジトリをクローンし、以下のコマンドを実行します。
npm ci npx -w packages/cdk cdk bootstrap npm run cdk:deploy
AWS Cloud Development Kit (AWS CDK)を利用して、CloudFormationスタックをデプロイします。
デプロイコマンドが完了すると、出力結果に以下のような情報が表示されるので、WebブラウザでGenerativeAiUseCasesStack.WebUrl
にアクセスします。
Outputs: 省略・・・ GenerativeAiUseCasesStack.UserPoolClientId = myuserpoolclientid GenerativeAiUseCasesStack.UserPoolId = myuserpoolid # 以下のリンクへアクセス GenerativeAiUseCasesStack.WebUrl = https://mydomain.cloudfront.net
Amazon Cognito のログイン画面が表示されるので、ユーザー名とパスワードを入力してログインします。この時、サインアップが必要な場合は、アカウント作成
をクリックして新規ユーザー登録を行います。
ログイン後、ホーム画面へ遷移します。
チャットボットにてテキストを入力しようとすると、生成モデルのアクセス許可が求められるので、Bedrockのモデルアクセス画面へ遷移し、アクセス許可を許可します。デフォルト設定では、anthropic.claude-3-sonnet-20240229-v1:0
がWebアプリの生成モデルとして利用されるため、Claude 3 Sonnet
のアクセスを許可します。※利用するモデルに合わせたアクセス許可を行ってください。
アクセス許可後、再度チャットボットにテキストを入力すると、回答が表示されます。過去のやり取りを踏まえた応答が可能です。
考察
繰り返し質問する事が可能か?
結論、繰り返し質問する事が可能です。
アーキテクチャ図より、会話履歴がDynamoDBに保持されていることが確認できるため、過去のやり取りを踏まえた応答が可能であると推測されます。ただし、今回はLambda関数のソースコードを確認できなかったため、この点については技術的に確実であるとは言えず、あくまで推測となります。
同一チャットにて同一idが振られることが確認できるため、繰り返し質問する事が可能でテーブル構造であると推測されます。
画像読み込みは可能か?
結論、画像読み込みが可能です。
画像をアップロードするボタンがあり、画像をアップロードすることで、画像に関する質問をすることができます。
ただし、画像を利用する際には、LLM自体が画像解析に対応しているものである必要があります。
動画は読み込み可能か?
結論、映像の画像フレームとして利用する場合は可能です。
- 映像分析ユースケースでは、映像の画像フレームとテキストを入力して画像の内容を LLM に分析させます。 映像分析ユースケースを直接有効化するオプションはありませんが、cdk.json でマルチモーダルのモデルが有効化されている必要があります。
現状のGenUにて構築されるWebアプリの入力インターフェースは、画像とテキストが対応しており、動画の直接アップロードには対応していません。映像分析を行うためには、動画をアップロードし、各フレームを抽出して分析に用いる必要がありますが、そのためにはフロントエンドおよびバックエンドの双方に追加の開発が必要な点に注意が必要です。
Amazon Kendra を利用するには?
GenUのデプロイ時に、generative-ai-use-cases-jp/packages/cdk/cdk.json
でのcontextの設定により、RAGのKendraを有効にすることができます。
"context": { ・・・ "ragEnabled": true, ・・・
参照:RAG チャット (Kendra) ユースケースの有効化
変更後にnpm run cdk:deploy
で再度デプロイして反映させます。
Amazon Bedrock Knowledge Basesを利用するには?
GenUのデプロイ時に、generative-ai-use-cases-jp/packages/cdk/cdk.json
でのcontextの設定により、RAGのKnowledge Baseを有効にすることができます。
"context": { ・・・ "ragKnowledgeBaseEnabled": true, ・・・
変更後にnpm run cdk:deploy
で再度デプロイして反映させます。
参照:RAG チャット (Knowledge Base) ユースケースの有効化
S3へデータソースをアップロードするには?
/packages/cdk/rag-docs/docs
に保存されているデータが、自動で Kendra や Knowledge Base データソース用の S3 バケットにアップロードされます。
デプロイ完了後、 Sync(同期) してください。
まとめ
本記事では、Generative AI Use Cases JP (GenU)を利用し、Amazon KendraやKnowledge Baseとの連携を通じて、RAGチャットアプリを構築し、その概要や特徴について紹介しました。 GenUを活用することで、プログラミング不要で基本的なチャットボットの機能が実現できるため、迅速に生成AIを業務に導入する上で非常に有用です。
どんどん追加アップデートされているので、最新の情報を確認してみてください。