RAG構成で実現!Bedrockナレッジベースを活用した生成AI APIの作り方 -CloudFormationテンプレート付き-

スポンサーリンク
ハンズオン
スポンサーリンク

はじめに

近年、AIの活用が急速に広がっており、生成AIを使って多様なタスクを効率化できる時代になっています。
実際、メールの自動生成やプログラムの作成、情報のファクトチェックなどに広く利用されています。

しかし、一方で「社内ルールに即した回答が得られない」、「業務固有のQ&Aに対応できない」といった悩みを抱えている方も多いのではないでしょうか?
ChatGPTなどの汎用AIでは、公開情報に基づいた回答しかできないため、業務に特化したナレッジの活用には限界があります。

そこで本記事では、AWSのBedrockナレッジベース(RAG: Retrieval-Augmented Generation:検索拡張生成)を活用し、社内ドキュメントをもとに回答してくれるAPIの作り方を紹介します。

この記事を読むことで、以下のようなことが理解・実践できるようになります。

  • Bedrockナレッジベースの仕組みと活用方法
  • 独自ドキュメントに基づいた生成AIの活用方法

本記事で利用するコードやテンプレートはGitHubに公開しているため、すぐに導入を始められる構成になっています。
ぜひ最後までご覧いただき、自社業務へ応用してみてください。

Bedrock ナレッジベースとは?

今回利用するAIサービスについて簡単に紹介します。

Bedrock

Amazon BedrockはAWSが提供する生成AIサービスの基盤であり、複数の高性能な基盤モデル(Foundation Models:FM)をAPI経由で簡単に利用できるマネージドサービスです。
例えば以下のようなモデルを個別のインフラ管理なしに利用できます。

モデル 特徴
Anthropic Claude 安全性・透明性を重視した設計。
長文の入力・出力に強く、数万トークン以上の処理も可能。
Meta Llama Meta(旧Facebook)によるオープンな大規模言語モデル。
軽量ながら高精度な出力。
Mistral 軽量・高速処理が可能なモデル。
シンプルな構造で推論速度が速い。
Amazon Titan AWSが独自に開発した汎用的な言語モデル。
信頼性やセキュリティに強い。

AWSの一部のサービスとして提供されているため、既存のAWSとの連携もスムーズです。

Bedrockナレッジベース

Bedrockナレッジベース(Knowledge Base) は、Amazon Bedrockの機能の一つで、独自ドキュメントをもとに生成AIが回答を返す仕組みです。生成AIに企業内ドキュメントやFAQ、マニュアルなどを取り込ませて、より文脈に沿った正確な回答を得るために利用されます。

この仕組みは一般的に RAG(Retrieval-Augmented Generation / 検索拡張生成) と呼ばれ、BedrockナレッジベースはこのRAGの処理をAWSで手軽に使えるようにマネージド化したものです。以下のような流れで処理を行います。

  1. 質問の入力:ユーザーが質問を送信
  2. ドキュメント検索:事前にベクトル化(埋め込み)されたドキュメントから関連情報を検索
    ※ベクトル化とは、テキストを数値化して検索しやすくする処理です。
  3. 生成AIの呼び出し:検索結果と質問を組み合わせて生成AIが回答を作成
  4. 回答出力:検索に基づいた自然な文章で回答

主に以下の用途で利用されます。

  • 社内FAQやマニュアルの情報から自動回答
  • コールセンターやヘルプデスク支援のボット
  • 専門知識が必要な文書(法務・研究・営業)の検索やQA

Bedrockナレッジベースを活用することで、従来の生成AIでは難しかった「自社に特化したAIの実現」が、より手軽かつセキュアに構築可能になります。

なお、最新のリアルタイム情報や外部APIの呼び出しが必要なユースケースには適さない場合もあります。目的に応じて構成を選ぶことが重要です。

 

環境構成

本記事で紹介するサービスの構成は以下です。

上側(赤色部分)はデータ登録時に利用、下側(青色部分)はデータ検索時に利用するサービス構成です。

 

費用

本記事で紹介するサービスの費用は以下です。1時間あたりの料金になります。
※利用回数に応じて利用料が変動します。

サービス 料金(1 時間あたり) 備考
API Gateway ほぼ無料 無料枠範囲内
Lambda ほぼ無料 無料枠範囲内
VPC ほぼ無料
VPCエンドポイント 0.028 USD × AZ数 2AZ構成の場合は合計4エンドポイント
0.056 USD
S3 ほぼ無料 データ量に応じて課金
登録ドキュメントが多い場合は注意
CloudWatch ほぼ無料 データ量に応じて課金
ログデータが多い場合は注意
Bedrock
(基盤モデル)
ほぼ無料 基盤モデルによって料金が変動
基盤モデルを使用した生成 AI アプリケーションの構築 – Amazon Bedrock の料金 – AWS
Bedrock
(ナレッジベース)
ほぼ無料 登録ドキュメントのベクトル化で課金が発生
OpenSearch Serverless 0.668 USD シングルAZ時の料金
マルチAZにすると料金は2倍
リクエスト量に応じてワークロード(OCU)が追加
追加されたOCU分、課金が発生

