AIは非決定論的ソフトウェア:アーキテクトが知るべき設計パラダイムの転換

はじめに:決定論の終焉
従来のソフトウェアが築いてきた「予測可能性」の世界
ソフトウェア工学は、過去数十年にわたって一つの確固たる原則の上に築かれてきました。
その確固たる原則とは、決定論的な振る舞いです。
同じ入力に対して常に同じ出力を返す。この単純明快な原則が、私たちの開発プラクティスの基盤となってきたのです。
例えば、関数add(2, 3)を呼び出せば、常に5が返ってきます。
データベースクエリSELECT * FROM users WHERE id = 123を実行すれば、データが変更されない限り、同じレコードが取得されます。
HTTPリクエストが失敗すれば、特定のエラーコードが返ってきます。
この予測可能性こそが、私たちに以下を可能にしてきました。
- 単体テストの作成:期待される出力を assert 文で検証
- 回帰テストの自動化:過去の動作が保たれていることを確認
- デバッグの効率化:再現可能な問題を特定し、修正を検証
- 形式的検証:数学的に正しさを証明
- SLAとSLOの定義:明確な品質基準の設定
この決定論的世界では、ソフトウェアが予期しない動作をすることは「バグ」であり、修正すべき欠陥でした。
私たちは、完璧に予測可能なシステムを構築することを理想としてきたのです。
つい先日、米国で「AIは非決定論的ソフトウェアである」という問題が提起されました。
今回は、このとても興味深い「AIが非決定論的ソフトウエア」とした問題提起について、深堀していきたいと思います。
2025年現在の状況を振り返る
まず最初に2025年現在の状況を振り返ってみます。
2025年、AI技術は単なる実験段階を超え、企業の基幹システムに組み込まれ始めています。
GitHub Copilot、ChatGPTを活用したカスタマーサポート、AIによるコード生成、自動化されたドキュメント作成など、AIコンポーネントはソフトウェアアーキテクチャの一部となりつつあります。
しかし、多くの開発チームは、従来の決定論的な思考様式のままAIシステムを扱おうとしています。
その結果、以下のような問題が頻発しています。
過度な期待と失望のサイクル
「AIが完璧に動作しない」という理由でプロジェクトが中止されるケースが続出しています。しかし、問題はAIの性能ではなく、期待値の設定ミスかもしれません。
不適切なテスト戦略
従来の単体テストのアプローチでAIコンポーネントをテストしようとして、テストが不安定になったり、意味のある検証ができなかったりしています。
責任の所在の不明確さ
AIが誤った判断をした時、それはバグなのか、許容される誤差なのか。明確な基準がないまま、チーム内で議論が紛糾します。
スケールの壁
プロトタイプでは問題なく動作していたAIシステムが、本番環境で予期しない振る舞いを示し、対処に追われる事例が増えています。
ここで重要なことは、これらの問題が技術的な問題ではなく、認識の問題であるということです。恐らく、私たちは、これからソフトウェアアーキテクチャにおける新しいパラダイムに適応する必要があるのでしょう。
決定論の時代は終わりを迎えつつも、それは品質の妥協を意味するのではなく、品質の再定義を意味しているということのようです。
非決定論的ソフトウェアとは何か
AIシステム、特に大規模言語モデル(LLM)を理解するには、その本質的な動作原理を知る必要があります。ここでは、従来のソフトウェアとの根本的な違いを明らかにしていきます。
決定と確率の間:二つの世界観
従来のソフトウェアを「地図」に例えるなら、AIは「天気予報」に近いかもしれません。
地図上では、東京から大阪への距離は常に約400キロメートルです。何度測っても、誰が測っても同じ結果が得られます。これが決定論的システムです。
一方、明日の降水確率は60%と予測されても、実際に雨が降るかどうかは確定していません。これが確率論的システムです。
しかし、天気予報が「不正確だからダメ」とは誰も言いません。なぜなら、それは予測の本質的な性質だからです。AIも同様に、本質的に確率的な判断を行うシステムなのです。
決定論的システムの特徴
def calculate_tax(price, rate):
return price * rate
# 何度実行しても同じ結果
calculate_tax(1000, 0.1) # 常に 100.0このコードは、入力が同じなら出力も必ず同じです。デバッグも容易で、テストも書きやすい。問題が起きれば、必ず再現できます。
非決定論的システムの特徴
response = llm.generate("この商品をお勧めする理由を3つ挙げてください")
# 実行するたびに異なる回答が生成される可能性がある同じプロンプトでも、生成される文章は毎回微妙に、時には大きく異なります。これは故障ではなく、設計通りの動作です。
LLMの内部で何が起きているのか
LLMが文章を生成する過程は、確率的な選択の連続です。簡略化して説明すると、以下のようなプロセスになります。
ステップ1:次の単語の確率分布を計算
「今日の天気は」という入力に対して、LLMは次に来る可能性のある単語とその確率を計算します:
- 「晴れ」: 35%
- 「曇り」: 25%
- 「雨」: 20%
- 「良い」: 10%
- その他の単語: 10%
ステップ2:確率に基づいて単語を選択
最も確率の高い単語を常に選ぶわけではありません。確率分布に従ってランダムにサンプリングします。これにより、35%の確率で「晴れ」が選ばれますが、25%の確率で「曇り」が選ばれることもあります。
ステップ3:これを繰り返す
選ばれた単語を入力に追加し、再び次の単語の確率分布を計算します。この過程を終了条件(文の終わりを示すトークンが生成されるなど)まで繰り返します。
この仕組みにより、同じ入力でも異なる出力が生成されるのです。重要なのは、これがエラーではなく、創造性と柔軟性の源泉だということです。
解説記事「AIは非決定論的ソフトウェア:アーキテクトが知るべき設計パラダイムの転換」の続きは
現在準備中です。
公開までお待ちください。
APPSWINGBYは、最先端の技術の活用と、お客様のビジネスに最適な形で実装する専門知識を有しております。AI開発から既存の業務システムへの統合などの他、リファクタリング、リアーキテクチャ、DevOps環境の構築、ハイブリッドクラウド環境の構築、システムアーキテクチャの再設計からソースコードに潜むセキュリティ脆弱性の改修の他、テクノロジーコンサルティングサービスなど提供しています。
貴社のセキュリティ対策等についてご相談されたい方は、お問い合わせフォームからお気軽にご連絡ください。システムの専門家が、貴社の課題解決をサポートいたします。

