このエントリは2023/06/21現在の情報に基づいています。将来の機能追加や変更に伴い、記載内容からの乖離が発生する可能性があります。
最近Azure OpenAI Service (以後AOAI) に関する問い合わせが増えている。そんな問い合わせから2つご紹介。
問い合わせ
[1] AOAIのUse your data (On your own dataとも) がPreviewで利用できるようになったので試そうとしている。過去に作成したAOAIリソースを削除し、再度同じ名前で作成しようとしたが作成できなかった(過去に使った名前なら大丈夫だった)。どうすればよいのか?
[2] Use your dataのPreviewで追加されたCompletions extensions APIを使おうとしているが、ドキュメントを見てもいまいち設定すべきパラメータがわからない。何をどうすればいいのか?
On your own dataのPreviewはこちら。
Azure OpenAI on your data (preview)
https://learn.microsoft.com/azure/cognitive-services/openai/concepts/use-your-data
https://learn.microsoft.com/azure/cognitive-services/openai/use-your-data-quickstart
[1] AOAIリソースの削除後、同一名のリソース作成に失敗する
文字通り、AOAIリソースの削除後すぐに同じ名前で作成すると作成できない、ということ。
理由と解決策
これはリソースが論理削除状態でとどまっているため。論理削除状態は48時間継続し、その後パージされる(明示的にパージも可能)。パージされると同じ名前で作成できる。API ManagementやKey Vaultと同じ考え方(実はちゃんと削除時に案内が出ているのだが)。
やってみる
今回対象のリソースはEast USリージョンに作成したAOAI。

で、このリソースを削除するためにDeleteをクリックすると…

ちゃんと「48時間は同じ名前で作成できないよ」との記載がある。パージと復旧についてドキュメントの案内も提示されている。これはCognitive Servicesで共通するしくみ。
削除された Cognitive Services リソースの復旧 / Recover deleted Cognitive Services resources
https://learn.microsoft.com/azure/cognitive-services/manage-resources
パージや復旧は、ドキュメントの通り、Cognitive Services API の種類のハブに移動し、メニューから Manage deleted resources(削除されたリソースの管理)を選択すると、右側に削除したAOAIリソースが現れる。先ほど削除したAOAIリソース(赤下線)も発見できる。

この画面から、Recover(復旧)もしくはPurge(パージ)を選択すれば復旧もしくはパージする。今回は同名のAOAIリソースを作成したいので、Purgeをクリックし、確認メッセージに対してConfirm(確認)すればパージできる。
なお、AOAIリソースにQuotaを割り当てている場合、論理削除状態では割り当てられているQuotaが解放されないことがあるので、明示的にパージすると何かと都合がよい。
[2] Completions extensions APIの設定パラメータ
これはUse your dataが開始したタイミングで追加されたAPIで、独自データのエンドポイント情報を指定し、ユーザーの入力をつけてリクエストすると、Azure Open AIがよしなにやってくれる、というもの。すでに以下のブログで解説されているので試した人も多いかもしれない。
独自ナレッジをノーコードでChatGPTに連携!Azure Open AI「Add your data」
Azure Open AIの「Add your data」をAPIとして使う!
Use your dataでWebアプリをデプロイしていれば、以下のようなUIを持つ、App ServiceでホストされたPythonアプリがFrontendとして動作することを確認できるはず。

上記のブログエントリに記載されているが、このAPIは下図のように2個の経路、一つはAOAIから、もう一つはWeb Appから呼び出すことができる。

①AOAIから呼び出す
API Referenceがあるものの、少々わかりづらい。Use your dataのコンセプトドキュメントにAPIの利用について記述があるので、それも参考にしてもらいたいが、この中で「chatgpt_urlって何を指定すればいいのか?」が一番の疑問。
Completions extensions
https://learn.microsoft.com/azure/cognitive-services/openai/reference#completions-extensions
Using the API
https://learn.microsoft.com/azure/cognitive-services/openai/concepts/use-your-data#using-the-api
で、まとめたのが以下。環境変数はUsing the APIのページに記載のものに整合するようにしている。
| Method | POST |
| URL | $AOAIEndpoint/openai/deployments/$AOAIDeploymentId/extensions/chat/completions?api-version=2023-06-01-preview |
| Content-Type | application/json |
| api-key | AOAIのAPI Key |
| chatgpt_url | $AOAIEndpoint/openai/deployments/$AOAIDeploymentId/chat/completions?api-version=<API Version> # このURLは以下のページのURLを使う Chat completions https://learn.microsoft.com/azure/cognitive-services/openai/reference#chat-completions |
| chatgpt_key | AOAIのAPI Key |
| Request body | { “dataSources”: [ { “type”: “AzureCognitiveSearch”, “parameters”: { “endpoint”: “’$SearchEndpoint’”, “key”: “’$SearchKey’”, “indexName”: “’$SearchIndex’” } } ], “messages”: [ { “role”: “user”, “content”: “What is virtual threads?” } ] } |
②Web Appから呼び出す
呼び出し方は以下の通り。
| Method | POST |
| URL | <Web AppのURL>/conversation |
| Authorization | Bearer token |
| Content-Type | application/json |
| Request body | { “messages”: [ { “role”: “user”, “content”: “What is virtual threads?” } ] } |
このAPIをホストするWeb AppがAzure ADで認証するよう構成されているため、API呼び出しにあたってはBearer tokenをつける必要がある。本気で利用するならOAuth 2.0のお作法に則る必要があるが、テスト目的であれば、
<Web AppのURL>/.auth/me
をブラウザで開き、そこに現れるid_token(水色の部分)をbearer tokenとして渡せば、動作確認はできる。
