Azure OpenAI Service On Your Data を試してみる(1)

NTTデータ先端技術株式会社の原田です。

[Microsoft Ignite 2023 Opening keynote の感想](https://qiita.com/koutaro_harada/items/3e76d48e11b1cb81bdb5) を書き終わりセッション見ていこうと言うところで、対象の絞り込みに Azure OpenAI Service を使ってみようと思いつきました。
やりたいことは On Your Data でセッション資料を食べさせたモデルを構築してチャットしてみると言うものです。

https://learn.microsoft.com/ja-jp/azure/ai-services/openai/concepts/use-your-data#ingesting-your-data

https://techcommunity.microsoft.com/t5/educator-developer-blog/bring-your-own-data-to-azure-openai-step-by-step-guide/ba-p/3905212

を参考に進めていきます。
掲載しているスクリプトやコマンドの実行については自己責任でお願いします。

## セッション資料のダウンロード
ともあれまずはセッション資料のダウンロードから、[こちら](https://github.com/michelderooij/Get-EventSession)の Powershell スクリプトを使用します。
スクリプトを適当なフォルダに配置して実行コマンドは下記の書式です。

```
.\Get-EventSession.ps1 -Event Ignite2023 -NoVideo -DownloadFolder "資料ダウンロード先フォルダ"
```

Ignite 2023 では 70 ファイルで 6.08GB の資料がダウンロードされました、すべて PowerPoint でしたので [データ形式とファイルの種類](https://learn.microsoft.com/ja-jp/azure/ai-services/openai/concepts/use-your-data#data-formats-and-file-types) は満たしています。
ここから [OpenAI Service のクォータと制限](https://learn.microsoft.com/ja-jp/azure/ai-services/openai/quotas-limits) に記載の、

>リソースあたりの最大ファイル数 : 30
リソースあたりのすべてのファイルの合計サイズ : 1 GB
アップロードごとのすべてのファイルの最大サイズ : 16 MB

に沿って適当にフィルターして使用します。(実はこの制限を見た時点で期待値ダウン)

## OpenAI Service 
既存の eastus (米国東部) の OpenAI Service では GPT-4 モデルがデプロイできませんでしたので、新たに eastus2 (米国東部 2) でリソースを作成しています。
1. GPT-4 モデルのデプロイ
GPT-4 の対応リージョンは [こちら](https://learn.microsoft.com/ja-jp/azure/ai-services/openai/concepts/models#gpt-4-and-gpt-4-turbo-preview-model-availability) をご参照ください。
![720be7799f90ea002986_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620633/e5bc525b-25ba-9362-ead3-de8773f0ee55.png)<br><br>

2. マネージド ID の設定
システム割り当てマネージド ID を設定します。
![720be7799f90ea002986_09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620633/02385fe5-e468-045a-1401-a3d8b508bcef.png)

## AI Search (Cognitive Search) 
1. AI Search のデプロイ
Cognitive Search から AI Search に名前変わってました。  
![720be7799f90ea002986_03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620633/39205b94-58cb-6148-ab81-298d3da497ce.png)
![720be7799f90ea002986_04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620633/9cb2a2e7-f77d-4998-cdb6-9896f9cbf406.png)<br><br>

2. マネージド ID の設定
こちらもシステム割り当てマネージド ID を設定します。
![720be7799f90ea002986_10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620633/be2da3ac-1500-f9c2-ad4c-5a98b37c57d9.png)

## Blob Storage
1. Blob Storage のデプロイ
データソースに使用する Blob Storage をデプロイします。
![720be7799f90ea002986_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620633/294b1050-ade5-5b14-e902-fb8a1bc7ce39.png)<br><br>

2. コンテナ作成
![720be7799f90ea002986_05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620633/392e5095-32c7-c125-24ec-b26766983b28.png)<br><br>

3. CORS の有効化
OpenAI Service に対して CORS を有効化する必要があるとのことです。
![720be7799f90ea002986_14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620633/a346f7cc-b626-7992-ffa3-4ecdfb534710.png)
この値はこの後のデータソースの追加作業の中で Azure が埋めてくれるものですが、オリジンやヘッダーはもう少し絞り込めると思います。

## RBAC 設定
RBAC については [こちら](https://learn.microsoft.com/ja-jp/azure/ai-services/openai/concepts/use-your-data#azure-role-based-access-controls-azure-rbac) ご参照ください、今回↓の設定を行ってます。
| リソース | ロール | メンバー |
|:--------|:-------|:------  |
| Azure OpenAI Service | Cognitive Services OpenAI Contributor | Azure AI Search のマネージド ID |
| Azure AI Search | 検索インデックス データ閲覧者 | Azure OpenAI Service のマネージド ID |
| Azure AI Search | Search Service 共同作成者 | Azure OpenAI Service のマネージド ID |
| Blob Storage | ストレージ BLOB データ共同作成者 | Azure OpenAI Service のマネージド ID<br>Azure AI Search のマネージド ID |

## データソースの追加
これで前提条件が揃いましたので最後にデータソースの追加を行います。
Azure OpenAI Studio のチャット プレイグラウンドからデータ ソースの追加をクリックして、
![720be7799f90ea002986_15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620633/3690a578-b2ec-6f6c-fe3a-b50a2ab08df1.png)
パラメータを埋めて、
![720be7799f90ea002986_16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620633/b115bbef-76a7-c18f-b591-ec37af9d743e.png)
無事データの追加が完了しました。
![720be7799f90ea002986_17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620633/394fec7f-0e41-ab5a-b3d3-ff173bed88a6.png)

## おわりに
環境構築が完了して切りも良いところですので第1回はこのあたりで。
次回はもう少し資料を追加してチャットしてみるところから進めたいと思います。