システム開発にお困りではありませんか?
もしも今現在、
- どのように開発を依頼したらよいかわからない
- どのように開発を依頼したらよいかわからない
- 企画や要件定義の段階から依頼できるのか知りたい
- システム開発費用がどれくらいかかるのか知りたい
- 見積りがほしい
など、システム開発に関するご相談・ご依頼がございましたら、お気軽にご相談ください。APPSWINGBYでは、「アプリでお客様のビジネスを加速し、お客様とともにビジネスの成功と未来を形作ること」をミッションとしています。大手SIerやR&D部門で培った経験やノウハウ、高度な技術力でお客様の「やりたい」を実現します。
この記事を書いた人

株式会社APPSWINGBY マーケティング
APPSWINGBY(アップスイングバイ)は、アプリケーション開発事業を通して、お客様のビジネスの加速に貢献することを目指すITソリューションを提供する会社です。
ご支援業種
情報・通信、医療、製造、金融(銀行・証券・保険・決済)、メディア、流通・EC・運輸 など多数

株式会社APPSWINGBY マーケティング
APPSWINGBY(アップスイングバイ)は、アプリケーション開発事業を通して、お客様のビジネスの加速に貢献することを目指すITソリューションを提供する会社です。
ご支援業種
情報・通信、医療、製造、金融(銀行・証券・保険・決済)、メディア、流通・EC・運輸 など多数
監修

株式会社APPSWINGBY CTO 川嶋秀一
動画系スタートアップや東証プライム上場企業のR&D部門を経て、2019年5月より株式会社APPSWINGBY 取締役兼CTO。
Webシステム開発からアプリ開発、AI導入、リアーキテクチャ、リファクタリングプロジェクトまで幅広く携わる。
C, C++, C#, JavaScript, TypeScript, Go, Python, PHP, Java などに精通し、Vue.js, React, Angular, Flutterを活用した開発経験を持つ。
特にGoのシンプルさと高パフォーマンスを好み、マイクロサービス開発やリファクタリングに強みを持つ。
「レガシーと最新技術の橋渡し」をテーマに、エンジニアリングを通じて事業の成長を支えることに情熱を注いでいる。

株式会社APPSWINGBY CTO 川嶋秀一
動画系スタートアップや東証プライム上場企業のR&D部門を経て、2019年5月より株式会社APPSWINGBY 取締役兼CTO。
Webシステム開発からアプリ開発、AI導入、リアーキテクチャ、リファクタリングプロジェクトまで幅広く携わる。
C, C++, C#, JavaScript, TypeScript, Go, Python, PHP, Java などに精通し、Vue.js, React, Angular, Flutterを活用した開発経験を持つ。
特にGoのシンプルさと高パフォーマンスを好み、マイクロサービス開発やリファクタリングに強みを持つ。
「レガシーと最新技術の橋渡し」をテーマに、エンジニアリングを通じて事業の成長を支えることに情熱を注いでいる。