ノーコードで試すAzure OpenAI ServiceによるRAG構築(On Your Data)とチャット＆レスポンス

Azure OpenAI Serviceを利用したRAG構成と、AI Foundryによるチャット&レスポンスをノーコードで構築します。


# 構成
以下の３サービスを利用します。

サービス | 用途
--- | ---
Azure OpenAI Service | OpenAIの生成AIモデルを利用するためのサービス
Azure AI Search | RAG用の検索インデックスを作成するためのサービス
Storage Account(Blob) | RAG用の検索データを配置するためのサービス

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/9419dc98-66b2-484d-8cfd-0cada32bfdc9.png)


:::note info
リージョンはAzure AI系サービスが最も充実している米国東部2リージョンを利用します。
:::



# RAGテスト内容
以下の内容を事前に準備し、Blobに配置してRAG用データとして利用します。

**・テキストファイル**（任天堂のゲームハードウェアに関するいくつかのwikipediaページ）
**・pdfファイル**（IPAの各試験情報シラバス）



# 流れ
1.リソースグループとAOAIサービスの作成
2.ストレージアカウントとデータ配置
3.AOAIモデル選択とチャット応答確認
4.Azure AI Searchとインデックスの作成
5.RAG(On Your Data)の実行
6.追加のインデックス作成
7.リソースの削除


# 1.リソースグループとAOAIサービスの作成

以下の範囲を作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/f6c9f8be-0491-4b8f-a3df-6fd6021d83d5.png)

<br>

Azureポータルから`Azure Open AI Service`を選択し、`作成`を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/1b3db1ac-2f91-4318-aa55-b141a4e247bc.png)

<br>


以下を入力して`次へ`を押下します。
・リソースグループ：`(新規作成するリソースグループ名)`
・リージョン：`East US 2`
・名前：`(Azure OpenAI Serviceの新規リソース名)`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/64ced375-50d4-4622-9b08-53f6d24ce1ce.png)

:::note info
今回はこちらの画面で新規リソースグループも一括で作成します。
:::

<br>

ネットワーク設定は変更せず、`次へ`を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/81596104-f99a-49b1-9934-b7364c152cc5.png)

<br>

タグ設定は任意入力とし、`次へ`を押下します。
（今回はデフォルトのまま）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/af2d159d-cf74-4521-9ffe-545b1ba1f682.png)

<br>

`作成`を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/09fab7ec-942a-4a25-8422-8583548960d1.png)

<br>

作成したリソースが存在していることが確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/b19475c6-1f9c-4c42-85b1-5863e6c60704.png)




# 2.ストレージアカウントとデータ配置
以下の範囲を作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/9d069bbf-a241-47da-92fb-3c2ecf6c5f39.png)

<br>

## 2.1 ストレージアカウントの作成

Azureポータルから`ストレージアカウント`を選択し、`作成`を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/e99f1c2f-70d7-4875-809a-ab02a9acc0d1.png)

<br>

以下を入力して`次へ`を押下します。
・リソースグループ：`(新規作成したリソースグループ名)`
・ストレージアカウント名：`(新規作成するリソース名)`
・リージョン：`East US 2`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/c30f71d3-8f34-4d7f-8581-e7250713e705.png)

<br>

詳細設定は任意入力とし、`次へ`を押下します。
（今回はデフォルトのまま）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/531dfd79-760c-4af0-8738-9d5efa74715f.png)


<br>

ネットワーク設定は変更せず、`次へ`を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/456ef13d-38e8-4756-a7f6-5bb0242b5241.png)

<br>

データ保護設定は変更せず、`次へ`を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/c05a78f8-e086-410d-8ffa-cb964adeb88f.png)


<br>

暗号化設定は変更せず、`次へ`を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/5d36f34f-24c4-4044-9e4d-be9084bc19d8.png)

<br>

タグ設定は任意入力とし、`次へ`を押下します。
（今回はデフォルトのまま）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/436dcf90-69bc-4059-8e02-cc982476b082.png)


<br>

`作成`を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/ce00c781-2bcc-4222-b770-0b070fc39655.png)

<br>

作成したリソースが存在していることが確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/d90f4c5f-d901-48d9-9dea-1497abab04b0.png)


## 2.2 BLOBの作成とデータの配置

作成した`ストレージアカウント`を選択し、`ストレージブラウザー`を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/c7b9acca-52ab-49bf-a133-2b630a4101a7.png)

