1/16 に GA (General Availability: 一般提供) になった Azure OpenAI Service は、Azure 上で OpenAI が稼働するサービスです。Cognitive Services の一員として & Web API として利用できる、Studio と呼ばれる GUI が用意されており、テストや調整などが可能です。
Azure OpenAI Studio からお試し してみたので、今度は Rest API で利用してみます。
3/10 現在、GA したとはいえ、Azure OpenAI Service を利用するには Web から利用申請が必要です。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 OpenAI Studio からお試し の記事を参考に、
- Azure OpenAI Service のプレビュー申込 & Azure Portal からのサービス作成を行い、キーとエンドポイントをローカルに保存しておきます。
- GTP-3 モデルの text-davinch-003、ChatGPT モデルの gpt-35-turbo をデプロイしておきます。
- Rest API を POST 送信できるツール (こちらでは Postman を使います)
Azure OpenAI Service の GPT-3 ベースのモデルを Rest API から使ってみる
Abstractive Summarization (趣旨要約)
GPT-3 モデルへの Rest API Call に必要な情報を確認
Azure OpenAI Studio: Abstraction Summarization の手順の通り、GPT-3 プレイグラウンドで AIモデルへの投入データ (AIモデルへの指示と分析したい文章) を入力した状態で、[コードの表示] をクリックします。
python | curl | json のサンプルコードが表示できます。ここでは curl で Rest API からコールするのに必要な内容を確認します。URL 部分を選択してコピーし、ローカルに保存しておきます。
- URL:
- Header
- Content-type: application/json
- api-key: Azure Portal で取得したキーを入れます
- Body
- Prompt: 分析したい文章を入れます
- ほかのパラメーターはとりあえずそのままでOKです
Rest API コールの Body 部分は JSON のサンプルコードを見たほうがわかりやすいです。
画面下の [コピー] をクリックして、json の中身をそのままコピー、こちらもローカルに保存しておきます。
GPT-3 モデルへ Rest API で Post してみる
Rest API ツール (ここでは Postman) を開き、情報をセットします。
- Type: POST
- URL: 上記の手順でコピーしたURL (https://XXXXXXX.openai.azure.com/openai/....)
- Header:
- Content-Type: application/json
- api-key: Azure Portal からコピーしておいた Azure OpenAI サービスのキー
- Body: 上記の手順でコピーしたjson
入力できたら、[Send] をクリックして POST してみます。
返答が戻り、Body部分に text に要約文が表示されます。
返答 Text が途中で切れているようですが、返答 Body の json に含まれる "finish_reason" が "length" となっているので、もう少し返答トークンの上限値 ("max_token") を増やす必要がありそうです。
Azure OpenAI Service の ChatGPT ベースのモデル を Rest API から使ってみる
Azure OpenAI Studio: ChatGPT モデルをお試し の手順で、ChatGPT プレイグラウンドを開き、チャットセッション のエリア下部にある入力欄に質問を入力します。すると回答が生成されて表示されます。
回答が表示された状態で、チャットセッション のエリアにある Show raw JSON を ON にします。
下図の赤枠の部分が ChatGTP のモデルで生成された回答なので、Web API で利用するときはこの部分を削除して (=この部分の回答を作成するように) POSTすることになります。
チャットセッション のエリアにある コードの表示 をクリックします
GPT-3 モデルと同様に、python | C# | curl | json のサンプルコードが表示されます。
curl で Rest API からコールするのに必要な内容を確認します。
- URL:
- https://(作成した Azure OpenAI Service 名).openai.azure.com/openai/deployments/(作成した gtp-35-turbo のデプロイ名)/completions?api-version=2023-03-15-preview
- Header
- Content-type: application/json
- api-key: (Azure Portal で取得したキー)
- Body
- messages: 前の手順で確認した JSON
- ほかのパラメーターはとりあえずそのままでOKです
URL 部分を選択してコピーし、ローカルに保存しておきます。
Rest API コールの Body 部分は JSON のサンプルコードを確認します。
画面下の [コピー] をクリックしてローカルに保存しておきます。
やはり ChatGPT が生成した回答も入ってしまっているので、実際に POST するときは、この部分を削除 (=この部分の回答を作成するように) して使います。
ChatGPT モデルへ Rest API で Post してみる
Rest API ツール (ここでは Postman) を開き、情報をセットします。
- Type: POST
- URL: 上記の手順でコピーしたURL (https://XXXXXXX.openai.azure.com/openai/....)
- Header:
- Content-Type: application/json
- api-key: Azure Portal からコピーしておいた Azure OpenAI サービスのキー
- Body: 上記の手順でコピーした JSON を一旦そのまま貼り付け、content の項目を加工します。
gtp-35-turbo モデルによるチャット生成は、ユーザーまたはボットの会話が
{"role":"ユーザー名", "content":"会話の内容"}
のフォーマットで示され、
{"role":"ユーザー名", "content":""}
のように content が空になっている ユーザーの会話を生成する仕組みになっています。
変更前(例)
{
"role": "assistant",
"content": "ChatGPTは、情報検索に役立つ機能を持つAIアシスタントです。以下のようなことができます。\n\n1. 質問に答える:ChatGPTは、あらゆるトピックに関する質問に答えることができます。例えば、歴史、地理、科学、テクノロジー、エンターテインメントなど。\n\n2. 検索結果の提供:ChatGPTは、特定のトピックに関する情報を検索して、それに関する検索結果を提供することができます。\n\n3. 翻訳:ChatGPTは、多言語に対応しており、テキストを他の言語に翻訳することができます。\n\n4. カレンダーの管理:ChatGPTは、予定を管理するためのカレンダーアプリケーションと連携して、予定の追加や削除などの操作を行うことができます。\n\n5. その他のタスク:ChatGPTは、他にも多くのタスクを実行することができます。例えば、音楽の再生、天気情報の提供、ニュースの配信、ユーザーの健康状態を追跡するなど。"
}
↓ ChatGTPが作成した回答を削除します。
変更後(例)
{
"role": "assistant",
"content": ""
}
入力できたら、[Send] をクリックして POST してみます。
返答が戻り、Body部分の content に返答文が表示されます。
さらに同じコンテキストで会話を続けたい場合は、生成された回答と質問を追加して POST します。
...{ "role":"assistant", "content":"(ChatGPTが生成した回答)" },{ "role":"user", "content": "(追加の質問)", "role": "assistant", "content":""}
となるように Body の JSON を修正します。
初めの質問と回答を加味した、追加質問に対する回答が生成されます。