こんにちは、スクーティー代表のかけやと申します。
弊社は生成AIを強みとするベトナムオフショア開発・ラボ型開発や、生成AIコンサルティングなどのサービスを提供しており、最近はありがたいことに生成AIと連携したシステム開発のご依頼を数多く頂いています。
OpenAIの最新モデル「 OpenAI o3-mini 」は、従来のモデルと比較して、より小さく、より速く、そしてより安価な推論モデルです。まるで、頭脳明晰な小型ロボットのように、複雑な問題もスピーディーに解決してくれます。特に、科学、数学、プログラミングといった、論理的思考を必要とする分野で優れた能力を発揮します。
このモデルの登場で、AIの活用がより身近なものになることが期待されます。さらに、開発者にとっては、関数呼び出しや構造化出力などの高度な機能が使いやすくなっているのも大きな魅力です。
この記事では、OpenAI o3-mini の概要、性能、APIの利用方法について、幅広い読者を対象に、わかりやすく解説します。
OpenAI o3-mini の概要
OpenAI o3-mini とは?:小さなボディに大きな可能性
OpenAI o3-miniは、OpenAIが開発した最新の「推論モデル」です。推論モデルとは、与えられた情報から論理的に結論を導き出す能力に優れたモデルのことを指します。o3-miniは、従来のモデルよりも小型かつ高速でありながら、複雑な問題解決能力を備えている点が大きな特徴です。まるで、小さな体に高性能な頭脳を搭載したロボットのような存在と言えるでしょう。
OpenAI o3-mini の強み:科学・数学・プログラミングで発揮される能力
o3-miniは、特に科学(Science)、数学(Mathematics)、プログラミング(Coding)といった、いわゆる「STEM」分野で優れた能力を発揮します。これらの分野では、論理的な思考と問題解決能力が求められますが、o3-miniはまさにそのニーズに応えるモデルです。例えば、複雑な数式を解いたり、効率的なプログラムコードを書いたりすることが得意です。
この図はCodeforcesのコンペティションにおける、o3-miniとその他のモデルのパフォーマンスの比較です。o3-miniのmediumとhighがこれまでのOpenAIのモデルを凌駕する性能を示していることがわかります。
o3-mini、o1、o1-miniの違い:小型・高速・低コストの実現
o3-miniは、従来の推論モデルであるo1やo1-miniと比較して、より小型で高速、そして低コストで利用できる点が大きな違いです。o1は非常に高い推論能力を持っていますが、サイズが大きく、処理速度も遅い傾向がありました。o1-miniはo1を小型化したモデルですが、o3-miniはさらに小型化・高速化に成功しています。これにより、より多くの人々が手軽に高度な推論モデルを利用できるようになりました。
o3-miniの推論能力:low/medium/highの使い分け
o3-miniでは、「reasoning_effort」というパラメータを使って、推論の「深さ」をlow、medium、highの3段階で調整できます。lowは最も高速で低コストですが、複雑な問題には不向きです。一方、highは処理に時間とコストがかかりますが、より高度な推論が可能です。mediumはその中間のバランス型です。問題の難易度や求める精度に応じて、これらの設定を使い分けることが重要です。
o3 / o3-miniがOpenAIから発表された際の、性能に関する記事もございますので、ぜひご覧ください!
参考記事:OpenAI o3/o3-mini: 人間を超える推論力と安全性を備えた最新AI
OpenAI o3-miniの性能
STEM分野での評価:数学、コーディング、科学で優れた成績
OpenAI o3-miniは、特にSTEM分野(科学、技術、工学、数学)において優れた性能を発揮します。例えば、大学レベルの数学の問題を解く「AIME 2024」という評価では、o3-miniは「high」の設定で83.6%の正答率を達成しました。これは、従来のo1-miniを大幅に上回る成績です。
また、プログラミングの能力を測る「Codeforces」という評価でも、o3-miniは「high」の設定で2130という高いEloレーティングを獲得しています(前述)。これは、プログラミングコンテストで上位に入る実力に相当します。
さらに、博士レベルの科学知識を問う「GPQA Diamond」という評価では、o3-miniは「high」の設定で79.7%の正答率を記録しました。これらの結果から、o3-miniがSTEM分野において非常に高い能力を持っていることがわかります。
人間による評価:専門家が認める推論能力と正確性
o3-miniの性能は、専門家による人間評価でも高く評価されています。OpenAIが実施した評価では、専門家がo3-miniとo1-miniの回答を比較したところ、56%のケースでo3-miniの回答が好まれました。これは、o3-miniの回答が、より正確で明確であり、推論能力も高いと判断されたためです。さらに、難易度の高い問題における重大なエラーの発生率が、o1-miniと比較して39%減少したことも報告されています。これらの結果は、o3-miniが人間にとっても理解しやすく、信頼できる推論モデルであることを示しています。
この図は、STEM分野と非STEM分野における、o3-miniとo1-miniの人間による評価結果の比較です。o3-miniが両分野でo1-miniを上回っていることがわかります。
速度と効率:o1-miniを上回る処理速度
o3-miniは、o1-miniと比較して、処理速度が大幅に向上しています。OpenAIが実施したテストでは、o3-miniはo1-miniよりも平均で24%高速にレスポンスを生成できることが確認されました。具体的には、o3-miniの平均応答時間は7.7秒であるのに対し、o1-miniは10.16秒でした。この高速化は、o3-miniがより効率的なアーキテクチャを採用していることによるものです。ユーザーは、よりスピーディーにo3-miniからの回答を得られるため、作業効率の向上が期待できます。
この図は、o3-miniとo1-miniのレイテンシ(応答時間)の比較です。o3-miniの方がレイテンシが低く、高速に応答できることがわかります。
OpenAI o3-mini APIのコンテキストウィンドウと価格
コンテキストウィンドウの比較:各モデルの処理能力の違い
コンテキストウィンドウとは、モデルが一度に処理できる情報の量(トークン数)のことです。以下は各モデルのコンテキストウィンドウの比較表です。
モデル | コンテキストウィンドウ |
---|---|
o3-mini | 200,000トークン |
o1-mini | 128,000トークン |
o1 | 200,000トークン |
gpt-4o | 128,000トークン |
o3-miniのコンテキストウィンドウは200,000トークンであり、これはo1-miniの128,000トークンよりも大きくなっています。一方、より大規模なモデルであるo1は200,000トークン、gpt-4oは128,000トークンのコンテキストウィンドウを持っています。コンテキストウィンドウが大きいほど、より多くの情報を考慮した上で推論を行うことができるため、複雑な問題や長文の処理に適しています。
価格の比較:各モデルのコストパフォーマンス
以下は、各モデルの価格比較表です。
モデル | 入力 (100万トークンあたり) | 出力 (100万トークンあたり) |
---|---|---|
o3-mini | $1.10 | $4.40 |
o1-mini | $1.10 | $4.40 |
o1 | $15.00 | $60.00 |
gpt-4o | $2.50 | $10.00 |
o3-miniの価格は、入力トークンあたり100万トークンあたり1.10ドル、出力トークンあたり100万トークンあたり4.40ドルです。これは、o1-miniと同じ価格設定であり、o1の入力トークンあたり100万トークンあたり15ドル、出力トークンあたり100万トークンあたり60ドルと比べると大幅に安価です。gpt-4oは、入力トークンあたり100万トークンあたり2.5ドル、出力トークンあたり100万トークンあたり10.00ドルです。o3-miniは、o1-miniと同等の価格でより高い性能を実現しているため、コストパフォーマンスに優れたモデルと言えるでしょう。
API利用時の注意点:推論トークンと出力トークンの違い
o3-miniをはじめとする推論モデルでは、ユーザーが入力したトークン(入力トークン)と、モデルが生成した応答のトークン(出力トークン)に加えて、「推論トークン」が使用されます。推論トークンは、モデルが内部的に推論を行うために使用するトークンであり、ユーザーには見えません。しかし、推論トークンもコンテキストウィンドウを消費し、課金の対象となるため注意が必要です。
具体的には、ユーザーがAPIを介してo3-miniを利用する際、入力した文章や指示だけでなく、モデルが内部で推論を行うために生成するトークンもカウントされます。例えば、複雑な問題を解かせる場合、モデルは多くの推論トークンを生成して、様々な可能性を検討します。その結果、ユーザーが目にする出力トークン数よりも、実際に消費されるトークン数が多くなることがあります。
API利用時には、completion_tokens_detailsオブジェクトで推論トークン数を確認できます。このオブジェクトには、以下の表のように、reasoning_tokens、accepted_prediction_tokens、rejected_prediction_tokensという3つのフィールドが含まれます。
フィールド名 | 説明 |
---|---|
reasoning_tokens | 推論に使用されたトークン数 |
accepted_prediction_tokens | 最終的な出力に採用されたトークン数 |
rejected_prediction_tokens | 推論の過程で生成されたものの、最終的な出力には採用されなかったトークン数 |
これらの値を合計することで、総消費トークン数を把握できます。
推論トークンは、ユーザーが設定したreasoning_effortパラメータ(low、medium、high)によっても変動します。highに設定すると、モデルはより多くの推論トークンを生成して、慎重に推論を行うようになります。そのため、high設定では、lowやmedium設定と比べて、推論トークンの消費量が多くなる傾向があります。例えば、reasoning_effortをlowに設定した場合は平均で約5000トークン、mediumの場合は平均で約15000トークン、highの場合は平均で約30000トークンの推論トークンが消費される傾向があります。
また、max_completion_tokensパラメータを設定することで、生成される総トークン数(推論トークンと出力トークンの合計)の上限を制御できます。ただし、このパラメータは出力トークン数のみを制限するものではないことに注意してください。推論トークンが大量に生成された場合、max_completion_tokensの値に達する前に、出力トークンの生成が停止される可能性があります。
API利用時には、推論トークンも含めた総トークン数がコンテキストウィンドウ内に収まるようにする必要があります。特に、長文の入力や複雑な指示を与える場合は、推論トークンの消費量が多くなることを想定して、コンテキストウィンドウに十分な余裕を持たせることが重要です。また、max_completion_tokensの値を適切に設定することで、予期せぬコストの発生を防ぐことができます。例えば、入力トークン数が5000トークン、reasoning_effortがmediumの場合、推論トークン数は平均で約15000トークン程度になると想定されます。そのため、出力トークン用に少なくとも10000トークン分の余裕を持たせるには、max_completion_tokensを25000以上に設定することが推奨されます。
OpenAI o3-mini (high) で簡単なプログラムを書いてみる
「ChatGPT o3-mini-high」を選択すると、o3-mini highを使用できます。とりあえず将棋のゲームを作ろうと思うので、以下のプロンプトを入力しました。
将棋の対戦ができるJavaScriptのプログラムを書いてください。ただし、以下の#条件に厳密に従ってください。
#条件
・操作はキーボードでできるようにしてください。
・駒は日本の将棋のデザインにしたがってください。
・駒の動きも日本の将棋のルールに完全に従ってください。
・プログラム起動時は、将棋の初期状態の駒の配置にしてください。
すると、プロンプト実行から3秒程度で推論の思考過程が画面に表示され出しました。しばらく待ちます。
2, 3分すると、プログラムがズバーっという感じで出力されました。
動作をChatGPT上で確認してしまいたいので、Canvas機能を使用するためにこの状態で画面右上からモデルをGPT-4oに切り替えます。これは、o1やo3-miniのような推論モデルではCanvas機能を使用できないためです。GPT-4oに切り替えたあと、チャット入力欄の「…」をクリックして、Canvasを選択します。
この状態で「上記プログラムを実行してください。」と入力すると、o3-mini-highが作成したプログラムをそのままCanvasで実行してくれます。ただし、一度Canvasを使用すると、そのセッション内ではo3-miniに戻ることができなくなるため、o3-miniで作成したプログラムを対話形式で随時修正したい場合は、この方法は使用できません。
今回のケースの場合、Canvasが将棋の盤面を表現するHTMLを書いてくれましたが、o3-miniが作成したプログラムを組み込んでいなかったり、いくつか動作していない部分があったため、その部分はGPT-4oに修正させました。
結果は・・・うーん、動かない笑
ちなみに、こちらの投稿で紹介されているプロンプトをそのまま入力してみましたが、一発で動作するものができました!
o3-miniが出力したプログラムをそのままp5.js Web Editorにペーストした実行結果が以下になります。