Jev オセロ検証:問い方・分解・計算で勝率はどう変わるか

吉田 拓馬

この記事の要点

  • 問い方​:オセロの​原則を​雑に​書き足しても​差は​出ず​(55勝2分43敗)、​専門家の​教材から​作った​7つの​原則を​書き足すと​勝ち越した​(71勝2分27敗)。
  • 分解と​計算:原則を​小さな​「はい / いいえ」の​質問に​分けただけでは、​1問で​聞く​方式と​差が​見えなかった​(47勝4分49敗)。​分けた​質問の​答えを​ Python で​計算して​渡すと、​はっきり​強くなった。
  • 汎用 LLM との​比較:最も​強い方​式でも​ Claude Haiku 5.5 には​負け越した。​速さと​費用では​ Jev が​大きく​上回った。

Jev オセロ検証では、​確認項目を​ Python で​計算して​ Jev に​渡す方​式​(Python Atomic)が、​同じ​確認を​ Jev に​聞く​方式に​70勝4分26敗で​勝ちました。​一方、​Claude Haiku 5.5 には​30勝3分67敗で​負け越しました。​1手の​判断は​ Haiku の​約28分の​1の​時間​(0.24秒対6.85秒)、​費用は​約10分の​1でした。

何を​調べたか

TypeSafe の​判断特化 AI​「Jev」を、​勝ち負けで​判断の​良し悪しを​測りやすい​オセロで​検証しました。​最終目標は​「Jev を​業務に​組み込むと、​汎用 LLM より​良く​・速く​・安く​判断できるか」です。​オセロは​盤面が​すべて​見えていて​ルールも​決まっているので、​Jev の​答えが​正しいかを​プログラムで​採点できます。

読み物と​しての​実験記録は​ note に​連載しています​(記事の​最後に​リンクが​あります)。​この​ページは、​その​数字と​条件を​まとめた​参照先です。

登場する​方​式

どの​方​式も、​1手ごとに​盤面と​石を​置ける​場所​(合法手)を​受け取り、​合法手の​中から​1つを​選びます。​違うのは、​判断の​材料を​誰が​どう​用意し、​最後に​誰が​手を​選ぶかです。​この​検証では、​判断を​次の​3段に​分けて​考えています。

  • Level 1​(戦略係)​:オセロの​原則を​決める
  • Level 2​(個別判断係)​:合法手ごとに、​原則に​関わる​事実を​確かめる
  • Level 3​(最終決定係)​:材料を​もとに​1手を​選ぶ

5つの方式が Level 1〜3 のどの段を持ち、それを Jev・Python・Claude Haiku・人のだれが受け持つかを比べた図

Basic

  • モデル:Jev 1.14.0​(jev-1.14.0)。​TypeSafe の​ HTTP API で​呼びます。
  • 渡す​もの​:盤面​(8行の​文字列。B​ が​黒、W​ が​白、.​ が​空き)、​手番、​合法手の​一覧、​手数。
  • 問い​:選択式​(Choice)の​問いを​1問だけ​聞きます。​選択肢は​合法手​その​ものです。​原文は​ "Which move from legal_moves gives current_player the best chance of finishing the game with more discs than the opponent?"​(どの​手が、​相手より​多くの​石で​終局する​見込みを​最も​高く​するか)。
  • 1手の​リクエスト:1本。
  • 打つ​手:Jev が​返す choice​(確率が​最も​高い​選択肢)を​そのまま​打ちます。​選択肢ごとの​確率と​確信度は​記録するだけで、​手は​変えません。

Strategy

Basic と​同じ​問いに、​オセロの​原則を​書き添えて​1問で​聞きます。​原則は​2通り試しました。

  • 原則を​雑に​(v1)​:​「角を​取る」​「相手の​合法手を​減らす」​「自分の​石を​確定石に​する」​「最終的な​石数を​増やす」の​4つと、​「どれが​大事かは​局面で​変わる」と​いう​一文。​出典は​付けていません。
  • 7つの​原則​(v2)​:フランスオセロ連盟​(FFO)の​教材を​主に、​英国オセロ連盟​(BOF)の​教材も​参考に​まとめた​次の​7つ。​どれが​大事かは​局面と​段階に​よって​変わり、​いつも​最優先の​原則は​無い、と​書き​添えます。
    1. 角を​取る​(角の​石は​返されない)
    2. 相手が​次の​手番で​角に​打てるようになる​手を​避ける
    3. 空いている​角の​隣の​マス(X マスと​ C マス)を、はっきりした​理由が​なければ​避ける
    4. 相手の​打てる​手を​減らし、​自分の​手を​増やす
    5. 空きマスに​接する​石を​返さない​「静かな​手」を​選ぶ
    6. 序盤と​中盤は、​石を​少なめに​する
    7. 終盤は、​相手より​多くの​石で​終える​ことを​重く​見る
    ​

