← Flecto
Google DeepMind  ·  2026年3月  ·  arXiv:2603.03329

AutoHarness: コードハーネスを自動合成してLLMエージェントを改善する

小型モデルは、独自のルールを定めることで、大型モデルに勝つことができるのでしょうか?

Xinghua Lou、Miguel Lázaro-Gredilla、Antoine Dedieu、Carter Wendelken、Wolfgang Lehrach、Kevin P. Murphy

Google DeepMind

2026年3月5日

概要

言語モデル(LLM)は、プログラミングや数学において驚くほど優れた能力を発揮しますが、ゲームエージェントとして機能する場合、しばしば不正な手を犯します。最近のKaggleのチェスコンペティションでは、Gemini 2.5 Flashの敗北の78%は、戦略の悪さではなく、ルール違反が原因でした。通常、人々は「ハーネス」と呼ばれる、手を検証するラッパーコードを手作業で記述します。AutoHarnessは、Gemini 2.5 Flashが、わずかな回数の反復的なコード改善ラウンドを使用して、自身のハーネスを自動的に記述できることを示しています。こうして得られたハーネスは、145のTextArenaゲームにおいてすべての不正な手を防ぎ、より小型のFlashモデルが、より大型のGemini 2.5 Proよりも優れたパフォーマンスを発揮しつつ、よりコスト効率の高い動作を実現します。

145

対応ゲーム

AutoHarnessは、全145のTextArenaゲーム(1人用・2人用の両方)において、合法手率100%を達成しました。各ゲームにつき1,000回のテストロールアウトで検証済みです。

56.3%

小型モデルが勝利

Gemini 2.5 Flash + Harness が、はるかに大型の Gemini 2.5 Pro に対して、16試合中9勝(2人対戦ゲーム)(全体勝率 56.3% vs. Pro の 38.2%)。

0.870

ほぼゼロの推論コスト

Harness-as-Policyは、テスト時にLLMを使用せず、純粋なPythonポリシーを生成します。16種類の1人用ゲームで平均報酬0.870を達成し、ほぼゼロの計算コストでGPT-5.2-High(0.844)を上回っています。

背景と動機

LLMは、プログラミングや数学の問題解決において目覚ましい能力を示しています。しかし、エージェントとしての計画立案や推論の性能は脆弱な場合があります。最近のKaggle GameArenaチェス競技において、Gemini 2.5 Flashの敗北の78%は悪い戦略によるものではなく、単純な不正な手—チェスのルールで厳しく禁止されている手—によるものでした。

従来の解決策としては、無効な手をフィルタリングするための「ハーネス」コードを手書きする方法や、ゲームの軌跡でモデルをファインチューニングする方法などがあります。しかし、手動作成のハーネスは脆弱で手間がかかります。新しいゲームごとに新たな作業が必要になるからです。また、大規模モデルのファインチューニングは費用がかかり、他のタスクの性能を低下させる可能性があります。AutoHarnessは異なるアプローチを採用します:LLM自身のコード生成能力を活用して、ハーネスを自動的に作成・改善します。

Code as Harness - 基本アイデア

エージェントは、LLMと、モデルとタスクの間の「接着剤」として機能するハーネスの組み合わせです。AutoHarnessでは、LLMが自身のハーネスをコーディングすることでエージェントを完成させます。 ハーネスには2つの主要な機能があります。propose_action(obs)は候補となる手を生成し、is_legal_action(obs, action)はその手の合法性を検証します。これにより、モデルはリジェクションサンプラーとして機能し、合法な手が見つかるまで候補を提案し続けます。

def propose_action(obs):

    # Returns the agent's next move

    ...



def is_legal_action(obs, action):

    # Returns True if the action is legal

    ...
リジェクションサンプリングとハーネス
「モデルをリジェクションサンプラーに変換する」という表現は、古典的な確率的技術を指します。標準的なリジェクションサンプリングでは、提案分布から候補を抽出し、制約を満たすものだけを受け入れ、それ以外は破棄して再度候補を抽出します。

propose_action(obs)は提案分布として機能し、候補となる手を生成します。is_legal_action(obs, action)は受け入れ基準として機能し、手がゲームのルールを満たしているかどうかを確認します。手が拒否された場合、LLMに再プロンプトを送り、合法な手が見つかるまで候補を提案させます。

