祝 Azure OpenAI Service GA! ① GPT-3 & ChatGPT を Azure OpenAI Studio からお試し

1/16 に GA (General Availability: 一般提供) になった [Azure OpenAI Service](https://azure.microsoft.com/ja-jp/products/cognitive-services/openai-service) は、Azure 上で OpenAI が稼働するサービスです。Cognitive Services の一員として & Web API として利用できる、Studio と呼ばれる GUI が用意されており、テストや調整などが可能です。

> 3/10 現在、GA したとはいえ、Azure OpenAI Service を利用するには [Web から利用申請](https://customervoice.microsoft.com/Pages/ResponsePage.aspx?id=v4j5cvGGr0GRqy180BHbR7en2Ais5pxKtso_Pz4b1_xUOFA5Qk1UWDRBMjg0WFhPMkIzTzhKQ1dWNyQlQCN0PWcu&culture=ja-jp&country=jp)が必要です。**Text and Code Model** (GPT-3) と **Dall-E 2** の申し込みができますが、とりあえず **Text and Code Model** だけ申請するのがおススメ！ChatGPT は Text Model の権限があれば利用できます。また、申請時には有効な Azure サブスクリプション (のID) が必要です。

> Azure OpenAI Service 自体は GA ですが、3/10~ 利用可能になった ChatGPT は現在プレビュー中です。

# Azure Portal から Azure OpenAI Service の作成

Azure OpenAI Support から許諾の連絡が来たら、Azure Portal から Azure OpenAI Service を作成しておきます。

[Azure Portal](https://portal.azure.com) にアクセスして、Azure OpenAI Service が有効化されたサブスクリプションが紐づいているアカウントでサインインします。
**リソースの作成** をクリックします。

![スクリーンショット 2023-03-10 103417.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/b0a9061f-38e8-77f5-a1f2-7a6e07f641fe.png)

検索ウインドウに **openai** と入力して、**Azure OpenAI Service** を選択します。

![スクリーンショット 2023-03-10 102401.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/33743d9d-c92c-05a5-f684-aee12c032005.png)
![スクリーンショット 2023-03-10 102433.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/a12148dd-73d3-5596-ff8a-b4ecf23c668f.png)


Azure OpenAI Service 作成画面で、必要事項を入力します。

- サブスクリプション
    - **リソースグループ** : **新規作成** から新たに作成するか、既存のものを選択
- インスタンスの詳細
    - **リージョン** : お好みで選択 (ここでは South Central US を選択)
    - **価格レベル** : **Standard S0**

必要事項を入力したら、画面下部の **[確認と作成]** をクリックします。

![スクリーンショット 2023-03-10 102538.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/53047c70-6f16-c21b-b29c-46902453c035.png)

*検証に成功しました* というメッセージが出たら、**[作成]** をクリックすると、Azure OpenAI Service が作成されます。

![スクリーンショット 2023-03-10 102600.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/f888d83c-bd12-8fba-cefc-4a6f69593104.png)

Azure OpenAI Service が作成されたら、クリックして開き、左バナーの **キーとエンドポイント** をクリックします。ここに表示される **キー1** と **エンドポイント** が Web API として利用するのに必要になりますので、ローカルに保存しておきます。(右端のコピーボタンをクリックすると、内容がコピーできます。)

![スクリーンショット 2023-03-10 102704.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/bfe9e6b3-15ba-c4b1-558b-d9cea07c18ec.png)

 
# Azure OpenAI Studio から プレイグラウンドで動作をお試し

## Azure OpenAI Service の機能

GPT-3 や ChatGPT で実際に利用できるサービスの例として
- Summarize an article (abstructive)
- Generate product name
- Classify text
- Natural language to text

といったものがプレイグラウンド (テストしたり、Web API での利用方法などが取得したりできる画面) が Azure OpenAI Studio に用意されています。

[Azure OpenAI Studio](https://oai.azure.com) を開き、Azure OpenAI Service を作成した (or 利用するためのロールを持っている) アカウントでサインインします。

![スクリーンショット 2023-03-10 092521.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/e0136a82-2677-90f2-1fb3-e641e66454e4.png)

これらのプレイグラウンドは GPT-3 モデルを利用するので、モデルをデプロイしてから試用を行います。

## GPT-3 モデル および ChatGPT モデルのデプロイ

Azure Open Studio の画面で **[新しいモデルのデプロイ]** をクリックします。

![スクリーンショット 2023-03-10 092522.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/f50dad95-711f-9940-5160-ec12f9c1b940.png)

*デプロイ* の画面右上から **+新しいモデルのデプロイ** をクリックします。

![スクリーンショット 2023-03-10 092523.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/82e57bae-952a-63b5-f8ad-9cc287ed793f.png)

*新しいモデルのデプロイ* プロンプト画面からモデルを選択し、名前を付けます。

> 現在、ひとつのモデルにつき、ひとつしかデプロイできません。

ひとまず、要約機能を利用できる GPT-3 モデルを作成します。最新は GPT-3.5 ベースの **text-davinch-003** なので、こちらを選択して、名前を付けてデプロイします。


![スクリーンショット 2023-03-10 093026.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/7938396c-a69f-add8-f506-a8cdeca49cc3.png)
![スクリーンショット 2023-03-10 093053.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/86b95a8d-9ba7-3d67-a8b7-70191bcd4276.png)

同様に、ChatGPT を利用できる **gpt-35-turbo** を選択して、名前を付けてデプロイします。

![スクリーンショット 2023-03-10 093456.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/8a0c89b7-001d-e8bc-0770-0c260017bfd0.png)

デプロイが完了したら、画面左上の **🏠Azure OpenAI** をクリックして、Azure OpenAI Studio の Top 画面に戻ります。

![スクリーンショット 2023-03-10 093809.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/55f3c652-e832-024d-130d-f0a01733e2e0.png)


### ChatGPT モデルをお試し

Azure OpenAI Studio の Top 画面から表示されるようになった **ChatGPT プレイグラウンド** をクリックします。

![スクリーンショット 2023-03-10 084215.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/d6aab9a9-4412-49fd-4778-c7e964e83340.png)

ChatGPT プレイグラウンドが表示されます。
ひとまず、何もカスタムしない状態で、チャット機能を試してみます。

![スクリーンショット 2023-03-10 084355.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/f1fffd8c-7e21-2308-a321-a0cb3dd4b43f.png)


画面右の **パラメーター** エリアにある **デプロイ** に先ほど作成したモデルを選択します。
**Chat Session** のエリアで質問を入力して **[送信]** をクリックして質問を送信します。

![スクリーンショット 2023-03-10 084532.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/e7f7fedf-2cd0-8fea-a64e-5bcd2ab33e79.png)

ChatGPT で生成された回答が表示されます。

![スクリーンショット 2023-03-10 084600.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/e56e2e9d-48c8-3937-c230-464c9d9e9efb.png)

英語はもちろん、日本語でも大丈夫です。

![スクリーンショット 2023-03-10 084701.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/a5a94104-5089-fc6b-7208-fe2dbe50b472.png)


#### ChatGPT を Web API で使う方法を確認する

**Chat Session** のエリアにある **Show raw JSON** を ON にします。すると、実際に Web API で送信するためのフォーマットが確認できます。

```"role":"system", "content":"(システムメッセージ)"``` という形式で JSON が生成されているのが確認できます。

![スクリーンショット 2023-04-23 124431.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/ad2a8bbc-8df2-b82c-6695-e91979ed600e.png)

この状態で質問を送信してみます。

![スクリーンショット 2023-04-23 124445.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/c73064a6-2bf3-6ba5-764b-264673a775ef.png)

```{"role":"user", "content":"(ユーザーが入力した質問)"}, {"role":"assistant", "content":"(ChatGPTが生成した回答)"}``` という形式で JSON の内容が追加されることが分かります。

![スクリーンショット 2023-04-23 124456.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/ab7a22ff-93f1-16bb-ae22-fe5d32bd8e97.png)

> 実際に RestAPI で送信するときは、```{"role":"assistant","content":""}``` のように content を空にして送信し、ChatGPT に回答の生成を指示します。

実際のコードサンプルも用意されているので確認してみます。
**チャットセッション** のエリアにある **[コードの表示]** をクリックします。

![スクリーンショット 2023-04-23 124458.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/f091fd7c-c976-238b-cab9-a6c3b04ff4a6.png)

例えば Python で利用する場合のコードが表示されます。

![スクリーンショット 2023-04-23 131026.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/893b8bba-3f84-1a9e-1498-7be6ff2bf663.png)


> ほかにも Curl や C# で RestAPI POST する例、RestAPI Body の JSON 形式などが表示できます。


### GPT-3 モデルをお試し

#### abstractive summarization (趣旨要約)

Azure OpenAI Studio の Top 画面から、今度は **プロンプト補完例を確認する** の項目から、**Summarize an article (abstractive)** をクリックします。これは GTP-3 モデルを使って、記事の趣旨を汲んで(abstractive)要約を作成するサンプルです。

> extractive summarization は与えられたデータの文章や単語を使って抜き出すように要約しますが。abstractive summarization の場合は必要に応じて言葉を言い換えて要約します。

![スクリーンショット 2023-03-13 102639.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/36c28e6c-ecee-a782-b00f-5a241c6ca2e4.png)

いろいろと説明が出てきますが、ひとまず画面下にある **[プレイグラウンドで開く]** をクリックして、プレイグラウンドで試してみます。

![スクリーンショット 2023-03-13 102727.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/dde87c12-1b7c-ff3a-43eb-921addf3082c.png)

プレイグラウンドでは英語のサンプルが表示されています。もちろん日本語でお試ししてみます。

![スクリーンショット 2023-03-13 102916.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/37483026-8b2b-53a7-3757-9a46e4c0adb8.png)

プレイグラウンドの中央部分の例を全部削除し、要約したい文章をコピー＆ペーストします。
今回は [MSN(時事通信社配信)の記事](https://www.msn.com/ja-jp/news/national/%E3%83%9E%E3%82%B9%E3%82%AF%E7%9D%80%E7%94%A8%E3%83%AB%E3%83%BC%E3%83%AB%E7%B7%A9%E5%92%8C-%E5%B1%8B%E5%86%85%E5%A4%96-%E5%80%8B%E4%BA%BA%E3%81%AE%E5%88%A4%E6%96%AD-%E6%B7%B7%E9%9B%91%E5%A0%B4%E6%89%80%E3%81%AF%E7%9D%80%E7%94%A8%E6%8E%A8%E5%A5%A8-%E6%96%B0%E5%9E%8B%E3%82%B3%E3%83%AD%E3%83%8A/ar-AA18wA5E?ocid=entnewsntp&cvid=b308a56aecea43cebc1f7dd2eab3f810&ei=6) を使ってみました。

> 文章を入力すると、画面下部に **トークン** の数が表示されます。これは Azure OpenAI Service の課金単位となるデータ量を示しています。

画面下部の **[生成]** をクリックして、要約文を作成します。

![スクリーンショット 2023-03-13 103715.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/f0b3872e-ef47-9c02-d04f-d21027262b75.png)

しばらくすると、緑色背景で生成された要約文が表示されます。
途中で切れているのは、右の設定バーにある **最大長(トークン)** の制限と思われます。 

![スクリーンショット 2023-03-13 103755.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/3b8c9296-4121-9feb-6947-e88d277f1c28.png)

今度は、AIモデルへの指示(命令)を追加して、回答を生成してみます。100文字程度で要約するように指示をすると、もう少しコンパクトに生成されました。

![スクリーンショット 2023-03-13 103756.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/1c488eb8-ea7a-4e07-fab6-1238d9992ed4.png)

ChatGTP の時と同様に **コードの表示** をクリックすると、Python や WebAPI で直接使う場合のコード例が表示されます。(これは Curl を使って WebAPI に POST する例です)

![スクリーンショット 2023-03-13 104123.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/9eaf9991-9f70-d051-28cd-c7f926205052.png)
![スクリーンショット 2023-03-13 104211.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/6f558e66-897f-c029-696d-3a96823b3c93.png)


#### Parse unstractured data (非構造化データの抽出)

今度はほかの GPT-3 モデルをお試ししてみます。
GTP-3 利用 **例** の欄の▽をクリックして、**Parse unstractured data (非構造化データの抽出)** を選択します。

![スクリーンショット 2023-03-13 110457.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/76c75015-b314-a486-73cc-0bcbab375678.png)

Parse unstractured data (非構造化データの抽出) は文章などのデータから、必要な項目を抽出することができる機能で、フォーマットなども指定できます。こちらも英語サンプルが表示されるので、日本語でお試ししていきます。

![スクリーンショット 2023-03-13 110458.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/177551f1-3169-c3f1-2fc8-408a426af2b1.png)

今回は、**AIモデルへの指示(命令)** と **分析したい文章(unstractured data (非構造化データ))** の両方を送信する必要があります。新しい惑星で見つかる果物についた文章と、そこから抽出できる果物とその色、味を表形式で表示するように指示します。途中まで表形式で例として書いておきます。出来たら、**[生成]** をクリックします。

![スクリーンショット 2023-03-13 111052.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/974fc4d5-ceb4-b9e7-e434-2c89a1657ac4.png)

すると、データを読み取って、例示した表を補完する形で回答が生成されます。

![スクリーンショット 2023-03-13 111053.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/83f2930a-284d-4fcd-6670-38bc1b73afe8.png)

先ほどと同様に **コードの表示** をクリックして確認してみます。

![スクリーンショット 2023-03-13 111220.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/97654019-880e-549a-5b24-3b16664b0b3c.png)

これまでと同様に **コードの表示** をクリックすると、Python や WebAPI で直接使う場合のコード例が表示されます。(これも Curl を使って WebAPI に POST する例です)

![スクリーンショット 2023-03-13 111222.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117583/97292f8d-2265-5c83-a0cf-81f15f1c1ae9.png)