Amazon Web Services ブログ

Amazon RDS for SQL Server をベクトルデータストアとして使用する生成 AI のユースケース

生成型人工知能 (AI) は転機を迎え、誰もが想像力を掻き立てられています。顧客向けサービスやソリューションに生成 AI 機能を統合することが重要になっています。現在の生成 AI 製品は、機械学習モデルや深層学習モデルからの段階的な進化の集大成です。深層学習から生成 AI への飛躍は、基盤モデルによって可能になりました。Amazon Bedrock は、幅広い基盤モデルに簡単にアクセスでき、開発体験全般を大幅に簡素化します。

しかしながら、その力にもかかわらず、汎用的なモデルだけでは、特定の関連性の高い AI ソリューションを生成することはできません。より良く、より有用な応答を生成するためには、追加のドメインコンテキストが必要となります。検索拡張生成 (RAG) は、コンテキストを提供する一般的な手法です。RAG の中核となるのがベクトル埋め込みで、これは非構造化データを基盤モデルを介して多次元の数値表現に変換するものです。次元内のベクトル値が近ければ近いほど、項目の類似性が高くなります。これが、今日みられるベクトル類似度検索のユースケースの基礎となっています。

Amazon Relational Database Service (RDS) for SQL Server は、世界中のあらゆる規模の組織で使用されている、フルマネージドの耐久性のあるデータベースサービスです。多くのお客様にとって、RAG ベースの生成 AI ユースケースに追加のドメインコンテキストを提供できる運用データストアは、すでに Amazon RDS for SQL Server 上にホストされています。その結果、以下の理由から、このデータベースサービスはベクトルデータストアとして最適な選択肢となります。

  • Amazon RDS for SQL Server は、高度に成熟したスケーラブルで信頼性と効率性の高いリレーショナルデータベースサービスで、ベクトルデータ管理を容易にします。
  • ベクトルは SQL Server データベース内のリレーショナルテーブルとしてモデル化できます。
  • SQL Server の列ストアインデックスには、ベクトル演算を加速する SIMDAVX-512 などの最適化機能が組み込まれています。
  • 今日の一般的なベクトル類似度計算であるコサイン類似度は、SQL Server データベース内のユーザー定義関数として実装できます。

この投稿では、類似性検索を含む生成 AI のユースケースを実装するためのベクトルデータストアとして Amazon RDS for SQL Server を使用する方法を示します。このシナリオでは、ソースとなる運用データストアとベクトルデータストアの両方が Amazon RDS for SQL Server 上に配置、ホストされます。埋め込みデータをドメイン固有のデータセットの近くに格納することで、外部データソースを必要とせずに追加のメタデータと組み合わせることができます。データは時間とともに変化するため、埋め込みデータをソースデータの近くに格納することで、埋め込みデータを最新の状態に保つことも簡単になります。

この投稿では、運用データとベクトルデータストアの両方に同じ RDS for SQL Server インスタンスを使用しました。私たちが示すワークフローの具体例は、RAG を使って基盤モデルを強化し、ドメインに関連する応答をユーザーに提供する典型的なチャットボットシナリオです。次の図は、この投稿で実装された生成 AI ワークフローの概要を示しています。

ソースデータのベクトル埋め込みはすでにベクトルデータストアに存在すると想定しています。私たちの主な焦点は、チャットに投稿された質問のベクトル埋め込みを生成し、それをベクトルデータストアと比較して、類似性検索を使って関連する応答を生成することにあります。この投稿のデータは Wikipedia の公開コンテンツから取得されており、id、URL、タイトル、テキストの 4 つのフィールドから構成されています。Amazon RDS for SQL Server でのベクトルデータベースにおけるサンプル Wikipedia データを使ったベクトル埋め込み生成プロセスは、次の投稿 (パート 2) で包括的に取り上げる予定です。

大規模言語モデルを利用してユーザーに対話応答を提供する UI の実装の詳細は、このシナリオから意図的に除外されています。このソリューションのポイントは、データベース側にあります。つまり、類似性検索要求に応じて、ベクトルデータストアから関連する結果セットを取得する方法に焦点が当てられています。

ソーリューションアーキテクチャ概要

