I質問台帳

明文で答える。

SQAIをエージェントに渡す前にチームが必ず問うこと――絶対にできないこと、外部に出るデータ、リプレイが証明すること、コスト。簡潔な回答、実際の数値、そして詳細を記したページへのリンク。

II概要、速度、動作環境

製品

Q01–Q05
Q01

SQAIとは何か?

Structured Query AI――AIエージェント向けの、ガバナンスされた読み取り専用の構造化データツール。質問は型付き・ポリシー検証済みのプランになり、プランは決定論的エンジンで実行され、答えはリプレイ可能なハッシュとともに返る。

445モジュールにわたる4,778の読み取り専用コンピュートケイパビリティ――中央値からオプション価格計算まで――とともに、ファイルとライブデータベースを単一のインターフェースで扱える。

stats.median · finance.npv · option_pricing.black_scholes_call

Q02

速いか?

クエリごとのコールドスタートはない。クエリプレーンはインプロセスで動作し、一般的なファイルではサブミリ秒だ。

コンピュートのプロビジョニングは一度だけ――初回呼び出し時に署名済みランタイムをダウンロードして初期化するのに約110秒かかる。以降はデーモンがウォーム状態で常駐し、ウォームなコンピュート呼び出しは0.83〜0.93 msで計測される。

finance.npv = 0.83–0.93 ms (warm) · first provision ≈ 110 s

Q03

対応プラットフォームは?

署名済みランタイムはAppleシリコンmacOSとx64 Linux向けに提供される。Windowsではマネージドコンピュート呼び出しがクラッシュせず、構造化された名前付きエラーを返す。

クエリプレーンはどこでも動作する。コンピュートをリモートエンジンに送信するセルフホストモードとホストモードも同様だ。Node 20以降、Python 3.10以降が必要。

darwin-arm64 · linux-x64 · node ≥ 20 · python ≥ 3.10

Q04

より小さいランタイムを配布できるか?

できる。デフォルトではSQAIは公開サーフェス全体をカバーするピン留めバンドルをインストールする。必要なモジュールだけを指定すると、ビルドサービスがそのサブセット向けの署名済み・sha256ピン留みバンドルをコンパイルし、フィルターハッシュでキャッシュする。

フィルター済みデーモンは専用のソケットとポートを持つため、フルデーモンと衝突しない。

SQAI_RUNTIME_MODULES → POST /v1/runtime/build · sha256-pinned

Q05

何かが失敗した。どうデバッグするか?

エージェントツールは例外をスローしない。エラーはstatusと拒否理由を示すcodeを持つ構造化出力として返る――ポリシー拒否、未知のケイパビリティ、シード不足など。

ツール配下のすべてについては、コマンド一つでインストール・ランタイム・言語間パリティを一括確認できる。

output.status === "error" · sqai doctor --parity --json

IIIフラグではなく設計による読み取り専用

安全性

Q06–Q10
Q06

本当に読み取り専用か?

そうだ――権限ではなく設計による。モデルが記述するのはSQLではなく型付きインテントであり、SQAIはそれをハッシュピン留みのケイパビリティコントラクトに照らして検証し、ポリシーを適用してから実行する。

4,778のケイパビリティのうち公開されるのは4,574――読み取り専用かつ決定論的、またはシード付きで決定論的なものだけだ。書き込みを含む204のケイパビリティはテストを通過せず、パッケージ済みサーフェスに存在しない。出荷されなかったものには、いかなる設定でも到達できない。

read_only && (deterministic || deterministic_when_seeded)

Q07

エージェントにデータへの読み取り専用アクセスを与えるには?

コードでソースを登録し、モデルにツールセット――正確に3つのツール――を渡す。一つは存在するものを列挙し、一つは実行せずにプランをプレビューし、一つは読み取り専用サーフェスに対して実行する。

読み取り専用のデータベースロールは誰かが解除できるフラグだ。書き込みケイパビリティなしでコンパイルされたサーフェスはそうではない。

sqai.tools() → listSources · explainQuery · queryData

Q08

LLMが生成したSQL内のDELETEやDROPをどうブロックするか?

SQLをフィルタリングしない。生成をやめる。

文字列フィルターと読み取り専用フラグは、常に書き込みを表現できる言語を守ろうとするものだ――プロンプトインジェクションされたSQLはモデルの出力に現れ、入力サニタイザーを通過済みだ。SQAIのモデルは書き込み構文を持たない文法で型付きプランを記述する。DELETEは拒否されるのではなく、記述不能だ。

kind: "query" | "computation" · version: "1"

Q09

モデルがポリシーを拡張できるか?

できない。ポリシーはクライアント生成時にコードで固定され、すべての実行前にインプロセスで検証される。ツールスキーマにはいかなる許可リストフィールドも存在しないため、プロンプトが操作できるものは何もない。

明示的な許可リストは絞り込みにしか使えない。対象サーフェス外のケイパビリティを指定しても失敗する――パッケージ済みサーフェスが上限だ。

policy_denied_source · policy_denied_field · policy_denied_function

Q10

エスケープハッチはあるか?

ある――人間のためだけであり、モデルのためではない。ガードなしのランタイムはコントラクト・ポリシー・シード検証をバイパスする別のインポートの背後にあり、エージェントツールセットには決して公開されない。

エンジニアは意図的にオプトアウトできる。エージェントはいかなる入力でもそこに到達できない。

