10月22日、KDnuggetsが「Google Open-Sources Harness²: Self-Improving AI Agents Without Retraining」と題した記事を公開した。Googleがモデルの再学習なしにAIエージェントを自己改善させるフレームワーク「Harness²」をOSSとして公開したことを伝える内容だ。
会計処理を任されたエージェントが、誰にも教わることなく自分のコードのバグを発見し、修正する——Harness²が示す自己改善の起点はこの地点にある。APIでモデルを利用している開発チームの大半は、ファインチューニングに必要なトレーニングデータ・GPU・モデルの重みへのアクセスを持っていない。Harness²はその制約を前提に設計されている。
モデルを触らずにエージェントを改善する
AIエージェントの性能を上げる通常の手段は、モデルをファインチューニングすることだ。だが、そのためにはトレーニングデータ、GPU、そしてモデルの重みへのアクセスが必要になる。APIでモデルを利用している開発チームの大半は、そのいずれも持っていない。
Harness²(ハーネスの二乗)はこの問題を別のアプローチで解く。モデルの重みには一切触れず、モデルの「周囲」にあるすべてを書き換えるという設計だ。
ここで言う「ハーネス」とは、エージェントとして機能させるためにモデルを取り巻く構成要素の総称である。DSPyやLangGraphのようなフレームワークがプロンプトやパイプラインの構造化を担うのに対し、Harness²はそれらの構成要素そのものを実行結果から自律的に書き換える点が異なる(ファインチューニング不要の自己改善という点ではDSPyのコンパイルに概念的に近いが、Harness²は重みではなくテキストファイルとして保存されたハーネス全体を更新対象とする)。具体的には以下の8つのコンポーネントが対象となる。
| コンポーネント | 役割 |
|---|---|
| System prompt | モデルが最初に読む常時指示 |
| Guardrails | エージェントがすべきこと・すべきでないことのルール |
| Memory | ステップをまたいで保持される長期メモ |
| Skills | 特定の作業向けの再利用可能な指示 |
| Tool guidance | 各ツールをいつどう使うかの指針 |
| Scripts | エージェントが実行できるヘルパーコード |
| Subagents | タスクの一部を委譲するヘルパー |
| Plugins | ツールループ内の動作を制御するミドルウェア |
改善の結果はすべてプレーンなテキストとコードとしてディスク上のファイルに保存される。何が変わったかを diff で確認でき、なぜその変更が採用されたかの理由もフレームワーク自身が書き残す。
コードは**Apache 2.0ライセンス**で公開されており、論文Harness²: Recursive Agent Harnessing for an Open Worldおよびプロジェクトサイトも合わせて公開されている。
2段階の再帰ループが核心
名前の上付き「²」は、2つの改善ループを指している。
ループ1(タスクレベルの再帰)は、1つのタスクに対して「Propose → Probe → Compose」の3ステップを回す。ハーネスエディタが編集案を提案し、エージェントが同じタスクを各案で再実行し、コンポーザーが結果を比較して有効な編集をマージする。
ここで重要な点がある。Harness²は正解を必要としない。改善のシグナルは「同じタスクを異なるハーネスで実行した際の行動の差異」から得られる。つまり、ラベル付きデータが存在しない未知のタスクにも対応できる。RLHFのように人手のフィードバックを必要とせず、DSPyのように事前のラベル付き訓練セットも要求しない。
ループ2(ハーネシングレベルの再帰)では、タスク完了後に「経験リフレクタ」が採用されたハーネスと教訓を「改善ハーネス」として永続保存する。この改善ハーネスが次のタスクのハーネス改善を導く。つまり、ループ1がこのタスクのエージェントを改善し、ループ2が将来のタスクに向けてフレームワーク自体を改善する。
デモで何が起きるか:バグを自力で発見する例
Googleが提供するデモはAPIキー不要で実行でき、会計タスク2件を処理する。出発点のハーネスには意図的なバグが仕込まれている。
# 初期のsummarize.py(バグあり)
total = sum((amount for amount in amounts if amount > 0), Decimal(0))
if amount > 0 というフィルタが、負の値(貸方)を黙って除外してしまう。Harness²はこのバグを誰にも教わることなく自力で特定し、修正する。
# 元のスクリプトの出力
Total: 105.25
# 採用後のスクリプトの出力
Total: 85.15 (正しい値: 100.25 − 20.10 + 5.00)
さらに、フレームワークはEXPERIENCE.mdというファイルに以下のような教訓を書き残す。
## Transferable lesson
- cue: When a ledger includes credits and debits
- lesson: Include both signs when summing in scripts/summarize.py.
- confidence: high for this observed arithmetic contrast
この「cue(手がかり)」と「lesson(教訓)」のペアが、2つ目のタスク開始前に改善ハーネスとして引き継がれる。demo.json を見ると、1つ目のタスクは教訓0件で開始し、2つ目は1件保有した状態で開始していることが確認できる。
ベンチマーク結果
Googleは複数のモデルと3つのベンチマークで評価している(k=1の単一ステップ)。なお、以下の表に記載のベンチマーク名・モデル名は元記事の記載をそのまま反映したものであり、TechFeed編集部では表記の正確性を独立に確認できていない点に留意されたい。
以下の数値はGoogle自身による報告における最大改善幅(平均値ではなく最良条件での値)であり、独立した再現実験による検証はこれからだ。表単体での数値の解釈には注意が必要である。
| ベンチマーク | 測定内容 | 最大改善幅 |
|---|---|---|
| WorkBuddy-Bench | オフィス・Web・コードタスク | +11.5ポイント |
| LAB(法律業務) | 法律業務タスク | +11.8ポイント(部分通過率) |
| JobBench | 専門業務タスク | +4.5ポイント |
なお、再帰の予算kを増やすとさらなる改善が得られるとREADMEには記載されている。ただし、コストも線形に増加する(タスクあたり4k回のロールアウトと3kのインプルーバーセッションが必要)。
セットアップの要点
実際に動かす場合の前提条件は以下のとおりだ。
- Linux(WindowsはWSL経由、macOSはLinux VMを推奨)
- Python 3.12(3.13も対応)
- **uv**(Astralのパッケージマネージャ)
git clone https://github.com/google-research/harness2.git
cd harness2
uv venv --python 3.12 .venv
source .venv/bin/activate
uv pip install -e '.[render]'
harness2-demo --output runs/demo --k 2
デモ自体は数秒で完了する。実際のベンチマーク実行にはVertex AIなどのモデルAPIが必要になる。
詳細はGoogle Open-Sources Harness²: Self-Improving AI Agents Without Retrainingを参照していただきたい。