なぜこれが重要なのか:この設計により、実際に実行されるすべての手が合法であることが保証されます。基盤となるモデルがどれだけ誤りを犯すかに関わらずこれは成立します。ハーネスが正しさを強制し、LLMが戦略的な品質を担います。

AutoHarnessは、ハーネス生成を、Thompsonサンプリングによって制御されるプログラム空間上の探索問題として定式化します。LLMは、環境実行からのフィードバックに基づいてコードの改良を提案する変異演算子として機能します。ツリー探索は、探索(異なるロジック構造を試す)と活用(部分的に動作するハーネスを改良する)のバランスをとります。

プログラム空間におけるThompsonサンプリング
Thompsonサンプリングは、元々多腕バンディット問題を対象としたベイズ的探索戦略です。各選択肢の価値について確率分布を維持し、各選択肢から1つの値をサンプリングして最も高い値を持つ選択肢を採用します。これにより、探索(不確実な選択肢を試すこと)と活用(実績ある優れた選択肢に集中すること)のバランスが自然に取れます。

コード合成への適用:探索ツリーの各ノードは候補となるハーネスのバージョン(プログラム)を表します。ノードの「価値」はそのヒューリスティックスコア、すなわちロールアウトでコードが達成する合法手の割合です。Thompsonサンプリングは次にどのノードを改良するかを選択します。不確実性の高いノードは平均スコアが低くても時々選択され(探索)、常に高スコアのノードはより頻繁に選択されます(活用)。

なぜ単純な貪欲探索ではないのか?純粋な貪欲探索は常に現在最高スコアのコードを改良するため、最初はスコアが低くても優れた解に収束する可能性のある、質的に異なるプログラム構造を見逃してしまいます。Thompsonサンプリングはこの局所最適解の罠を回避します。

AutoHarnessの仕組み

AutoHarnessは、複数のコード仮説をツリー構造で保持し、Thompson samplingを用いて、次にどのノードを改善するかを選択します。各ノードのヒューリスティック値は、そのコードバージョンが達成した平均的な合法的な移動の精度です。コードにバグがある場合(is_legal_action()Trueを返すにもかかわらず、実際にはその移動が合法でない場合)、propose_action()is_legal_action()の両方が改善されます。一方、is_legal_action()Falseを返す場合(合法でない移動を正しく検出した場合)、propose_action()のみが修正されます。

二つの機能の分離:なぜ proposeis_legal を分離するのか?
  • propose_action(obs) — 生成: 候補となる手を生成します。これは、合法的な盤面をすべて列挙するような単純なものから、ヒューリスティックなポリシーのような複雑なものまで様々です。
  • is_legal_action(obs, action) — 検証: 手がゲームのルールで許可されている場合にのみ True を返します。
対象を絞った修正ロジック:
is_legal_action が実際には不正な手に対して True を返す場合(誤検知)、チェッカーはルールを知らないため、両方の関数が間違っている可能性が高いため、両方を修正します。
is_legal_action が正しく False を返す場合、不正な手を生成したのはプロポージャーのみであるため、propose_action のみを修正します。

この非対称な修正により、すでに正しいコードを「修正」することを避け、後続の反復での不要な変更を減らすことができます。
AutoHarness code-as-harness learning process diagram
図1:コードをハーネスとして用いる学習プロセス。左:ヒューリスティック値を持つThompson sampling探索木。右:反復的な改善ループ(古いコード → Refiner ← Critic ← Evaluator ← Rollout → 新しいコード → 新しいH)。

AutoHarnessは、軽量なアクションフィルタリングから完全なコードのみのポリシーまで、3つの動作モードをサポートしています。

3つのモード: 「安全網」から「完全自律」までのスペクトル
AutoHarnessの3つの動作モードは、学習されたハーネスのテスト時において、LLMがどの程度関与するかという点で異なります。

モードテスト時にLLMを使用?ハーネスの役割
アクションフィルターはい — 許可されたセットから選択許可された動作のみを列挙
アクションバリファイアはい — 提案し、再試行提案された各動作を検証
ポリシーいいえ直接、アクションを出力

