Amazon Bedrock

Amazon Bedrock + Kendraを用いたRAGアーキテクチャの特徴を説明

昨今、生成AIが世間を席捲しており、AWSのサービスでも生成AIを利用したサービスがいくつも立ち上がっています。中でも最近注目されているのが、”RAG”と呼ばれるアーキテクチャです。

この記事では、AWSのサービスで構築されたRAGアーキテクチャの特徴について説明します。

この記事は、2024年2月に執筆されたものです。AWSサービスの最新情報は、公式サイトをご確認ください。

Amazon Bedrockとは

APIで様々な基盤モデル(※)を利用して生成AIアプリケーションを構築することができる、AWSのサーバレスサービスです。データセキュリティやコンプライアンスを実現しており、安心して利用できるのも特徴です。

Amazon Bedrockでは、以下のような基盤モデルを手軽に利用することができます。

  • JURASSIC-2 (AI21labs社)
  • CLAUDE 2 (ANTHROPIC社)
  • COMMAND (co:here社)
  • LLAMA 2 (Meta社)
  • SDXL 1.0 (stability.ai社)
  • AMAZON TITAN (Amazon社)

※サービスの詳細を確認したい方は、こちらの公式サイトをご確認ください。https://aws.amazon.com/jp/bedrock/

RAGとは

なぜRAGが必要か

RAGとは、「Retrieval-Augmented Generation」の略で、基盤モデルとは別にデータソース(ナレッジソース)を構築することで、基盤モデルの学習内容を補完する生成AIの仕組みのことを言います。

では、なぜこのような仕組みが必要となるでしょうか。それは、基盤モデル単体で利用すること困るシーンがあるからです。

基盤モデルが持っていない情報を取得する場合

例えば、社内等に閉じた情報を検索しようとしても、一般的な基盤モデルはそれらの情報を学習していません。そのような、限られた人のみが利用する生成AIアプリケーションを構築したい場合、RAGアーキテクチャは有効的です。

基盤モデルのハルシネーションを防ぎたい場合

基盤モデルの回答は100%正解とは言い切れません。誤った回答がある場合もあり、それをハルシネーションと呼びます。RAGアーキテクチャを取ることで、質の高いデータソースから適切な回答をユーザにすることができます。

RAGの肝となるのがナレッジソース

RAGアーキテクチャを構成するには、基盤モデルとは別のナレッジソースを用意する必要があります。RAGを用いた生成AIアプリケーションでは、ユーザからのリクエストに対してナレッジソースの情報を参照し、ナレッジソースに存在する情報であればそれをユーザに回答します。

RAGアーキテクチャにおいて、このナレッジソースを作成できるAWSのサービスが、後述するAmazon Kendraです。

RAG実装時の検討事項

RAGアーキテクチャで正しくユーザに回答を返却するために検討すべきこととして、大きく2点紹介します。

1つ目は、RAGに限った話ではありませんが、生成AIアプリケーションに投げるプロンプトの丁寧さです。「プロンプトエンジニアリング」という用語があるように、生成AIの世界ではプロンプトをいかにAIに分かりやすく記載するかが重要になります。例えば、生成AIに同じ質問をするのでも、「あなたはユーザからサービスの問い合わせを受けたヘルプデスクです。」等、前提を与えてプロンプトを記載することで、より洗練された正確な回答を得ることができます。

2つ目は、ナレッジソースのデータの質です。当たり前ですが、ナレッジソースのデータに誤りがあれば、RAGアーキテクチャの生成AIアプリケーションも誤った回答を出力します。

AWSでのRAGアーキテクチャ

AWSでは、基盤モデルのサーバレスサービスであるAmazon Bedrockと、ナレッジソースを作成できるAmazon Kendraを組み合わせることでRAGアーキテクチャを構築することができます。

Amazon Bedrock + Amazon Kendraの他に、AWSのサービスを利用したRAGアーキテクチャには以下のようなものがあります。

  • Amazon Bedrock + Vector DB(Vector DBには、Amazon OpenSearch Service、Amazon Document DB、Amazon MemoryDB for Redisを利用可)
  • Agents for Amazon Bedrock
  • Amazon Q for Business

Amazon Kendraとは

何度も前述しておりますが、Amazon KendraとはRAGにおけるナレッジソースを作成できるサービスで、AWSマネージドな検索エンジンのサービスです。

インデックスを作成してデータソースを取り込むことで、ユーザからの自然言語クエリに対応する検索を行うことできます。

※サービスの詳細を確認したい方は、こちらの公式サイトをご確認ください。https://aws.amazon.com/jp/kendra/

対応ドキュメント

インデックスには、構造化データ・非構造化データのどちらも取り込み可能で検索をかけることができます。

非構造化データとはExcelやPDFなどのデータを指し、構造化データとはCSVやJSON等データ構造が定まったデータを指します。

対応言語

データソースをインデックスに登録する際に言語を選択しますが、34言語という多言語に対応しています。

もちろん、日本語にも対応しています。

メタデータの付与

データソースのドキュメントには、メタデータを付与することができます。メタデータとは、そのドキュメントの作成者や作成日、タイトルなどを表す情報です。

メタデータを付与することで、Kendraを用いた検索の効率を向上させることができます。

ドキュメントへのアクセス制御

データソースとなるドキュメントには、クエリ要求したユーザIDやJWT(※)といったIDトークンごとに、アクセス制御を行うことができます。

(※)JSON Web Token。JSONベースの認証情報で、中身は暗号化され改ざんを検知できる仕組みになっている。

セキュリティ対策

Kendraへは、VPCのPrivateLink経由の閉域網でアクセスできます。Kendraへの接続時にインターネットに出る必要が無い構成にできるので、安全性を確立できます。

Bedrock + Kendraでできること

では、BedrockとKendraを組み合わせると何ができるのでしょうか。その一例が、RAGチャットです。

基盤モデルを利用したBedrockだけでも、チャットアプリは構築することができます。ChatGPTを利用したことがある方も多いのではないでしょうか。ChatGPTと同じイメージで、Bedrockを利用したチャットアプリは構築可能です。

しかし、前述にもありますが、例えば社内文書にフォーカスした生成AIアプリケーションを作成したい場合はどうでしょうか。既存の基盤モデルにリクエストを投げても、得たい回答は返ってこないでしょう。

一般には存在しない社内文書などをKendraのインデックスに取り込み、Bedrockと組み合わせてRAGチャットを構築することができます。このとき、Kendraだけでなく基盤モデルであるBedrockも利用しているため、ナレッジソースのデータを要約してシンプルに出力してくれたり、チャット形式で過去のやり取り記憶しながら出力してくれたりするわけです。

まとめ

今回は、AWSのサービスであるBedrockとKendraを組み合わせたRAGアーキテクチャの特徴について説明してきました。

とはいえ、すぐにRAGアーキテクチャを構築するのもハードルが高いです。そのため、本当にRAGを構築する必要があるか、必要があればまずはエンタープライズサーチから始める、といったようにスモールスタートすることをおすすめします。