上記の RAG ワークフローを実装するためのソリューションアーキテクチャには、Amazon RDS for SQL ServerAmazon SageMaker、および特に Amazon Titan G1 Text Embedding Model を使用する Amazon Bedrock が含まれています。ワークフローは次のとおりです:

  • ユーザーの質問 (プロンプト) は、SageMaker ノートブックから Amazon Bedrock の API を呼び出すことで、Amazon Titan モデルを使ってベクトル埋め込みに変換されます (次の図の手順 1 から 3) 。
  • この新しいベクトルデータは、ベクトルデータストアにホストされているコサイン類似度関数への入力として渡されます。この関数は、データベースに永続化されているベクトル埋め込みに対して類似性検索を実行し、結果セットを SageMaker に返します (次の図の手順 4 と 5) 。

次のセクションでは、Amazon RDS for SQL Server、Amazon Bedrock、Amazon SageMaker を使用して、このソリューションアーキテクチャを設定する方法について説明します。また、Amazon Bedrock Foundation Models とのやり取りの仕方や、ベクトルデータストアからコサイン距離計算を実行する方法についても詳しく説明します。

前提条件

この投稿では、AWS マネージメントコンソールの操作に精通していることを前提としています。この例では、AWS アカウントで以下のリソースとサービスが有効になっている必要があります:

Amazon RDS for SQL Server ベクトルデータストアの作成

Amazon RDS for SQL Server の基本的なビルディングブロックはデータベースインスタンスです。このインスタンス環境で、SQL Server データベースを実行します。インスタンスを作成するには、ユーザーガイドの「Microsoft SQL Server DB インスタンスの作成と接続」の章に記載されている手順を参照してください。

次のオプションが選択されていることを確認してください:

  • エンジンオプションは、Microsoft SQL Server を選択します。
  • エンジンバージョンは、SQL Server 2019 15.00.4345.5.v1 を選択します。
  • エディションは、SQL Server Standard Edition を選択します。
  • DBインスタンスクラスは、db.t3.xlarge を選択します。
  • ストレージタイプは、gp3 を選択します。
  • パブリックアクセスは、「はい」を選択します。これにより、ワークステーションから RDS for SQL Server インスタンスに直接接続できるようになります。
  • オプショングループは、SQLSERVER_BACKUP_RESTORE オプションを含むオプショングループを選択します。これは、SQL Server ネイティブバックアップをリストアできるようにするために必要です。詳しい手順については、ユーザーガイドの「ネイティブバックアップと復元を使用した SQL Server データベースのインポートとエクスポート」の章を参照してください。

Amazon RDS for SQL Server インスタンスを作成し、前提条件のリンクで提供されるベクトルデータベースバックアップをリストアします。リストアが完了すると、次のように [vector_db_wiki] という名前のデータベースを参照できるようになります。

[vector_db_wiki] データベースには以下の 3 つのテーブルが含まれています。

  • wikipedia_articles (私たちのユースケースの生のソースデータ)
  • wikipedia_articles_embedding_bedrock
  • wikipedia_articles_content_vector

そしてコサイン類似度のロジックを実装するユーザー定義関数が 1 つ含まれます。

  • Bedrock_SearchSimilarContentArticles

SageMaker ノートブックの構成

この投稿で提供されている Amazon SageMaker ノートブックのサンプルをアップロードする前に、Amazon SageMaker ノートブックインスタンスをセットアップする必要があります。AWS マネージドコンソールで SageMaker サービスに移動し、左側のペインの Applications and IDEs セクションにある Notebooks をクリックし、「ノートブックインスタンスの作成」ボタンを選択してください。
注意:2024年7月時点の UI に則った手順に記載を変更しています。

ノートブックインスタンスの名前として「rds-sql-genai-demo」と入力し、残りの値はすべてデフォルト値のままにしてください。

「ネットワーク」セクションを展開し、適切な「VPC」、「サブネット」、「セキュリティグループ」を選択します。先ほど作成した Amazon RDS for SQL Server データベースインスタンスが、選択した同じ VPC 上に配置されていることを確認します。下にスクロールして「ノートブックインスタンスの作成」ボタンをクリックします。ノートブックインスタンスが起動したら (ステータスが InService になったら)、アクションから「JupyterLab を開く」を選択します。「Terminal」アイコンを選択して JupyterLab IDE に移動します。

