Azure OpenAI Service の機能を詳しく解説

2023年10月18日掲載

キービジュアル

今回は、Azure OpenAI Service の概要と利用できる機能を、実際に試してみた際の画面とともにご紹介します。

使い方の詳細や利用方法は「Azure OpenAI Serviceを使ってみた〜申請・利用方法〜」の記事で詳しく紹介しているので、そちらもご確認ください。

目次

Azure OpenAI Service とは

Azure OpenAI Service では、Microsoft社のクラウドサービス「Microsoft Azure」上で、ChatGPTなどOpenAIの高度な言語モデルを活用し、自然言語による質疑応答や翻訳、コードの生成、画像の生成など、さまざまなタスクを実行することが可能です。

Azure OpenAI Serviceの機能

ChatGPTとは? Azure OpenAI Serviceとの違いも分かりやすく解説」でOpenAI との違いも解説していますので、ご覧ください。

Azure OpenAI Service の主な機能

ここからは、実際に利用できる機能について、技術的な内容も含めて詳しくご紹介します。

Azure OpenAI Service は、次の4つの要素で構成されています。

  1. 事前トレーニング済みの生成AIモデルとUI
  2. カスタマイズ機能
  3. フィルタリング機能
  4. アクセス制御

1. 事前トレーニング済みの生成AIモデルとUI

Azure OpenAI Service では、事前にトレーニングされたモデルが用意されているため、学習データを用意する必要がありません。また、Azure OpenAI Studio というUIも用意されているため、自前でアプリを用意しなくても試すことができます。

Azure OpenAI Serviceの機能_Azure OpenAI StudioのUI

Azure OpenAI Service で現在利用できるモデルと概要は以下の通りです。モデルごとに機能が異なりますので、使用したい機能にあわせてモデルを選択してください。

なお、最新の状況については、Microsoft Azure の公式ドキュメントをご確認ください。

モデル概要
GPT-3.5自然言語の生成、コードの生成
GPT-4

最新モデル
自然言語の生成、コードの生成

  • 使用には別途申請が必要です。
DALL-E画像の生成と編集

Embedding(埋め込み)

テキストを数値ベクトルに変換できます。
これによりテキストの類似度を算出・分類できます。

 

自然言語の生成

質問への回答やメール文の作成などができます。一問一答ではなく、前の話題を引き継いだ回答も可能です。

Azure OpenAI Serviceとは_自然言語の生成例

ほかにも、日常会話やテキスト翻訳、要約、添削、アイデアの提案などもできます。

コードの生成

自然言語で作成したいコードを入力すると、それに合ったコードを生成してくれます。

今回は試しに「pythonで電卓の機能を作成してください」と入力しました。

Azure OpenAI Serviceの機能_コードの生成例(python)

生成されたコードをコピーしてメモ帳に貼り付け、「OpenAI_calculator.py」と名前を付けて保存した後、実行してみたところ電卓として機能しました。

Azure OpenAI Serviceの機能_コード生成で作成した電卓の実行結果

今回は python で試しましたが、それ以外の言語を指定することもできます。ほかにも自身が作成したコードの添削や別の言語への書き換えなども可能です。

画像生成

テキストから画像を生成することができます。
今回は目玉焼きの画像を生成できるか試してみました。

Azure OpenAI Serviceの機能_画像生成の例

各画像の生成で入力したテキストは以下になります。

右端:目玉焼き

中央:卵をフライパンで焼いている

左端:fried egg

日本語で「目玉焼き」と入力した場合(右端の画像)、なぜか焼き魚の画像が生成されました。その後も何度か試してみましたが、焼肉や魚介類を焼いたものの画像が表示されたため、「焼き」の画像になっていそうです。

次に、単語ではなく文章で「卵をフライパンで焼いている」と入力した場合(中央の画像)、それらしい画像が表示されました。

最後に英語で「fried egg」と入力した場合(左端の画像)、希望通りの画像が表示されました。

このことから、日本語でも画像生成はできますが、精度は英語には及ばないようです。画像生成で意図した結果が得られない場合は、テキストを英語に翻訳してから生成すると希望の画像が生成できるかもしれません。

また、日本語で指定する場合も単語などの短いものより、文章で細かく指定した方が希望の画像に近づけることができるようです。

