【メタエンジニアの戯言】確率論的に動く生成AIで決定論的プログラムを作る不思議
2025.08.06松林弘治の連載コラム生成AIが本格的に普及しはじめてから、まだたった数年しか経過していません。しかし、私自身も含め、多くの人が各種生成AIを日常的に業務利用するようになりました。特にソフトウェア開発の現場での活用は目覚ましく、最近も「MCP (Model Context Protocol)」の登場により外部システムとの連携がますます容易になり、開発ツールへの高度な機能追加が盛んになってきています。
そんな中、改めて感じるのは、生成AIと従来のコンピュータプログラムとの「根本的な違い」です。
ーーー
そもそも、従来のコンピュータプログラムとは、一定の状態(ステート)において、特定の入力を受け取ったとき、必ず決まった出力を行うように設計されています。言い換えれば、ある瞬間のシステムの状態と、与えられた入力データさえ決まれば、結果は常に一意に定まる、といった具合です。これは数学的にいえば「写像(関数)」であり、決定論的であり、予測可能性や再現性を保証する上で非常に重要な性質であると言えます。
単純な電卓アプリで考えてみるとよく分かるでしょう。例えば、2+3という計算を行ったら、その結果は常に5になります。ここで電卓のメモリに10という値が格納されている時、「M+」キーを1回押せば、メモリの値は必ず15になります。アプリケーションの状態が同一ならば、100回実行しても、1万回実行しても、その出力が揺らぐことはありません。これが、私たちが長らく接してきた、そして今でも当たり前に使っている、コンピュータやプログラムの当たり前の性質です。
ーーー
ところが生成AIは、この「常に同じ結果が返る」という常識を大きく覆しているかのように感じられます。同じプロンプト(指示文)を生成AIに入力しても、必ずしも毎回同じ結果が得られるとは限りませんよね。同じプロンプトをコピーしておいて、数日後に新しいコンテキストで再利用してみると、微妙に、あるいは全く、内容が異なる回答を返してくることも頻繁に目にします。
生成AIを使う際、同じモデルを使っている限りは出力の一貫性がある程度保たれるのではないか、と思いたくなりますが、実際には、同一のモデルであっても、その出力が時として異なるわけです。あるときはきちんと動作するコードを生成したにもかかわらず、別の日に同じ指示を再び与えると、不完全なコードやエラーを含んだコードを返してしまう現象などは珍しくありません。そういえば、少し違いますが、エンジニアコミュニティでは最近「Claude Codeのコンテキスト忘却・圧縮問題」や「バイブコーディングが招いた暴走」なども大きな話題になりましたね。
こうした問題に直面するたびに、多くのエンジニアが生成AIの出力の不安定さ、コンテキストウィンドウの制約、などと格闘し、対応策を模索しています。その対応策も、日々新しいものが生まれ、ノウハウが日々更新されている状況です。このような現象は興味深いと思う一方、同時に昔気質のエンジニアにとっては「どうして同じ入力に対して異なる結果が返ってくるのだろう?」と、納得しづらい側面を含んでいるとも言えます。
生成AIは巨大なパラメータ空間を持ち、その推論プロセスにはランダム性が含まれています。さらに、モデルの更新や、内部的なコンテキスト処理方法の微妙な変更が行われることもあるため、完全な再現性を保証するのは難しいものです。そのことから、従来のコンピュータプログラムとは異なる原理で動作している、つまり数学の写像(関数)のように「決定論的」な挙動ではなく、「確率論的」な挙動をする、新しいタイプのソフトウェアであることを再認識させられるわけです。
もちろん、この確率論的な挙動は弱点ばかりではありません。むしろ、確率論的だからこそ、多様な回答を示すことが可能であり、創造的なタスクや人間的なコミュニケーション支援といった領域への有用性が発揮されると期待されている、生成AIが持つそんな大きな可能性に注目されていると言えます。
ーーー
以前の拙コラム「人間は『論理』が苦手なのか」でも触れましたが、我々人間は完璧な論理で行動しているわけではありません。それなのに、生成AIに対して、ある時は緻密な正確性と論理的整合性を求め、またある時は意外性に欠ける堅物であると不満を漏らします。我々はそんな身勝手な(笑)生き物なのかもしれませんね。
確率論的に動き、意図通りに使いこなすためにかなりコツが必要な生成AIの助けを借りながら、完璧な論理で構築された決定論的プログラムを開発しようとする。このエンジニアの営み自体が非常に興味深く、ある意味微笑ましいわけですが、今はまだ黎明期あるいは過渡期です。今後どんな風に可能性がますます発展していくのか、楽しみです。

松林 弘治 / リズマニング代表
大阪大学大学院基礎工学研究科博士前期過程修了、博士後期課程中退。龍谷大学理工学部助手、レッドハット、ヴァインカーブを経て2014年12月より現職。コンサルティング、カスタムシステムの開発・構築、オープンソースに関する研究開発、書籍・原稿の執筆などを行う。Vine Linuxの開発団体Project Vine 副代表(2001年〜)。写真アプリ「インスタグラム」の日本語化に貢献。鮮文大学グローバルソフトウェア学科客員教授、株式会社アーテックの社外技術顧問を歴任。デジタルハリウッド大学院講義のゲスト講師も務める。著書に「子どもを億万長者にしたければプログラミングの基礎を教えなさい」(KADOKAWA)、「プログラミングは最強のビジネススキルである」(KADOKAWA)、「シン・デジタル教育」(かんき出版)など多数。