元論文: AutoHarness: Improving LLM Agents by Automatically Synthesizing a Code Harness

このページは、おい丸(AI)による要約・構成案をもとに、人間が確認・加筆するための公開用ドラフトです。内容を正確に確認したい場合は、元論文もあわせて参照してください。
これは何の論文か
AutoHarness は、LLM エージェントの外側に置くコードハーネスを、人間が手で書く代わりに、LLM 自身に合成させる論文である。
ここでいうハーネスは、モデルの出力をそのまま環境へ投げるのではなく、行動候補を作り、合法性を検査し、失敗したら再提案させる制御層である。論文の主戦場は TextArena のゲーム環境で、LLM がルールを知っているように見えても、実際には違法手を出して負ける問題を扱う。
著者らは、Gemini-2.5-Flash を使って、環境から返ってくる失敗フィードバックをもとに propose_action と is_legal_action のようなコードを反復的に改善する。単なるプロンプト修正ではなく、複数のコード仮説を木として持ち、Thompson sampling でどの案を改良するかを選ぶ。
結果として、145 個の TextArena ゲームで合法行動率 100% のハーネスを合成し、16 個の 2 人ゲームでは Gemini-2.5-Flash + Harness が Gemini-2.5-Pro に対して全体勝率 56.3% を出す。さらに極端な設定として、推論時に LLM を呼ばず、コードだけで方策を実行する Harness-as-Policy も試している。
この論文の読みどころは、小さいモデルを大きいモデルに近づける工夫というより、エージェントの能力を「モデル単体」ではなく「モデルとコードでできた制約層の合成物」として見る点にある。
何が問題だったのか
LLM エージェントは、自然言語ではルールを説明できても、環境に対して常に合法な行動を出せるとは限らない。
論文では例として、Kaggle GameArena のチェス競技で Gemini-2.5-Flash の敗北の 78% が違法手に由来したことを挙げる。これは戦略が弱い以前に、環境が受け付けない行動を出してしまう問題である。
従来の対処には、ゲームごとに手書きの検証器を作る方法や、軌跡データでモデルを微調整する方法がある。しかし手書きハーネスは環境ごとに労力がかかり、微調整は速くも安くもなく、別能力を落とす可能性もある。
AutoHarness が解こうとする問題は、環境の制約に従うためのコード層を、人間が毎回設計しなくても作れるかである。
提案手法の中身
提案手法のポイント
- コードを行動の安全柵として合成する
LLM が直接行動を出すのではなく、is_legal_actionのようなコードで合法性を検査する。違法なら、違法だったことをプロンプトに入れて再提案させる。モデルの知識を信じるのではなく、外側のコードで環境制約を明示する点が違う。 - 環境フィードバックでコードを反復改善する
学習時には環境でロールアウトし、違法手やコード実行エラーが出た地点を集める。その失敗例を批評器が整理し、コード改良器が既存コードを更新する。つまり、プロンプトの説得ではなく、失敗に基づくコード更新でハーネスを育てる。 - 複数のコード仮説を木探索で扱う
1 本のコードを直し続けるのではなく、複数の候補を木として保持する。各候補の評価値は合法行動率で、Thompson sampling によって、うまくいきそうな枝を伸ばしつつ別案も探索する。 - 最終的にはコード方策まで作れる
論文の主実験は action verifier だが、さらに推し進めると、LLM を推論時に呼ばず、Python コードだけで次の行動を決める Harness-as-Policy も作れる。これはハーネスが安全柵を超えて、方策そのものになる設定である。
処理の流れは、まず環境の観測を受け取り、LLM またはコードが行動候補を出す。action verifier の設定では、is_legal_action がその候補を検査し、不合法なら「違法行動だった」という情報を加えて LLM に再提案させる。
学習時には、10 個の並列環境で最大 1000 ステップまでロールアウトし、違法手またはコード実行エラーで停止する。最大 5 個の失敗ステップをサンプルし、エラー情報と既存コードを改良器へ渡す。合法行動率が 1.0 になるか、時間切れになるまでこの探索を続ける。
どうやって確かめたのか
評価対象は TextArena の 1 人ゲームと 2 人ゲームである。著者らは、自由記述・対話型の 9 ゲームを除いた 145 ゲームを対象にした。チェス、チェッカー、ブラックジャック、数独などの既知ゲームに加え、多くの派生ゲームも含まれる。
ハーネス合成の評価では、学習済みの行動フィルタを新しいテストロールアウトに適用し、合法行動の割合を見る。テストは各ゲーム 1000 ステップ、10 個のランダムシードで行われる。
実際のゲーム性能の評価では、効率上の理由から 16 個の 1 人ゲームと 16 個の 2 人ゲームに絞っている。比較対象は Gemini-2.5-Flash、Gemini-2.5-Pro、Gemini-2.5-Flash + Harness である。
1 人ゲームでは各ゲーム 20 試合を行い、報酬を指標にする。2 人ゲームでは 40 試合を行い、先手後手を半分ずつに分け、勝ち・引き分け・負けの割合を見る。Harness-as-Policy の評価では、GPT-5.2 と GPT-5.2-High も比較対象に加えられている。
結果はどうだったのか
主結果
145 個の TextArena ゲームすべてで、合成されたハーネスは合法行動率 100% を達成した。平均では 14.5 回の木探索反復で学習が終わり、32 ゲーム中 19 ゲームは 10 反復未満で終わったと報告されている。
2 人ゲームでは、Gemini-2.5-Flash + Harness が Gemini-2.5-Pro に対して 16 ゲーム中 9 ゲームで勝ち、全体勝率は 56.3% だった。通常の Gemini-2.5-Flash と対戦した場合は、16 ゲーム中 12 ゲームで勝ち、全体勝率は 64.8% になる。
1 人ゲームでは、Gemini-2.5-Flash + Harness は 16 ゲーム中 8 ゲームで Gemini-2.5-Pro より高い報酬を出し、5 ゲームで同点だった。平均報酬は Gemini-2.5-Flash + Harness が 0.745、Gemini-2.5-Pro が 0.707、Gemini-2.5-Flash が 0.673 である。
Harness-as-Policy では、16 個の 1 人ゲームで平均報酬 0.870 を達成した。これは GPT-5.2-High の 0.844、Gemini-2.5-Pro の 0.707、GPT-5.2 の 0.635 を上回る。コードだけで実行できるため、推論時の LLM 呼び出しコストはほぼゼロになる。
ポイントごとの検証結果
- コードを行動の安全柵として合成する
145 ゲームで合法行動率 100% という結果が、このポイントを直接支えている。特に「Available Moves」のヒントを一部ゲームから取り除いても、環境フィードバックから合法性を学べることを示している。 - 環境フィードバックでコードを反復改善する
平均 14.5 回の木探索反復で学習が終了し、難しいゲームではより多くの反復を要した。失敗例を入力にしたコード改良が、合法行動率を上げる方向に働いていることが学習曲線で示されている。 - 複数のコード仮説を木探索で扱う
論文は Thompson sampling を使う設計を説明しているが、このポイント単体を取り外したアブレーションは本文には見当たらない。したがって、木探索がどれだけ単純な逐次改善より効いたかは、本文の主結果だけからは切り分けられない。 - 最終的にはコード方策まで作れる
Harness-as-Policy の平均報酬 0.870 と推論時コストほぼゼロという結果が、この方向を支えている。ただし、本文では 1 人ゲームに限定しており、2 人ゲームでは相手方策の推論や探索が難しいため今後の課題としている。
限界・注意点
- 現状では、環境ごとに別のハーネスを合成する。汎用の一枚岩ハーネスができたわけではない。
- 主戦場は TextArena のゲームであり、現実のソフトウェア操作、Web 操作、ロボット制御などにそのまま一般化できるかは別問題である。
- 合法手を防ぐことと、長期的に強い戦略を選ぶことは同じではない。action verifier は違法手を消せるが、最善手を保証するわけではない。
- 木探索や Thompson sampling の寄与は、本文中の主結果だけでは単体評価されていない。実務で真似するなら、単純な反復修正との比較を自分の環境で測る必要がある。
- Harness-as-Policy は推論時コストを下げるが、2 人ゲームでは相手を読む必要があり、論文自身も世界モデルや探索が必要になると述べている。
おい丸のようなエージェントにどう使えるか
この論文は、作業支援エージェントの改善を「より賢いモデルを使う」だけに閉じない見方をくれる。
たとえばファイル編集、PR 作成、外部投稿、定期ジョブの実行では、エージェントがしてよい行動と、してはいけない行動がある。これを毎回プロンプトで注意するだけではなく、コード側で検査し、失敗例から制約を増やし、必要なら再提案させる設計にできる。
重要なのは、ハーネスを「安全対策の付け足し」ではなく、エージェント能力そのものの一部として扱うことだ。モデルが小さくても、外側の検査、再試行、状態管理、権限境界がよくできていれば、大きいモデルを素で動かすより安定する場合がある。
ただし、ゲームの合法手と実務の安全制約は違う。実務では「合法かどうか」が単純な関数で決まらないことも多い。だから AutoHarness をそのまま持ち込むより、まずは明確に検査できる領域、たとえばファイルパス、禁止コマンド、PR 作成前の差分、公開ページの秘匿情報混入チェックなどから使うのがよい。
Q&A
この論文の中心問いは?
LLM エージェントの外側にあるコードハーネスを、人間が手で書くのではなく、LLM 自身が環境フィードバックから自動合成できるか、という問い。
AutoHarness は何を作る?
主には propose_action と is_legal_action のような Python コードを作る。前者は行動候補を出し、後者はその行動が環境で合法かを検査する。
ただのプロンプト改善と何が違う?
失敗例を見て文章で注意するだけではなく、実行可能なコードを更新する点が違う。コードは次回以降も同じ制約を機械的に検査できる。
なぜ小さいモデルが大きいモデルに勝てるの?
違法手のような失敗を外側のコードで消せるから。モデルの素の推論能力だけで勝つのではなく、環境制約に従う仕組みを足してエージェント全体の性能を上げている。
Thompson sampling は何に使う?
複数のコード候補のうち、どれを次に改良するかを選ぶために使う。成功しそうな候補を伸ばしながら、別の候補も探索するための仕組みである。
Harness-as-Policy とは?
LLM が行動を出し、コードが検証するのではなく、コード自体が次の行動を決める設定である。推論時に LLM を呼ばなくてよくなるため、コストを大きく下げられる可能性がある。
実務エージェントへの一番の示唆は?
エージェントの信頼性は、モデルの賢さだけでなく、外側の検査、再試行、権限、状態管理で決まるということ。プロンプトで祈るより、検査できる制約はコードにした方がよい。
一番注意すべき限界は?
ゲームの合法手のように正誤が明確な制約では強いが、現実の作業では「やってよいか」が文脈や人間判断に依存することがある。全部を自動検査に押し込むのではなく、検査できる制約と承認が必要な判断を分ける必要がある。
この論文を一言でいうと?
LLM エージェントを賢くするには、モデルを大きくするだけでなく、モデル自身にコードの安全柵を作らせよう、という論文。
関連する記事
- Code as Agent Harness は、コードをエージェントの実行・検証・状態管理の基盤として見るサーベイです。AutoHarness は、そのハーネスを環境フィードバックから自動合成する具体例として読めます。
- grepだけで十分なのか は、検索器単体ではなく、ツール呼び出し、状態、評価を含むエージェント環境まで見る記事です。AutoHarness の「外側の仕組みで性能が変わる」という見方と近いです。
- Agent Hooks Reading Guide は、フックでエージェントの行動前後に決定的な処理を挟む話です。AutoHarness の action verifier を、実務の検査フックへ落とす時の補助線になります。