入力が出力を決定する:Agent時代のボトルネックが仕様である理由
第1章ではAgentの入力への忠実な実行という特性を分析した。Agentの行動パターンは入力への忠実さであり、入力の品質が出力の上限を決定する。この特性は仕様レベルにおいて非常に具体的なエンジニアリング上の含意を持つ。
従来の開発では、要件ドキュメントは曖昧であっても構わなかった。プロダクトマネージャーが「ユーザーが請求履歴を便利に確認できるようにする」と書けば、プログラマーはプロダクトへの理解、ユーザーに関する知識、技術スタックへの精通に基づいて多数のディテールを自動的に補完する。ページネーションか無限スクロールか?新しい順か古い順か?読み込み失敗時の処理は?これらの判断の大半は妥当であり、意図からの逸脱がたまにあってもコードレビューで捕捉・修正される。
Agentが同じ曖昧な要件に直面した場合、その振る舞いはまったく異なる。同様にすべての判断を行うが、各判断は入力に提供された情報のみに基づく。ページネーション戦略について入力に何も記述がなければ、Agentは1つを選ぶ。その選択の根拠は訓練データの統計的分布かもしれないし、コンテキスト内の無関係なコードからのヒントかもしれないし、ランダム性かもしれない。出力を確認するまで分からない。
これはボトルネックの移動を意味する。従来の開発では、ボトルネックは実行速度だった。プログラマーがコードを書く速度がデリバリーのケイデンスを決定していた。Agent時代では、ボトルネックは仕様の明確さである。仕様に曖昧さがいくつあれば、出力にも同数の不確実性がある。Agentは1つのモジュールのコードを数分で書き上げるが、仕様に10の曖昧さがあれば、実装の10のバージョンを得る可能性がある。それぞれが曖昧な要件を「正しく」満たしているが、本当に求めているものは1つだけである。
Agentの出力品質を向上させる最も効果的なレバーは、入力側、すなわち仕様にある。