ループエンジニアリング実践 — Claude Code /goalで試すAIの自律改善ループ

目次

はじめに

AIエンジニアリングの設計思想はここ数年で大きく進化してきました。まずプロンプトとコンテキストウィンドウの設計を最適化するコンテキストエンジニアリングが注目され、次にツールや外部システムとの接続設計を体系化するハーネスエンジニアリングが登場しました。そして現在注目されているのがループエンジニアリングです。AIエージェントが目標に向かって自律的に試行と改善を繰り返すループ構造を設計する技術です。

本記事では、Claude Codeの /goal コマンドを使ったゴール型ループを実装し、Kaggle Titanicコンペで実際にスコアを改善できるかを検証します。


ループエンジニアリングとは

ループエンジニアリングとは、AIエージェントが目標に向かって試行と改善を繰り返すループ構造を設計する技術です。

ループを持つエージェントは以下のサイクルを繰り返します。

  • 現状を観察する
  • 次の行動を決定する
  • 行動を実行する
  • 結果を評価して次へ進む

ループ設計において重要な要素は次の3つです。

停止条件:ループをいつ終えるかを明確に定義します。条件が曖昧だと無限ループに陥ります。

コンテキスト管理:繰り返しの中で何を記憶し何を引き継ぐかを設計します。

ハーネス設計:外部ツールや状態ファイルとの連携方法を定めます。

代表的なループ種別としては、目標達成まで繰り返すゴール型、一定間隔で繰り返す時間型、イベントをトリガーにするイベント型などがあります。今回はClaude Codeの /goal コマンドを使ったゴール型ループを実装しました。


実験内容

実験概要

Kaggle Titanic生存予測コンペを題材に、ループ構造の違いが精度に与える影響を検証しました。具体的には、外側ループのみの単層構造と、内側ループを加えた二層構造を比較します。TitanicコンペはKaggle入門として最も有名なコンペであり、public leaderboardには数万件の提出が集まっています。スコア0.80超えは上位25%程度に相当する競争力のある水準であり、これを共通の目標として両方の実験を実施しました。

使用データ

Kaggle公式のTitanicデータセットを使用しました。訓練データは891件、テストデータは418件です。目的変数はSurvivedの二値分類です。

ループのアーキテクチャ

二層構造のループを設計しました。

外側ループ:1回の繰り返しが1回のKaggle提出に対応します。提出数がそのままループ回数になります。

内側ループ:複数の機械学習手法を試し、交差検証スコアが改善するまで繰り返します。改善が確認できた場合のみKaggleに提出し、最低3手法を試しても改善がなければ最良のものを提出します。

観点内側ループなし内側ループあり
提出の基準任意のモデルをそのまま提出CVが改善した場合のみ提出
1提出あたりの試行数1手法複数手法を探索
提出枠の効率低い高い
知識の蓄積なしexperiment_log.mdに記録して次回へ引き継ぐ

内側ループがなければ、改善の見込みのないモデルを提出し続けることになります。今回の実験では1回の外側ループで平均5手法以上を試し、交差検証で改善が確認できたものだけを提出しました。

ループの設定

  • 停止条件:Kaggle scoreが0.80を超えるか、提出回数が8回に達する
  • スコア評価:5分割交差検証の精度
  • 実行ツール:Claude Code /goal コマンド
  • 状態管理:experiment_log.mdに提出記録と教訓を蓄積

結果

実験の比較

二層構造のループを設計する前後で、以下の違いが生まれました。

観点単層ループ実験二層ループ実験
ループ構造外側ループのみ外側ループ + 内側ループ
1提出あたりの探索数1手法平均5手法以上
提出数9回5回
最高Kaggle score0.782290.81339
目標達成未達成達成

単層ループ実験の結果

内側ループを持たない単純なループ構造では、1回の繰り返しで1手法を試してそのままKaggleに提出していました。9回提出しても最高スコアは0.78229にとどまり、目標の0.80を超えることができませんでした。

提出採用手法Kaggle
1RFアンサンブル0.77272
2RF+GB+LRアンサンブル0.77272
3GB + ドメイン特徴量0.76076
4LogisticRegression0.76794
5RF+SVC+LRアンサンブル0.78229
6LGB+RF+LR + 追加特徴量0.76315
7RF+SVC+LR + TicketGroupSize0.78229
8RF+SVC+LR + TicketGroupSize0.78229
9SVC単体0.77990

二層ループ実験の結果

内側ループを追加したことで、1回の外側ループで複数手法を探索し、交差検証で改善が確認できた場合のみ提出するようになりました。5回の提出で目標を達成しました。

提出採用手法CVKaggle
1RF+SVC+LR アンサンブル0.83390.78229
2TicketGroupSize追加0.83390.78229
3ドメイン特徴量追加0.83500.77511
4ベースライン再提出0.83390.78229
5ファミリー生存率追加0.84620.81339

5回目の提出で目標を達成し、ループを停止しました。決定的だったのはファミリー生存率特徴量の導入です。同姓の乗客の生存率をLeave-One-Out方式でターゲットエンコーディングしたことで、CVが0.8339から0.8462、Kaggle scoreが0.78229から0.81339へ大幅に改善しました。なお、ドメイン特徴量を追加した3回目はCVが改善したにもかかわらずKaggle scoreが悪化しており、CVの微増が汎化性能の向上を意味しないことも確認できます。


まとめ

今回の実験を通じて、ループ構造によりエージェントが自律的に複数の手法を試し、目標スコアを達成できることを確認しました。しかしスコア改善の鍵は、ループを回すこと自体よりも、ハーネスの設計にありました。

内側ループによるCVゲーティング、experiment_log.mdによる状態の引き継ぎ、そして明確な停止条件、この三つが組み合わさって初めて、エージェントは効率よく探索し学習することができます。ハーネスが機能しなければ、ループはただの繰り返しに過ぎません。

AIエージェントの活用が広がる中で、ループをどう設計するかと同じくらい、ループを支えるハーネスをどう設計するかが重要です。ループエンジニアリングとハーネスエンジニアリングは切り離せない技術です。


実装コード

本記事で使用したコードはGitHubで公開しています。

loop_engineering_demo

CTA
  • URLをコピーしました!
  • URLをコピーしました!
この記事を書いた人
目次