重要な違いは推論コストです。アクションバリファイアは、1ターンあたりにLLMを複数回呼び出す可能性がありますが、ハーネスをポリシーとして使用する場合、ゲーム中にLLMを呼び出すことはありません。「ほぼゼロの推論コスト」という見出しは、ポリシーモードにのみ当てはまります。

Harness-as-Action-Filter

propose_action()は、合法な手のセットを生成します。LLMはその後、連鎖思考推論を用いて最適な手をランク付けして選択します。

Harness-as-Policy

最も極端なケースでは、コードが直接的に次のアクションを選択します。テスト時にLLMへの呼び出しは不要です。純粋なPythonで、推論コストがほぼゼロで、最も高い平均パフォーマンスを実現します。

学習:145ゲームで検証済み

学習では、1イテレーションあたり10個の並列環境を使用し、最大1,000ステップ実行します。不正な手が発生した場合またはコード実行が失敗した場合、ロールアウトを終了します。Criticは最大5回分の失敗ステップをまとめてRefinerに渡し、改善されたコードを生成します。Thompsonサンプリングにおけるヒューリスティックの重みは1.0に設定されています。学習は、合法手の成功率が1.0に達するか、タイムアウトした場合に終了します。すべての学習にGemini-2.5-Flashを使用しています。

CriticとRefiner:内部フィードバックループ
この学習手順では3つの異なる役割を使用します。
  • Evaluator(評価者) — 現在のコードを10個の並列ゲーム環境で各最大1,000ステップ実行します。失敗トレース(不正な手、例外)を収集します。
  • Critic(批評家) — 最大5つの失敗ステップを読み取り、構造化された診断を作成します。どのルールが違反されているか、どの関数が問題を引き起こしているか、期待される動作は何か。
  • Refiner(改善者) — Criticの診断と現在のコードを読み取り、新しい候補バージョンを生成します。
なぜRefinerに渡す前に失敗を集約するのか? Criticは複数の失敗にわたる根本原因のパターンを特定し、生のロールアウトノイズをそのまま転送する代わりに信号を圧縮します。並列環境: 10個のゲームを同時実行することで、1イテレーションで多様な種類の失敗を収集します。
14.5 平均反復回数
145 対象ゲーム
100% 合法手率
19/32 収束 < 10イテレーション
Learning convergence curves for 6 games
図2:選択された6つのゲームにおける、合法的な操作の割合とコード合成の反復回数との関係。ほとんどのゲームは急速に収束しますが、チェスやオセロのような複雑なゲームでは、より多くの反復回数が必要です。

平均して、学習は14.5回のツリー探索イテレーションで終了します。32ゲームのうち19ゲームは10回未満のイテレーションで終了します。最も多くのLLM呼び出しを必要とするゲームは、GermanWhist-v0(43ステップ)、Cryptarithm-v0(45ステップ)、Chess-v0(64ステップ)、Othello-v0(62ステップ)です。AutoHarnessは全145ゲームで合法手成功率100%を達成しており、付録の表1に示されています。

なぜ、一部のゲームはより多くの反復回数を必要とするのか?
LLMの呼び出し回数は、ゲームによって大きく異なる(単純なゲームでは1回、チェスでは64回)。難易度に影響する要因は3つ。
  1. ルールの複雑さ: チェスには、約30種類の移動があり、それぞれに状態依存性がある(キャスリング、アンパサン、チェックの検出など)。GermanWhistでは、対戦相手の手札に関する部分的な情報を追跡する必要がある。
  2. 隠された状態: 非公開の手札を持つゲームでは、システムが観察されない状態について推論する必要があり、これはPythonだけでエンコードするのが難しい。
  3. 直感に反するケース: `Breakthrough-v0-small`(簡略化されたバリアント)は、136ステップを必要とした。これは、フルバージョンのチェスよりも多い。 "Small"は、ルールが単純であることを意味するわけではない。このバリアントの変更されたキャプチャーメカニズムによって、予期せぬ特殊なケースが発生した。
指標に関する注意: "# Learning Steps"(「学習ステップ数」)は、ツリー探索の反復回数に等しく、LLMのリファインメント呼び出し回数に等しい。各ステップは、1回のクリティック呼び出しと1回のリファイナー呼び出しで構成される。

