AI・機械学習
非決定性は問題ではない
Non-Determinism Doesn't Matter (sklar.rocks)
要約
LLM(大規模言語モデル)によるソフトウェア開発の非決定性(同じ入力でも出力が毎回異なること)は、当初は大きな制約と考えられていました。しかし、AIをコード作成の主要手段として使ううちに、結果が正確であれば、そこに至るプロセスが非決定的でも良いという考えに至りました。AIはコードとは異なり、システム内の「アクター」として機能し、その出力はコードです。エンジニアは、コンテキストエンジニアリングなどの手法でAIの出力の確率空間を絞り込み、必要に応じてAIが利用できる決定的なツールを作成することで、この非決定性を管理し、効率的なソフトウェア開発を実現できると論じています。
全文翻訳
非決定性は問題ではない
2026-10-13 :: タグ: #ai
LLM駆動のソフトウェア開発に対する私の根本的な反対意見の一つは、モデルの出力が非決定的であることでした。同じ入力プロンプトを与えても、通常の実行条件下では、モデルの出力が毎回同一であることが保証されません。私はかつて、これをAIツールの深刻な制限だと考えていました。正確で精密な計算を必要とするシステムを構築するために、この予測不可能な構成要素をどのように使用できるのでしょうか?
しかし、AIを「コーディング」の主要な手段として実行することに慣れてくるにつれて、私はある啓示を得ました。結果は正確である必要がある一方で、そこに至る正しい方法は一つだけではないということです。正しい結果を得るための手段は、決定的である必要はないのです!
以前は、コードの形で振る舞いを指定することに慣れていました。これは、予測可能な方法でコンパイルおよび実行される正確な命令セットです。そして、精神的には、LLMの出力をコードのように扱っていました。しかし、時間が経つにつれて、LLMはソフトウェアエンジニアリングにおいてコードとは根本的に異なる役割を果たすことに気づきました。LLMとその関連ハーネスは、システム内のアクターです。コードは単なる出力です。
非決定的なコード生成に慣れるのに何年もかかりましたが、振り返ってみると、プログラミングが常に手段に過ぎなかったことは非常に明白です。
プログラマーの間で常に活発な議論の的となっている言語を例にとりましょう。コードで表現される同じ結果に到達する無限の方法があります。これは、単一のプログラミング言語を使用した場合でも同様です!世界には何百もの広く使われている言語があり、ほとんどどんな言語でも特定の問題に対するソリューションを書くことが可能です。長年、開発者は非常に異なる技術、言語、フレームワークの組み合わせを使用して、完全に機能するアプリケーションを構築してきました。
ある技術スタックを別のものより選択することは、人間が特定のタスクを完了するのを容易にしたかもしれません。しかし明らかに、その結果に至る手段は、実装によって大きく異なる可能性があります。
今、私たちは確率的なアクターと協力しているので、エンジニアまたはマネージャー(どのように見るかによります)としての私たちの仕事は、確率空間を小さく有用な領域に縮小することです。
ここで、一般的なLLMのトリックがすべて登場します。コンテキストエンジニアリング、MCP、スキル、ハーネス、グラフ、メモリはすべて、モデル出力のランダム性を減らすために使用されるツールです。
しかし、ある程度のランダム性は常に存在します。これは、特にミッションクリティカルなソフトウェアに取り組む際に、正しい答えが必要であるという事実と矛盾します。
そこで、非決定的な出力を決定的なツールに変換することで、ランダム性をさらに減らしましょう。エージェントが使用するためのソフトウェアを書くのです。
エージェントはこれらのツールを呼び出して、実行ごとに同じ望ましい結果をもたらす、正確でテスト済みで承認された操作を実行できます。
追加のボーナスとして、ツールの複雑さに応じて、新しいエージェント構築の抽象化を呼び出すことで、大幅に少ないトークンで同じ正しい結果を得られます。
私はこのパターンが、Swamp.clubのようなツールを使った業界でも、そして私自身の本番グレードのインフラストラクチャ管理の仕事でも展開されているのを見てきました。
このパターンは、私をDevOpsとソフトウェア開発に引き込んだ、積み重ねられた自動化の現代的な形態です。しかし、独自のツールを書く代わりに、AIを使用して独自の抽象化を作成し、それらを使用して新しいエージェントベースのソフトウェアシステムの基盤を構築するように指示できるようになりました。
ランダム性を活用して将来のランダム性を減らすことができるというのは、非常に興味深いです。
結局のところ、それは以前の抽象化の上に独自の自動化を書くのと大差ありません。ただ、マシンがそれらを呼び出し、出力を処理し、人間が決してできなかったよりも速くアクションを取るだけです。
以前の投稿 ← ローカルLLMへの私の進出