作ったもの
作ったのは 2048 というゲームです。
- 4×4 のマスに数字のタイルが出てきて、上下左右のどれかに全部を滑らせます
- 同じ数字どうしがぶつかると合体して倍になり、2 が 4 に、4 が 8 になっていきます
- 最終的に 2048 のタイルを作れたら勝ち、という定番のパズルゲームです
Jev が何者かについては、yushibats さんが丁寧に書いてくれています。
2048を選んだのは、1手ごとに「上下左右のどれか」を選ぶだけだからです。
判断を何百回も連続で投げることになるので、速さの違いが出るなら出るはずだと考えました。
できたやつ
同じ盤面を Jev と LLM に同時にプレイさせて、左右に並べて観戦できるWebアプリです。
LLM 側は OCI Generative AI の openai.gpt-oss-120b を、シカゴリージョンで動かしています。
左が Jev、中央が LLM、右が各種情報です。
応答時間、手数、スコア、トークン数、コストを1手ごとに更新しています。
Jev 側がどんどん先に進んでいくのが、見ていて一番おもしろいところです。
両者に同じ文章を渡す
Jevは画像情報を受け取れないので、盤面を文章にして渡してます。
この文章を Jev・LLM それぞれ同じものを渡しました。
row 1: 2 16 4 4
row 2: . 2 32 2
row 3: . 8 4 8
row 4: . 2 . 4
Score: 216. Largest tile: 32 (not in a corner). Empty cells: 4.
Result of each legal move:
- left: 1 merge (new 8), 5 empty cells, 32 is not in a corner
- up: not possible
後半の Result of each legal move: は、その方向に動かすと何が起きるかをこちら側のコードで計算した結果です。
先読みはAIにさせず、計算した結果だけを文章で添えています。
返ってくるもの
Jev のレスポンスがこちらです。
{
"answers": {
"move": {
"type": "choice",
"choice": "left",
"confidence": 0.68,
"probabilities": { "right": 0.19, "left": 0.78, "down": 0.03 }
}
},
"usage": { "input_tokens": 549, "output_tokens": 38 }
}
選択肢ごとの確率が返ってきます。
この盤面では down だけが最大タイルを角から追い出す手だったのですが、そこに 0.03 しか置いていません。
判断の中身が数字で見えるのは、文章を返す LLM とはだいぶ感触が違いました。
LLM 側は structured outputs で {"move": "left"} という形に固定しています。
こちらは確率を返しません。
速かった、そして安かった
上のスクリーンショットが45秒走らせたところです。
| Jev | gpt-oss-120b | |
|---|---|---|
| 手数 | 282 | 66 |
| 平均応答 p50 | 146 ms | 585 ms |
| 最新 / p95 | 119 ms / 214 ms | 550 ms / 1,243 ms |
| スコア | 3,276 | 516 |
| 最大タイル | 256 | 64 |
| 不正な出力 | 0 | 0 |
- 同じ45秒で 282手 対 66手、差は216手
- 応答時間で4.0倍、進んだ手数で4.3倍
- p95 だと、LLM 側は遅いときに1.2秒かかっている
次にコスト(1ドル155円で換算)
| Jev | gpt-oss-120b | |
|---|---|---|
| 入力トークン単価 | $0.042 / 1M(約6.5円) | $0.15 / 1M(約23円) |
| 出力トークン単価 | 無料 | $0.60 / 1M(約93円) |
| 45秒ぶんの累計 | $0.0067(約1.0円) | $0.0102(約1.6円) |
| 1手あたり | $0.0000237(約0.004円) | $0.000155(約0.024円) |
- 1手あたりでおよそ 1 対 6.5
- Jev は282手も打っているのに、累計では LLM より安く済んでいる
さいごに
速くて安いという話は事前に読んでいたので、想定どおりではありました。
ただ、自分で数字を出して画面が動くのを見ると、お、やっぱりちゃんと速いなと納得感がありました。
次は業務寄りの題材で何か動かしてみようかなと思っています。
