はじめに
こんにちは、NRIの藤田です。
2024年度に入社し、AWSを活用してQUMOAのお客様環境の情報を管理するための開発業務と、Azureで基盤構築されているお客様のシステムの維持・保守を担当しはじめてから約半年になります。
昨今、生成AIサービスが多く展開されている中で、自身や会社が持っている顧客データを生成AIの情報源として利用することができれば、より業務効率化を図れると思いませんか?今回のブログでは、Azureや生成AI初学者でも手軽にできる、簡易的なRAG実装についてご紹介したいと思います。
RAGを実装してみたきっかけ
私のこれまでの技術経験は、業務でAzureサービスに触れはじめて3か月、生成AI経験はほぼありません。私が配属している部署では「QUMOA 生成AI活用サポート」や「Quick RAGオプション」といった生成AIとクラウド技術を活用したサービスを提供しており、配属先の提供サービスの仕組みを知りたいと思ったのがRAG実装に挑戦したきっかけです。
構築したもの
今回は、下記のMicrosoft公式が出しているトレーニングコースを参考に実装しました。
Azure OpenAI Service を使用して検索拡張生成 (RAG) を実装する - Training | Microsoft Learn
作成したリソースは以下3つです。
- Storage Account:回答となるデータソースを格納する
- Azure AI Search:データソース内を検索する
- Azure Open AI:回答生成する
構築手順は以下の通りで、とてもシンプルに実装することができました。
- リソースグループ(RG)の作成と同時にRG内にそれぞれのリソースを作成
- Storage Accountにデータをアップロード
- Azure OpenAIとAzure AI Searchで利用するモデルを選択
- OpenAI上でアップロードしたデータソースを選択
- 会話を開始
実際の構築手順
1:RGの作成と同時にRG内にそれぞれのリソースを作成
まず、Azure Portalから構成図通りにリソースグループと、その中にStorage Account、Azure AI Search、Azure Open AIを作成します。
2:Storage Accountにデータをアップロード
次に、作成したStorage Accountに回答のもととなるデータをアップロードします。今回はAzureの公式サイトからダウンロードできる、架空の旅行会社の紹介と旅行先のPDFファイルを6枚アップロードしました。
3:Azure OpenAIとAzure AI Searchで利用するモデルを選択
次に、OpenAIの埋め込みモデルの中から今回使うAIモデルをデプロイしていきます。今回は、テキストのベクター化をするモデルtext-embeddingada-002とgpt-35-turbo-16kをデプロイしました。こちらの設定は公式のコースの内容をもとに設定しましたが、必要に応じてトークン数などを変えてみるのも良いと思います。
4:OpenAI上でアップロードしたデータソースを関連づける
いよいよ、アップロードしたデータとAIサービスを紐づけていきます。
(1)まず、リソースグループからAzure AI Searchを選択し、「データのインポートとベクター化 *1」を行います。
*1:テキストのベクター化:非数値の入力データを数値の配列であるベクトルに変換するプロセスです。この処理により、異なるテキスト同士の類似性を数値的に判断して調べることができ、より正確な回答生成が可能となります。
(2)次に、OpenAI上でアップロードしたデータソースを選択します。ここで、今一度自分が作成したStorage AccountリソースとAzure AI Searchリソースが選択できているか確認してください。
以上で構成完了です。
構築したRAGが機能するか試してみる
今回はMicrosoft社が提供する生成AIを中心としたAI開発プラットフォームである、Azure AI Foundryのチャットプレイグラウンドで、アップロードしたデータに沿った回答が得られるか検証を行いました。
ドバイについて聞いてみたところ、アップロードしたパンフレットからドバイと周辺のおすすめのホテルについて回答を得られることが確認できました。
これで、RAG機能が備わった回答生成チャットボットが構成できました。
補足①アップロードする資料のセキュリティ対策
作成したRAGを実際に業務展開させていく場合、アップロードしたデータの漏洩や外部からのアクセスを避けるためにセキュリティ対策が必要となります。
アップロードしたデータを漏洩させないためにすぐにできる対策として、下記2点があげられます。
- Storage Account作成時の設定
- 作成したAzure OpenAIサービスのキーを共有しない
まず、Storage Account作成時に行う設定では、作成時にそのアカウントに影響を与えるセキュリティ設定、パブリックアクセスを無効にする設定、アカウントを暗号化する設定を行うことができます。ストレージのセキュリティ対策についてのベストプラクティスはMicrosoft公式ドキュメントもあるので、ぜひ参照してみてください。
BLOB ストレージのセキュリティに関する推奨事項 - Azure Storage | Microsoft Learn
また、Azure OpenAIリソースを作成した際に作成されるエンドポイントとキーは、自身が作成したAzure OpenAIのAPIキーとなるため、安易に共有しないよう管理する必要があります。
補足②Webアプリへの実装に向けて
今回はAzureサービス内での構築にとどまりましたが、業務展開としてイメージしやすいのはやはりWebアプリへの実装だと思います。
上記で作成したRAGサービスをWebアプリにしたい場合、チャットプレイグラウンドから[Webアプリにデプロイ]というボタンを選択すると、簡単にチャットUI用Webアプリを作成できます。ぜひ試してみてください。
おわりに
今回は、Azureや生成AI初学者でも手軽にできる、簡易的なRAG実装についてご紹介しました。たった4つのステップで実装可能なので、Azureや生成AI学習の最初の一歩として是非ご活用いただけますと幸いです。
お問い合わせ
atlax では、ソリューション・サービス全般に関するご相談やお問い合わせを承っております。
関連リンク・トピックス
・atlax / クラウドの取り組み / Microsoft Azure
・2025/02/20 生成AIでもっと働きやすく!~Azureで生成AIアプリ開発~
-
採用情報
NRIの IT基盤サービスでは、キャリア採用を実施しています。様々な職種で募集しておりますので、ご興味を持たれた方は キャリア採用ページも ぜひご覧ください。
※ 記載された会社名 および ロゴ、製品名などは、該当する各社の登録商標または商標です。
※ アマゾン ウェブ サービス、Amazon Web Services、AWS および ロゴは、米国その他の諸国における、Amazon.com, Inc.またはその関連会社の商標です。
※ Microsoft、Azure は、米国 Microsoft Corporation の米国およびその他の国における登録商標または商標です。
※ Google Cloud、Looker、BigQuery および Chromebook は、Google LLC の商標です。
※ Oracle、Java、MySQL および NetSuite は、Oracle Corporation、その子会社および関連会社の米国およびその他の国における登録商標です。NetSuite は、クラウド・コンピューティングの新時代を切り開いたクラウド・カンパニーです。