評価:小型モデルが大型モデルを凌駕する

評価は、TextArenaの16種類の1人プレイ(1P)ゲームと16種類の2人プレイ(2P)ゲームに焦点を当てています。比較対象となるエージェントは、Gemini-2.5-Flash、Gemini-2.5-Pro、およびGemini-2.5-Flash+Harness(我々の手法)です。すべての実験で、同じ最適化されたプロンプトが使用されます。1Pゲームについては、20試合を実行し、平均報酬を評価指標として使用します。2Pゲームについては、40試合を実行し(各プレイヤーの試合数を均等に)、勝率/引き分け率/敗北率を評価指標として使用します。

評価プロトコル:「勝率」と「平均報酬」が実際に意味すること
2人プレイ(2P)ゲーム — 勝率/引き分け/敗北率:
各ゲームで40試合実施(先手として20試合 + 後手として20試合)し、先手優位を制御しています。「勝率」はFlash+HarnessがGemini-2.5-Proに対して勝利した試合の割合です。「9/16 games」という見出しは、16ゲームタイトルのうち9タイトルでFlash+Harnessがプラスの勝率を達成したことを意味します。

1人プレイ(1P)ゲーム — 平均報酬:
各ゲームで20試合実施。報酬 r ∈ [0, 1] はTextArena環境からの正規化スコアです。r = 1.0 は完全達成(例:パズルを解いた)、r = 0.0 は失敗を意味します。全エージェントが1.0を獲得するゲーム(GuessTheNumber、FrozenLakeなど)は飽和したベンチマークであり、エージェントの品質を区別できません。

2人対戦ゲーム

Win/lose/draw rate vs Gemini-2.5-Pro for 16 2P games
図3:16種類の2人対戦ゲームにおける、AutoHarness (Gemini-2.5-Flash+Harness) と Gemini-2.5-Pro の勝率/敗北率/引き分け率。緑 = 勝利、灰色 = 引き分け、赤 = 敗北。

AutoHarnessにより、小型のGemini-2.5-Flashがより大型のGemini-2.5-Proに対して16試合中9勝(全体勝率56.3% vs. Proの38.2%)を達成できるようになりました。ハーネスなしのGemini-2.5-Flashに対しては、勝率が64.8%(16試合中12勝)に上昇します。

1人プレイゲーム

Average reward vs Gemini-2.5-Pro for 16 1P games
図4:16種類の1人プレイゲームそれぞれにおいて、AutoHarness(オレンジ色)とGemini-2.5-Pro(青色)の平均報酬の比較。AutoHarnessは、16種類のゲームのうち8種類でProを上回り、5種類で同率となっています。

本手法は16ゲーム中8ゲームでGemini-2.5-Proを上回り、5ゲームで同値でした。平均報酬はAutoHarness 0.745、Gemini-2.5-Pro 0.707、Gemini-2.5-Flash 0.673でした。特にCryptarithm-v0、RushHour-v0、PegJump-v0、FifteenPuzzle-v0で顕著な改善が見られました。

Harness-as-Policy:ほぼゼロの推論コストで最高のパフォーマンス

極端なケースとして、AutoHarnessはポリシー全体をコードとして学習することができます。これにより、テスト時にLLMを全く使用する必要がなくなります。ポリシーのコードは、基本的なPython関数と標準ライブラリ(例:numpy)を使用しており、ゲームプレイ中にLLMを呼び出す必要はありません。これは、16種類のシングルプレイヤーゲームで評価されます(2人プレイのゲームには、戦略的な対戦相手のモデリングが必要であり、これを純粋なコードとして表現するのは非常に困難です)。

学習においては、ヒューリスティック値にタスク報酬を組み込んでいます。不正な手が実行された場合は \(H = 0\) とし、それ以外の場合は \(H = 0.5 + 0.5r\) とします。ここで \(r \in [0, 1]\) は、軌跡の終端で得られる環境報酬です。学習にはGemini-2.5-Flashを使用し、最大256イテレーション実行します。平均して89.4イテレーションで学習が完了し、ヒューリスティック値は0.939に達します。

