このエントリは2024/04/25現在の情報に基づいています。将来の機能追加や変更に伴い、記載内容からの乖離が発生する可能性があります。
問い合わせ
最近Azure OpenAI Service (以後AOAI) にご執心のもう一人のいつもの人から以下のような問い合わせをもらった。
現在GPT-4vを使っていろいろためしているのだが、動画にせよ、写真にせよ、複数個投げ込む場合にはどのようにリクエストを構成すればよいか?
少々わかりづらいので、もうちょいと突っ込んで尋ねてみたところ、以下のような疑問らしい。
- REST APIのリクエストについて知りたい
- REST API Referenceを見る限り、配列を渡すようだが、この配列において、プロンプトとイメージをペアにしなければならないのか
確かに
REST API referenceを見るとサンプルメッセージはあるものの、1個のイメージを投げるサンプルしかない。
Chat completions
https://learn.microsoft.com/azure/ai-services/openai/reference#chat-completions
{
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": [
{
"type": "text",
"text": "Describe this picture:"
},
{
"type": "image_url",
"image_url": {
"url": "https://learn.microsoft.com/azure/ai-services/computer-vision/media/quickstarts/presentation.png",
"detail": "high"
}
}
]
}
]
}
これを見ると、確かに問い合わせ主のように、「image_urlが複数ある場合に、text、つまりプロンプトもペアにする必要があるのか?」という疑問がわくのは自然である。でもこれ、Azure OpenAI Studio (以後、AOAI Studio) で試せばわかるんじゃなかろうか。
AOAI Studioで試す
写真3枚を使って、撮影された都市と季節を推定してください、と問い合わせた場合のJSONがこれ。
{
"messages": [
{
"role": "system",
"content": [
{
"type": "text",
"text": "You are an AI assistant that helps people find information."
}
]
},
{
"role": "user",
"content": [
{
"type": "text",
"text": "以下の写真から、撮影された都市と季節を推定してください。"
},
{
"type": "image_url",
"image_url": {
"url": "<base64 image>"
}
},
{
"type": "image_url",
"image_url": {
"url": "<base64 image>"
}
},
{
"type": "image_url",
"image_url": {
"url": "<base64 image>"
}
}
]
}
],
"temperature": 0.7,
"top_p": 0.95,
"max_tokens": 800
}
このmessages[1].content
、つまりuser
ロールの内容からわかる通り、以下のよう。まさにAOAI Studioさまさまである。
text
(つまりプロンプト)は1個でOKimage_url
(イメージの在処、もしくはBase64エンコーディングしたもの)は複数渡すことができる- イメージの処理順序は決まっていない(JSONは順序を保証しておらず、スキーマにも順序を示す要素が存在していない)