v2 では、​局面の​段階​(​空きマスが​41以上​なら​序盤、​21〜40なら​中盤、​20以下なら​終盤)も​一緒に​渡します。​Jev に​送る​文は​すべて​英語で、​上の​日本語は​訳です。

  • モデル:Jev 1.14.0
  • 1手の​リクエスト:1本
  • 打つ​手:Jev が​返す choice​(確率が​最も​高い​選択肢)を​そのまま​打ちます。​選択肢ごとの​確率と​確信度は​記録するだけで、​手は​変えません。

Jev Atomic

7つの​原則を、合法手ごとの​「はい / いいえ」の​質問に​分けて​ Jev に​聞き​(Level 2)、​その​答えの​表から​最終の​手を​ Jev に​選ばせます​(Level 3)。​「狭く​独立した​質問を​いくつも​聞き、​答えを​組み合わせる」と​いう、​TypeSafe の​公式の​手引きが​勧める​作り方に​沿っています。

Level 2:合法手1つに​つき次の​7問を、​「はい」の​確率を​0〜1で​返す型​(Noul)で​聞きます。​合法手が​8つなら​56問で、​全部を​1本の​リクエストに​まとめます。​確率が​0.5以上​なら​「はい」と​読みます。

# 質問 対応する​原則
1 その​手は​角(A1・H1・A8・H8)か 1
2 その​手を​打った​あと、​相手は​次の​手番で​角に​打てるか 2
3 その​手は、​角が​空いている​ X マス​(B2・G2・B7・G7)か 3
4 その​手は、​角が​空いている​ C マス​(A2・B1・G1・H2・A7・B8・H7・G8)か 3
5 その​手を​打った​あと、​相手の​合法手は​今より​増えるか 4
6 静かな​手か​(返した​石の​どれも、​打った​あとに​空きマスに​接していないか) 5
7 返す石が、​ほかの​どの​合法手と​比べても​同じか​多いか 6・7

Level 3:盤面は​見せません。​手番、​合法手、​手数、​局面の​段階、​7問の​短い文、​合法手ごとの​「はい / いいえ」の​表と、​7つの​原則を​渡し、​選択式で​1手を​選ばせます。​盤面を​渡すと、​Jev が​表を​使わずに​最初から​選び直すおそれが​ある​ためです。

  • モデル:Jev 1.14.0​(Level 2・Level 3 とも)
  • 1手の​リクエスト:2本​(Level 2 と​ Level 3)
  • 打つ​手:Level 3 の​ choice を​そのまま​打ちます。​Python は、​合法手か​どうかを​確かめるだけです。

実験の​初期には、​4つの​観点を​それぞれ選択式で​聞き、​その​多数決で​手を​決める​版​(Atomic v1)も​試しました。​この​記事の​数字には​含めていません。

Python Atomic

Jev Atomic の​ Level 2 の​7問を、​Jev に​聞かずに​ Python が​オセロの​ルールから​計算します。​7問とも​盤面と​合法手から​答えが​1通りに​決まるので、​すべて​正解です。​計算は​1手あたり約0.5ミリ秒でした。

Level 3 は​ Jev Atomic と​同じです。​同じ​局面で​ Level 2 の​答えが​同じなら、​Jev に​送る​リクエストは​1バイトも​変わりません。​Level 3 には、​Level 2 を​誰が​答えたかを​伝えていません。

  • モデル:Level 3 だけ Jev 1.14.0
  • 1手の​リクエスト:1本​(Level 3 のみ)
  • 打つ​手:Level 3 の​ choice を​そのまま​打ちます。​Python は​手を​選びません。​Python の​計算と​反対の​手を​ Jev が​選んでも、​その​手を​打ちます。