Linux ターミナルウィンドウで次のコードを実行して、SQL Server (Linux) 用の Microsoft Open Database Connectivity (ODBC) ドライバをインストールしてください。

# RHEL 7 and Oracle Linux 7
curl https://packages.microsoft.com/config/rhel/7/prod.repo | sudo tee /etc/yum.repos.d/mssql-release.repo
sudo yum remove unixODBC-utf16 unixODBC-utf16-devel #to avoid conflicts
sudo ACCEPT_EULA=Y yum install -y msodbcsql18
# Optional: for bcp and sqlcmd
sudo ACCEPT_EULA=Y yum install -y mssql-tools18
echo 'export PATH="$PATH:/opt/mssql-tools18/bin"' >> ~/.bashrc
source ~/.bashrc
# For unixODBC development headers
sudo yum install -y unixODBC-devel
Bash

次のコードを実行して、必要な追加のライブラリをインストールしてください。

pip install --no-build-isolation --force-reinstall \
"boto3>=1.28.57" \
"awscli>=1.29.57" \
"botocore>=1.31.57"
Bash

インストール処理の最後に表示される pip 依存関係エラーは無視しても問題ありません。

次のコードを実行して「utils」ライブラリをインストールしてください。インストールが完了したら、bedrock.py ファイルをSageMaker ノートブックインスタンスのローカルドライブの /home/ec2-user/anaconda3/envs/python3/lib/python3.10/site-packages/ ディレクトリにコピーしてください。

pip install utils
Bash

次に、前提条件のリンクで提供されているサンプルの SageMaker ノートブックをアップロードします。まだノートブックファイルをダウンロードしていない場合は、処理を進める前にダウンロードしてください。ダウンロードフォルダに vector-similarity-search-bedrock-sql-server.ipynb という名前のファイルが入っているはずです。

SageMaker ノートブックインスタンスの右側にある「Open JupyterLab」リンクを選択してください。次に、Jupyter Lab ウィンドウの左側のペインにある「フォルダー」アイコンを選択します。「ファイルをアップロード」オプションを選択し、「ダウンロード」フォルダーに移動して、「vector-similarity-search-bedrock-sql-server.ipynb」ファイルを選択します。

ファイルがアップロードされると、下の画像のようにサンプルの SageMaker ノートブックを参照できるようになります。

類似検索の実行

このセクションでは、SageMaker ノートブックを使用して、いくつかの類似性検索のユースケースを実行します。このドキュメントに含まれている Bedrock API を実行する前に、すべての API 呼び出しのセキュリティコンテキストとして使用する IAM ロールを設定する必要があります。必要な IAM ロールを設定するには、ドキュメントに記載された手順に従ってください。

最初のステップは、コードが参照する必要なライブラリのセットをインポートすることです。JupyterLab ツールバーの実行ボタンを使用して、次のコードスニペットを選択して実行するか、セルを強調表示して Shift+Enter を押してください。

次に、以下のコードスニペットを実行して Amazon Bedrock クライアントを設定します。コードを実行する前に、アカウント番号とロール名を適切な値に置き換えてください。実行が完了すると、SageMaker ノートブックに “boto3 Bedrock client successfully created!” というメッセージが表示されます。

最初の類似性検索 (“What are the best Sci-Fi movies in history?”) のためのユーザーのプロンプトをベクトル化するために、次のコードスニペットを実行して最初の BedrockAPI コールを行います。私たちが使用するテキスト埋め込みモデルは、Amazon Titan Embeddings G1 – Text v1.2 (コードスニペットの 1 行目) であることに注意してください。

入力ベクトルが作成されたら、Amazon RDS for SQL Server ベースのベクトルデータストアとの接続を確立し、コサイン距離アルゴリズムを利用した類似性 (意味的) 検索リクエストを発行する準備ができます。以下のコードを実行する前に、ODBC 接続文字列に適切なパラメータがすべて指定されていることを確認してください。

数秒後、次のような結果セットが得られるはずです。各 Wikipedia の記事の横に表示される値は、プロンプトベクトルと wikipedia_articles_content_vector テーブル (コンテンツベクトルテーブル) に現在格納されている各ソース Wikipedia の記事のベクトル間のコサイン距離計算の結果を表しています。

