Azure OpenAI Service #AOAIドーナツ本 第3章 勉強メモ

この本『**Azure OpenAI ServiceではじめるChatGPT/LLMシステム構築入門 エンジニア選書**』（通称『AOAIドーナツ本』）を読んだので、
学んだことや調べたことを軽くメモしていきます。

（つよつよエンジニア７名によって書かれた、すごく良い本でした！おすすめです！）

https://www.amazon.co.jp/dp/B0CRT96W82

発売日：2024/01/24(水) 

https://twitter.com/chomado/status/1762552374655344793

## 追記

著者の方からツイートいただきました、素晴らしい本をありがとうございます！

https://twitter.com/hiro_gamo/status/1765563845714837638

## 本のもくじ

充実していますね…！！

**第1部 Microsoft AzureでのChatGPT活用**

1. 第1章 生成AIとChatGPT
2. 第2章 プロンプトエンジニアリング
3. 第3章 Azure OpenAI Service

**第2部 RAGによる社内文章検索の実装**

1. 第4章 RAGの概要と設計
1. 第5章 RAGの実装と評価

**第3部 Copilot stackによるLLMアプリケーションの実装**

1. 第6章 AIオーケストレーション
1. 第7章 基盤モデルとAIインフラストラクチャ
1. 第8章 Copilotフロントエンド

**第4部 ガバナンスと責任あるAI**

1. 第9章 ガバナンス
1. 第10章 責任あるAI

## この記事では

内容盛りだくさんなので、
今回は、とくに第三章から勉強メモを引っ張ってこようと思います。

**第3章 Azure OpenAI Service**
 * 3.1 Azure OpenAI Serviceとは
 * 3.2 Azure OpenAIの始め方
 * 3.3 チャットプレイグラウンドでChatGPTアプリを開発する
 * 3.4 考慮するポイント
 * 3.5 まとめ

 次の記事で第四章のメモを書こうと思います。（本当は１つの記事にまとめるつもりだったけど、長くなりすぎたので分けた）

  **第4章 RAGの概要と設計**
  
* 4.1 ChatGPTの問題点と解決手法
* 4.2 **Retrieval-Augmented Generation** とは
* 4.3 検索システム
* 4.4 **Azure AI Search**
* 4.5 **オーケストレータ**
* 4.6 **Azure OpenAI on your data**
* 4.7 **Azure Machine Learningプロンプトフロー**
* 4.8 大規模言語モデル
* 4.9 **Azure OpenAI API**
* 4.10 まとめ


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/af95ae67-4fb0-f57f-721a-b20af3516de0.png)

# Azure OpenAI Service

Microsoft は、OpenAI とパートナーシップを組んでおり、
ChatGPT をはじめとした OpenAI モデルの機能を API として提供する「**Azure OpenAI Service**」を展開しています。



### 製品ページ

