はじめに
先日衝撃的に登場したAzure OpenAI on your dataですが
ChatGPT プレイグラウンドに加えてAPIでも利用できるようになっています。
APIがうまく動かせなくてものすごくハマったので注意点をメモしていきます。
やってみた
ChatGPT プレイグラウンドにてon your dataの設定を済ませてさあAPIで動かしてみるぞ!って張り切っていました。
{"error":{"code":"InternalServerError","message":"Backend returned unexpected response. Please contact Microsoft for help."}}
何度試してもこのエラーが返されてしまい設定したパラメータを何度も確認したのですが
このエラーメッセージからは正直言いますとエラーの原因が分からず途方に暮れていました・・・
考察
APIの詳細を見ていきましょう。
まずはエンドポイントから
POST {your-resource-name}/openai/deployments/{deployment-id}/extensions/chat/completions?api-version={api-version}
your-resource-name
はお馴染みのhttps://xxxxx.openai.azure.com
のようなエンドポイントが発行されますのでそれを設定します。
deployment-id
はデプロイしたモデル名を指定します。私はgpt-4
をデプロイしました。
api-version
は2023-06-01-preview
を設定しました。
このエンドポイントには/extensions/
というパスが含まれています。
入力候補の拡張機能とありこれは通常のchat completionsと異なるものになるかなと思います。
ではいよいよパラメータ仕様を見ていきます。
ここからが超重要ですw
最低限動作させるのに必要なパラメータは以下になります。
これはドキュメント通りだったと思いますね。
一つ一つ見ていきます。
curl -i -X POST YOUR_RESOURCE_NAME/openai/deployments/YOUR_DEPLOYMENT_NAME/extensions/chat/completions?api-version=2023-06-01-preview \
-H "Content-Type: application/json" \
-H "api-key: YOUR_API_KEY" \
-H "chatgpt_url: YOUR_RESOURCE_URL" \
-H "chatgpt_key: YOUR_API_KEY" \
-d \
'
{
"dataSources": [
{
"type": "AzureCognitiveSearch",
"parameters": {
"endpoint": "'YOUR_AZURE_COGNITIVE_SEARCH_ENDPOINT'",
"key": "'YOUR_AZURE_COGNITIVE_SEARCH_KEY'",
"indexName": "'YOUR_AZURE_COGNITIVE_SEARCH_INDEX_NAME'"
}
}
],
"messages": [
{
"role": "user",
"content": "What are the differences between Azure Machine Learning and Azure Cognitive Services?"
}
]
}
'
api-key
は発行されたAzure OpenAI用のAPIキーを設定しましょう。これはいつもchat completionsなど利用しているものと同じですね。
そしてchatgpt_url
がとてもトリッキーなポイントですw
https://xxxxx.openai.azure.com/openai/deployments/xxxxx/chat/completions?api-version=2023-03-15-preview"
これはextensions用ではなくていつも皆さんが使っているchat completionsのエンドポイントが正解だったのです。
ここにextensions用のエンドポイントを設定していたため先ほどのエラーが出ていました。
chatgpt_key
はapi-key
と同じもので問題ありません。
dataSources
部分を見ていきましょう。
endpoint
はCognitive Searchの設定で発行されたエンドポイントを設定しましょう。
おそらくhttps://xxxxx.search.windows.net
のような感じになっていると思います。
key
もちょっと注意が必要ですね。
Cognitive Searchの設定で発行された管理者キーを設定してください。
クエリ キーではエラーが返却されて動作しませんでした・・・
indexName
は作成したインデックス名を指定すればOKです。
messages
パラメータはいつもと変わらない感じで大丈夫です。
さいごに
この問題が解決するまで1週間くらいネットを彷徨ってました。
解決できたときはとても嬉しかったですね。
エンジニアの皆様としてはやはりAPIでちゃんと動いてくれないと辛いものがありますよね。
同じように困った人に参考になる情報であれば幸いです。