フォーム読み込み中
今回は、Azure OpenAI Service の概要と利用できる機能を、実際に試してみた際の画面とともにご紹介します。
使い方の詳細や利用方法は「Azure OpenAI Serviceを使ってみた〜申請・利用方法〜」の記事で詳しく紹介しているので、そちらもご確認ください。
Azure OpenAI Service では、Microsoft社のクラウドサービス「Microsoft Azure」上で、ChatGPTなどOpenAIの高度な言語モデルを活用し、自然言語による質疑応答や翻訳、コードの生成、画像の生成など、さまざまなタスクを実行することが可能です。
「ChatGPTとは? Azure OpenAI Serviceとの違いも分かりやすく解説」でOpenAI との違いも解説していますので、ご覧ください。
ここからは、実際に利用できる機能について、技術的な内容も含めて詳しくご紹介します。
Azure OpenAI Service は、次の4つの要素で構成されています。
Azure OpenAI Service では、事前にトレーニングされたモデルが用意されているため、学習データを用意する必要がありません。また、Azure OpenAI Studio というUIも用意されているため、自前でアプリを用意しなくても試すことができます。
Azure OpenAI Service で現在利用できるモデルと概要は以下の通りです。モデルごとに機能が異なりますので、使用したい機能にあわせてモデルを選択してください。
なお、最新の状況については、Microsoft Azure の公式ドキュメントをご確認ください。
| モデル | 概要 |
|---|---|
| GPT-3.5 | 自然言語の生成、コードの生成 |
| GPT-4 | 最新モデル
|
| DALL-E | 画像の生成と編集 |
Embedding(埋め込み) | テキストを数値ベクトルに変換できます。 これによりテキストの類似度を算出・分類できます。 |
質問への回答やメール文の作成などができます。一問一答ではなく、前の話題を引き継いだ回答も可能です。
ほかにも、日常会話やテキスト翻訳、要約、添削、アイデアの提案などもできます。
自然言語で作成したいコードを入力すると、それに合ったコードを生成してくれます。
今回は試しに「pythonで電卓の機能を作成してください」と入力しました。
生成されたコードをコピーしてメモ帳に貼り付け、「OpenAI_calculator.py」と名前を付けて保存した後、実行してみたところ電卓として機能しました。
今回は python で試しましたが、それ以外の言語を指定することもできます。ほかにも自身が作成したコードの添削や別の言語への書き換えなども可能です。
テキストから画像を生成することができます。
今回は目玉焼きの画像を生成できるか試してみました。
各画像の生成で入力したテキストは以下になります。
右端:目玉焼き
中央:卵をフライパンで焼いている
左端:fried egg
日本語で「目玉焼き」と入力した場合(右端の画像)、なぜか焼き魚の画像が生成されました。その後も何度か試してみましたが、焼肉や魚介類を焼いたものの画像が表示されたため、「焼き」の画像になっていそうです。
次に、単語ではなく文章で「卵をフライパンで焼いている」と入力した場合(中央の画像)、それらしい画像が表示されました。
最後に英語で「fried egg」と入力した場合(左端の画像)、希望通りの画像が表示されました。
このことから、日本語でも画像生成はできますが、精度は英語には及ばないようです。画像生成で意図した結果が得られない場合は、テキストを英語に翻訳してから生成すると希望の画像が生成できるかもしれません。
また、日本語で指定する場合も単語などの短いものより、文章で細かく指定した方が希望の画像に近づけることができるようです。
Azure OpenAI Service では、回答精度を上げるための3つの手法があります。
Azure OpenAI Service で使用できる GPT-3.5 と GPT-4 のモデルでは、プロンプトと呼ばれる命令文を使用して指示を与えます。Azure OpenAI Service ではプロンプトでシステムメッセージとパラメータを設定でき、それらを変更することでより希望に沿った回答を得られるようになります。
システムメッセージでは、役割や回答例を設定できます。役割や回答例を与えることで、用途にあった回答や精度の高い回答を得ることができます。
システムメッセージは、画面左 Assistant setup 内の System message タブで設定できます。
システムメッセージでは、次の3つを設定することができます。
| 種類 | 概要 | 例 |
|---|---|---|
| system | 役割を設定 | あなたはテクニカルサポートの担当者です。 ユーザからの質問で足りていない情報があればヒアリングしてください。 |
| user | ユーザの入力例 | 急にエラーが出るようになった。 |
| assistant | ユーザ入力に対する回答例 | お問い合わせありがとうございます。事象について詳細を教えていただけますか。
|
上記のシステムメッセージを指定した場合の例を紹介します。
システムメッセージ指定なしの場合
システムメッセージ指定ありの場合
システムメッセージを指定しなかった場合は、一般的に考えられる原因を回答していますが、システムメッセージを指定した場合は、systemに「ヒアリングしてください。」と入力した通り、ユーザに必要な情報を聞き返しています。また、assistantで指定した回答例に合わせて箇条書きになっています。
Azure OpenAI Service に社内データなどの独自のデータを追加することで、追加したデータを参照して回答を生成できるようになります。アップロードしたデータのみを参照するか、併用するかを選択できます。
独自データを追加した場合の処理は以下の図の通りです。
独自のデータを使用する場合は、Assistant setup の Add your data タブでデータソースを指定します。
データソースは以下の3つから選択できます。
使用できるファイルタイプは以下の通りです。
Upload files でファイルをアップロードすると、自動的に文書が分割されインデックスが作成されます。
「Limit responses to your data content」にチェックを入れた場合は、独自のデータのみを使用して回答が生成されます。チェックを外した場合は、通常の回答と独自のデータを併用した回答が返されます。
独自のデータを使用して回答が生成された場合、回答と参照したデータのリンクが返るため、どのデータをもとに回答が生成されたのか確認できます。
独自のデータ内に関連するデータがなかった場合、その旨のメッセージが返されます。
Fine-Tuning で、多くの例を学習させることで、用途にあった結果を得られるようになります。また、プロンプトに多くの例を指定する必要がなくなるためトークンが節約できます。これによりコストや処理時間を減らすことができます。
なお、Azure OpenAI Service では現在は利用を停止しています。2023年後半に Fine-Tuning可能なモデルをリリース予定です。
4つのカテゴリ(ヘイト、性的、暴力、自傷)ごとにリスクが3段階(高・中・低)に分類され、どのレベルまで許可またはブロックをするかをInputとOutputでそれぞれ指定できます。
Input で低リスクまで許容した場合
Input でリスクを許容しない場合
コンテンツフィルタでブロックされた場合、その旨のメッセージが表示されます。
認証による制御とネットワークによる制御が可能です。
Azure OpenAI Service で選択できるネットワーク設定は3種類あります。
| 種類 | 概要 |
|---|---|
| すべてのネットワーク | インターネットなどすべてのネットワークがアクセスできます。 |
| 選択したネットワークとプライベートエンドポイント | 以下の3つをそれぞれ指定できます。
|
| 無効 | アクセスできるネットワークはありません。 仮想ネットワーク内のプライベートエンドポイントを介してアクセスします。 |
すべてのネットワークの場合
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 } }
選択したネットワークとプライベートエンドポイント(仮想ネットワーク)の場合
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 } }
無効(プライベートエンドポイント)の場合
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 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となる |
| 対応ライブラリ | − |
|
メリット |
| 人を返さないアプリでの認証の他、例えばVMやコンテナに対してのManaged IDを指定することで、各マシンにシークレットキーを保存しなくても AD認証でアクセス可能となる |
今回は、Azure OpenAI Service の主な機能をご紹介しました。
独自のデータをアップロードすることで、インターネット上には公開されていない専門的な質問にも回答できるようになるため活用の幅が広がりそうです。
日本リージョンも使用可能になり、2023年後半にはFine-Tuningもリリース予定とのことなので、今後さらに便利になりそうです。気になった方はぜひ試してみてください。
最後までお読みいただきありがとうございました。
Azure OpenAI Serviceは、OpenAIのAIモデルをMicrosoft Azure上のセキュアな環境で利用できるサービスで、機械学習や自然言語処理などの高度な機能を提供します。簡単にAIを組み込み、スケーラブルなソリューションを構築し、効率的にビジネス価値を生み出すことができます。
Azure OpenAI Serviceを利用できる環境を迅速に構築し、検証することができるサービスです。セキュアな環境で安心してAIを活用することができます。
AWS、Microsoft Azure、Google Cloud、ホワイトクラウド ASPIREなどの複数のクラウドに対応した閉域接続サービスです。オンデマンドな帯域変更や接続先追加を可能にします。
条件に該当するページがございません