Harness-as-Policyにおけるヒューリスティック値の設計
ヒューリスティック H は2つの目的を組み合わせます:

H = 0   不正な手が実行された場合
H = 0.5 + 0.5r   それ以外の場合(r ∈ [0, 1] は環境からの報酬)

なぜこの数式なのか?
  • 不正な手に対するハードゼロ:不正な手は絶対的な失敗です。H = 0 により、これらのノードがThompsonサンプリングによって活用対象として選択されることはありません。
  • 合法だが報酬が低い場合の0.5下限:報酬 r = 0 のポリシーでも H = 0.5 となりゼロより大きくなります。Thompsonサンプリングはこのノードから時々探索を行います。コードの構造がまだ正しい方向にある可能性があるためです。
  • 線形スケーリング:H は0.5(合法、ゼロ報酬)から1.0(合法、完全報酬)の範囲にあり、探索は合法性とタスク性能を同時に最適化します。
Action Verifier学習との違い:そちらではHは単に合法手の精度でした。ここでrを含めるのは、ポリシーコード自体が戦略であり、LLMが戦略的な部分を別途担うわけではないからです。
Average reward of different agents across 16 TextArena 1P games
図5:16個のTextArena 1Pゲームにおける各エージェントの平均報酬。提案手法2つ(太字ラベル)が最も高い性能を達成。
図5の読み方:比較からわかること
図5は、6つのエージェントにおける16種類の1人用ゲームでの平均報酬を比較しています。主な観察事項:
  • Harness-as-Policy (0.870) > GPT-5.2-High (0.844):テスト時にLLMを呼び出さない純粋なPythonスクリプトが、利用可能な最大規模のモデルの一つを上回るという直感に反する結果です。
  • Flash+Harness (0.745) > Gemini-2.5-Pro (0.707):Action Verifierもより大規模なモデルを上回っていますが、LLMが依然として戦略を担うためその差は小さくなっています。
  • GPT-5.2 (0.635) < Gemini-2.5-Flash (0.673):ハーネスなしのGPT-5.2はベースラインのFlashより性能が劣っており、複雑なゲームでの不正手の割合が高いことが原因と考えられます。
  • コスト:GPT-5.2-Highの評価実行には約640ドルかかります。Harness-as-Policyはテスト時に約0ドルで動作します(学習コストはゲームごとに一度だけ償却されます)。

パフォーマンスとコストの比較

Agent Avg. Reward Test Cost
Gemini-2.5-Flash 0.673
Gemini-2.5-Pro 0.707
Gemini-2.5-Flash+Harness (Ours) 0.745 ~$0
GPT-5.2 0.635 ~$640
GPT-5.2-High 0.844 ~$640
Harness-as-Policy (Ours) 0.870 ~$0

付録:完全な結果

TextArena 全145ゲーム — 学習ステップ数と合法手率 ▾

表1:全145のTextArenaゲーム。ハーネスの学習に必要なLLM呼び出し回数と、結果として得られた合法手精度を示しています。*印のゲームはエンドツーエンドのエージェント評価に使用されます。

