AIコーディングの規律 — 構造化されたプロンプトとコントラクトが重要な理由
AIを正しく設定する
AI支援によるコーディングには、現実的でありながら、しばしば答えのない問いがあります。すでに存在するコードやロジックを壊さずにすべてが正しく動作するよう、AIとその個々のエージェントをどのように設定すればよいのか。リファクタリングは、コードベースにすでにある構造を決して壊してはなりません。
AIにとって最も重要なこと
- 正確で詳細なプロンプト — 要件が明確に記述されているほど、より適切に実行されます。
- 作業を、より小さく細かいステップに分割し、各ステップの後で検証することで、1つの大きなプロンプトよりも良い結果が得られます。
- ハルシネーションの低減 — AIは、実際の要件に合わない場合でも、キーワードの一致により、最も響きが近い選択肢を選びがちです。
- ビジネスロジックと、明示的な「何を壊してはならないか」という制約をプロンプトに組み込むと、プロンプトとユニットテストだけの場合より良い結果が得られます。
- ユニットテスト、統合テスト、エンドツーエンドテストは、ある変更が、タスク自身の範囲外の機能を壊していないことを確認するために存在します。
標準的なAIエージェントに AITM が加えるもの
- 通常のAIエージェントにはアクセスできない、コントラクト、DOM 要素、振る舞いのチェーン、ビジネスロジックの記述。
- Chat または Brainstorm から生成されるタスクは、コントラクト、ドキュメント、振る舞いに関するビジネスロジックを使って、変更してはならないコードの部分をすばやく特定し、AIが何かに触れる前に、関連するビジネスロジックをプロンプトに注入します。その結果、ハルシネーションを最小限に抑え、可能な限り最良の実装が得られる、AI向けに調整されたプロンプトが生成されます。
- プロンプトには Skills と特定のコントラクトも渡されるため、タスクを既存のコーディングパターンと既存のビジネスロジックへ正確に誘導でき、変更が現在のコードにどれだけ適合するかが向上します。
- すべてのパイプラインタスクは、リクエストの種類(Bug、Enhancement、Feature)に応じて生成され、種類ごとにパイプライン内で異なる方法で実行・検証されるため、コードの品質が一貫して高く保たれます。
- 大きな要件は、互いに積み重なる、依存関係のある小さなタスクに分割されます。チェーンの最後のタスクは、それらすべてが正しく正確に作成されたことを検証します。
- 大規模な変更や非論理的な変更があると、タスクは停止し、先へ進む前に、その変更が本当に正しいことを人間(またはより強力なモデル)が確認する必要があります。
- Architect ステップは、何がどこで変更されるかを収集し、コードカバレッジのメトリクスを確認し、何が起きているかを正確に書き留めます。それ以上でも、推測を含むものでもありません。