Claude Haiku 5.5

  • モデル:claude-haiku-5-5、​effort は​ medium
  • 渡す​もの​:盤面・手番・合法手・​手数​(Basic と​同じ​情報)。​システムプロンプトで​盤面の​読み方を​説明し、​相手より​多くの​石で​終局する​見込みが​最も​高い​手を​1つ​選んで、​JSON で​返すよう​求めます。​原則は​渡していません。
  • 1手の​リクエスト:1本
  • 打つ​手:​返ってきた手を​そのまま​打ちます。
  • 時間と​費用の​数え方​:判断時間は、​CLI が​報告する​ API の​応答時間です​(CLI の​起動時間は​含みません)。​費用は、​CLI が​返す API の​定価での​換算額です。

Router​(Jev+Haiku)

1手ごとに Python Atomic で判断し、Jev の確信度が0.5未満の手だけ Claude Haiku に任せる流れを示したシーケンス図

毎手、​まず Python Atomic で​判断し、​Level 3 で​ Jev が​返す確信度​(confidence)で​振り分けます。

  • 確信度が​0.5以上​:Jev が​選んだ手を​打ちます​(ちょうど​0.5も​ Jev の​手)。
  • 確信度が​0.5未満:Jev に​渡したのと​同じ​盤面・手番・合法手​(​同じ​並び順)​・手数を​ Claude Haiku に​渡し、​Haiku の​手を​打ちます。

閾値の​0.5は、​TypeSafe の​公式ドキュメントに​ある​サンプルの​値で、​ほかの​値は​試していません。​Haiku に​任せる​手でも​ Jev は​必ず先に​呼ぶので、​その​時間と​費用も​数えています。

  • モデル:Jev 1.14.0 と​ Claude Haiku 5.5​(どちらも​単独の​ときと​同じ​設定)
  • 1手の​リクエスト:1〜2本

共通の​条件

  • 各組100試合で、​先手と​後手を​50試合ずつ​入れ替えました。
  • 合法手の​並び順は、​局面ごとに​シャッフルしました。​並びは​乱数の​種・試合番号・手数だけで​決まり、​両方の​プレイヤーに​同じ​規則を​使います。​Jev 1.13 の​「最初の​選択肢を​選びがち」と​いう​癖が、​結果に​混ざらないように​する​ためです。
  • Jev に​送る​文は、​すべて​英語です。​公式に、​英語が​最も​精度が​高いと​書かれている​ためです。
  • 合法手で​ない​答えは、​別の​手に​置き換えません。​同じ​入力で​3回まで​頼み直します。
  • 1手の​時間制限は​ありません。​安全装置と​して、​1回の​問い​合わせに​タイムアウトを​設けています。
  • Jev の​ API には、​温度や​乱数の​種を​指定する​項目が​ありません。
  • Jev の​費用は、​入力トークン数 × 0.042ドル/100万トークン​(出力は​無料)の​見積もりです。​実際の​請求額では​ありません。

結果

勝敗は​左側の​方​式から​見た値です。​どの​組も​100試合で、​先手と​後手を​交互に​入れ替えています。

対戦 勝ち 引き分け 負け 決着した​試合の​勝率 95% の​幅 p 値
Jev 1.14.0 対 1.13.0​(Basic どうし) 63 2 35 64% 54〜74% 0.006
Strategy​(原則を​雑に)対 Basic 55 2 43 56% 46〜66% 0.27
Strategy​(7つの​原則)​対 Basic 71 2 27 72% 63〜81% <0.001
Jev Atomic 対 Basic 82 1 17 83% 74〜90% <0.001
Jev Atomic 対 Strategy 47 4 49 49% 39〜59% 0.92
Python Atomic 対 Jev Atomic 70 4 26 73% 63〜81% <0.001
Python Atomic 対 Strategy 76 5 19 80% 71〜88% <0.001
Python Atomic 対 Claude Haiku 5.5 30 3 67 31% 22〜41% <0.001
Router 対 Claude Haiku 5.5 40 6 54 43% 32〜53% 0.18

決着した​試合の​勝率は、​引き分けを​除いた​試合の​うち勝った​割合です。​95% の​幅は​正確な​二項分布の​区間​(Clopper-Pearson)、​p 値は​「両者の​強さが​同じ」とした​両側の​二項検定です。​100試合なので、​小さな​差は​見逃している​可能性が​あります。

速さと​費用

方​式 1手の​判断時間​(平均) 1試合の​費用
Strategy 0.19秒 約0.0014ドル
Jev Atomic 0.42秒 約0.0081ドル
Python Atomic 0.20〜0.24秒 約0.0023〜0.0024ドル
Router 約3.7秒 約0.015ドル
Claude Haiku 5.5 6.85秒 約0.025ドル

