目次
背景
- 最近めっきり自分の手でコードを書かなくなった
- AIに書いてもらったほうが速くて正確だから
- しかし、AIでAIシステムを作る時はシーソー化問題が結構発生する
- そのため、シーソー化問題の対応策を残す
シーソー化問題とは
- シーソー化問題とは、直しているようで課題を増やしている問題の事
- 例えば、Aを解決するためにBを足した結果、CとDの問題が新たに発生したみたいな現象
- それをさらにアドホックに直すと課題が発散して、まるで開発が収束しない
- 別の言い方をすると、Whack-a-Moleパターン(もぐらたたきパターン)
- さらに、そもそも課題だと思っていたが実際は課題じゃないことも多い
- 加えて、特に安い簡便な解決策ほど副作用があったりする(例えば正規表現で安易に回避など)
なぜシーソー化問題が起きるのか
- 理由はAIでコードを生成するスピードが速くなって、Checkが追いつかないから
- 基本的にAIを信じて機能をガンガン追加してもらう
- 人がCheckしないので、バグが発生してても気づきにくくなっている
- そうすると気が付かないうちにエンバグやデグレを起こしている事が多い
- 細かいところを見きれないのが原因かもしれない
解決策
シーソー化の解決策はワークフローを整備して検証しつつ変更を慎重に加える事。
| |
実行->issue->pr->mergeみたいなgithub風の流れをローカルでやっている事に近い。
エッセンス
- データと再現性
- まずは実行logなどは全て保存する
- データドリブンでAIに開発させるのが目的
- データがあれば問題の再現性を検証できる
- 再現性が取れるように課題のログをベースに再現方法を整える(testコードなど)
- AIにGuessさせない
- 一番大切なのはdon’t guess, measure
- つまり、AIがguessで解答させなくする
- これをやられると信頼関係が崩れる
- 課題の再現性の取れるコードをベースに原因を特定する
- 課題や解決策に飛びつかない
- backlogに課題をまずは起票する
- mdベースで課題についてdiscussionする
- 理由は、課題が再現しても本物の課題かを議論する
- 前提が間違っていたり、実現可能性が引くい可能性もある
- 解決策に飛びつかない
- 解決策についてもmdでdiscussionする
- つまり、課題->解決とは安易に進まない
- solutionに安易に飛びつくとパッチワークになる
- 例えば、正規表現だらけのその場限りのスペゲティコードとか
- 解決方法についての評価もする
まとめ
- AIによるシーソーゲームの解決方法は細かく仮説検証すること
- つまり、ラチェットを締めるように確実に開発する手法
- 言い換えると、「一方向には進むが、逆戻りしない歯車」みたいに開発を進めるべき
- まあ、AIで推測でコードを書かせないのが大切
- シンプルにデータドリブンで疑いながら検証しつつ開発する手法
- slowly but surely