OpenSearch Serverlessの料金が高いです。ハンズオンなど試しに触ってみたいという方は利用後に必ず削除してください。最小構成でも1時間あたり0.69 USD(1USD = 146円で計算すると102円)かかります

 

事前準備

以下は事前に実施してください。

  • Node.Jsの実行環境
  • AWS アカウントの準備
  • AWS CLIで利用するIAMユーザの作成
  • AWS CLIのセットアップ
  • Lambda関数のソースを格納したS3バケットの準備
  • ナレッジベースに登録するドキュメントを格納したS3バケットの準備
  • 基盤モデルの有効化

 

作り方

※各種詳細についてはリポジトリのREADME.mdを確認してください。

以下のコマンドでGitHubからリポジトリをクローンしてディレクトリ移動してください。

git clone https://github.com/TeTeTe-Jack/aws-handson-knowledgebase-api.git
cd aws-handson-knowledgebase-api

.envファイルをリポジトリのルートディレクトリに作成します。以下を参考に作成してください。

# プロジェクト名(各リソースのプレフィックス)
PROJECT_NAME=my-kb-project

# バケット名(Lambda関数のソースの格納バケット)
DEPLOY_BUCKET=my-kb-deploy-bucket
# オブジェクトキー(Lambda関数のソースのオブジェクトキー)
LAMBDA_SOURCE_ZIP_KEY=kb-api/kb-api.zip

# バケット名(ナレッジベースに登録するドキュメントの格納バケット)
MANUAL_BUCKET=my-kb-manual-bucket
# オブジェクトのプレフィックス(ナレッジベースに登録するドキュメントのプレフィックス)
KNOWLEDGEBASE_PREFIX=manual/

# ナレッジベースに登録する際に利用する埋め込み基盤モデル
EMBEDDING_MODEL=amazon.titan-embed-text-v1

# VPCのサブネット数
AZCOUNT=1

# OpenSearch ServerlessマルチAZ対応設定(ON: マルチAZ、OFF: シングルAZ)
OPENSEARCH_SERVERLESS_MAZMODE=OFF

# CloudWatchログの保持期間(日)
LOGRETENTION_DAYS=7

以下のコマンドで依存パッケージのインストールをします。

npm install

依存パッケージのインストール後、以下のコマンドでLambda関数用のソースのビルドとzipファイルをS3バケットにアップロードします。

npm run zip

以下のコマンドでCloudFormationを使ってAWSリソースを配備します。配備処理に10分程度時間がかかります。

npm run deploy

配備が完了したら以下のコマンドでナレッジベースの同期処理を行います。

npm run sync

※注意)同期処理のジョブを起動するコマンドです。ジョブの実行結果はAWS管理コンソールで確認してください。

同期処理が完了したら完了です。以下のAPIを実行してみてください。

POST 【API Gateway エンドポイント】/prod/search
{
  "q": "【質問内容】"
}

 

動作確認

APIの実行

今回はAWSの認定資格の試験ガイドをナレッジとして登録してみました。
それぞれの質問内容と回答結果は以下のようになりました。

①はじめてのAWS認定資格

  • 質問:AWSをこれから使い始めます。まずはどの資格から取得するのがいいですか?
  • 回答:AWSを初めて使う場合は、AWS Certified Cloud Practitioner (CLF-C02)資格の取得がおすすめです。この資格は、AWSのクラウドコンセプト、主要サービス、セキュリティ、コンプライアンスなどの基礎知識を習得できる入門レベルの資格です。この資格を取得することで、AWSの全体像を理解し、さらに上位の専門資格の取得につなげることができます。

②中級者向けのAWS認定資格

  • 質問:AWSを利用した開発プロジェクトに1年間従事してきました。主に開発プロセスの効率化でAWSを利用しています。力試しするのはどの資格がおすすめですか?
  • 回答:AWSを利用した開発プロジェクトに1年間従事してきた経験があるということで、AWSの基本的なサービスやツールに精通していると考えられます。そのような方にとってお勧めの資格は、AWS Certified Developer – Associate (DVA-C02)です。この資格は、AWSのコアサービスの理解と、アプリケーション開発、デプロイ、セキュリティ、トラブルシューティングなどの実践的な知識を評価するものです。

