構造による決定論

決定論的 AI、
構造として。

同じ質問をモデルに二度投げると、二つの答えが返ることがある。それが非決定論的 AI だ――文章には許容されても、数値には致命的となる。SQAI はモデルから数値を切り離す。すべての計算はピン留めされた float64 ランタイム上でシングルスレッドで実行され、完全な再現を可能にするハッシュを出力する。

IIリプレイ

数ヶ月を隔てた、二つの証明書。

ひとつの計算――割引率10%、5つのキャッシュフローに対する finance.npv――を一度実行し、数ヶ月後に再実行した。約束としての決定論は信頼を求める。ハッシュとしての決定論は、比較を求める。

Run 001初回実行

決定性エンベロープ

capability
finance.npv
runtime_bundle
0.1.0 · 4d64142e…
platform
darwin-arm64
precision_mode
float64
thread_count
1
value
505.020148896933

computation_hashb74f67d0d7a594aa…

Run 002数ヶ月後

決定性エンベロープ

capability
finance.npv
runtime_bundle
0.1.0 · 4d64142e…
platform
darwin-arm64
precision_mode
float64
thread_count
1
value
505.020148896933

computation_hashb74f67d0d7a594aa…

同一。類似ではなく——完全に同一。

共有 computation_hashb74f67d0d7a594aa7ac91f6291612452aa8ccdf603351ebc8d801a6fddd91bc8

2つの言語、1つのバイト列

TypeScriptcanonicalJson(result.value)

Pythoncanonical_json(result.value)

どちらの言語でも同一のバイト列505.020148896933

同じバイト入力 → 同じ sha256 出力 → 同じ証明書

TypeScript の canonicalJson と Python の canonical_json は、設計上まったく同じバイト列を出力する。−0 は 0 に変換され、キーはソートされ、Unicode エスケープは固定される。言語をまたいだハッシュの一致は期待に頼る偶然ではなく、シリアライゼーション契約として保証される。

III細則

決定性——宣言されたスコープの内側で。

「決定性」は謳うのは容易で、守るのは難しい。SQAI は宇宙上のあらゆるマシンで結果が一致すると主張しない。実行スコープを宣言し、そのスコープをエンベロープに記録し、その範囲内での同一性を保証する。

環境を記録することは、過大な主張に勝る。結果に影響しうるあらゆる要素は、固定されるか書き留められる。

すべての結果に宣言済みdeterministic_scope: "local_registered_source"

runtime_bundle_version
実行されたエンジンビルド——現在は 0.1.0、固定済み
runtime_bundle_sha256
ビルドのコンテンツハッシュ——実行前に検証済み
platform
実行環境——darwin-arm64 または linux-x64、記録済み、推定なし
architecture
CPUファミリー——同じ理由で書き留め済み
precision_mode
float64——すべてのケイパビリティに共通する数値体系
thread_count
1——演算内にスケジューリング競合なし
seed
任意——シミュレーション系ケイパビリティ 10 件のみが要求
input_hash
実行前にスタンプされた、その時点のデータ

IVドメイン分離された出所証明

3つのハッシュ、3つの問い。

ここでの出所証明はログ行ではない。それぞれ異なる問いに答える3つの sha256 構造であり、いずれも正規バイト列上で計算される。

plan_hashf87610d8afeb…

何が実行されるか。

解決済みのプランを、実行前にハッシュ化したもの。同じ問いは同じプランに解決される——decision_path: exact_spec——ゆえに一度レビューされたプランは永続的にレビュー済みとなる。

invocation_hash

何が問われたか。

呼び出しの同一性——ケイパビリティとその正規化された引数——をバージョンタグ付きプレフィックスで識別したもの。explainQuery はこれをドライランプレビューとして出力し、実行時ハッシュは実行時に独立してスタンプされる。

computation_hashb74f67d0d7a594aa…

何が返ってきたか。

値の正規バイト列の前に invocation_hash を組み込んだもの。答えは問いに暗号的に連鎖しており、このハッシュを別の結果に貼り付けることはできない。

invocation_hash  = sha256("sqai:invocation:v1\0" + canonicalJson(identity))
computation_hash = sha256("sqai:computation:v1\0" + invocation_hash + canonicalJson(value))

