🧠

プログラマ視点での生成AIとの付き合い方

2024/05/31に公開

プログラミングについて、最近考えてることについてのポエム。

基本的に、 GPT-4 と Claude-3-Opus を使った経験を念頭に置いて話をする。機械学習エンジニアではないので、あくまで利用者に徹した視点での話。仕事で生成AIを使ったパイプラインを作ったりはしている。

生成AIの進化速度を予測しておく

今大事なことは、今AIがどの程度の性能かという定点の話ではなく、その進化の速度を認識すること。

コード生成というタスクにおいて、生成AIモデルを人間に当てはめると、こんな感じの人物像を自分は持っている。

  • GPT-4: プログラミング経験2年目の大学2年生
  • Claude-3-Opus: プログラミング経験3年目の大学3年生

ここでいうn年目は、業務経験ではなく、プログラミングの単位がある大学での、教育課程としての経験年数。今のひたすら学習量を増やす方式だと、単に1年に1年分ぐらい賢くなっている。ただ、 地頭の足りなさを GitHub の丸暗記で補っている感じがある。

プログラミングという領域だと、今の生成AIはプログラマのタスクを補助することは出来ても、仕事を任せられる水準にない。

このベンチマークによると、 Claude-3-Opus が IQ101, GPT-4 が 85 らしいが、自分の自分の肌感としてもコード記述能力においてもそのぐらいの印象がある。

https://www.maximumtruth.org/p/ais-ranked-by-iq-ai-passes-100-iq

ただ、BERT -> GPT-2 や、 GPT-2 -> GPT-3 のように、アルゴリズムの改善で著しく性能向上するイノベーションが高頻度で発生しているので、ある程度連続的に進化しつつ 2~3年に一度突然頭が良くなる、という前提で付き合っている。

AI はアシスタントか、チームメイトか、超知性か

こういうと厳しい話だが、今の Claude-3-Opus、自分の評価だと業務未経験の大学3年生インターンでは、プログラミング歴10年を超えてる自分の要求する品質のコードは中々書けない。世話焼きなメンターとして上から下まで全部指導して、やっとマージできるかどうか、というレベル。

ペアプログラミングにおける、ドライバー(コードを書く人)とナビゲーター(サポート役)だと、まだドライバーを全面的に任せることはできない。

ただ、ドメイン依存がないアルゴリズム(経路探索とかバイナリ操作とか)は自分より流暢に書けることが多い。これはコンテキストが比較的少なく、 GitHub や色々な仕様を丸暗記してるからできる話なのだが、ただ丸暗記してるだけなのでそれをどのようなケースで使うか判断する能力が足りていない。それを参照しろと明示的に指示する必要がある。

今の生成AIが力を発揮するには、こちらが適切な指示を頑張ってひねり出す必要がある。あるいは、やることを極端に限定する。無限のスコープで適切な判断をする能力があるわけではない。

また、今の生成AIは自分が与えられたコードや生成したコードに対して、強い正常性バイアスを持ってしまう。与えられたコードが動いてないから、それを修正する、ということが恐ろしく下手。次の Meta のテスト生成手法についての記事でも、「AIはアシスタントになれても、チームメイトになれる水準にはない」という評価を下している。自分も同じ評価。

https://www.codium.ai/blog/we-created-the-first-open-source-implementation-of-metas-testgen-llm

自分はよいナビゲーターになれるか?

今までの話は現時点の評価であって、様々なベンチマークでコンスタントにIQ130を超えるみたいな状態だったら、コードは基本的に生成AIに書かせて、自分はナビゲーターに徹した方が効率的だと思う。それはもう一つのシンギュラリティなのかもしれないが、今の感じだとここ10年以内にそういう段階には達して、そこから3年で普及する、みたいな予想をしている。

ここでいう知性とは、モデルの性質がどうこうで本質的な知性が実現するか云々と言うより結局人間からそう見えるかという話で、自分は大学の専攻が行動心理学寄りだったので、たぶんこういう発想になっている。そう見えるなら、そういう存在として扱う。内部状態やクオリアなんてどうでもいい。

もし同僚が10人のフォン・ノイマンだったら自分はコードを書くだろうか?たぶん、書かないと思う。

とはいえ、それでもプログラマ抜きでプログラミングできる状態なんてのは、たぶん未来永劫存在しないのではないか?という気持ちもある。人間がプログラマとしてのAIと同じ目線を持たないと、正しいナビゲーターにもなれない。コードを書く総量は減るだろうが、その分、自分の本質的なタスクを分解する能力と向き合うことが増える。

プログラマ抜きでプログラムを作れるようになるのではなく、プログラマになるための要求が減るが、依然としてアルゴリズム的な発想力は必要になるし、なんならその能力の比重が上がっていく可能性すらある。

生成AIを前提とすると、プログラマはペアプロのナビゲータ的な側面が強くなると考えている。AI をより人間的に捉えるなら、よい上司として指示を出せるか?そのための前提知識が自分に備わっているのか?という話になっていく。

自分に前提知識が足りない場合、AIを使っても限られたことしか実現できない。

超知性の先は考える必要はない

不十分な情報から不足分を類推して要件定義をするのはある種のエスパーであって、生成AIがハルシネーションをしにくいように進化した先は、足りない不足分を執拗に問い正すようになるか、あるいは人間を信用せずに勝手にその部分を補完するようになるだけだろう。プログラミングできないままAIにコードを書かせても、プログラミングで実現できる範囲はどこまでか、という発想力の部分で差がついていく。

生成AIでプログラマが不要になるわけではなく、生成AIを前提としたプログラミングというかアルゴリズム的思考が求められるだけで、スタイルが変質するだけで学習不要にはどう頑張ってもならない。今のプロンプトエンジニアの進化系として、単にペアプロのナビゲータとしての能力が求められるようになっていくだろう。

もし、あやふやな入力だけで自分の想像を超えるものを作ってくれるものがいたとしたら、それはシンギュラリティの先にある超知性で、それを前提にするとプログラミングに限らず人類のやることはもうあまり残っていない。考えるだけ無駄だと思う。

Discussion