import { getUnsafeRuntime } from "@thyn-ai/sqai/unsafe"

エージェントがSQLを書くべきでない理由

IV何が出て、何がつながり、何を学習するか

データ

Q11–Q13
Q11

マシンから外部に出るデータは何か?

デフォルトのローカルモードでは、何も出ない。クエリプレーンはプロセス内で解決され、コンピュートランタイムはマシン上の署名済みデーモンとして動作する。唯一の外部通信は、初回使用時のランタイムバンドルのダウンロードであり、それはエンジンコードであってデータ行ではない。

環境変数でセルフホストまたはホスト型エンジンを指定すると、プランがそこに送信される。認証情報は暗号化され、データはコピーされない。

local: in-process · self_hosted: SQAI_ENGINE_URL · api: SQAI_API_KEY

Q12

クエリできるデータソースは何か?

キー不要のインプロセス処理: CSV、TSV、JSON、インメモリ行、SQLite — Pythonではさらに Excel と Parquet。エンジン経由: PostgreSQL、MySQL、バンドル済みThin-modeドライバを使用したOracle、SQL Server、Snowflake、BigQuery、ClickHouse、Redshift、オブジェクトストア、Redis、Neo4j、Elasticsearch、REST API、Gitリポジトリ。

すべてのソースは同一の型付きシェイプを持つため、下流のコードはCSVとSnowflakeを区別できない。ソースは登録後に不変となる。

SqaiSource { fields, typed_fields, row_count, schema_revision }

Q13

SQAIはスキーマやデータで学習するか?

しない。SQAIはモデルではなく、何も学習しない — 供給すべき学習ループが存在しない。ローカルモードではデータ行がマシンの外に出ることは一切ない。

ループ内に存在するモデルはユーザーが持ち込むものだけであり、それが参照できるのは結果ごとに最大25行までだ。それを超える場合は切り捨てられる — 明示的に宣言され、暗黙には行われない。完全な値は不透明な結果IDの下に保持され、15分後に失効する。

maxRowsToModel 25 · maxCellsToModel 250 · maxBytesToModel 32,000

データを接続する

V同じ問いに、同じバイト列

決定論

Q14–Q16
Q14

TypeScript と Python で同一の決定論的結果を得る仕組みは?

宣言された実行スコープ内での決定論 — 64ビット浮動小数点、シングルスレッド、固定ランタイム — であり、すべての結果はそのスコープを記録する。過剰な主張はしない。

正準シリアライザは両SDKにわたって適合性がロックされているため、同一の計算は TypeScript と Python で同じ数値とバイト同一のハッシュを返す。

finance.npv(0.1, [-1000, 300, 420, 560, 680]) = 505.020148896933computation_hash b74f67d0… · TS ≡ PY

Q15

LLMが数値を捏造するのをどう防ぐか?

算術をモデルに行わせないことで防ぐ。200行の合計をモデルに求めると、もっともらしい数値が返るが、それが誤りであるシグナルは何もない。

SQAIではモデルが計算を選択するだけで、実行はエンジンが行う。精度のA/Bテストでは、エンジンが計算を担った瞬間に、同じモデルが定量的な問いに対して16問中0問から16問中16問へと改善した。

accuracy A/B: 0/16 → 16/16

Q16

エージェントの回答を再現できるか?

できる — それがハッシュの目的だ。すべての結果はプランハッシュ、実行前に確定する呼び出しハッシュ、実行後に確定する計算ハッシュ、そしてランタイムバージョン・プラットフォーム・精度・シードを記録した決定論エンベロープを持つ。

数ヶ月後に同じスコープで呼び出しを再実行しても、ハッシュはバイト単位で一致する。基盤となるスキーマが変更されていた場合は、暗黙に異なる数値が返るのではなく、名前付きのスキーマリビジョン不一致として通知される。

run1 b74f67d0d7a594aa7ac91f6291612452aa8ccdf603351ebc8d801a6fddd91bc8run2 b74f67d0d7a594aa7ac91f6291612452aa8ccdf603351ebc8d801a6fddd91bc8identical: true

決定論の詳細

VI何が無料で、何がゲートされるか

料金

Q17–Q18
Q17

APIキーやアカウントは必要か?

不要。ローカルモードはゼロ設定 — キーもアカウントもカードも不要。ランタイムは最初のコンピュート呼び出し時に自動でプロビジョニングされる。

サインインは任意でデバイスコードを使用し、オフラインライセンスを発行する。移動するのは署名済みトークンのみで、データは移動しない。キーは別のエンジンを指定する目的にのみ存在する。

sqai login → RFC 8628 device code · WDJB-MJHT

Q18

SQAIは無料か有料か?

ローカル開発とマネージドコンピュートは無料 — SDKのどこにもライセンスチェックは存在しない。

有料プランがゲートするのはマシン数、シート数、商用利用権であり、コンピュート機能ではない。Developer: 無料、1デバイス、非商用。Pro: 月額$25、3デバイス、商用利用、非同期ジョブ、Webhook、監査証跡。Team: 月額$99、10デバイス、ロールベースアクセスとシートを追加。

Developer $0 · Pro $25/mo · Team $99/mo

VIIもう一つ質問がある

直接聞いてほしい。

上記で答えが見つからなければ、人間からの誠実な返答に値する。

チームに話すドキュメントを読む