生成AIにコードを書かせることについて思う
便利ですよね
うん、便利です。とっても便利。でも、全ての点においてパーフェクトなものでもない。このことをしっかり認識していないといけないのですよ。
というわけで、今日はその辺を書きたいと思います。
コード作成と文章作成は似ている
同じではないですが、似ていると私は考えています。結局は、大量のテキストを作り上げていく作業。だから、大雑把に言えば似ている。
そして、文章にせよプログラムにせよ、違う人が作ったら基本的に同じものはできない。それぐらい自由度が高い。これも似ている。プログラムなんて誰が書いても同じにならなきゃダメなんてことを言う人もいるけど、そんな事は無理だというのは少なくともプログラムとしっかり向き合っているならば理解しているし言えるはずもない。
それでも、何とかして似たような文章なりプログラムを書かせようとするならば、自由度を減らしていくという作業が必要となる。自由度がなくなれば、それだけ出来上がるものは近いものになる。
自由度って何?
簡単に言うならば勝手にやっても構わない部分と考えてもらえば良い。文章ならば、自分を示す単語として何を使うか?私?自分?俺?オレ?あたし?それがし?まぁ、そんな感じでいっぱいある。プログラムの場合は変数やクラスの名称、使用するアルゴリズム、プログラムのフォーマットやコメントなどが該当する。この辺も、いくらでも選択肢があるので、二人で同じ目的のプログラムを書いたところで同じものが出来上がる可能性はほぼ無い。でかいプログラムになればなおのこと。
そして、プログラムの世界では、自由度を制限する仕組み-コンパイラによる静的な、もしくはインタプリタによる動的な文法のチェック-がある。これを通らないとプログラムは動かない。だから、文章に比べるとちょっとだけ自由度は低い。でも、チェックを通すというのは意外とハードルが低いので、自由度は相変わらず高いままだ。
生成AIで作るプログラムは?
ここまで書いて、生成AIが作るプログラムについて考えてみたいと思う。
生成AIも頼めばプログラムを書いてくれる。まぁ、書くという表現が正しいかは悩ましいところだけど。
生成AIが作ったプログラムって、実のところ自由度についてはあんまり考えていない。もしかすると規約に沿ったプログラムを生成するなんてことも出来るかもしれないが、さしあたりそんな話を聞いたことも無いのでこれからの話だろうとは思う。つまり、生成AIのプログラムは、極めて自由度が高いところで生成されていると考えるのが自然だと思う。もちろん、参考にした(=学習した)プログラムの影響を強く受けるし、それらは割としっかりしたプログラムだったりするので、ぱっと見はしっかりと書いているように見える。だから、自由度のことを忘れてしまう。
でも、考えてほしい。生成AIにそんなリクエストなんて全く出していないことを。
自由度が高いときの問題点
品質保証が難しいということが一番大きい問題だと思う。まぁ、プログラムの品質保証なんて悪夢のような世界。だから世の中バグで苦しんでいるんだけど、それをちょっとでもよくしたい。だからこその自由度の制限だったりする。正直、みんな自由にプログラム書いたらチェックするのも大変だからね。
文章だって問題は同じ。だから、本の中に文章を書くスキルの無い人が書いた文章が混じるとちょっと残念な感覚になる。
そして、生成AI は自由度が高い。だから、この問題点と向き合わないといけなくなる。
生成AIにコードを書かせたら?
正直、私が欲しいコードは生成AIは作ってくれない。レベルの問題なのでどうにもならないけど。でも、ちょっとしたコードだったら作ってくれる。結構動かないケースもあるけど、とにかく作ってくれる。
で、ちょろっとレベルの問題と書いたけど、この問題が重要。自分が欲しいコードが生成AIにとってどんなレベルの課題なのか?ということは考えないといけない。そして、生成AIでもコード生成が可能なレベルの問題だったらやらせてしまえ!って気分になる。そして、それでいいと思っている人がやたらと多いという印象を持つ昨今でもある。
難しい課題
いくつかあると思っています。わかりやすいのが品質保証的な問題。もう一つが生成AIの対応できるレベルを超えたときに何が起きるのか?という問題です。
品質保証
しんどいけど、人間が書いたコードと同じだと思って頑張る。でも、上で書いたように自由度が高い(そうは見えないとはいえ)。だから、生成AIの作ったコードの品質保証は人間が書いたコードよりもしんどい。それに、問題が見つかったとしても、それが起きないようにする方法を考えるのはどうすればいいのか?生成AIだって間違える。そして、生成AIに直して!ってお願いを出せば問題が簡単に解決するのか?解決したとして、それは恒常的な解決なのか?一時的なものなのか?コントロールできる世界なのか?
真面目に考えれば考えるほどにむずかしい。
まぁ、使い捨てのプログラムだと割り切れば良いんですけどね。
私は生成AIに作らせたプログラムがろくにチェックもされないまま製品に組み込まれる悪夢のような世界が来ちゃっているような気がしています。
生成AIの対応できるレベルを超えたとき
以前の記事に書いたけど、生成AIに限らず機械学習はしらないという情報を出してくれない。だから、レベルを超えても何か生成する。多分、ちゃんと動かないようなプログラムを。
私は、自分の書いているソフトウェアのプログラムを生成AIに書かせる気には全くなりません。生成AIの提示するサンプルコードがそもそも動かないようなソフトを書いているんだから、生成AIのコードを組み込むなんてことは出来るはずもない。
これは上に書いたレベルの問題で、生成AIが出力できるレベルを超えた課題だから、使えなくても仕方がないのです。そして、そういうケースがあることを理解することがとても重要なのです。理解しないまま使うことはとても危険なことなのです。
要求レベルは常に上昇する
世の中の技術が進歩しないし、作るソフトウェアの機能も同様に進歩しないのであればこんな問題は起きません。でも、実際はそうじゃない。世の中の多くのエンジニアがC言語でプログラムを書いていた頃に、今のプログラムでやっていることと同じことをやらせることなんかどう考えたって無理以外の何物でもなかった。
でも、今は簡単にできる。
それだけ技術は進歩しているのです。それに合わせて要求レベルもどんどん上がっていく。これもまた当然。
だから、これを常に考えないといけない。もちろん、生成AIも同様に進化し続ける。完全にいたちごっこ。生成AIが作るコードのレベルもどんどん上がっていくけど、ソフトウェアが要求するレベルもどんどん上がっていく。時間とともに変化するこの要素を無視してはいけないのです。
だからこそ理解が必要なのです
理解した上でうまく使うことが必要です。ボタン一つで解決!ということが好まれる昨今ではありますが、そうなったらもう技術は失われます。ソフトウェアを作る技術なんか要らないと言えるはずもない。生成AIが全てのソフトを生成してくれるはずもない。
もちろん、生成AIはコード作ってくれますし、それが役に立つフィールドもあります。でも、そうでないフィールドもあるのです。そういう違いを無視しても良いことなど何もありません。
生成AIも用法用量を守り正しくお使いくださいという原則からは逃げられないのです。
今日はここまで
今日もDS的なことを書いています。まぁ、一方SEだったこともあるので、今回の記事は両方の世界から眺めた意見になっています。
AIの技術はまだまだこれからです。これぐらいで終わったらとても悲しい。生成AIは新しい可能性をこれでもか!と見せつけてくれていますが、可能性でしかありません。
どっかのSFで死者が残したメッセージと対話するなんてシーンがあったのですが、設定していない質問をするとそれについては答えられないみたいな回答をするんですよね。今の機械学習モデルでこれは出来ない。当然、生成AIでも出来ない。禁止ワードみたいなのに引っかかったら出さないということは当然やられているのですが、そうじゃない。わからないときはわからないという。それが自然に出来るのはまだまだ先です。だって、今ある技術のベースになっている技術でそれが出来ていない。もちろん、力業で解決は出来ないでもないけど、ここまで規模がでかくなった生成AIで力業で解決するのは正直しんどいはず。
どんな道具も理解して使うことがベスト。
心がけていきたいところです。