<br>

`BLOBコンテナー`を選択し、`コンテナーの追加`を押下、新しいコンテナー名を`名前`に入力して`作成`を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/e6abda03-0331-4068-9da8-8d9613692b0a.png)

<br>

作成したBLOBが存在することを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/bd97b107-d912-4bb5-8cd4-1534e49a73fc.png)


<br>

作成したBLOBを選択し、`アップロード`を押下してRAG用ファイル群をアップロードします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/49d55983-37ad-493d-8d0e-1ce803ff66ac.png)


# 3.AOAIモデル選択とチャット応答確認
以下の範囲を作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/8d064e53-2c5e-46d4-9ff6-479d30ff95ff.png)

<br>

Azureポータルから`Azure Open AI Service`を選択し、`作成したリソース`を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/ec997592-6d43-462e-a509-bf5afb362e69.png)

<br>

`Go to Azure AI Foundry portal`を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/84c0e374-3513-45dc-8fae-0acaa47658f5.png)


<br>

Azure AI Foundryポータル画面にて、`チャット`プレイグラウンド内の`デプロイの作成`を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/99fc6ee9-bc80-45ff-89cb-9c3f909156ea.png)

<br>

今回は`gpt-4o`を選択し、`確認`を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/20fcdf53-899d-42b6-a5ff-d87af7d7a27d.png)

<br>

デプロイ画面にて、`デプロイ`を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/1d19fb44-48d4-449b-8b2c-9e063ad98f03.png)

:::note info
デプロイの種類は以下から確認可能です。
https://learn.microsoft.com/ja-jp/azure/ai-services/openai/how-to/deployment-types

デプロイの種類ごとのサポートモデルは以下から確認可能です。
https://learn.microsoft.com/ja-jp/azure/ai-services/openai/concepts/models?tabs=global-standard%2Cstandard-chat-completions#model-summary-table-and-region-availability
:::

<br>

デプロイしたモデル名が登録されていることを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/3a611e70-7ce7-47a5-9555-ebd815e0379d.png)


<br>

テキストチャットとしてユーザークエリを入力し、応答があることを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/d16e0a53-8adf-4a43-a83f-135065b54978.png)


# 4.Azure AI Searchとインデックスの作成

以下の範囲を作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/74c13e52-3399-4ae4-a733-587ad5cba538.png)


<br>

チャットプレイグラウンド内の`データソースの追加`を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/abd5419a-d711-4953-a258-88cee91b8a80.png)

<br>

以下を入力して`新しいAzure AI Searchリソースを作成する`を押下します。
・データソースの選択：`Azure Blob Storage`
・サブスクリプション：`(Blobの所属するサブスクリプション)`
・Azure Blob ストレージリソースの選択：`(作成した新規ストレージアカウント)`
・ストレージコンテナーを選択してください：`(作成した新規BLOB)`
・インデクサーのスケジュール：`Once`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/d5f482dd-0208-4e94-a52f-9de472db6d13.png)


<br>

Azure AI Searchのリソース作成画面にジャンプしますので、以下を入力して`次へ`を押下します。
・リソースグループ：`(新規作成したリソースグループ名)`
・サービス名：`(新規作成するリソース名)`
・場所：`East US 2`
・価格レベル：`基本`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/d662b73f-43d0-4ba7-966e-c6ed9a8be92a.png)

:::note warn
価格レベルについて、`Free`を選択すると以降の処理で先に進めないため、`Basic/基本`以上のプランを選択してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/5dc83c03-43fb-4210-afd6-8c39eb7cdb77.png)
:::


<br>

スケーリング設定画面では以下を入力して`次へ`を押下します。
・レプリカ：`1`
・パーティション：`1`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/2fd79ffd-5c13-42f3-a422-b50b5955313f.png)

:::note warn
レプリカおよびパーティション数を増加すると料金も増加します。
:::


<br>

ネットワーク設定は変更せず、`次へ`を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/ecc39d4a-57eb-465d-85ec-bdc6701242e9.png)

<br>

タグ設定は任意入力とし、`次へ`を押下します。
（今回はデフォルトのまま）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/55fd4971-f64e-47c1-8584-2edf14598b4c.png)

<br>

`作成`を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/f8e80b80-aeea-4214-92b6-a41c891939b2.png)

<br>

