続・エンプラでOpenAI使うためにAWSエンジニアがAzureに入門してみた！

:::note
この記事はシリーズものですが、特に依存関係はないので興味あるもののみお読みください。
:::

- その1（リソースグループ / App Service / Cosmos DBを紹介）

https://qiita.com/minorun365/items/8501566c148e34e75c77

- その2（OpenAI Service / Log Analytics / API Managementを紹介） → 本記事



# OpenAIで開発するならAzureはマストになってきた

ChatGPTを始めとする生成AI、特に大規模言語モデル（LLM）の勢いが止まりません。

もはや小回りのきくWeb系スタートアップに限らず、そろそろエンタープライズな組織でも「わが社もChatGPTを使ってなんか作るぞい！」的なムーブが広がっている頃ではないでしょうか。

大企業でシステムを作ろうとするとセキュリティやコンプライアンスの壁があるため、ChatGPTのようなSaaSを気軽に活用するのは大きなハードルになってしまいます。そこでプライベートな環境で安全にOpenAIのAPIサービスを活用できるMicrosoft Azureの人気が急速に高まっています。

https://azure.microsoft.com/ja-jp/products/cognitive-services/openai-service

かくいう私もクラウドはAWSが大好きでずっとメインで使ってきましたが、そろそろ生成AI活用の文脈でAzureを勉強せざるを得なくなってきたため、AWSエンジニア目線でAzureのサービスをいくつか紹介してみたいと思います。



# OpenAI開発で使いそうなAzureサービス紹介！

この記事では

- OpenAI開発で使いそうなAzureサービスを中心に
- AWSユーザーがすっと理解しやすい形で比較しながら

紹介していきます。
私も勉強中の身なので、もし誤っている点などあればフィードバックくださいますと幸いです。



### Azure OpenAI Service

OpenAI社の提供するGPTシリーズ等の主要なAIモデルをAzure環境上でセキュアに利用できるサービスです。

https://azure.microsoft.com/ja-jp/products/cognitive-services/openai-service

現在対応しているモデルファミリーは以下です。（2023年6月現在）

- GPT-4：テキスト生成（最新モデル）
- GPT-3：テキスト生成
- DALL-E：テキストから画像生成
- Codex：プログラミング用のコード生成
- Embeddings：自然言語をベクトル化

利用の際はまず「リソース」を作成します。この単位でエンドポイントのホスト名やリージョン、ネットワークアクセス制限を設定します。その中に使いたいAIモデルの「デプロイ」を作成していきます。

※余談ですが「Deployment」は名詞なので、日本語訳もそのまま「デプロイメント」の方が分かりやすかったですね。

![スクリーン ショット 2023-06-25 に 20.49.57 午後.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/eae2961a-0f9e-2cac-31e1-68a2a2420700.png)

APIを呼び出して利用する際はリソースのエンドポイントURLを `OPENAI_API_BASE` 環境変数で指定し、openaiライブラリのメソッド内で `engine` 属性にデプロイ名を指定することでアクセスできます。

https://learn.microsoft.com/ja-jp/azure/cognitive-services/openai/how-to/chatgpt?pivots=programming-language-chat-completions

OpenAI Serviceは他のAzureサービスと異なり、利用前に申請が必要です。
またGPT-4モデルの利用にあたってはさらに別途申請が必要となるため注意です。（後者はなかなか承認されず時間がかかっているようです）

- [Azure OpenAI Service利用申請](https://customervoice.microsoft.com/Pages/ResponsePage.aspx?id=v4j5cvGGr0GRqy180BHbR7en2Ais5pxKtso_Pz4b1_xUOFA5Qk1UWDRBMjg0WFhPMkIzTzhKQ1dWNyQlQCN0PWcu)
- [GPT-4モデルの利用申請](https://customervoice.microsoft.com/Pages/ResponsePage.aspx?id=v4j5cvGGr0GRqy180BHbR7en2Ais5pxKtso_Pz4b1_xURjE4QlhVUERGQ1NXOTlNT0w1NldTWjJCMSQlQCN0PWcu)



### Log Analytics

ログ収集＆分析用のマネージドサービスです。AWSでいうCloudWatch Logsですね。
Azure Monitorという統合監視サービス（CloudWatch的なもの）の一機能という位置づけです。

https://learn.microsoft.com/ja-jp/azure/azure-monitor/logs/log-analytics-overview

利用時は「ワークスペース」というログ格納用リソースを作成します。

- 仮想マシンのログを収集する場合はエージェントをインストールして使います。
- Azureの各種サービスのログ収集に使いたい場合、Monitorサービスの「診断設定」からルーティングを設定することができます。

![スクリーン ショット 2023-06-25 に 21.44.20 午後.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/35bc1586-7a41-3e31-f804-80f557f27b8a.png)

保存したログはKQL（Kusto Query Language）というクエリー言語で検索したり、結果をグラフで表示することもできます。

クエリーのテンプレートも用意されており、以下は「最新の100コール」クエリを使ってAPI Managementのログを抽出＆グラフ化してみた例です。記法もSQLよりグッとシンプルで直感的ですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/4d7b6485-ccea-a8ca-6109-28d4bb8b06be.png)
OpenAIアプリ開発では運用や監査用のログ収集などに便利そうです。



### API Management

APIを管理してくれるマネージドサービスです。AWSでいうAPI Gatewayですね。

https://azure.microsoft.com/ja-jp/products/api-management

REST APIをはじめ、様々な形式のバックエンドAPIを登録してフロントエンドからのリクエストをルーティングさせて使うことができます。OpenAPI形式のYAMLファイルをインポートしてAPIスキーマを設定することもできます。

また、APIの認証やネットワークアクセス制限、スロットリングなども設定できます。

利用する際は「インスタンス」というリソースを作成します。（結構時間がかかります）
その中にAPIを作成していきます。
![スクリーン ショット 2023-06-25 に 22.18.47 午後.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/601c75b5-57ca-a613-2120-54330459c594.png)
APIの設定画面を見るとAmazon API Gatewayそのまんまですね。
![スクリーン ショット 2023-06-25 に 22.14.40 午後.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/df447099-b5e7-f788-6964-5da370c541f4.png)
OpenAIアプリの開発ではバックエンドAPI用の共通機能層（認証やルーティング、アクセス制御など）としてももちろん便利そうですし、OpenAI APIのトークン上限や利用料を意識したスロットリング設定などの用途でも活躍しそうです。



# 参考文献

https://learn.microsoft.com/ja-jp/azure/architecture/aws-professional/services

https://amzn.asia/d/cTlZKKs