AWS CodeCatalystとBedrock Blueprintを活用したRAG機能搭載AIチャットアプリケーションの高速開発
目次
1. はじめに
こんにちは、NRIデジタルの徐です。
生成AIの急速な発展により、多くの企業がAIアプリケーションの開発に注力しています。特に、RAG(Retrieval-Augmented Generation)システムを搭載したAIアプリケーションが注目を集めています。しかし、開発環境の構築には多くの時間がかかるのが課題です。
この課題を解決するため、AWSは2024年3月にAmazon CodeCatalystにBedrock GenAIチャットボットブループリントを導入しました。この新機能により、RAGを含むAIチャットアプリケーションの開発が大幅に簡素化されました。
本記事では、このBedrock Blueprintを活用したRAG機能を備えたAIアプリケーションの迅速な開発方法について解説します。開発環境のセットアップから機能の確認まで、具体的な手順を追いながら紹介していきます。
2. Amazon CodeCatalystとは
Amazon CodeCatalystは、AWSが提供するクラウドベースの統合開発環境で、開発からデプロイまでのプロセスを一元化し、効率的なアプリケーション開発を実現するサービスです。(公式サイト:Explore | Amazon CodeCatalyst)
以下の表で、CodeCatalystの主要機能と従来の開発ツール、および関連するAWSサービスを比較します。
CodeCatalyst機能 | 従来の開発ツール(一部例) | 関連するAWSサービス |
---|---|---|
Issues | Jira, GitHub Issues, GitLab Issues | – |
Code | GitHub, GitLab, Bitbucket | AWS CodeCommit |
Pull requests | GitHub Pull Requests, GitLab Merge Requests | AWS CodeCommit Pull Requests |
Dev Environments | Visual Studio Code, IntelliJ IDEA, Eclipse | AWS Cloud9 |
CI/CD | Jenkins, GitLab CI, CircleCI | AWS CodePipeline, CodeBuild |
Reports | SonarQube | AWS CodeBuild レポート |
Packages | Artifactory, Nexus Repository | AWS CodeArtifact |
Blueprints | Terraform | AWS CloudFormation |
3. Amazon Bedrockとは
Amazon Bedrockは、種々の高性能な基盤モデル (FM) を提供し、生成 AI アプリケーションの構築に必要な幅広い機能を備えたフルマネージドサービスです。
(公式サイト:基盤モデルによる生成AIアプリケーションの構築 – Amazon Bedrock – AWS )
4. Bedrock Blueprintとは
Bedrock Blueprintは、Amazon CodeCatalystに組み込まれたテンプレートで、生成AIチャットボットの迅速な構築とデプロイを実現できます。このブループリントを使用することで、CodeCatalyst内でプロジェクトの作成、サンプルソースコードの提供、CI/CDワークフローの設定が簡単に行えます。
アーキテクチャ
(参照先:codecatalyst-blueprints/packages/blueprints/gen-ai-chatbot/README.md at main · aws/codecatalyst-blueprints · GitHub )

5. 実装手順
事前準備
CodeCatalystの開発環境セットアップ
Bedrock Blueprintプロジェクト作成
自動構築
WEB画面の動作確認


