确定性,由构造保证

确定性 AI,
由构造保证。

对模型提出同一问题两次,可能得到两个不同答案。这就是非确定性 AI——用于生成文本尚可接受,用于数字则是致命缺陷。SQAI 将数字从模型手中接管:每次计算均在固定的 float64 运行时上单线程执行,并输出可精确回放的哈希值。

II回放

两份凭证,相隔数月。

同一计算——以 10% 折现率对五期现金流执行 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

两种语言,同一字节流

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域分离的溯源机制

三个哈希,三个问题。

此处的溯源并非一行日志,而是三个 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"是字节的不相交宇宙:调用永远不会与计算发生碰撞,未来的 v2 也永远无法冒充 v1。域分离使哈希成为证据,而非装饰。

在这三者之下,接口本身已被固定。定义可运行内容的能力契约随附其自身的哈希一同发布:contract_hash sha256:79f1c5a6c716…

温度 0
并非确定性。

采样不是执行——模型在此从不进行计算

V采样与执行

模型选取词元,引擎负责计算。

temperature: 0一种解码设置

  • 贪婪解码缩小了下一个词元的范围。数字仍是预测所得,而非计算所得。
  • 同一问题仍可能生成不同的 SQL——进而得出不同答案——且没有任何机制会标记这一差异。
  • 没有任何记录:无运行时信息,无输入哈希,无从回放。

computation_hash一种执行属性

  • 模型提交一份类型化计划,引擎执行它——float64,单线程,固定构建包。
  • 环境随结果一同传递,封存于确定性封套之中。
  • 每条答案均打印 computation_hash。回放是一次比对,而非一场争论。
0/16 → 16/16
同一模型在十六道定量问题上的表现——引擎介入计算前后的对比引擎本身经过审计:2,744 项正确性检验,0 项不匹配,最大数值误差 1.8e-15。

VI确定性可能失效之处

十个随机种子,一条绊线。

seed_required

4,574 项已开放能力中,有 10 项涉及随机性模拟。未设种子时,这些能力根本不会运行——调用在执行前即被拒绝。设置种子后,它们与其他能力一样可以回放。没有隐藏熵,没有静默例外。

十项之一distributions.sample_normal

schema_revision_mismatch

每个已注册数据源均携带一个模式版本号。若以已变更的数据回放计划,引擎将以结构化错误拒绝执行——而非悄然输出一个不同的数字,令任何机制都无从察觉。

每个数据源均已声明schema_revision

4,564 项原生确定性 · 10 项设种子后确定性 · 0 项依赖猜测

VII常见问题

确定性 AI,直问直答。

什么是确定性 AI?

一种答案可精确复现的系统:相同输入,相同输出,可证明。SQAI 从架构层面实现这一点——计算在固定的 float64 运行时上单线程执行,每个结果都携带 computation_hash,可逐字节重放。

什么是非确定性 AI?

一种对相同请求可能产生不同输出的系统。语言模型通过采样生成 token,同一问题可能产生不同的推理、不同的 SQL、不同的数字——且没有任何信号表明结果已发生变化。可重放的哈希值正是应对这种漂移的解药。

将 temperature 设为 0 不就能让 LLM 具有确定性吗?

temperature 只影响下一个 token 的选取方式。模型仍在预测你的数字,而非计算它,且运行过程既不被记录,也无法重放。SQAI 的确定性是执行层面的属性,而非解码层面的:模型提交一份有类型的计划,由引擎完成运算。

如何验证两次运行确实返回了相同的答案?

比较每个结果上的 computation_hash。它是对调用标识和值的规范字节进行域分隔的 sha256,哈希值匹配即意味着答案逐字节一致——finance.npv 示例在 TypeScript 和 Python 中均输出 b74f67d0…。

模拟怎么可能是确定性的?

关键在于拒绝暗中引入随机性。SQAI 的 4,574 个公开能力中,恰好有 10 个模拟随机性;不带种子调用时会被拒绝并返回 seed_required,带种子调用时则与其他所有能力一样可精确重放。

如果首次运行与重放之间数据发生了变化,会怎样?

重放会明确失败。每个已注册的数据源都携带 schema 版本号,针对已变更数据重放计划时会返回 schema_revision_mismatch——这是一个结构化错误,而非悄然产生不同的数字。