Index Game # Players # Learning Steps Legal Action Rate
02048-v0 *1271.0
12048-v0-easy141.0
22048-v0-extreme1441.0
32048-v0-hard1471.0
42048-v0-mega-easy1311.0
52048-v0-super-easy161.0
62048-v0-ultra-easy121.0
72048-v0-very-easy1571.0
82048-v0-very-hard171.0
9Alquerque-v0 *241.0
10Bandit-v0 *121.0
11Bandit-v0-hard111.0
12Battleship-v0241.0
13Battleship-v0-extreme2321.0
14Battleship-v0-large291.0
15Battleship-v0-standard261.0
16Blackjack-v0 *121.0
17Blackjack-v0-long111.0
18Breakthrough-v0 *221.0
19Breakthrough-v0-blind2201.0
20Breakthrough-v0-large291.0
21Breakthrough-v0-long271.0
22Breakthrough-v0-small21361.0
23Breakthrough-v0-tiny251.0
24Briscola-v0221.0
25Checkers-v0 *271.0
26Checkers-v0-long231.0
27Chess-v0 *2641.0
28Chess-v0-blind2191.0
29Chess-v0-long2161.0
30Chopsticks-v0 *2151.0
31Chopsticks-v0-long271.0
32Chopsticks-v0-medium2151.0
33ColonelBlotto-v0211.0
34ColonelBlotto-v0-extreme211.0
35ColonelBlotto-v0-large211.0
36ColonelBlotto-v0-small211.0
37ConnectFour-v02101.0
38ConnectFour-v0-blind221.0
39ConnectFour-v0-large211.0
40Crusade-v0 *241.0
41Cryptarithm-v0 *1451.0
42FifteenPuzzle-v0 *131.0
43FrozenLake-v0 *1191.0
44FrozenLake-v0-hardcore141.0
45FrozenLake-v0-random1221.0
46GameOfPureStrategy-v0231.0
47GermanWhist-v0 *2431.0
48Golf-v0 *281.0
49Golf-v0-medium291.0
50GuessTheNumber-v0 *121.0
51GuessTheNumber-v0-hardcore121.0
52HighSociety-v0231.0
53IndianPoker-v02111.0
54IndianPoker-v0-extreme221.0
55IndianPoker-v0-long2261.0
56IndianPoker-v0-medium271.0
57IndianPoker-v0-short221.0
58IteratedMatchingPennies-v0211.0
59IteratedRockPaperScissors-v0211.0
60IteratedTwoThirdsAverage-v0211.0
61KuhnPoker-v0251.0
62KuhnPoker-v0-extreme231.0
63KuhnPoker-v0-long221.0
64KuhnPoker-v0-medium221.0
65KuhnPoker-v0-short231.0
66LiarsDice-v0 *241.0
67LiarsDice-v0-large261.0
68LiarsDice-v0-small251.0
69LightsOut-v0 *111.0
70LinesOfAction-v0 *2231.0
71Mastermind-v0 *121.0
72Mastermind-v0-extreme111.0
73Mastermind-v0-hard121.0
74MemoryGame-v0231.0
75MemoryGame-v0-hard221.0
76MemoryGame-v0-medium221.0
77Minesweeper-v0 *1111.0
78Minesweeper-v0-hard161.0
79Minesweeper-v0-medium1101.0
80Minesweeper-v0-small121.0
81NewRecruit-v0 *221.0
82Nim-v0211.0
83Nim-v0-large221.0
84Nim-v0-medium221.0
85Othello-v0 *2621.0
86Othello-v0-big221.0
87Othello-v0-hard2301.0
88Othello-v0-huge2121.0
89Othello-v0-small251.0
90Othello-v0-tiny2131.0
91PegJump-v0 *111.0
92PigDice-v0211.0
93PigDice-v0-100211.0
94PigDice-v0-150211.0
95PigDice-v0-200211.0
96PigDice-v0-250211.0
97PigDice-v0-300211.0
98PigDice-v0-350211.0
99PigDice-v0-400211.0
100PigDice-v0-450211.0
101PigDice-v0-50211.0
102PigDice-v0-500211.0
103PigDice-v0-long211.0
104PigDice-v0-short211.0
105Poker-v02171.0
106Poker-v0-extreme271.0
107Poker-v0-long251.0
108Poker-v0-small2291.0
109QuantumTicTacToe-v02121.0
110ReverseTicTacToe-v0231.0
111RushHour-v0 *131.0
112SantoriniBaseFixed-v02301.0
113Secretary-v0 *111.0
114Secretary-v0-long111.0
115SimpleTak-v0241.0
116SimpleTak-v0-extreme281.0
117SimpleTak-v0-large2121.0
118SimpleTak-v0-medium251.0
119Snake-v0211.0
120Snake-v0-large211.0
121Snake-v0-standard211.0
122Sokoban-v0 *151.0
123Sokoban-v0-medium111.0
124SpiteAndMalice-v0 *2331.0
125Stratego-v0 *2231.0
126Sudoku-v0 *151.0
127Sudoku-v0-easy151.0
128Sudoku-v0-hard191.0
129Sudoku-v0-medium141.0
130Sudoku-v0-very-easy141.0
131Surround-v0211.0
132Surround-v0-large211.0
133Surround-v0-standard211.0
134Tak-v0 *2211.0
135Tak-v0-hard2531.0
136Tak-v0-medium261.0
137TicTacToe-v0241.0
138TowerOfHanoi-v0 *171.0
139TowerOfHanoi-v0-extreme1441.0
140TowerOfHanoi-v0-hard171.0
141TowerOfHanoi-v0-hardcore121.0
142TowerOfHanoi-v0-medium171.0
143UltimateTicTacToe-v0 *2131.0
144WildTicTacToe-v02101.0