プレフィックスこそが要点だ。「sqai:invocation:v1」と「sqai:computation:v1」はバイト空間として互いに素であり、invocation が computation と衝突することはなく、将来の v2 が v1 を詐称することもない。ドメイン分離によって、ハッシュは装飾ではなく証拠となる。

3つすべての基盤として、インターフェース自体が固定されている。実行可能なものを定義するケイパビリティ契約は、固有のハッシュとともに提供される。contract_hash sha256:79f1c5a6c716…

Temperature 0 は
決定性ではない。

サンプリングは実行ではない——モデルはここで計算しない

Vサンプリング vs 実行

モデルはトークンを選ぶ。エンジンは計算する。

temperature: 0デコード設定

  • 貪欲デコードは次のトークンを絞り込む。それでも数値は計算ではなく予測にすぎない。
  • 同じ問いが異なる SQL に——そして異なる答えに——なりうるが、それを検知する手段はない。
  • 何も記録されない。ランタイムも、入力ハッシュも、再現のための情報も何もない。

computation_hash実行特性

  • モデルは型付きプランを提出する。エンジンがそれを実行する——float64、シングルスレッド、固定バンドル。
  • 環境は決定性エンベロープの内側で結果とともに運ばれる。
  • すべての答えに computation_hash が付与される。再現は比較であり、議論ではない。
0/16 → 16/16
同一モデルによる16問の定量的設問——エンジンが計算を担う前と後エンジン自体は監査済み:正確性チェック 2,744 件、不一致 0 件、最大数値誤差 1.8e-15。

VI決定性が崩れうる箇所

10のシード。1つのトリップワイヤー。

seed_required

公開されている 4,574 のケイパビリティのうち 10 件は乱数をシミュレートする。シードなしでは一切実行されず、呼び出しは実行前に拒否される。シードありであれば、他と同様に再現できる。隠れたエントロピーも、暗黙の例外もない。

10件のうちの1つdistributions.sample_normal

schema_revision_mismatch

登録されたすべてのソースはスキーマリビジョンを持つ。変更されたデータに対してプランを再現しようとすると、エンジンは構造化エラーで拒否する——誰も気づかないまま静かに異なる数値を返すことはない。

すべてのソースに宣言済みschema_revision

4,564 件はそのまま決定的 · 10 件はシード付きで決定的 · 推測するものは 0 件

VII質問

決定論的AI、率直に答える。

決定論的AIとは何か?

同じ入力から同じ出力を、証明可能な形で再現するシステム。SQAIはこれを設計で実現している――計算はピン留めされたfloat64ランタイム上でシングルスレッドで実行され、すべての結果にcomputation_hashが付与されてバイト単位で再現できる。

非決定論的AIとは何か?

同一のリクエストに対して出力が変わりうるシステム。言語モデルはトークンをサンプリングするため、同じ質問でも推論・SQL・数値が異なる結果になることがあり、何が変わったかを示すシグナルもない。再現可能なハッシュは、そのドリフトへの解答だ。

temperature 0にすればLLMは決定論的にならないのか?

temperatureは次のトークンの選び方を狭めるだけだ。モデルは依然として数値を計算するのではなく予測しており、実行の記録も再現性もない。SQAIの決定論はデコードではなく実行の性質だ――モデルが型付きプランを提出し、エンジンが算術を行う。

2回の実行が本当に同じ答えを返したか、どう検証するか?

各結果のcomputation_hashを比較する。これは呼び出し識別子と値の正規バイト列に対するドメイン分離済みsha256であり、ハッシュが一致すればバイト単位で同一の答えを意味する――finance.npvの例はTypeScriptとPythonの両方でb74f67d0…を出力する。

シミュレーションはどうすれば決定論的になるか?

秘密裏にランダムであることを拒否することで。SQAIが公開する4,574のケイパビリティのうち、ランダム性をシミュレートするのは正確に10個だ。シードなしで呼び出すとseed_requiredで拒否され、シードありであれば他のケイパビリティと同様に完全に再現できる。

最初の実行とリプレイの間にデータが変わっていたら?

リプレイは明示的に失敗する。登録済みのすべてのソースはスキーマリビジョンを持ち、変更されたデータに対してリプレイされたプランはschema_revision_mismatchを返す――構造化エラーであり、暗黙の数値変化は決して起きない。