6. 主な機能及びユースケースの考査
AIチャット機能
ホームページで好きなモデルを選択し、チャット欄に質問内容を入力すると、ChatGPTのように会話履歴が自動的に保存され、会話を続けることができます。また、ファイルのアップロードも可能です。
RAG機能
「ボットコンソール」から「ボットを新規作成」することで、外部のURLやファイルをナレッジベースとして活用できます。このRAG機能を用いて、以下の二つのユースケースで検証を行いました。
- 外部ファイル活用の例:社内オフィス情報検索ボット
社内のオフィス情報を含む外部ファイルを活用し、会社オフィスを自動で提案するボットを作成しました。このボットは、インプットされた会社オフィスの情報(ビル名、住所、最寄り駅からの距離など)に基づき、指定された都市で最寄り駅から最も近いオフィスビルを提案することができます。例えば、「市Aで最寄り駅から最も近いオフィスはどこですか?」といった質問に対して、的確な回答を提供します。検証手順は下記の通りです。以下のダミーデータを利用して、会社オフィスを自動に提案するボットを作成します。
○「同期完了」になるまで待ちます。10分以上「同期完了」にならない場合は、オレゴンリージョンのECSタスクの実行状況とコンテナのログを確認してトラブルシューティングを行ってください。(執筆者の検証時には異常は発生しませんでした。) - 外部URL活用の例
指定した会社のニュースを検索できるボットを作成しました。このボットは、インプットされた会社のニュースURLの内容に基づいて、最新ニュースの内容を正確に回答することができます。さらに、参照したドキュメント情報も表示可能です。
CI/CD機能
CodeCatalystのCI/CD機能を利用して、CodeCatalystのコードを修正すると、CI/CDのワークフロー(cdk-workflow)が実行され、構成や機能の変更が自動的に適用されます。ワークフローを自動でトリガーする条件は、ソースステージのトリガーで設定できます。下記の図では、chatbotリポジトリのmainブランチにプッシュされると、cdk-workflowが自動的に起動されます。

7. Bedrock Blueprintにより実現できる機能及び制約の整理
検証時点のバージョン(0.4.9)を調査しています。
機能の一覧
- 基本的なチャット機能
○認証(サインアップ、サインイン)○会話の作成、保存、削除○チャットボットの返信のコピー○コードのシンタックスハイライト○Markdownのレンダリング○ストリーミング応答○IPアドレス制限(デフォルトでは利用不可)○メッセージの編集と再送信○国際化(I18n)○モデルの切り替え(Claude Instant / Claude)
- カスタマイズされたボット機能
○カスタマイズされたボットの作成○カスタマイズされたボットの共有
- RAG(Retrieval-Augmented Generation)機能
○Web(HTML)○テキストデータ(txt, csv, markdownなど)○PDF○Microsoft Officeファイル(pptx, docx, xlsx)○YouTubeのトランスクリプト
- 管理機能
○ユーザーの使用状況を分析するための管理コンソール
- 対応言語
○切替可能な言語:英語、日本語、韓国語、中国語、フランス語、ドイツ語、スペイン語
制限事項の一覧
- モデルの制限
○Blueprintのコードを改修しない限り、Claude 3系列とEmbed Multilingual以外のモデルは対応できない
- 外部データソースの制限
○現時点では、S3からの直接的なファイル読み込みによる学習機能がサポートされていない
- カスタマイズの複雑さ
○デフォルト設定以外の高度なカスタマイズ(例:AWS CDK、Amazon API Gateway、Amazon Cognitoの設定変更)には、より深いAWS知識が必要となる
- 特定のAWSサービスへの依存
○他のクラウドプロバイダーやオンプレミス環境への移植が困難
8. Bedrock Blueprint環境の拡張・変更時の注意点
アーキテクチャの理解
- 現状:
Blueprintは複数のAWSサービスを統合した複雑なアーキテクチャを採用しています。 - 注意点:
変更を加える前に、全体のアーキテクチャと各コンポーネントの役割を十分に理解する必要があります。 - 難しい点:
サービス間の依存関係が複雑で、一部の変更が予期せぬ影響を及ぼす可能性があります。
Infrastructure as Code (IaC)の扱い
- 現状:
環境はAWS CDKを使用して定義されています。 - 注意点:
変更はCDKコードを通じて行い、直接AWSコンソールから変更を加えることは避けるべきです。 - 難しい点:
CDKの深い理解と、TypeScriptやJavaScriptの知識が必要となります。
パフォーマンスとコストの最適化
- 現状:
Blueprintは一般的なユースケースに対して最適化されています。 - 注意点:
拡張・変更によってパフォーマンスが低下したりコストが増大したりしないよう注意が必要です。 - 難しい点:
パフォーマンスとコストのバランスを取りながら新機能を実装することが求められます。
バージョン管理とドキュメンテーション
- 現状:
Blueprintには基本的なドキュメント(README.md)が付属しています。 - 注意点:
拡張・変更の内容を適切に文書化し、バージョン管理することが重要です。 - 難しい点:
継続的な更新と詳細なドキュメンテーションの維持が求められます。
9. 環境削除
このYAMLファイルは、環境を完全に削除するためのワークフローを定義しています。デフォルトでは、5行目以降の実際の削除処理を行う部分が # でコメントアウトされています。
これは、誤って削除ワークフローが実行されることを防ぐための安全機構です。
環境を削除する準備が整った場合にのみ、これらのコメントを解除してください。

