AIに「絶対やらないで」はやっぱり不可能な気がしてくる人類はタイプライターを発明したい


AIによるコーディング機会が多くなりました。 一方で、どう制御するのか、どこまで人間として介入するのか、日々試行錯誤が続いています。

ハマるときはハマってくれますが、AIならではのお節介によって、そうじゃないだろとPCの前で大きなため息をついたり、思わず声を出してしまったり、ゆっくり1から10まで数えなくてはならないこともあります。 もうAIをシャットダウンして、プリミティブなコーディングに入ることもあります。

もっとも使いこなしている人は、もはや意図通りに使えているのでしょうか。 コンテキストの設計が、スキルズが、モデルが、プロンプトが、と様々な手法があるのは承知していて、AIを使うのが下手なのかと考え込んだりもします。

LLMにとって「1+1=」->「ずばり2です!」が正しい

この意図通りに出力しない問題って、根本的に解決可能なのでしょうか。いや、無理なのではというのが今回の主な主題(ポエム、愚痴)です。

意図通りにAIを出力させる、つまり決定論的出力を得るのは、LLMの不得意な分野ですね。 むしろLLMは、入力の次に確率的に来そうな単語を埋めていくような創造的出力をする機械ですよね。

だからこそLLMは、より利用者の意図を汲み取れるように自律的にコードや各種ドキュメントや外部リソースを入力として扱い、より正しそうな出力を出そうとしてくれます。 これに対して人間は、LLMの創造しすぎ問題に直面して、「絶対にしない」という制約を、入力に対して加える手法が取られることがあります。

問題は、この絶対にしないことリストを上げだしたらキリがないのではということです。 言い換えれば、LLMの理論上無限に創造する可能性を考えたら、理論上無限に絶対しないをリストを用意しないといけないから、出力の制御は不可能だという考えです。

コンテキストは正義ですか

この(屁)理屈に立つと、 LLMは創造的出力をする機械だから決定論的出力を得ようとすること自体がナンセンスだという幻滅や忌避、疲れに繋がります。

この考えから抜け出して、少し前向きになったとき、 むしろLLMに与える情報が多すぎるからこそ、創造の幅が広がってしまうのではないかという思考(停止)になります。

こうして最近、私はAIに関連情報やコンテキストを全く与えないで、プリミティブに関係するファイルやコードを渡し、厳格にコードの責務、利用するAPI、インターフェース、テストケース、テスト中でのDI方法などを、事細かに入力しています。 とくに、インターフェース(コード)と責務(ドキュメント)、エラー(仕様)に関しては、事前に手を主体に作成することが多いです。

またplanもせず、各種mdファイルも消しました。 穏やかにかつスピードをもって、安定的にアウトプットできているような気がします。

あとから整えればいいや

テスト方針、例、命名規則、などなど、スタイルガイド的な参照も消しました。 あっても良かったとは思いますが、参考にできる部分は直接渡して、この実装を参考にしてと命令します。

段々とズレていっても、あとから、置換作業を行うと良いのかなと思っています。

コストで助かる

こうして、入力コンテキストをバッサリ切り捨てて、書きたい仕様をセット、プロンプトも厳格にすると、ミニマムなLLMでも期待通りに出してくれます。

クレジットの消費を抑えることができるのも、メリットの一つです。

疲れてしまうのも人間だもの

以上、まとめると、AIに疲れたので、積み上げたものぶっ飛ばした話でした。

蛇足ですが、AIによる開発ではどうして心乱れた(る)のか考えました。 まったく根拠のない説なので、信じないでください。

1. 人間はパターンを学習する生き物じゃんね

【ケース1】

毎日、AボタンとBボタンを選ぶ。 Aボタンを押す。するとアメがもらえる。 Bボタンを押す。するとなにももらえない。

毎日Aボタンを押すようになる。

アメチャンゲット!

【ケース2】

毎日、Aボタン, Bボタンを選び、1回押す。 3日間はAボタンからアメがもらえた。 ある日突然、Aボタンからもらえなくなる。