2.カスタマイズ機能

Azure OpenAI Service では、回答精度を上げるための3つの手法があります。

  • プロンプトの入力を変更する
  • モデルが参照できるデータを追加する(On your data)
  • モデルを調整する(Fine-Tuning) ※現在使用できません

プロンプトの入力を変更する

Azure OpenAI Service で使用できる GPT-3.5 と GPT-4 のモデルでは、プロンプトと呼ばれる命令文を使用して指示を与えます。Azure OpenAI Service ではプロンプトでシステムメッセージとパラメータを設定でき、それらを変更することでより希望に沿った回答を得られるようになります。

システムメッセージを設定して活用する

システムメッセージでは、役割や回答例を設定できます。役割や回答例を与えることで、用途にあった回答や精度の高い回答を得ることができます。

システムメッセージは、画面左 Assistant setup 内の System message タブで設定できます。

Azure OpenAI Serviceの機能_Azure OpenAI Studio の UI

システムメッセージでは、次の3つを設定することができます。

種類概要
system役割を設定

あなたはテクニカルサポートの担当者です。

ユーザからの質問で足りていない情報があればヒアリングしてください。

user

ユーザの入力例

急にエラーが出るようになった。
assistantユーザ入力に対する回答例

お問い合わせありがとうございます。事象について詳細を教えていただけますか。

  • エラーメッセージの内容
  • 直前に行っていた作業
  • 事象が発生した日時

上記のシステムメッセージを指定した場合の例を紹介します。

システムメッセージ指定なしの場合

Azure OpenAI Serviceの機能_システムメッセージ指定なし

 

システムメッセージ指定ありの場合

Azure OpenAI Serviceの機能_システムメッセージ指定あり

システムメッセージを指定しなかった場合は、一般的に考えられる原因を回答していますが、システムメッセージを指定した場合は、systemに「ヒアリングしてください。」と入力した通り、ユーザに必要な情報を聞き返しています。また、assistantで指定した回答例に合わせて箇条書きになっています。

モデルが参照できるデータを追加する(On your data)

Azure OpenAI Service に社内データなどの独自のデータを追加することで、追加したデータを参照して回答を生成できるようになります。アップロードしたデータのみを参照するか、併用するかを選択できます。

  • 独自のデータを追加するには、Azure Blob Storage とAzure Cognitive Search が必要です。別途使用料がかかりますのでご注意ください。

独自データを追加した場合の処理は以下の図の通りです。

Azure OpenAI Serviceの機能_Data flows for inference 'on your data'

独自のデータを使用する場合は、Assistant setup の Add your data タブでデータソースを指定します。

データソースは以下の3つから選択できます。

  • Azure Cognitive Search
  • Azure Blob Storage
  • Upload files

使用できるファイルタイプは以下の通りです。

  • テキスト(.txt)
  • マークダウン(.md)
  • HTML(.html)
  • Microsoft Wordファイル
  • Microsoft PowerPoint ファイル
  • PDF

Upload files でファイルをアップロードすると、自動的に文書が分割されインデックスが作成されます。

Azure OpenAI Serviceの機能_Add your data の設定例

「Limit responses to your data content」にチェックを入れた場合は、独自のデータのみを使用して回答が生成されます。チェックを外した場合は、通常の回答と独自のデータを併用した回答が返されます。

独自のデータを使用して回答が生成された場合、回答と参照したデータのリンクが返るため、どのデータをもとに回答が生成されたのか確認できます。

Azure OpenAI Serviceの機能_独自のデータを使用して回答が生成された場合

独自のデータ内に関連するデータがなかった場合、その旨のメッセージが返されます。

Azure OpenAI Serviceの機能_独自のデータ内に関連するデータがなかった場合

モデルを調整する(Fine-Tuning) ※現在使用不可

Fine-Tuning で、多くの例を学習させることで、用途にあった結果を得られるようになります。また、プロンプトに多くの例を指定する必要がなくなるためトークンが節約できます。これによりコストや処理時間を減らすことができます。

なお、Azure OpenAI Service では現在は利用を停止しています。2023年後半に Fine-Tuning可能なモデルをリリース予定です。

3. フィルタリング機能

