コンテンツへスキップ
クックオフ:同じ仕様、異なるコード

クックオフ:同じ仕様、異なるコード

← 全記事
この記事で紹介した製品
Test Kitchen — 実装アプローチの並列探索。複数のバリアントを構築してすべてテストし、勝者を選ぶ。

計画は敵と接触した瞬間に崩れる。誰でも殴られるまでは計画を持っている。好きな言い方を選んでいい……要点は同じです。計画は抽象であり、抽象は現実に完全には写像されません。定義上、複数の有効な実装を許容するものです。

しかしAIはこれをより無視しづらくします。「明確な仕様」と「正しい実装」の間のギャップが、かつて一つのバージョンを生み出すのにかかっていた時間で、真に異なる実装を複数生み出せるようになったからです。最初の「正しい」実装だけを見ていると、有用な情報を取りこぼしている可能性があります。

その空間をすぐに一つに絞らず、探索してみたらどうなるでしょうか?

私はそのアイデアを突き詰め、モデルのばらつきを特徴として活用するためにクックオフを書きました。

Same spec, different implementations
Same spec, different implementations

セットアップはシンプルです。同じ設計書。複数のエージェント。独立した環境。並列ビルド。そして返ってきたものを評価します。

評価は単純に「どれが動くか」ではありません。「それぞれが何を最適化したか」です。どんな前提が埋め込まれたか? 一方にはあって他方にはなかった防御的な処置は何か? どのソリューションが適切な意味でシンプルで、どれが単に薄いだけか?

私たちはクックオフを使って、Bubble Teaを使ったチャットクライアントのTUIを構築しました。3つのエージェントが同じ仕様を受け取りました。3つのエージェントが同じフレームワークに対してビルドしました。返ってきたものはノイズではありませんでした。実装空間の小さな地図でした。

一つのバージョンは生のHTTPとフラットなモデルを使っていました。もう一つはネストされたコンポーザブルモデルを採用し、カーソルクランプ、送信者フォールバックロジック、タイムスタンプガード、その他の品質向上のための堅牢化といった防御パターンを多数含んでいました。審査員が結果を採点したところ、25点中18点で同点でした。

この引き分けこそ、私がこのパターンを気に入っている理由の一つです。経験的な「最良」の実装というものは存在しません。あるのは最適適合、今のための最良、これらの制約のもとでの最良です。実装を一つの正解を探す行為として扱うことは的外れです。有用な結果は多くの場合、複数のアプローチが異なる理由で擁護できるということであり、真の価値はそれらを学んでこのコンテキストにおいて最善のものへとまとめることから生まれます。

この場合、タイブレーカーはテスト数と本番行数の少なさからシンプルな実装を支持しました。それは良いことです。そのバージョンが勝者になりました。しかし「負け」の実装には勝者にはなかった防御パターンがありました。貼り付けのレースコンディション修正。UTF-8安全なトランケーション。ゼロタイムスタンプガード。

そこで私たちはそれらのアイデアを拝借しました。

これが本当の成果です。クックオフは単にチャンピオンを決めるためのものではありません。一つのコードベースに戻る前に、分岐から学ぶための方法です。最終結果は単一の候補よりも優れたものになり得ます。なぜなら、一つのエージェントの選択に付随する偶然のバンドルを受け入れる必要がないからです。

今回のケースでは、より強力な防御パターンをシンプルな勝者に移植し、いずれの実装単体よりも優れた最終コードを得ました。

これは非決定性についての私の考え方を意味のある形で変えました。一つの答えだけを求めるなら、非決定性は抑制すべき問題に見えます。出力を賢く比較し、ニュアンスの中で活躍できるなら、非決定性は探索になります。

もちろんコストはあります。複数の実装を実行することは一つを実行するよりも費用がかかります。しかし「負け」のランから得られるアイデアを持ち帰ることで、それらの欠点を後から一から対処する必要がなくなり、コストを回収できます。あるいはもっと悪いことに、本番環境で失敗してから対処するということもなくなります。実装の詳細が重要で、失敗の形を事前に予測するのが難しいときこそ、比較のコストを支払う価値があります。

また、失敗の感覚も変わります。一つの実装が崩れても、ゼロには戻りません。すでに探索空間をより多く購入しています。他に何が試みられたかを知っています。すでに代替パスを手元に持っているかもしれません。それは品質にとって有用なだけではありません。モメンタムにとっても有用です。

不確実性のすべてが前倒しではありません。その一部は明確な方向性が出た後も残ります。一部は実際のコードが書かれて初めて現れます。クックオフはその層のためにあります。オマカセが反応するためのアーティファクトを与え、デリベレーションが一緒に考えるための視点を与えるのと同じように、クックオフは比較するための実装を与えます。

同じテーマ、異なる反応の対象。

私はばらつきを隠してコンパイルできる最初のものを返すだけのAIコーディングシステムは求めていません。その差異が重要なときに、意味のある違いを検査できるシステムを求めています。勝者が答えになることもあります。答えの広がりが答えになることもあります。

試してみる

クックオフはClaude CodeTest Kitchenプラグインの一部です。

/plugin marketplace add 2389-research/claude-plugins
/plugin install test-kitchen

他の記事

14 ページ · hugo 0.148.2 · 1ee4278 · 構築済み Aug 10 22:58
2389 Radio
2389 RADIO ステーションを選択