[https://azure.microsoft.com/ja-jp/products/ai-services/openai-service](https://azure.microsoft.com/ja-jp/products/ai-services/openai-service?WT.mc_id=dotnet-9827-machiy)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/2c42cc6a-83cc-c8b0-2955-d98886fed87e.png)

### 開発者用の公式ドキュメント

[https://learn.microsoft.com/ja-jp/azure/ai-services/openai/](https://learn.microsoft.com/ja-jp/azure/ai-services/openai?WT.mc_id=dotnet-9827-machiy)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/5b60b3e9-2583-fab7-16fa-33a784b4de3e.png)



## OpenAI 本家と Microsoft Azure OpenAI との簡単な比較

[OpenAI 社 本家](https://openai.com/) でも API を提供していますが、
[Microsoft Azure のほう](https://azure.microsoft.com/ja-jp/products/ai-services/openai-service?WT.mc_id=dotnet-9827-machiy) を使ったほうが、

例えば ：（**Azure OpenAI のメリット**）

* Azure の **優れたセキュリティスタックを使えたり（Microsoft Entra ID による認証など）**
* **プライベートネットワークとの統合**（閉域化）
* **他の Azure サービスとの連携** (Azure 上に立てたデータベースとの連携とか) が めちゃくちゃ簡単だったり、
* **SLA** (サービスレベル アグリーメント)(**品質保証**) 稼働率 99.9 % 以上が設定されている (OpenAI 本家には SLA は無い (現在 2024/3/7 時点)) 
* サポートへの問い合わせができる
 
など、Azure のほうが色々安心なので、

**本番製品に組み込んだりエンタープライズでの利用なら Azure OpenAI を使ったほうが安全** かなあ、と思います。

ただ、**OpenAI 社（本家）のほうが新しいモデルが降ってくるのが早い** ので、
個人開発者としては OpenAI 本家を使うほうが楽しいという人も少なくないと思います。私も最初は OpenAI 本家の方でいじり倒したのが初めでした。
(新しいモデルは、本家でまず使えるようになった後、Azure OpenAI では Azure インフラ上で安定した提供環境を整えたあとに提供されます。)

ちなみに両者 **値段は同じ** です。(この記事の下の方に詳細を書きました)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/6957114a-3a7e-3c26-4a96-724679ba8a2d.png)

↑図の引用元『[Azure OpenAI ServiceではじめるChatGPT/LLMシステム構築入門](https://www.amazon.co.jp/dp/B0CRT96W82) 』 (p. 27) より


#### AOAI の SLA について

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/3f76ee82-ad72-5e54-6b86-e016b2a0a2a1.png)

(↑『[Microsoft Online Services のサービス レベル契約 2024 年 3 月 1 日](https://view.officeapps.live.com/op/view.aspx?src=https%3A%2F%2Fwwlpdocumentsearch.blob.core.windows.net%2Fprodv2%2FOnlineSvcsConsolidatedSLA(WW)(Japanese)(March2024)(CR).docx&wdOrigin=BROWSELINK)』より)

#### OpenAI 本家の SLA について

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/f311fe7f-49af-48c9-add8-b7af0b3a3eda.png)

(↑ OpenAI 価格ページの『[FAQ](https://openai.com/pricing)』より)

> We will be publishing an SLA soon. 

(SLA はそのうち設定します)
のままで、現在は存在しません。 

### 結論

本からそのまま引用します。

> このように、それぞれ特長を持った両サービスではありますが、実開発においては2つのAPIの仕様がほとんど同じで相互乗り換えが容易ですので、最新モデルの技術検証はOpenAI社のAPI、本番稼働はAzure OpenAIとするなど、用途に合わせて使い分けると良いでしょう。
>
> 引用元『Azure OpenAI ServiceではじめるChatGPT/LLMシステム構築入門 』 (p. 26) より


## Azure OpenAI はじめかた

Azure OpenAI は、Azure の他の多くのサービスと異なり、事前申請が必要になります。
（利用規約に同意します、とか、会社のメアドとか入れるやつ）

申請フォーム： https://aka.ms/oaiapply

（余談：私が大昔申請した頃は使用用途を書かされた気がするんだけど、いま見たらその項目は無くなってたね。簡単になってて羨ましい）

２－３日して申請が通ったら、
あとは普通に Azure ポータルからリソース作成していけば大丈夫です。

https://portal.azure.com/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/0386828a-98f9-8cbc-bfb1-52bbc827edc2.png)

↑ 「リソースの作成」画面で `OpenAI` で検索したら出てきます。

その後の詳しい手順は本『[Azure OpenAI ServiceではじめるChatGPT/LLMシステム構築入門](https://www.amazon.co.jp/dp/B0CRT96W82) 』 30P あたりから画面のスクショ付きで丁寧に説明されているのでぜひ。

（注：私は今回はリージョンにスウェーデン中部を指定しました）（リージョンによってデプロイできるモデルが違う）

### Azure OpenAI Studio

> Azure OpenAI で ChatGPT の API を利用するには、リソースを準備するだけでなくモデルのデプロイという作業が必要です。
> モデルのデプロイを実行する手段はいくつかありますが、本書では Azure OpenAI Studio という GUI を使って進めていきます。
> 先ほど作成したリソースの管理画面から、［Azure OpenAI Studioに移動する］をクリックすると画面遷移します
> (引用元『[Azure OpenAI ServiceではじめるChatGPT/LLMシステム構築入門](https://www.amazon.co.jp/dp/B0CRT96W82) 』 (p. 35) より)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/f9f91ed2-633a-1ea3-c040-e3ef2c11974a.png)

https://oai.azure.com/

こんな画面になります！（現在は public preview 中なんですね）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/48f452c3-7c9c-3a00-953e-5e72e5f849f5.png)

左のメニューの「デプロイ」からモデルをデプロイしていきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/9a16c07c-e91e-8e96-9d41-c0c5b0eb1b50.png)

モデルは `GPT-4 Turbo` や `GPT-3.5 Turbo` (ChatGPT) など色々ありますが、

今回は本通りに `GPT-3.5 Turbo` を選んでみました。
お金もだいぶ違うし…

:::note
参考）1000 トークンごとにかかる費用

モデル|インプット|アウトプット
---|---|---
GPT-4-Turbo|¥1.505|¥4.513
GPT-3.5-Turbo|¥0.0753|¥0.2257

だいぶ違う…！
（値段は公式ページ『[Azure OpenAI Service の価格](https://azure.microsoft.com/ja-jp/pricing/details/cognitive-services/openai-service/)』より）
:::

### Azure OpenAI Studio のチャットプレイグラウンド

Azure OpenAI は、プロンプトや各種パラメータのテストのため、Azure OpenAI Studio 内に **チャット プレイグラウンド** という Web GUI ベースの開発環境が用意されています。

コード書いて API 叩いて動作を確認する、よりも、はるかに簡単お手軽なので、まずはここから試してみましょう。左側のメニューから行けます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/d5768438-607b-f285-2cca-e19f622b9def.png)

### C# のコードから動かす

2023年09月の記事ですが、C# から ` .NET SDK for Azure OpenAI ` で API 叩く記事を書きましたので、ぜひ参考にしてみてください！（そのうちアップデートしたい）

https://qiita.com/chomado/items/23947eaf48a75ae130ea

**Semantic Kernel** (Microsoft が OSS で開発している LLM 用の SDK) を使った場合はこちら↓です (C#)
2023/12/19 に書いたものです。

https://zenn.dev/chomado/articles/231208-chatbot-semantic-kernel-rc3

## 参考) AOAI 言語モデル価格 (2024/3/7 時点)


やはり無料で試せないとなるとお値段が気になりますので、
Azure OpenAI Service の言語モデルの価格をまとめてみました。

1000 トークンあたりの価格が出ています。

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

(リージョン：スウェーデン中部指定)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/09ea482e-6572-6e02-e84d-4d9bb5a9cc94.png)

(リージョン：東日本指定)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/6926807f-61cf-3fa5-2545-1caf31e45a95.png)

東日本リージョンは現時点ではまだ `GPT-4 Turbo` (`gpt-4-1106`) など一部のモデルが使えないようですね。

### 本家と価格の比較

OpenAI 社本家と価格を比較してみます。
本家は 日本円の表記はなくて USD しか無いので、両方 USD で比較します。

#### OpenAI 社 本家

https://openai.com/pricing

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/c6df126b-b635-dc3b-320d-e94e7ef7ccfa.png)

 モデル `GPT-4 Turbo` (`gpt-4-1106`) は 1000 トークンあたり
 インプット $0.01
 アウトプット $0.03

 #### Microsoft の Azure OpenAI

 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/aef51810-169e-4c89-baaa-8620840e9ebc.png)

モデル `GPT-4 Turbo` (`gpt-4-1106`) は 1000 トークンあたり
 インプット $0.01
 アウトプット $0.03

#### 結論

 **同じ値段ですね！！**