* エンドツーエンド評価に使用されたゲームです。全145ゲームで合法手率(Legal Action Rate)= 1.0を達成しました。

1Pゲームのゲームごとの平均報酬

Game Gemini-2.5-Flash Gemini-2.5-Pro Flash+Harness (Ours) GPT-5.2 GPT-5.2-High Harness-as-Policy (Ours)
2048-v00.2150.3780.3080.2120.7450.912
Bandit-v00.3980.2010.2080.3501.0000.459
Blackjack-v00.4100.3300.4800.4600.4800.410
Cryptarithm-v01.0000.9501.0000.6001.0001.000
FifteenPuzzle-v00.1070.1030.1620.0350.1830.597
FrozenLake-v01.0001.0001.0001.0001.0001.000
GuessTheNumber-v01.0001.0001.0001.0001.0001.000
LightsOut-v00.7300.8020.8400.6911.0001.000
Mastermind-v01.0001.0001.0001.0001.0001.000
Minesweeper-v00.6370.5860.6860.5931.0000.940
PegJump-v00.3250.6820.7820.2210.4291.000
RushHour-v00.6880.8871.0001.0001.0001.000
Secretary-v00.5500.7000.6500.6000.8000.750
Sokoban-v00.7000.7000.8000.6000.8670.850
Sudoku-v01.0001.0001.0001.0001.0001.000
TowerOfHanoi-v01.0001.0001.0000.8001.0001.000

1Pゲームのゲームごとの合法手率

Game Gemini-2.5-Flash Gemini-2.5-Pro Flash+Harness (Ours) GPT-5.2 GPT-5.2-High Harness-as-Policy (Ours)
2048-v096.57%98.36%99.86%96.05%99.94%100.00%
Bandit-v099.76%96.39%99.77%100.00%100.00%100.00%
Blackjack-v099.38%100.00%100.00%100.00%100.00%100.00%
Cryptarithm-v096.97%98.70%100.00%88.44%100.00%100.00%
FifteenPuzzle-v084.70%88.14%96.59%87.18%100.00%100.00%
FrozenLake-v0100.00%100.00%100.00%100.00%100.00%100.00%
GuessTheNumber-v0100.00%100.00%100.00%100.00%100.00%100.00%
LightsOut-v0100.00%100.00%99.76%100.00%100.00%100.00%
Mastermind-v0100.00%100.00%100.00%98.57%100.00%100.00%
Minesweeper-v088.69%81.20%100.00%81.10%100.00%100.00%
PegJump-v067.97%83.10%98.25%60.17%77.78%100.00%
RushHour-v082.17%95.36%97.24%94.51%100.00%100.00%
Secretary-v0100.00%100.00%100.00%100.00%100.00%100.00%
Sokoban-v091.89%97.11%98.48%95.88%100.00%100.00%
Sudoku-v096.77%100.00%100.00%100.00%100.00%100.00%
TowerOfHanoi-v0100.00%100.00%100.00%100.00%100.00%100.00%

結論と今後の展望

私たちは、コードハーネスを自動合成するという新しいアプローチでLLMエージェントの性能向上を実現しました。Thompsonサンプリングと環境フィードバックによって制御された少数の反復改善ラウンドを用いることで、Gemini-2.5-Flashはどのゲーム環境に対しても、手動の調整なしに堅牢なハーネスを生成できます。

用語集:本文中で使用される主要な用語
  • コードハーネス(Code harness) — LLMエージェントを囲むラッパーコードで、提案された手をフィルタリングまたは検証することでゲームのルールを強制します。
  • Thompson sampling — 次にどのコード候補を改善するかを選択するために使用するベイズ的探索・活用戦略(§Methodで紹介)。
  • リジェクションサンプラー(Rejection sampler) — LLMが手を提案し、ハーネスが不正なものを却下し、合法な手が見つかるまで繰り返すアーキテクチャパターン。
  • Harness-as-Policy — 合成されたPythonコードがテスト時にLLM全体を置き換えるバリアント。
  • TextArena — 全実験で使用するオープンソースのマルチゲームテキストベース環境(Guertler et al., 2025)。