③AI上級者向けのAWS認定資格

  • 質問:AWSや機械学習を利用したプロジェクトに長年従事しています。AWSや機械学習について深い知識があります。どの認定資格がおすすめですか?
  • 回答:AWS Certified Machine Learning – Engineer Associate (MLA-C01) 認定資格がおすすめです。この認定資格は、AWS クラウドを使用した機械学習ソリューションとパイプラインの構築、運用化、デプロイ、保守に関する能力を検証するものです。長年のAWSや機械学習の経験があれば、この認定資格を取得するのに適していると思われます。

参考(参照元のドキュメントについて)

今回のAPIのレスポンスには含めていませんが、ナレッジベースがどのドキュメントのどの文章を参考にして回答を生成したかログに出力しています。
CloudWatchログからAPIの実行処理のログを確認してください。
ナレッジベースの実行処理の結果がログに出力されています。
以下参考例です。

{
  "$metadata": {
    (省略)
  },
  "citations": [
    {
      "generatedResponsePart": {
        "textResponsePart": {
          "span": { "end": 184, "start": 0 }, 
          "text": "AWSを初めて使う場合は、AWS Certified Cloud Practitioner (CLF-C02)資格の取得がおすすめです。この資格は、AWSのクラウドコンセプト、主要サービス、セキュリティ、コンプライアンスなどの基礎知識を習得できる入門レベルの資格です。この資格を取得することで、AWSの全体像を理解し、さらに上位の専門資格の取得につなげることができます。"
        }
      },
      "retrievedReferences": [  // 参考にしたドキュメント
        {
          "content": {  // 参考にしたドキュメントの文章
            "text": "受験対象者について この認定は、AWS クラウドの設計、実装、オペレーションの経験が 6 か月以下の受験者 を対象としています。対象の受験者としては、AWS クラウドのキャリアの初期段階に ある人や、AWS クラウドで役割を担う人々と一緒に仕事をしている人が挙げられます。 推奨される AWS の知識 受験対象者は、以下の分野における AWS の知識を有している必要があります。 • AWS クラウドのコンセプト • AWS クラウドにおけるセキュリティとコンプライアンス • AWS の主要なサービス • AWS クラウドエコノミクスバージョン 1.2 CLF-C02 2 | ページ 受験対象者として範囲外の職務 受験対象者が実施できることが想定されていない職務は、以下のリストのとおりです。 このリストはすべてを網羅しているわけではありません。以下のタスクは、本試験の 範囲外です。",
            "type": "TEXT"
          },
          "location": {  // 参考にしたドキュメントの格納先
            "s3Location": {
              "uri": "s3://xxxxxxxxxx/documents/AWS-Certified-Cloud-Practitioner_Exam-Guide.pdf"
            },
            "type": "S3"
          },
          "metadata": {  // 参考にしたドキュメントの詳細
            "x-amz-bedrock-kb-source-uri": "s3://xxxxxxxxxx/documents/AWS-Certified-Cloud-Practitioner_Exam-Guide.pdf",
            "x-amz-bedrock-kb-document-page-number": 1,
            "x-amz-bedrock-kb-chunk-id": "xxxxxxxxxx",
            "x-amz-bedrock-kb-data-source-id": "XXXXXXXXXX"
          }
        }
      ]
    }
   ],
   "output": {
     "text": "AWSを初めて使う場合は、AWS Certified Cloud Practitioner (CLF-C02)資格の取得がおすすめです。この資格は、AWSのクラウドコンセプト、主要サービス、セキュリティ、コンプライアンスなどの基礎知識を習得できる入門レベルの資格です。この資格を取得することで、AWSの全体像を理解し、さらに上位の専門資格の取得につなげることができます。"
   },
   "sessionId": "********-****-****-****-************"
}

APIのレスポンスにこれらの参照元も含めると回答の根拠もあわせて確認することができます。

 

おわりに

Amazon Bedrock ナレッジベースを活用することで、これまでの生成AIでは難しかった「自社専用の知識を反映した正確な回答」を実現できます。
特に、社内マニュアルやFAQ、専門分野のドキュメントを組み合わせることで、業務効率化や顧客対応の品質向上が期待できます。
今回の構築方法はあくまで一例です。ユースケースやセキュリティ要件に合わせてカスタマイズすれば、より強力なAIシステムとして活用できるでしょう。

もしこの記事を通じて「もっとAWSやAIのことを体系的に学びたい」と感じた方は、Udemyの動画講座もぜひ活用してみてください。基礎から応用まで体系的に学べるため、今回紹介した構成をより深く理解し、自分のプロジェクトに最適な形で応用できるようになります。ITとソフトウェアの人気オンラインコース

AWSとAIの知識を組み合わせて、あなたのビジネスや開発環境に最適なソリューションを構築していきましょう!

タイトルとURLをコピーしました