4つのカテゴリ(ヘイト、性的、暴力、自傷)ごとにリスクが3段階(高・中・低)に分類され、どのレベルまで許可またはブロックをするかをInputとOutputでそれぞれ指定できます。

  • フィルタリングで高・中のリスクを許可するためには、フォームから追加の申請が必要です。
Azure OpenAI Serviceの機能_フィルタリング設定画面

Input で低リスクまで許容した場合

Azure OpenAI Serviceの機能_Input で低リスクまで許容した場合

Input でリスクを許容しない場合

Azure OpenAI Serviceの機能_Inputでリスクを許容しない場合

コンテンツフィルタでブロックされた場合、その旨のメッセージが表示されます。

4. アクセス制御

認証による制御とネットワークによる制御が可能です。

ネットワークによるアクセス制御

Azure OpenAI Service で選択できるネットワーク設定は3種類あります。

種類概要
すべてのネットワークインターネットなどすべてのネットワークがアクセスできます。
選択したネットワークとプライベートエンドポイント

以下の3つをそれぞれ指定できます。

  • 仮想ネットワーク
  • ファイアウォール(パブリックIPの範囲を指定できます)
  • プライベートエンドポイント
無効アクセスできるネットワークはありません。
仮想ネットワーク内のプライベートエンドポイントを介してアクセスします。

すべてのネットワークの場合

Azure OpenAI Serviceの機能_すべてのネットワーク
azureuser@test:~$ curl-v "${AZURE_OPENAI_ENDPOINT}/openai/deployments/${DEPLOYMENT_NAME}/completions?api-version=2023-05-15"
  -H "api-key: ${AZURE_OPENAI_KEY}"
  -H "Content-Type: application/json"
  -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|>"]
  }'
*   Trying 20.232.XX.XXX:443...
* TCP_NODELAY set
* Connected to AZURE_OPENAI_NAME.openai.azure.com (20.232.XX.XXX) port 443 (#0)
-----
中略
-----
{
  "id":"XXXXXXXXXXXXXXXXXXXXXXXX",
  "object":"text_completion",
  "created":1693567848,
  "model":"gpt-35-turbo",
  "choices":[{
    "text":"\nおおきに!ボクは関西地方出身のアシスタントや。名前は言わん限りゃええねん。ボクはこの職場に入って1年ぐらい経ったで。データ入力とか、書類整理とか、ちょっとした手続きが得意やねん。よろしくな!",
    "index":0,
    "finish_reason":"stop",
    "logprobs":null
  }],
  "usage":{
    "completion_tokens":104,
    "prompt_tokens":34,
    "total_tokens":138
  }
}

選択したネットワークとプライベートエンドポイント(仮想ネットワーク)の場合

Azure OpenAI Serviceの機能_選択したネットワークとプライベートエンドポイント(仮想ネットワーク)
azureuser@test:~$ curl-v "${AZURE_OPENAI_ENDPOINT}/openai/deployments/${DEPLOYMENT_NAME}/completions?api-version=2023-05-15"
  -H "api-key: ${AZURE_OPENAI_KEY}"
  -H "Content-Type: application/json"
  -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|>"]
  }'
*   Trying 20.232.XX.XXX:443...
* TCP_NODELAY set
* Connected to AZURE_OPENAI_NAME.openai.azure.com (20.232.XX.XXX) port 443 (#0)
-----
中略
-----
{
  "id":"XXXXXXXXXXXXXXXXXXXXXXXX",
  "object":"text_completion",
  "created":1693567848,
  "model":"gpt-35-turbo",
  "choices":[{
    "text":"\nおおきに!おらはAIボットので、なんでもお聞きやすんなはれ。性格はおおらかやで、誰に対してもとっつきやすいと評判やで。宜しくお願いします!",
    "index":0,
    "finish_reason":"stop",
    "logprobs":null
  }],
  "usage":{
    "completion_tokens":72,
    "prompt_tokens":34,
    "total_tokens":106
  }
}

無効(プライベートエンドポイント)の場合

Azure OpenAI Serviceの機能_無効(プライベートエンドポイント)
azureuser@test:~$ curl-v "${AZURE_OPENAI_ENDPOINT}/openai/deployments/${DEPLOYMENT_NAME}/completions?api-version=2023-05-15"
  -H "api-key: ${AZURE_OPENAI_KEY}"
  -H "Content-Type: application/json"
  -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|>"]
  }'