「Alien」、「2001: A Space Odysse」、「Blade Runner」などのウィキペディアの記事が、「Sci-Fi」や「Movie」という単語が含まれていないにもかかわらず上位に表示されていることに注目してください。これは従来のテキスト検索では実現できません。また、「AFI が選ぶ 100 年に一度の映画 100 本」の記事が上位に表示されていることにも注目してください。この記事はアメリカ映画協会が選んだ上位 100 本の映画について書かれているので、検索結果に含まれることは理にかなっています。最後に、「What are the most iconic warriors in history?」というプロンプトで類似性 (意味) 検索を行う例を示します。

数秒後に、次の結果セットが得られるはずです。

結果セットには、「Zhang Fei」、「Leonidas I」、「Sitting Bull」などのウィキペディアの記事が含まれていることに注目してください。これらはすべて、古代中国、スパルタ、そしてアメリカ入植者と激しく戦った有名なシューインディアンの酋長など、異なる時代と場所の伝説的な戦士たちです。もう一つ重要なことは、結果セットの項目が降順でコサイン距離で並べ替えられていることです。コサイン距離値が 0.457988230404067 と非常に高い位置にある「Leonidas I」は、伝説的なスパルタの戦士についてのウィキペディアの記事です。

これらのリソースを使って追加のテスト、または開発に使用する予定がある場合、継続的なコストを最小限に抑えるための簡単な方法は RDS for SQL Server と SageMaker ノートブックインスタンスを停止することです。予定がない場合は、クリーンアップセクションの説明に従ってこれらのリソースを削除してください。

クリーンアップ

このデモでは以下に示すいくつかの AWS リソースを作成しました:

  • Amazon RDS for SQL Server データベースインスタンス
  • Amazon SageMaker ノートブックインスタンス

今後これらのリソースが必要ない場合は、提供された URL の手順に従って、Amazon RDS for SQL ServerSageMaker ノートブックインスタンスを削除し、不要な課金を避けてください。

まとめ

検索拡張生成 (RAG) は、ドメイン固有の情報と基盤モデルを組み合わせることで、生成 AI アプリケーションのレスポンスを強化する強力な手法です。この投稿では、Amazon RDS for SQL Server、Amazon SageMaker、および Amazon Bedrock を使用した 2 つの類似性検索のユースケースについて説明しました。また、Amazon RDS for SQL Server がベクトルデータストアとして機能する方法も示しました。お客様には、本番環境にソリューションを展開する前に、徹底的にパフォーマンスとスケールのテストを実施することを強くお勧めします。これにより、類似性検索の応答時間が必要な期待値を満たすことが保証されます。生成 AI アプリケーションにおけるベクトルデータストアの役割の詳細については、「生成 AI アプリケーションでベクトルデータストアが果たす役割とは」をご覧ください。

翻訳はソリューションアーキテクトの Yoshinori Sawada が担当しました。原文はこちらです。


著者について

Joshua Jin は、Amazon Web Services (AWS) のデータベースベンチマークエンジニアであり、データベースのパフォーマンス評価に精通しています。

Camilo Leon は、カリフォルニア州サンフランシスコを拠点とする AWS のプリンシパルソリューションアーキテクトで、データベースを専門としています。彼は、AWS のお客様に対してアーキテクチャのガイダンスと技術サポートを提供し、AWS のリレーショナルデータベース業務と業務アプリケーションの設計、展開、管理を行っています。休日には、マウンテンバイキング、写真撮影、映画鑑賞を楽しんでいます。。

Sudarshan Roy は、World Wide AWS Database Services Organization (WWSO) のシニアデータベーススペシャリストクラウドソリューションアーキテクトです。彼は大規模なデータベース移行とモダナイゼーションのエンゲージメントを企業顧客向けにリードし、データベースワークロードを AWS クラウドに移行する際の複雑な移行課題の解決に取り組んでいます。

Barry Ooi は、AWS のシニアデータベーススペシャリストソリューションアーキテクトです。彼の専門分野は、お客様の AWS への移行の一環として、クラウドネイティブサービスを使用したデータプラットフォームの設計、構築、実装です。彼の関心分野はデータ分析とデータの可視化です。