Python Atomic の​幅は、​対戦相手が​違う​2回の​実行の​値です。​Python の​計算は​そのうち約0.5ミリ秒でした。​費用は、​送った​トークン数に​ API の​定価を​掛けた​見積もりで、​実際の​請求額では​ありません。

Router では、​2,996手の​うち1,490手​(約半分)を​ Haiku に​任せました。​Jev だけで​済んだ手は​約0.2秒、​Haiku に​回した​手は​約7.3秒で、​平均が​3.7秒です。​序盤ほど​ Jev の​確信度が​低く、​Haiku に​回した​割合は​序盤69%・中盤52%・終盤28%でした。

分かった​こと

方式ごとの強さ・速さ・費用の比較表。Python Atomic は Jev Atomic に70勝4分26敗、Strategy に76勝5分19敗で、1手0.20秒・1試合0.0024ドル

原則の​質が​結果を​分けた

雑に​決めた​4つの​原則では、​手の​選び方は​変わっても​勝敗の​差は​偶然の​範囲でした。​角を​打てる​局面で​実際に​角を​打った​割合は、​Basic の​28%​(669局面中188)に​対し、​原則を​書き添えた​方​式では​100%​(212局面中212)でした。​専門家の​教材から​作り直した​7つの​原則では、​71勝2分27敗まで​差が​つきました。

分けるだけでは​強くならず、​答えの​正しさが​効いた

Jev Atomic の​「はい / いいえ」の​答えを、​対局後に​プログラムで​採点しました。​角か、​角の​隣か、のように​マスの​位置で​分かる​質問は​ほぼ当てていました。​一方、​打った​あとの​盤面を​想像する​質問や、​ひっくり返る​石の​数を​比べる​質問は、​ほとんど​見分けられていませんでした。​Jev 1.13 の​公式の​資料も、​何段もの​推論と​数える​ことを​苦手と​して​挙げています。

この​確認を​ Python の​計算に​替えると、​Jev Atomic に​70勝4分26敗で​勝ちました。​どの​確認を​どれだけ重く​見て​1手に​決めるかは​計算で​決まらないので、​そこは​ Jev に​任せています。

汎用 LLM には​負けたが、​速さと​費用では​大きく​勝った

最も​強い​ Python Atomic でも、​戦略を​何も​渡していない​ Claude Haiku 5.5 に​負け越しました。​ただし1手の​判断は​約28倍速く、​費用は​約10分の​1です。​大量の​定型に​近い仕分けや、​相手を​待たせられない​その​場の​判断のように、​速さと​費用が​効く​場面では​使いどころが​あると​考えています。

1.14.0 は​ 1.13.0 より​強く、​先頭の​選択肢に​偏る​癖も​減った

Jev 1.13 には​「渡した​選択肢の​1番目を​選びがち」と​いう、​公式ドキュメントにも​書かれた​癖が​あります。​選択肢を​毎回​シャッフルして​渡したうえで​測ると、​1番目に​書いた​手を​選んだ​割合は​ 1.13.0 が​51%​(偶然なら​22%)、​1.14.0 が​33%​(偶然なら​16%)でした。​減ってはいますが​残っているので、​1.14.0 でも​選択肢を​並べ替えて​答えが​変わらないか​確かめるのが​安全です。

比較条件と​限界

  • Jev は、​版の​比較を​除いて​ 1.14.0。​Claude Haiku は​ 5.5​(effort は​ medium)で、​盤面と​置ける​場所の​一覧だけを​渡し、​戦略は​渡していません。​Jev 側は​原則と​計算を​組み込んだ​構成なので、​両者に​同じ​作り込みを​した​比較では​ありません。
  • 結果は​オセロと​いう、​盤面が​すべて​見えて​ルールが​決まった​ゲームでの​ものです。​確認を​すべて​計算に​置き換えられたのも、​確立した​戦略の​教材が​あったのも​オセロだからで、​現実の​業務の​判断に​同じ差が​出るとは​限りません。
  • Router の​確信度の​閾値は、​公式ドキュメントの​サンプルに​ある​0.5だけを​試しました。
  • 時間は​今回の​実行環境と​設定での​値です。

UnlockJapan と​ TypeSafe の​間に、​提携・報酬・提供の​関係は​ありません。

この記事を共有

note の連載(読み物版)

ブログ一覧