Azure OpenAI Service の最初の一歩： Azure版 ChatGPT を Azure OpenAI Studio のチャット用プレイグラウンドで試す

:::note warn
Azure OpenAI Service を利用する場合、記事執筆時点では申請を通す必要があり、この記事はその申請が通った前提での内容となります
:::

## はじめに
この記事を書いた 3日ほど前に、自分が Azure OpenAI Service を利用できるようになったのですが（※ 以下のツイート参照）、その中の ChatGPT の API を早速試してみたという話です。今回、プログラムを書かずに試せる「Azure OpenAI Studio のチャット用プレイグラウンド」を用いています。

https://twitter.com/youtoy/status/1671717291585851393

上で ChatGPT の API と書いているものは、Microsoft公式の記事の以下の「[ChatGPT (gpt-35-turbo)](https://learn.microsoft.com/ja-jp/azure/cognitive-services/openai/concepts/models#chatgpt-gpt-35-turbo)」で掲載されているものです。
![ChatGPT (gpt-35-turbo)](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/422daf87-6c30-e33e-d607-1f4af3c53658.png)

### 記事を書いた経緯
記事を書いた経緯について、少し補足します。
Azure OpenAI Service に関して何から手をつけようかと、公式の情報や技術記事などを検索していた中で、以下の @dz_ さんの[ハンズオン資料](https://github.com/dzeyelid/aoai-studio-handson)のツイートを見かけました。そして手軽に始められそうな内容のようだったので、このハンズオン手順を参照しつつ、Azure OpenAI Service のお試しが簡単に行えそうな「Azure OpenAI Studio のチャット用プレイグラウンド」の利用から着手してみました。

https://twitter.com/dz_/status/1672170679821824000

※ 上記のハンズオン資料の構成は、Azure OpenAI Service を使うにあたって知っておくと良さそうな情報の説明から入り、その続きで[実際のハンズオンの手順](https://github.com/dzeyelid/aoai-studio-handson/blob/main/docs/self-paced-handson.md)へ進んでいく形です

## Azure OpenAI Service の関連情報
### Azure OpenAI Service の利用申請のリンク
記事執筆時点で Azure OpenAI Service を利用するためには、利用申請を通す必要があります。その申請用のリンクは、[公式の「Azure OpenAI Service とは」というページ内の「Azure OpenAI にアクセスするにはどうすればよいですか?」という部分](https://learn.microsoft.com/ja-jp/azure/cognitive-services/openai/overview#how-do-i-get-access-to-azure-openai)などに掲載されています。
（記事執筆時点での申請フォーム冒頭には以下の制約なども書かれており、利用のハードルは高めな感じも...）
![利用の制約](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/bd419ae9-d24a-3108-6cf3-d64c24679c20.png)

### OpenAI版との比較
サービス名にも名前が出ている、ChatGPT などを提供している OpenAI も、API を提供しています。
その OpenAI版と Azure版との違いを、今回試す[ハンズオン資料](https://github.com/dzeyelid/aoai-studio-handson)の冒頭部分から引用します。
![OpenAI版とAzure版との違い](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/dd28971f-d4a3-5d6c-a99e-eb394f26fda2.png)
上記のような特徴があるため、企業が自社内で利用可能な ChatGPT の環境を構築する際に、よく選択されているイメージが（個人的には）あります。

Azure OpenAI Service の説明については、合わせて公式の情報などもご参照ください ⇒ 「[Azure OpenAI Service とは - Azure Cognitive Services | Microsoft Learn](https://learn.microsoft.com/ja-jp/azure/cognitive-services/openai/overview)」

### 利用可能なモデルについて
Azure OpenAI Service では、利用可能なモデルが複数あります。
自分が現状で利用可能なモデルは、以下のとおりでした（※ Azure OpenAI Service のモデルのデプロイ画面で、選択可能なモデルのリストを表示させた画像です）。
![利用可能なモデル](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/035f5353-8156-3553-f69a-e95028a60db9.png)

:::note warn
Azure OpenAI Service で利用可能なモデルに関して、GPT-4 を使いたい場合、現状は Azure OpenAI Service の申請が通った後に別途申請が必要となるようです
:::

各モデルの説明については、[ハンズオン資料の「利用できるモデル（2023年6月時点）
」の部分](https://github.com/dzeyelid/aoai-studio-handson#%E5%88%A9%E7%94%A8%E3%81%A7%E3%81%8D%E3%82%8B%E3%83%A2%E3%83%87%E3%83%AB2023%E5%B9%B46%E6%9C%88%E6%99%82%E7%82%B9)や、[公式の「Azure OpenAI Service モデル」のページ](https://learn.microsoft.com/ja-jp/azure/cognitive-services/openai/concepts/models)をご参照ください。

## Azure OpenAI Service を利用する
### リソースの作成とモデルのデプロイ
それでは、Azure OpenAI Service を利用するために、リソースの作成とモデルのデプロイを行います。

それらの手順については、以下の記事などで画像付きで丁寧に説明されているので、これらを参考にしつつ進めてみてください。

- Azure OpenAI Service用にリソースを作成 ＆ モデルのデプロイ
   - [Azure OpenAI ServiceでChatGPTを使ってみた - Platinum Data Blog by BrainPad](https://blog.brainpad.co.jp/entry/2023/05/18/150109)
   - [【誰でも簡単ChatGPT、GPT-4 利用】Azure OpenAI Serviceを使ってみた with LINE Bot【Azureでより安心・安全にAI機能が使える】 - Qiita](https://qiita.com/mochan_tk/items/8b64cf4ca713250030a4)

そして、以下の[Azure OpenAI Studio](https://oai.azure.com/) のページにアクセスできる状態、そしてさらに、左メニューの「デプロイ」の項目を選択した際に「gpt-35-turbo」のモデルが表示されている状態（デプロイ済みの状態）にしてください。
![Azure OpenAI Studio](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/0a757680-0239-e3cf-99ff-b5bc4006049b.png)

自分の場合の、「デプロイ」の項目を選択した後の画面は以下のとおりです。
![デプロイの画面](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/686f2a56-a572-c85b-8558-f80cb9e7ba84.png)

### Azure OpenAI Studio のチャット用プレイグラウンドで試す
それでは、デプロイ済みのモデルを実際に試してみます。

まずは、簡単にお試しが行える「Azure OpenAI Studio のチャット用プレイグラウンド」で利用してみます。[今回参照しているハンズオン資料の「モデルを試す」](https://github.com/dzeyelid/aoai-studio-handson/blob/main/docs/self-paced-handson.md#%E3%83%A2%E3%83%87%E3%83%AB%E3%82%92%E8%A9%A6%E3%81%99)の部分を進めていきます。

#### シンプルな入力で応答を得る
Azure OpenAI Studio のページの、左側メニュー「プレイグラウンド ＞ チャット」を選びます。そして、以下の赤矢印・赤枠で示した部分に、ChatGPT に対する入力文を何か入れてみましょう。
![プレイグラウンドのチャット](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/e3a98f5f-7730-ee10-f7c4-7453420891c6.png)
「あなたは誰？」という入力を送信した後の、画面内の「チャットセッション」の部分の表示内容を掲載してみます。
![「あなたは誰？」という入力に対するレスポンス](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/c07a3a5b-2e60-8a3c-7cb0-a250757e5fcc.png)

#### コードサンプルの表示
上記の「コードの表示」という項目を選択すると、コードサンプルを見ることもできるようです。
ちなみに、サンプルとして表示可能なものは以下の右上に出ている 4つとなるようでした。
![コードサンプル](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/2250e078-3a09-fd6e-c0ec-a673a1d4d449.png)

#### アシスタントのセットアップを使う
さらに、「チャットセッション」の左隣にある「アシスタントのセットアップ」を使ってみます。
[OpenAI版の ChatGPT の API（Chat Completions API）](https://platform.openai.com/docs/guides/gpt/chat-completions-api) でいうところの、「role の system」で指定するものと同じかと思われます。
![Chat Completions API](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/9f481ae5-336f-69fa-92b0-47e64972ed85.png)

このアシスタントのセットアップで、「システムメッセージ」を自分で入力することもできますが、それ以外にテンプレートから選択することもできるようです。以下で示したテンプレートの中の「JSON formatter assistant」を選択してみました。
![テンプレートからシステムメッセージを設定](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/198c9d36-6f7d-2047-2c31-28071e5aab66.png)

そうすると、システムメッセージには、以下のテキストが入力されました。

Assistant is an AI chatbot that helps users turn a natural language list into JSON format. After users input a list they want in JSON format, it will provide suggested list of attribute labels if the user has not provided any, then ask the user to confirm them before creating the list.

上記を反映させるため「変更の保存」をクリックします。
![変更の保存ボタン](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/21b9d420-80f5-f682-aa72-bb4c21b4441d.png)

その後、「日本の四国の4県」という内容を送ると、以下の JSON を含む応答を得ることができました。
![日本の四国の4県 に対する応答](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/6a97d23f-30fc-89b2-2e9f-b4afa2ef36db.png)

#### パラメータの設定について
今回使った Azure版の ChatGPT の API は、OpenAI版と同様にパラメータを設定することも可能です。

そして、今回使ったチャット用プレイグラウンド上では、画面右の「Configuration」の「パラメーター」タブを選択することで、GUI上から簡単に設定できます。
![「Configuration」の「パラメーター」](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/07d84f59-b874-d669-8d78-a1191a9d69c8.png)

#### 「Configuration」の「デプロイ」タブ内の設定
上記の「Configuration」の「デプロイ」タブ内の設定で、「セッションの設定 ＞ 過去のメッセージを含む」という部分が気になり、その説明を見てみました。この設定は、初期値では「10」という値が設定されていました。

画面上のポップアップで説明を表示させてみると、この数値は以下の意味をもつもののようでした。
![過去のメッセージを含む の説明](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/ce21350f-b856-87e0-cece-dd78ca36c543.png)
過去の履歴を引き継いだやりとりをさせる際に、どこまで過去の履歴を保持するかを設定する数値のようです。なお、ユーザーの入力とシステムの応答の 2つを　1セットで保存するようなので、「10」という数値は、「ユーザーの入力とシステムの応答のセットが 5つ」という内容になるようでした。

## おわりに
今回、Azure OpenAI Service をとりあえず試してみる最初の一歩で、「Azure OpenAI Studio のチャット用プレイグラウンド」を使いました。そして今回は、プログラムを書くこともなく、GUI操作のみで API を手軽に試すことができました。

なお、今回用いたハンズオン資料では、自分が試した内容の続きがあり、そこで「[REST APIで実行してみる](https://github.com/dzeyelid/aoai-studio-handson/blob/main/docs/self-paced-handson.md#rest-api%E3%81%A7%E5%AE%9F%E8%A1%8C%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B)」という内容もあります。
個人的に、OpenAI版の ChatGPT の API　は Node.js との組み合わせで試したことがあるのですが、それとの比較などが行えると良いかなと考えています。

### 余談： OpenAI版の ChatGPT API で試したこと
余談になりますが、OpenAI版の ChatGPT の API　を今年 3月頃に軽く試した時のツイートなどがあるので、OpenAI版のほうの API でどんなことを行ったか、関連するリンクのリストで掲載してみます。

- OpenAI版の ChatGPT API で試したこと
   - 各種メッセージサービスとの組み合わせの簡単なお試し
      - [LINE Bot](https://twitter.com/youtoy/status/1631282409470820353)
      - [Discord Bot](https://twitter.com/youtoy/status/1632048817699946497)
      - [Slack Bot](https://twitter.com/youtoy/status/1632208106657841152)
   - [【記事】 Node.js でシンプルに呼び出す](https://qiita.com/youtoy/items/b3e2e462029bf40f8a1a)
   - 音声認識や音声合成との簡単な連携テスト
      - [Node.js版の VOSK を使ったリアルタイム音声認識との組み合わせ](https://twitter.com/youtoy/status/1631513211546763264)
      - [ブラウザ上で音声認識・音声合成と ChatGPT API の処理を全て実行： p5.js と p5.speech（※ Web Speech API の SpeechSynthesis：音声合成 と SpeechRecognition：非同期音声認識 ベース）での実装](https://twitter.com/youtoy/status/1631931659754041345)