デプロイが完了したら再びAzure AI Foundryポータルに戻り、以下を設定して`次へ`を押下します。
・Azure AI 検索リソースを選択：`(新規作成したリソース名)`
・インデックスを名を入力してください：`(新規作成するインデックス名)`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/b549bbcd-8a5f-442c-93d4-884e163bb6e8.png)

<br>

データ管理画面はデフォルトのまま`次へ`を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/a13e3e69-07d2-49f9-8eb4-92a72b3c19b6.png)

<br>

データ接続画面は`APIキー`に認証の種類を変更し、`次へ`を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/4fa7f6f1-b0e9-4951-bad2-75df9511bca2.png)

:::note warn
`システム割り当てマネージドID`を使用する場合、Azure OpenAI Service/AI Search Service側で事前設定を実施しておかない場合はエラーとなります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/2cd0b2e5-ab21-4374-a14b-e0686bd00ee5.png)
:::

<br>

`保存して閉じる`を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/b0c397de-cb58-4785-9c12-8ca9d367028f.png)

<br>

インデックス処理が進行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/d30116d1-0c40-42ab-b8a8-6edc40deda69.png)

<br>

インデックス処理が完了しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/ac03d668-f527-4c70-9de0-7754b663dec5.png)

# 5.RAG(On Your Data)の実行
いくつか質問をしてみます。

>Q.ニンテンドースイッチの発売日を教えてください

>A.ニンテンドースイッチの発売日は、2017年3月3日です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/2c649bfc-6236-4c92-8c89-b902844706dd.png)

<br>
<br>

>Q.最も古いハードウェア製品をあげてください

>A.提供された情報によると、最も古いハードウェア製品は「ファミリーコンピュータ（ファミコン）」です。この製品は、家庭用ゲーム機業界内で後発商品として登場し、1983年に日本で発売されました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/45e690ec-f37a-4660-be53-440f7a4a23a7.png)


<br>
<br>

>Q.スーパーファミコンで最も売れたソフトをあげてください

>A.提供されたドキュメントにはスーパーファミコンで最も売れたソフトに関する情報は含まれていません。そのため、この質問に基づく回答はできません。追加情報が必要な場合は、別の質問をしてください！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/fdc215b8-652f-4d38-b475-1ab75bcc7714.png)


# 6.追加のインデックス作成
別のデータソースでRAGを実行したい場合、既存のAzure AI Search Serviceを利用可能になります。
BLOBとインデックスは別のものを指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/e9364090-ceac-4554-a81c-e4a6d11b4381.png)

<br>

データの追加・インデックスの作成完了後、既存Azure AI Search Serviceのなかに追加のIndexが作成されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/fee7156b-d4e5-4970-8938-b0aac48dc5b0.png)

<br>

いくつか質問をしてみます。

<br>

>Q.もっとも難易度の高い試験をあげてください

>A.最も難易度の高い試験として、「高度試験」が挙げられています 。

>Q.高度試験をすべてあげてください

>A.以下が高度試験の一覧です。
ITストラテジスト試験
システムアーキテクト試験
プロジェクトマネージャ試験
ネットワークスペシャリスト試験
データベーススペシャリスト試験
エンベデッドシステムスペシャリスト試験
ITサービスマネージャ試験
システム監査技術者試験
情報処理安全確保支援士試験

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/7c449015-46d7-4004-ba9b-99283ee2677a.png)

<br>
<br>

>Q.秋季試験の対象となる試験区分を全てあげてください

>A.秋季試験の対象となる試験区分は以下の通りです：
応用情報技術者試験
プロジェクトマネージャ試験
データベーススペシャリスト試験
これらは秋季に実施される試験区分として記載されています。

:::note alert
上記は虚偽回答（ハルシネーション）です。
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/f7c44704-73b5-4901-8e73-27b9f5f58dea.png)



# 7.リソースの削除
不要になったリソースを削除します。
特に、Azure AI Search Serviceについては比較的高額な時間課金サービスになるので不要となり次第、削除を推奨します。


# 参考
https://learn.microsoft.com/ja-jp/azure/ai-services/openai/overview

https://learn.microsoft.com/ja-jp/azure/ai-services/openai/concepts/use-your-data?tabs=blob-storage%2Ccopilot

https://learn.microsoft.com/ja-jp/azure/search/search-what-is-azure-search

https://learn.microsoft.com/ja-jp/azure/storage/blobs/storage-blobs-introduction