全145種類のTextArenaゲームで合法手率100%を達成

小型のFlashモデルが大型のProモデルを凌駕—2P対戦ゲームで勝率56.3%

Harness-as-Policyは報酬0.870を達成し、ほぼゼロの推論コストでGPT-5.2-Highを上回る

今後の展望

  • 専門的な知識を持つエージェントから得られた情報を、基盤となるLLMに統合し、システム全体を再帰的に自己改善させる。
  • 関連するゲーム環境間で共有できる、再利用可能なハーネスのライブラリを構築する。
  • より複雑なマルチモーダルゲーム、例えばCraftaxやTerra Novaに対して、この手法を適用する。
参考文献 (19) ▾
  1. Chervonyi et al. (2025). オリンピック幾何の問題を *alphageometry2* を用いて解答する際の金メダリストレベルのパフォーマンス. JMLR, 26(241):1–39.
  2. Duan et al. (2024). GTBench: ゲーム理論を用いた評価により、LLM(大規模言語モデル)の戦略的推論の限界を明らかにする。 arXiv [cs.CL].
  3. Guertler et al. (2025). Textarena. arXiv:2504.11442.
  4. Huang & Yang (2025). モデルに依存しない検証・改良パイプラインを用いた、IMO 2025での金メダル獲得。 arXiv:2507.15855.
  5. Kaggle (2025). Kaggle game arena: AIモデルのベンチマークプラットフォーム。 kaggle.com/game-arena.
  6. Kokel et al. (2025). ACPBench hard: 行動、変化、および計画に関する制約のない推論. AAAI 2025 Workshop LM4Plan.
  7. Lehrach et al. (2025). コード世界モデルを用いた汎用ゲームプレイ. arXiv:2510.04542.
  8. Li et al. (2022). AlphaCodeを用いた競技プログラミングレベルのコード生成。Science, 378(6624):1092–1097.
  9. Liang et al. (2023). コードをポリシーとして:具現化された制御のための言語モデルプログラム。In ICRA, pp. 9493–9500.
  10. Ma et al. (2024). Eureka: コーディングされた大規模言語モデルによる人間レベルの報酬設計. In ICLR 2024.
  11. Novikov et al. (2025). AlphaEvolve: 科学およびアルゴリズムの発見のためのコーディングエージェント。 arXiv:2506.13131.
  12. Petrov et al. (2025). 真実か、それとも偽りか? 2025年アメリカ数学オリンピックにおけるLLMの評価。 arXiv:2503.21934.
  13. Ruoss et al. (2024). LMAct: 長いマルチモーダルなデモンストレーションを用いた、コンテキスト内模倣学習のためのベンチマーク。 arxiv.org/abs/2412.01441.
  14. Shinn et al. (2023). Reflexion: 言語エージェントと音声による強化学習。 NeurIPS, 36:8634–8652.
  15. Tang et al. (2024). LLMを用いたコード修正における探索と利用のトレードオフに関する研究。 NeurIPS, 37:117954–117996.
  16. Valmeekamら (2023a). 大規模言語モデルの計画能力に関する考察 — 批判的調査. In NeurIPS.
  17. Valmeekam et al. (2023b). 大規模言語モデルの計画能力に関する考察:批判的調査. NeurIPS, 36:75993–76005.
  18. Wang et al. (2023). Voyager: 大規模言語モデルを用いた、自由度の高い具現化エージェント. arXiv preprint arXiv:2305.16291.
  19. Wei et al. (2022). Chain-of-thought prompting は、大規模言語モデルにおける推論を引き出す. NeurIPS, 35:24824–24837.

B2B Content

あらゆるコンテンツを、御社向けに美麗に制作します

PDF・動画・Webページ等のあらゆる素材から、プロダクション品質のコンテンツを制作します。リッチHTML・カスタムスライド・アニメーション動画。

サービス詳細を見る お問い合わせ