*   Trying 10.1.0.5:443...
* TCP_NODELAY set
* Connected to AZURE_OPENAI_NAME.openai.azure.com (10.1.0.5) port 443 (#0)
-----
中略
-----
{
  "id":"XXXXXXXXXXXXXXXXXXXXXXXX",
  "object":"text_completion",
  "created":1693567848,
  "model":"gpt-35-turbo",
  "choices":[{
    "text":"\nおおきにー!ボクは大阪生まれの関西人やで!ボクの名前は○○と申すわ!よろしく頼んます!",
    "index":0,
    "finish_reason":"stop",
    "logprobs":null
  }],
  "usage":{
    "completion_tokens":50,
    "prompt_tokens":34,
    "total_tokens":84
  }
}

どのネットワークを選択しても API で指定するエンドポイントやリクエスト内容は変わりません。リクエストは同じですが設定によって IP が異なっており、自動でDNSで切り替えていることが分かります。

もし自身の環境のモデルをインターネットに公開したくない場合は、ソフトバンクのOneportマルチクラウドアクセスのようなサービスを利用して、お客さま拠点から閉域経由でMicrosoft Azure 環境にダイレクトで接続することで完全なプライベートアクセスを実現可能です。

また手軽にプライベートアクセスを実現する方法として、Azure OpenAI Service スターターパッケージもご用意しております。

Azure ADによる制御

Azure Active Directory(Microsoft Entra ID) を使った認証が可能です。

方法としては、ユーザIDを用いる方法と、VMなどのリソースIDで認証する方法があります。

 ユーザIDリソースID
事前作業対象ユーザのRoleに ”Cognitive Service User” を付与する

アクセス元のVM等にManaged IDを付与する

認証方法

Azure CLIを用いて、Azure にブラウザで認証

Azure マネージド IDを使用して認証
リクエスト方法OpenAI へのリクエストにAccessTokenを付与して送信

通常のリクエスト送信で問題ないが、Credentialの取得が ManagedIdentityCredentialとなる

対応ライブラリ
  • .NET 用 Azure ID ライブラリ
  • Java 用 Azure ID ライブラリ
  • JavaScript 用 Azure ID ライブラリ
  • Python 用 Azure ID ライブラリ
  • Go 用 Azure ID モジュール
  • C++ 用 Azure ID ライブラリ

メリット

  • API キーではなく、CLI利用時にそのユーザによる認証でアクセスできる
  • API キーをクライアントに保存しなくて良い
人を返さないアプリでの認証の他、例えばVMやコンテナに対してのManaged IDを指定することで、各マシンにシークレットキーを保存しなくても AD認証でアクセス可能となる

まとめ

今回は、Azure OpenAI Service の主な機能をご紹介しました。

独自のデータをアップロードすることで、インターネット上には公開されていない専門的な質問にも回答できるようになるため活用の幅が広がりそうです。

日本リージョンも使用可能になり、2023年後半にはFine-Tuningもリリース予定とのことなので、今後さらに便利になりそうです。気になった方はぜひ試してみてください。

最後までお読みいただきありがとうございました。

関連資料

「Azure OpenAI Service」ではじめる、ChatGPTとのシステム連携

Azure OpenAI Serviceの概要や料金、システム構成などをご紹介します。

関連サービス

Azure OpenAI Service

Azure OpenAI Serviceは、OpenAIのAIモデルをMicrosoft Azure上のセキュアな環境で利用できるサービスで、機械学習や自然言語処理などの高度な機能を提供します。簡単にAIを組み込み、スケーラブルなソリューションを構築し、効率的にビジネス価値を生み出すことができます。

Azure OpenAI Service スターターパッケージ

Azure OpenAI Serviceを利用できる環境を迅速に構築し、検証することができるサービスです。セキュアな環境で安心してAIを活用することができます。

OnePort マルチクラウドアクセス

AWS、Microsoft Azure、Google Cloud、ホワイトクラウド ASPIREなどの複数のクラウドに対応した閉域接続サービスです。オンデマンドな帯域変更や接続先追加を可能にします。

詳しくみる

おすすめの記事

条件に該当するページがございません