はじめに
ハーネスエンジニアリングを調べた内容をまとめました。
AIエージェントを開発する際、私たちはつい「どのLLM(基盤モデル)を使うか」や「プロンプトをどう書くか」に意識を向けがちです。しかし最新の研究により、同じモデル・同じベンチマークであっても、モデルを取り囲む「ハーネス(オーケストレーションコード)」の違いだけで、最大6倍もの性能差が生じる ことが判明しています。
LangChainなどは「エージェント=モデル+ハーネス」と明確に定義しています。LLMを「強力だが単体では動かないCPU」とするなら、コンテキストウィンドウはRAM、外部データベースはディスク、ツールはデバイスドライバであり、それらを統合制御する「オペレーティングシステム(OS)」こそがハーネスの役割です。
この記事では、現在大きな注目を集めている「ハーネスエンジニアリング」の概念と、それをめぐる最新の研究動向(Anthropicの実践例、自動最適化の「Meta-Harness」、自然言語化する「NLAH」)について解説します。
1. なぜハーネスが必要なのか?(Anthropicの実践例から)
複雑なタスクを数時間から数日かけて実行する「長時間稼働エージェント(Long-running agents)」において、コンテキストウィンドウの制限は大きな壁となります。
Anthropicのエンジニアリングチームは、エージェントの失敗パターンが主に以下の2つに集約されることを発見しました。
- One-shotting: アプリ全体を一度に完成させようとし、途中でコンテキストが枯渇して機能が未完成のまま破綻する。
- Premature completion: プロジェクトの後半で、一部の機能が動いたのを見て「すべて完了した」と誤認してしまう。
これらを解決するため、Anthropicは人間のソフトウェアエンジニアの働き方に着目し、「初期化エージェント(Initializer agent)」と「コーディングエージェント(Coding agent)」の2つの役割にハーネスを分割しました。
-
初期化エージェントの役割: 最初のセッションで、ユーザーの指示をもとに「200以上の機能要件リスト(JSONファイル)」や、開発サーバーを起動する
init.shなどを生成し、初期のGitコミットを行います。 -
コーディングエージェントの役割: 各セッションで機能リストを1つずつ順番に実装し、進捗を
claude-progress.txtに記録しながら、綺麗な状態でGitコミットを残します。
この「ファイルベースでの状態管理(File-backed state)」により、エージェントはセッションが切り替わっても過去の文脈を失わず、着実にタスクを遂行できるようになりました。
2. 人間の設計を超える「Meta-Harness」(ハーネスの自動最適化)
これまでハーネスの設計は、開発者がログを睨みながら手作業でヒューリスティクスを調整する職人芸でした。しかし、スタンフォード大学などの研究チームは、この ハーネスのコード自体をAIに自動最適化させる「Meta-Harness」 というシステムを開発しました。
Meta-Harnessの最大の特徴は、最適化ループにおける「フィードバックの与え方」です。
従来の手法のように要約されたスコアだけをLLMに渡すのではなく、コーディングエージェント(Claude Codeなど)を「提案者」として起用し、過去のすべての候補のソースコード、評価スコア、そして「生の実行トレース(最大1,000万トークン)」にファイルシステム経由でアクセスさせます。
エージェントは自らgrepやcatコマンドを駆使して失敗のログを分析し、「なぜこのループでスタックしたのか」を因果推論した上で、Pythonのアルゴリズム構造そのものを書き換えます。
その結果、Meta-Harnessが発見したハーネスは以下の成果を挙げました。
- TerminalBench-2(複雑なCLI操作ベンチマーク)において、手動設計された最先端のシステムを上回り、Haiku 4.5モデルで1位を獲得。
- 発見された数学的推論のハーネスは、未知の5つの別モデルに適用しても一貫して性能を向上させた(モデルに依存しない汎用性を証明)。
生のトレースへのアクセスを奪うと最適化の精度が大幅に低下することから、「失敗の生々しい詳細データ」へのアクセスこそがハーネス進化の鍵であることが分かっています。
3. ハーネスを自然言語で定義する「NLAH」
もう一つ、全く異なるアプローチとして清華大学などが提唱したのが 「自然言語エージェントハーネス(Natural-Language Agent Harnesses: NLAHs)」 です。
現在、多くのエージェントの制御ロジックはPythonコードやフレームワークのデフォルト設定の中に埋もれており、比較や移植が困難です。そこでNLAHは、ハーネスの設計パターン(役割、契約、ステージ構造、障害の分類など)を編集可能な自然言語で記述し、それを「Intelligent Harness Runtime (IHR)」という共通ランタイム上で直接実行させます。
これは「自然言語をコードの代わりに使う」ということではなく、決定論的なツール操作(テストやリンター)はコードのまま残し、高次な「オーケストレーションのロジック」を自然言語に外出しするというアプローチです。
実験では、OSWorld(デスクトップ操作タスク)の既存のコードベースのハーネスをNLAHへと移行させた結果、実行時間が361分から141分に短縮され、LLMの呼び出し回数が1,200回から34回へと激減したにもかかわらず、タスクの成功率は30.4%から47.2%へと大きく向上しました。
自然言語で明確に役割や状態管理を定義することで、エージェントは脆いGUI操作の無限ループに陥るのを避け、確実なファイルベースの検証を行うようになったためです。
まとめ:プロンプトエンジニアリングから「ハーネスエンジニアリング」へ
モデルが進化すればハーネスは不要になるのでしょうか?
実態は逆であり、「モデルの進化に伴ってハーネスの形が移動している」のが正解です。高度なモデルになるほど、開発者の仕事は「エージェントの試行ループをいかに狭め、規律を持たせるか」という 引き算の技術(Craft of subtraction) へと移行しています。
- 「エージェント=モデル+ハーネス」である。
- 次のモデルアップデートを待つよりも、既存のモデルに対するハーネスエンジニアリングに投資する方が、より大きく迅速な性能向上を得られる。
「あなたがエージェントを構築しているなら、自称するかどうかにかかわらず、あなたはハーネスエンジニアである」と言われる時代が来ています。これからのAIエージェント開発においては、プロンプトの工夫だけでなく、エージェントを包み込む「環境」と「ワークフロー」をどう設計するか(=ハーネスエンジニアリング)が、最も重要な腕の見せ所となるでしょう。
これまでの解説の作成にあたり参照した情報源のリンクおよび詳細は以下の通りです。
1. Anthropicの実践例(長時間稼働エージェント向けのハーネス)
- タイトル: Effective harnesses for long-running agents
- 組織・著者: Anthropic (Justin Young ほか)
- 参照リンク (Anthropic Engineering Blog): https://anthropic.com/engineering/effective-harnesses-for-long-running-agents
2. Meta-Harness(ハーネスの自動最適化システム)
- タイトル: Meta-Harness: End-to-End Optimization of Model Harnesses
- 組織・著者: Stanford University, KRAFTON, MIT (Yoonho Lee ほか)
- arXivリンク: https://arxiv.org/abs/2603.28052
- プロジェクトページ: https://yoonholee.com/meta-harness/
3. NLAH(自然言語エージェントハーネス)
- タイトル: Natural-Language Agent Harnesses
- 組織・著者: 清華大学, ハルビン工業大学 (Linyue Pan ほか)
- arXivリンク: https://arxiv.org/abs/2603.25723
4. ハーネスエンジニアリング全体の解説動画
- タイトル: Rethinking AI Agents: The Rise of Harness Engineering
- プラットフォーム: YouTubeチャンネル「PY」
- リンク: https://www.youtube.com/watch?v=Xxuxg8PcBvc
さらに詳細な実装や検証データを知りたい場合は、上記の論文やブログ記事(英語)を直接ご参照ください。