- エラー原因
○削除に失敗しているCustomResourceは、という論理リソース、実態は”CognitoTriggerRegistrationFunctionaxxxxxx….”という名前のLambda関数に関連しています。この関数は、削除時にCloudFormationにレスポンスを返す必要がありますが、USER_POOLが既に削除されているため、エラーが発生しています。○問題のコード箇所:当該Lambda関数は、cdk/custom-resources/cognito-trigger/index.pyリポジトリに実態のリソースがあります。具体的には、Step49より57の以下の箇所に記載があります。
---- elif request_type == 'Delete': response = cognito.describe_user_pool(UserPoolId=USER_POOL_ID) attr = response['UserPool'] lambda_config = attr.get('LambdaConfig', {}) update_user_pool_lambda_config(USER_POOL_ID, attr, lambda_config={ k: v for k, v in lambda_config.items() if k not in triggers.keys() }) cfnresponse.send(event, context, cfnresponse.SUCCESS, None, physical_resource_id) ----
- 現在の削除プロセス
○.codecatalyst/workflows/DANGER-hard-delete-deployed-resources.yamlの32行目でUSER_POOLを削除します。
- Run: for USER_POOL in $USER_POOLS; do aws cognito-idp describe-user-pool --user-pool-id $USER_POOL --region $region > /dev/null 2>&1 && aws cognito-idp delete-user-pool --user-pool-id $USER_POOL --region $region || true; done
○その後、35行目でCloudFormationのリソースを削除します。- Run: aws cloudformation wait stack-delete-complete --stack-name $stack_name --region $region
- AWSサポートへの問い合わせ結果
○根本的な解決は、将来のバージョンアップで修正される可能性があるとのことです。○このエラーが発生する場合は、下記の二つの方法をお試しください。(2024/08/26時点)
- 暫定方法①
○前述のUSER_POOL削除処理(32行目)を、以下の処理の後、40行目付近に移動してください。
- 暫定方法②
○上記方法①を試しても同様のエラーが発生する場合は、以下のリソースを手動で削除し、再度「DANGER-hard-delete-deployed-resources」を実行します。◆S3コンソールで「ddbbucketlogsb」を検索し、対象バケットを「空にする」にします。◆Lambda関数画面で「CognitoTriggerRegistrati」を検索し、対象関数を削除します。◆CloudWatchロググループで「CognitoTriggerRegistrati」を検索し、対象を削除します。
まとめ
AWS CodeCatalystとBedrock Blueprintを活用することで、RAG機能を持つAIチャットアプリケーションの迅速な開発が可能となります。この統合プラットフォームを使用することで、開発、デプロイ、管理を効率的に一元化し、プロジェクトの作成からデプロイ完了までを1時間以内に実現できます。
このBlueprintは、カスタマーサポートの自動化や社内情報検索システムの構築など、具体的なビジネスシナリオでの活用が期待されます。これにより、企業は迅速にAI技術を導入し、業務効率化やサービス品質の向上を図ることができます。
現時点では、Bedrock BlueprintのRAG機能はS3からの外部ファイル読み込みによる学習をサポートしていませんが、今後のアップデートでこの機能が追加されることが期待されています。