昨日と違うのかよ。わからん。

2. 人間には希望が必要なんだぜ

【ケース1】

マラソンは、42.195kmです。

ヨッシャガンバルゾ!

【ケース2】

走ってください。

(0 _ 0)

3. 人間には刺激と安全の両方が必要なんだぜ

【ケース1】

くまの子みていたかくれんぼ、 夕焼けこやけで 美味しいおやつとほかほかごはんが待っている「ぼく」

ポカポカ

【ケース2】

くまの子みていたかくれんぼ、 夕焼けこやけで 帰れない「ぼく」

ずっと、くまさんと一緒かな..

それでも便利だが

つまり、成果が求められる中で、 その成果の生産活動そのものが、落胆と刺激の連続の精神活動と密に繋がったからではないか、ということです。

先の例に沿って言えば、1.前はうまく出力できたのにというストレスを受け、2.AIエージェントの進化の青天井と、制御可能のゴールのないかもしれないマラソンに、3.常に勤務中さらされ続けて疲れた、のかもしれません。

もともと、現実のカオスを整理して積み上げる仕事だったのが、 いつからかパチプロに転職した、というのが安直で失礼な感想かもしれません。

タイプライターとしてAIを使う

ここまで書いてきたことは、人間が設計できるのだという傲慢が根底にあります。 ただ、これはコンテキストの設計しよう、仕様をソースとして管理するかどうか、という議論にも通底していて、本質的にこの傲慢は変わらずに存在しているのかなと思います。

いや、それは傲慢ではなく責任です。

いろいろすっ飛ばしますが、 今後どんなに正確な成果物を出力できるAIが出来たとしても、 人間がその成果に責任を持つ考え方を捨てない限り、そのAIの出力量は真に発揮できず、人間のもつ生産性で頭打ちになり、開発は人海戦術のまま維持されると考えています。

もしバグや仕様に対するエンジニアの責任が残っている場合、生産性を上げるにはいわゆる優秀な人を入れるチームの動き方を調整するという古典的な手法しかなく、もっとすごい(モデルや設定で)AIを使うことはどうでも良いことかもしれません。

人間個人は、生産(設計)が速くて体力のある人が優秀です。これらを束ねて、適切にチームに配置し責務分解するマネジメントが必要です。 ただ、いずれでも、AI前後の個人の評価条件についてはタイピングが速くなくても良い程度の誤差だと思います。つまり、個人で責任をもてる(設計できる)量は変わっていないということです。

設計もAI使って速くなった。本当ですか。 思考放棄ではないですか。責任取れますか。 この場合によっては、責任を人間が持つ限り、長期的にみて自己(組織)の退化行為です。

そして、AIの出力量を真に扱うなら、最後は人間が決定すると言わないでください。あるいはバグ保険にでも入ってください。

人間が責任を持つ限りSFにならない

エンジニアは、当たり前のようにバグや仕様に対する責務と、AIによる高スループットへの期待を背負います。 しかし、バグや脆弱性の責任を人間に求めなくなった組織が、例えばAI開発企業のバグ保険サービスと補修パッチサービスを購入するようになったら、いよいよ私みたいな人間は退場かもしれません。 小さなサービスなどで、バグ保険の費用対効果が見込めない場合でも、例えば電気代が下がったり、生成が高効率になったりで、ペイするようになるかもしれません。

責任がなければ、きっと個人の設計能力について、退化や進化、良し悪しの評価はなくなります。設計できなくてもいいです。というより仕事がないのですが。

また、とくにSlerなどの受託開発会社は、バグ保険を含めてAIに責任を持たせることが出来なければ、なぜこれまで下請け構造を維持してきたのかという理由を再確認するだけになるのだと思います。 人間が仕様やバグに対する責任を負う限り、成果に必要な体制が変わらないからです。

最後に

AIに疲れちゃった人間が、断定的に偉そうに述べた部分が多分にあります。ご容赦ください。

絶対に真に受けないでください、人類は。

以上!


も参照してください