Azure OpenAIでo1-miniを試す GPT-4oと比較

## はじめに

2025/3/4時点で、Azure OpenAIでアクセス申請なしですぐに使用できるo-series(o1,o3等のReasoningモデル)は、o1-miniになります。
最新モデルなんてきっとお高いんでしょうと思うかもしれませんが、お値段も手頃な試しやすいモデルになっています。
[Azure OpenAI の推論モデル
](https://learn.microsoft.com/ja-jp/azure/ai-services/openai/how-to/reasoning?tabs=python-secure)
[お値段](https://azure.microsoft.com/en-us/pricing/details/cognitive-services/openai-service/)

システム開発でGPT-4oを使うことが多いのですが、より正確な回答が出るなら処理時間長くてもo-series使ってみたいなというところで、試してみました。

## 使ってみる

Azure OpenAIにてモデルカタログから選択し、すぐにデプロイできます。
リージョンはeastus2にしています。

![model_catalogue.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3781545/224dd3d5-1007-495d-9177-35513cc0ddda.png)

![deploy.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3781545/ee816db4-af18-4ef2-92ad-d6417980eb95.png)

## API実行

プレイグラウンドからもすぐに使えます。
以下は、PythonでAPI実行するサンプルです。

```python
# pip install openai
from openai import AzureOpenAI

client = AzureOpenAI(
    azure_endpoint = "https://XXXXX.openai.azure.com/", 
    api_key="XXXXXXX",  
    api_version="2024-12-01-preview"
)
message = "hello"
response = client.chat.completions.create(
    model="o1-mini",
    messages=[
        {"role": "user", "content": message},
    ],
    max_completion_tokens = 5000
)
print(response.model_dump_json(indent=2))
```

## GPT-4oとの比較

### Reasoningモデルの特徴
Reasoningモデルは、STEM領域と言われる、Science, Technology, Engineering, Mathematics等での複雑なタスクが得意とされています。代表的なものでは、コーディングとか数学の問題とかですね。
[OpenAIの説明](https://help.openai.com/en/articles/7864572-what-is-the-chatgpt-model-selector)

論理的思考が必要なタスクを順序立てて解いていくことで、処理に時間がかかるけれど、その分複雑な問題に答えられます。
[思考する仕組み](https://platform.openai.com/docs/guides/reasoning/#how-reasoning-works)も紹介されています。reasoning tokensを使って思考して、段階を踏んで回答を出しています。

GPTモデルとの違いは[こちら](https://qiita.com/syukan3/items/cbd6a4fcc02fe662877c)のページがわかりやすいです。

### 性能 

o1-miniが得意とされるコーディング能力について試してみました。
以下の内容を、o1-mini、GPT-4oそれぞれにやらせてみます。

```
以下の動作をするHTML、Javascript、CSSを作成して

テキストボックスがあり、文字を入力できる
テキストボックスの右横にボタンがあり、クリックするとテキストボックスに入力した文字列を表示したボックスが生成される
生成されたボックスはドラッグして画面上を自由に動かしてドロップすると配置することができる

ボックスをつなぐ線の生成ボタンがあり、クリックすると線が生成される
線は、生成後、ドラッグして先端がボックスに触れた状態でドロップすると、ボックスに接続することができる
線は、2つのボックスに接続でき、ボックスが移動すると接続したボックス間が離れた分、線が伸びる

ボックスにはいくつでも線が接続できる
```

結果、GPT-4oは微妙なものができ、o1-miniはほぼ期待通りのものができました。

#### GPT-4o
ボックスは生成できるけれど、線がつなげない
![gpt-4o.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3781545/e9baad06-5c4e-4b7c-9a78-17dc4bb92fdf.png)

#### o1-mini
ボックス生成も線のつなぎも期待通り
![o1-mini.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3781545/18907d17-a8af-45ee-8618-15e91e383f18.png)

GPT-4oだと色々プロンプト変えても中々思い通りにならないですが、o1-miniやるじゃんと思いました。

### コスト・時間

上記タスクで比較してみます。
GPT-4oは`max_tokens=5000`、o1-miniは`max_completion_tokens=5000`としています。

| |o1-mini | GPT-4o |
|---|---|---|
| 使用トークン数(同プロンプトで何回か実行した大まかな平均) | 3,000  | 1,500  |
| 推論トータル処理時間(同プロンプトで何回か実行した大まかな平均) | 30秒  | 23秒  |
| 1M(100万)トークン当たりのコスト(Input)  | 164円 | 373円  |
| 1M(100万)トークン当たりのコスト(Output)  | 657円 | 1,495円  |

いずれもeast us2のGlobalでのコスト

#### コスト
o1-miniの方が同じタスクでたくさんトークン使いますが、トークン当たりの値段は4oより安く、トークン倍使うけど値段は半分程度なので、結果同じぐらいのようです。
どれくらいトークン使うかはきっとタスクにもよりますね。

#### 処理時間
o1-miniが倍まではかかっていないですね。
ですが、体感としては、streamで返す場合、最初のトークンが返ってくる時間(TTFT：time to first token)が重要です。
今回はstreamでの返し方わからなかったので、そこは計測していないです。流石に4oがずっと速いでしょうね。

## まとめ

処理時間がかかってもよければ、GPT-4oでは間違えるような難しい問題ではo1-miniは有効そうです。
今回はコーディングを1つ試しただけですが、より実務で扱うようなタスクも試してみたいですね。

o1-miniはコスト的には4oと大差ないことがわかりましたので使いやすいと思います。
うちもそろそろ思い切ってo1-miniにしないかとご家族で相談されてみてはいかがでしょうか。

アルトマンがGPT-4.5が最後の非推論モデルで、今後は推論をするか即答するか自分で選ぶようになるとかも言ってますし、そういうモデルを使うのが普通になるのかもです。