この記事は、「からあげ帝国 Advent Calendar 2024」の 18日目の記事です。
はじめに
今回の記事では、『AIは「からあげ」と「とり天」を見分けられるのか』という先行研究の内容を、先行研究とは異なるモデルで試します。
まずは、元ネタとなる先行研究を少し紹介します。
先行研究
この記事の先行研究は、以下の「からあげ帝国 Advent Calendar 2024」の 3日目の記事でもある @n0bisuke さんの記事です。
●AIは「からあげ」と「とり天」を見分けられるのか。Gemini、Claude、GPTのVision検証 - Qiita
https://qiita.com/n0bisuke/items/89d42b0131fdc1febcc5
モデルとしては、記事タイトルに書かれたもので試されていたようです。
試していく内容
利用するモデル
上記の再検証で使うモデルは、最近リリースされた「ChatGPT での o1モデル」と「OpenAI API の o1」です!
※ 既に提供済みになっていた「o1-preview」などの正式リリース版
利用する画像
用いる画像については、上記の再検証という観点から比較が行いやすいよう、先行研究と同じ画像を使います。
利用するプロンプト
上記の利用する画像と同じ理由で、先行研究と同じプロンプトを用いることとします。
【プロンプト】
あなたは画像の説明が上手い優秀なアシスタントです。この画像に何が写っているのかを小学生にも分かるように丁寧に説明をしてください。
o1 の正式リリースに関する補足
今回使う正式版の o1 のリリース時期について、ここで少し触れておきます。
現在、OpenAI が「12 Days of OpenAI」として新発表祭りをやっていますが、その中で o1 の正式リリースが発表されました。
●12 Days of OpenAI | OpenAI
https://openai.com/12-days/
ChatGPT での o1 の正式版
ChatGPT での o1 の正式リリースは、以下の Day 1 での発表内容です(2024/12/6 の発表)。
この公式のポストで「o1 now also supports image uploads, ...」と書かれているように、プレビュー版の際には使えなかった o1 での画像アップロードが可能になりました。
OpenAI API での o1 の正式版
また o1 の API提供(既に提供済みだった o1-preview ではないもの)のリリースは、以下の Day 9 のタイミングでの発表内容です(2024/12/18 の発表)。
また公式のポスト以外にも、以下の公式の記事も出ています。
●OpenAI o1 and new tools for developers | OpenAI
https://openai.com/index/o1-and-new-tools-for-developers/
API に関する仕様は、以下を見れば良さそうです。
●Models - OpenAI API
https://platform.openai.com/docs/models#o1
今回の本題とは外れますが、同じタイミングで発表された「Realtime API の WebRTC での利用」という話も、個人的にはすごく気になるところです。
(※ 上記の記事で「Realtime API updates(opens in a new window), including simple WebRTC integration, ...」と書かれている部分)
実際に試していく
それでは実際に試していきます。
ChatGPT での o1 の正式版
まずは、ChatGPT での o1 の正式版です。
「とり天」
まずはこちらです。
正式版の o1 はプレビュー版だったころと異なり、アップロードされた画像を読みこんで処理できることは確認できました。
この写真には、お皿の上に、衣(ころも)をつけてカリッと揚(あ)げたお肉のかたまりがいくつかのっています。揚げたお肉は、少し黄色みがかった色で、ふんわりしておいしそうです。お皿のわきには、黄色いからし(マスタード)のような調味料(ちょうみりょう)が入った小さな入れ物と、緑色の葉っぱがかざりとしてそえられています。全体的に、おうちで食べる揚げものよりも、少し上品(じょうひん)なかんじがする、レストランで出てきそうな一皿(ひとさら)です。
この説明だと合っているかどうか判定しづらいので、追加でダイレクトに料理名を聞いてみます。
そうすると、とり天であることを明示的に回答してくれました!
「からあげ」
つぎはこちらです。
新しいチャットを開いて、そこから画像アップロードとプロンプトの入力を行います。
この写真には、茶色くカリッとした揚げ物がいくつかお皿にのっています。それは「からあげ」という、鶏肉(とりにく)をしょうゆやしょうが、にんにくなどで味つけして、ころもをつけて揚(あ)げた料理です。お皿には、からあげのとなりに緑色のレタスや、黄色いレモンの切(き)り口が添(そ)えられていて、見た目もとてもおいしそうです。からあげは外がカリカリで中はジューシーな食べ物で、ごはんのおかずにも、おやつにもなる人気の食べ物です。
こちらの回答は、最初から「からあげ」であることを答えてくれました。
「とり天」「からあげ」の2回目
もう1回ずつ、試してみます。
今度は、本文中に「とり天」という言葉がでてきました。
からあげのほうも試してみましたが、こちらは 2回目も「からあげ」だという回答が返ってきました。
OpenAI API での o1 の正式版
次に、API で試してみます。
モデルとコード
現時点で、モデルの種類は以下となるようでした。
次はコードの準備です。
今年5月ごろに、以下のような記事を書いていました。
- GPT-4o の入力に Base64エンコードした画像ファイルを使う:Node.js の process.loadEnvFile() と OpenAI のライブラリの組み合わせ #JavaScript - Qiita
- GPT-4o の入力に 2つ/3つの画像ファイルを使う(画像は Base64エンコード):OpenAI の Node.js用ライブラリを利用 #JavaScript - Qiita
上記で使っていたコードを流用します。
モデルを o1-2024-12-17
に変更し、プロンプトを上で使ったものと同じにします。
※ 記事執筆時点だと o1 と指定しても上記と同じ o1-2024-12-17 になるようです
import OpenAI from "openai";
import fs from "fs";
process.loadEnvFile("./development.env");
const openai = new OpenAI();
async function main() {
const message = "あなたは画像の説明が上手い優秀なアシスタントです。この画像に何が写っているのかを小学生にも分かるように丁寧に説明をしてください。";
console.log(message);
const imagePath = "./input.jpg";
const imageBuffer = fs.readFileSync(imagePath);
const imageBase64 = imageBuffer.toString("base64");
const response = await openai.chat.completions.create({
model: "o1-2024-12-17",
messages: [
{
role: "user",
content: [
{ type: "text", text: message },
{
type: "image_url",
image_url: {
url: `data:image/jpeg;base64,${imageBase64}`,
},
},
],
},
],
});
console.log(response.choices[0]);
}
main();
軽く試してみたらエラーが...
何か制限でもあるのだろうかと、公式の記事などを見てみました。
そうすると、 o1-preview が出た当初と同じく「tier 5」という制約が...
さすがに tier 5 の課金は避けたいので、API のほうはいったん見送りに。
ちなみに tier 1 です。
いちおう、ダメ元で o1-preview の API(※ 記事執筆時点では、リリース当初と異なり tier 1 で OK)でやってみましたが、やはり画像入力に対応してないよ、という感じのレスポンスが。
おわりに
今回の記事では、『AIは「からあげ」と「とり天」を見分けられるのか』という先行研究の内容を、o1 で再検証しました。
残念ながら tier 1 の自分は API は試せずで、Web版の ChatGPT でのみ再検証した形でした。
今回の結果は結論を出すには試行回数が少なすぎますが、仮の結果として『o1 で「からあげ」と「とり天」を見分けられたのではないか』ということにしようと思います。