AI の進化、凄まじいですね。もはや凄まじいのが日常になってしまいました。私の周りでは、すっかり日常業務は AI なしには成り立たないレベルとなりました。そんな私が、最近AIについて感じていることを徒然なるままに書き連ねてみます。
読む上での注意
この記事では GPT, Claude, Gemini のような LLM モデル群および関連サービス群のことを単に「AI」と呼ぶこととします。
最近の AI の活躍
みなさんもご存知のとおり、AI はチャット形式で命令したことに対して、様々な機能を提供してくれます。例えば以下のようなことをやってくれます。
- 説明の文書を作成する
- プログラミングのコードを作成する
- 画像を生成する
- ファイルの編集をする
- etc...
まるで魔法のようです。これまでは頑張って自分で勉強するか、専門知識のある人にお願いしないとできなかったようなことが、素人でも簡単にできてしまうようになりました。
これからは専門的な人材は不要になり、誰でも簡単になんでも作れるようになる時代がやってきてしまいました。
...といった風潮を最近感じています。でも、本当にそうでしょうか?
AI はなにを可能にしたか
私はIT技術者なので、プログラミングの例でお話します。
AI 登場以前の時代のプログラマは、プログラミング言語の文法を一つひとつ学び、動かして試行錯誤しながら、何ができて何ができないのかを体得する必要がありました。プログラミング言語以外にも、サーバーとはなにか、目的のことを実現するにはどのような設備が必要なのか、など、細々とした知識をかき集めて頭に叩き込む必要がありました。
そういった鍛錬を積んだプログラマは、例えば「ボタンを押すと確認の画面が出てほしい」という風な要求に対して
ボタンをクリックしたときに動くイベントハンドラが○○というファイルに実装されているはずだから、そこに確認画面の処理を追加すればよい。またその内容はドキュメントに反映し、テストプログラムを追加する。
という風に詳細な要件へと翻訳し、さらに
この目的を実行するには△△という構文を使って追加する。このときオブジェクトの生存時間が問題にならないように注意する。
といった形で、実装レベルまで落とし込んで対応していました。もちろん、それぞれの作業にはそれぞれを選択した狙いがあり、いくつかのトレードオフを勘案して、現在のベストな方策を選ぶのでした。
つまり、専門的な訓練を受けたプログラマがやっていることは「端的な要求に対して、様々な文脈を勘案し、実際に行動する内容にまで文脈を補完する作業」といえます。この補完のために、多くの知識と経験を使っているわけです。
AI が行っているのは、まさにこの「短い文脈から多くの文脈を補完する」という作業に他なりません。AI は人間一人では到底学習しえない量の学習を経ており、それらを元にして、ユーザーから与えられた短い命令に対して、多くの文脈を補完する作業を行っています。それにより「ああ、このファイルの編集が必要なんだな」と AI 自身で判断して、実際にコードが生成されるわけです。
この構造を見ていると、むしろ冒頭の「もはや専門的人材は不要な時代が来た」という印象を強めてしまいますね。
(現状の) AI の限界
しかし、(現状の) AI は大規模言語モデルをベースにしている関係上、「言語化されていない文脈は勘案できない」という限界があります。もちろん「一般的な知識にもとづいて、AIが類推した文脈を補完する」ということはすさまじく上手で、この点については極めて有能です。しかし、それだけでほぼ目的を満たせる状況はむしろ稀で、良くて90%、悪くて50%ぐらいしか目的を満たせないことがあります。
これはよく考えると原理的な問題です。次の例え話を考えてみてください。
あなたは突然街をゆく人に声をかけられて、りんごを見せながら「これはなんですか?」と聞かれたとします。あなたは「・・・?りんごだけど・・・」と答えたら「違うだろ!!!品種を聞いているんだ!!!」とブチ切れられました。オヨヨ。
この人が明らかに不審者であることは置いておいて、あなたは「これはなんですか?」と聞かれたので、一般的な文脈に則って「りんご」と答えた訳です。しかし、この人の中では「品種が知りたい」という意味で「これはなんですか?」と聞いていたようです。しかし、この意図は「これはなんですか?」という質問文から読み取ることは不可能でしょう。
AI とのやりとりも同じです。流石に「これはなんですか?」ほどシンプルに命令することはありませんが、たとえ全力を尽くして要求を言語化したとしても、かならずそこから漏れている要求は多分にあります。AIは一般的な文脈で補完してくれますが、それが正解かどうかは運次第です。
つまり AI の限界とは、AI を操る人間側の限界なのです。
AI の力を最大限引き出すために
AI に渡す文脈を言語化する部分がボトルネックなので、この文脈づくりの部分を全力で行うことが AI の力を引き出すポイントです。最近では当たり前となりつつある「仕様駆動開発」という概念は、まさにこの点を追求する考え方だと思います。
仕様駆動開発では、いきなりコーディングを行うのではなく、まず
- どのような要求があるのか
- どのような仕様にするのか
- それはどのように実装していくのか
といったことについて、(半) 自然言語でまとめるところから始めます。このまとめ作業でも AI をフル活用します。人間はいきなり体系的に言語化する力を持っていませんから、AI とやりとりしながら、長大な文脈をどんどん作り上げていきます。人間はその作られた文脈をレビューし、目的と合致していたら、いよいよコーディングを命令する、といった流れです。
実際、この方式はそれなりにうまく行きます。文脈をうまく準備できない、という問題を綺麗に解決したかのように見えます。
試される人間の実力
しかし同時に、人間に要求される能力も上がっていることに気づきます。具体的には、長大な仕様の時点で妥当なものかどうか判断する必要があるということです*1。
長大な仕様書は「開発のソースコードに対応するものを自然言語で表現したもの」に近い代物になります。元の要求が大きければ大きいほど、内容は細かく、込み入ったものになります。
これを読み解く作業は、結局「専門的な知識と経験を持っているか」によって難易度が大きく変わります。専門的な知識があれば軽く妥当だと分かる内容でも、素人では「ん・・・?何だこれ?」とつっかえてしまうことがあります。また逆に、素人目には別に大したことではないように見えても、専門家が見ると「こんな設計でいい訳ないじゃん!」となって修正することもあります。
つまり、効率・正確性の両面で、作業者の実力が肝となるわけです。言い換えると
これからは専門的な人材は不要になり、誰でも簡単になんでも作れるようになる時代がやってきてしまいました。
ではなく
これからは専門的な人材はますます必要となり、専門性のない人材との差が何十倍にも開いてしまう時代がやってきてしまいました。
ではないか、と私は思うのです。
AI と歩むこれからの人類の作戦
AI は強大な力を人類に与えてくれました。しかしその力を最大限発揮するには、結局のところ扱う人間の専門的な能力が必要となる、というお話をしてきました。これからも生きていく我々は、AI の使い方を学ぶのみならず、AI に依頼する内容そのものに対する知識と経験も引き続きしっかりと深めていく必要があります。
ではどうやって深めるか?というと、結局学校の勉強の延長線上のようなことになるでしょう。例えばこんなことでしょうか。
- 基礎知識の書いてある本を読んで一通り勉強する
- 実際に手を動かしてみる
- その道の専門家と話して理解を深める
- 試行錯誤して失敗と成功を経験する
幸い、AI は学習を行う上でも強力なパートナーになります。AI に強力なサポートを受けつつ、引き続き自己研鑽していき、一緒に新しい時代を切り開いていきましょう。
ではまた。
*1:さらにいえば、最初の要求出しの時点でも、いかにポイントをついた要求を出せるか、というハードルもあります。