Azure OpenAI Service の ChatGPT モデルを有効化して REST API として使ってみた

2023.03.15

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

いわさです。

OpenAI の ChatGPT が流行っており DevelopersIO でも記事がたくさん登場していますが、先日 Microsoft Azure のアップデートで Azure OpenAI Service でも ChatGPT が利用出来るようになりました。

今後アプリケーションに ChatGPT を組み込んでいく際など Azure OpenAI Service が有力になる可能性があります。
本日時点で Azure OpenAI Service 自体でプライベートリンクやマネージド ID の機能が既にサポートされており、例えば Azure の VNET 上にデプロイされたアプリケーションサーバーからプライベートネットワークで ChatGPT エンドポイントへアクセスすることなどが出来そうです。

今回は Azure OpenAI Service のプロビジョニングと ChatGPT 用のモデルのデプロイを行い、ポータルと HTTP クライアントツールから利用してみましたので、使い方などを紹介します。

ChatGPT 機能は本日時点でプレビューです。今後仕様の変更や廃止される場合があります。

注意:本日時点で Azure OpenAI Service は承認制

Azure ポータル上から Azure OpenAI のサービスを選択してデプロイすることが出来ます。

ただし、本日時点ではアクセス承認リクエストを送信し、承認後にリソースがデプロイ出来るようになります。
これは Azure OpenAI Service がプレビューというわけではありません。GA ですが承認が必要となっています。

詳細は以下をご確認ください。審査基準やプロセスに関しては開示されていないようです。

この記事では申請方法などについて触れませんので申請フォームをご確認の上個別に記入内容をご判断ください。

リソース作成とモデルのデプロイ

アクセス承認されると通常の Azure リソースと同様に作成出来るようになります。

本日時点で選択可能なリージョンは East US, South Central US, West Europe の 3 つでした。
そのうち、ChatGPT モデルが利用可能なリージョンは East US と South Central US のみです。GPT-3 は全リージョン利用可能です。

Pricing Tier も選択可能ではありますが、本日時点では Standard S0 のみ選択出来ます。
将来的に多様な料金プランが選択出来るのかもしれません。

なお、料金については公式の料金ページを確認してください。 
ChatGPT の料金が「該当なし」になっている場合はサポートされているリージョン(米国東部など)を選択してください。
本日時点では 1,000 トークンあたり $0.002 のようです。

ChatGPT モデルをデプロイ

ChatGPT 機能は Azure OpenAI Service のデプロイされるモデルの 1 つです。
Azure OpenAI Service リソースが作成出来たら、続いて利用する機能に基づくモデルをデプロイしましょう。

Model deployments から新規作成を行います。

本日時点でデプロイ出来るモデルは全 9 種類です。

そのうち本日時点で利用出来る ChatGPT モデルは「gpt-35-turbo (version 0301)」のみです。
そうです、おそらく以下のリルオッサ様の記事で紹介されているスナップショットバージョンのことでしょう。プレビュー終了後にこのあたりのモデルバージョンの仕組みがどうなるのかは少し気になりますね。

Azure OpenAI Service も ChatGPT モデルもデプロイの時間はあまりかかりませんでした。数秒から数分だったと思います。

利用する

モデルがデプロイ出来たら、あとは利用するだけです。
ユースケースとして最終的にはアプリケーションに組み込むことになると思うのですが、Azure OpenAI Studio という専用 Web ポータルを使うことも出来ます。

今回は REST API エンドポイントと Azure OpenAI Studio を少し使ってみました。
他に Python から openai-python を利用する方法も公式ドキュメントでは紹介されています。

Azure OpenAI Studio

Azure OpenAI Studio の場合は GUI 上のチャット画面からすぐに利用を開始することが出来ます。
公式ドキュメントにも記述がありますが、用途としてはモデルに指定するパラメータを調整したり、プレイグラウンドとして利用することが出来ます。

先程デプロイしたモデルを指定して少し使ってみました。

質問の内容は検証以外の他意は全くないですが、よく出来た回答だなという感想を持ちました。

REST API

続いて REST API での利用です。
Keys and Endpoint メニューから API キーを取得し、エンドポイントを確認しておきます。

以下の形式でリクエストを送信します。

`https://**エンドポイント**/openai/deployments/**モデル名**/completions?api-version=2022-12-01`

prompt に im_start/im_end で区切ってコンテンツを入力します。
サポートされているのは ChatGPT API と同様に system, user, assistant です。

% curl "https://hoge0315openai.openai.azure.com/openai/deployments/hoge0315chatgpt/completions?api-version=2022-12-01" \
  -H "Content-Type: application/json" \
  -H "api-key: 12345678901234567890123456789012" \
  -d '{
  "prompt": "<|im_start|>system\n関西弁で回答してください\n<|im_end|>\n<|im_start|>user\n元気ですか?\n<|im_end|>\n<|im_start|>assistant",
  "max_tokens": 800,
  "stop": ["<|im_end|>"]
}' | jq
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   502  100   296  100   206    233    162  0:00:01  0:00:01 --:--:--   398
{
  "id": "cmpl-6uE3HSda1AX9KZWmBR7H7BVtBHweE",
  "object": "text_completion",
  "created": 1678858403,
  "model": "gpt-35-turbo",
  "choices": [
    {
      "text": "\nおおきに、ぼちぼちやで。",
      "index": 0,
      "finish_reason": "stop",
      "logprobs": null
    }
  ],
  "usage": {
    "completion_tokens": 15,
    "prompt_tokens": 28,
    "total_tokens": 43
  }
}

これが関西弁なのか私にはわからないですが、REST API から結果を取得することが出来ました。

さいごに

本日は Azure OpenAI Service の ChatGPT モデルを有効化して REST API として使ってみました。

細かいパラメータなどいくつかあるのでもう少し掘り下げたり、パラメータを変更してみたり色々と出来そうです。

また、本日時点で次のようにネットワークやアイデンティティの機能がサポートされているので他の Azure サービスと同様にセキュリティ要件を満たすためにいくつかのオプションがありそうです。

まだ ChatGPT モデルはプレビューだったり、そもそも Azure OpenAI Service が承認制で少し敷居が高い感じがありますが、Azure OpenAI Service の動向も注目しておきたいですね。