ILe registre des questions

Réponses gravées.

Tout ce que les équipes demandent avant de confier SQAI à un agent — ce qu'il ne peut jamais faire, ce qui quitte la machine, ce que prouve un rejeu, ce que ça coûte. Des réponses concises, des chiffres réels, et les pages qui développent chaque sujet.

IICe que c'est, la vitesse, où ça tourne

Produit

Q01–Q05
Q01

Qu'est-ce que SQAI ?

Structured Query AI — l'outil de données structurées gouverné, en lecture seule, pour les agents IA. Une question devient un plan typé et vérifié par politique ; le plan s'exécute sur un moteur déterministe ; la réponse est retournée avec des hashes qui permettent de la rejouer.

Une seule surface couvre fichiers et bases de données actives, avec 4 778 capacités de calcul en lecture seule réparties sur 445 modules — des médianes à la valorisation d'options.

stats.median · finance.npv · option_pricing.black_scholes_call

Q02

Est-ce rapide ?

Il n'y a pas de démarrage à froid par requête. Le plan de requête s'exécute en processus — sous la milliseconde sur des fichiers typiques.

Le calcul se provisionne une seule fois : le tout premier appel télécharge et initialise le runtime signé en environ 110 secondes. Ensuite, le daemon reste actif en mémoire, et un appel de calcul à chaud se mesure à 0,83–0,93 ms.

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

Q03

Quelles plateformes sont prises en charge ?

Le runtime signé est disponible pour macOS Apple Silicon et Linux x64. Sous Windows, un appel de calcul géré retourne une erreur structurée et nommée plutôt que de planter.

Le plan de requête fonctionne partout, tout comme les modes auto-hébergé et hébergé, le calcul étant délégué à un moteur distant. Node 20 ou supérieur ; Python 3.10 ou supérieur.

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

Q04

Puis-je livrer un runtime plus léger ?

Oui. Par défaut, SQAI installe le bundle épinglé couvrant toute la surface exposée. En ne nommant que les modules nécessaires, le service de build compile un bundle signé et épinglé par sha256 pour ce sous-ensemble, mis en cache par hash de filtre.

Les daemons filtrés disposent de leur propre socket et port, sans jamais entrer en conflit avec le daemon complet.

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

Q05

Quelque chose a échoué. Comment déboguer ?

Les outils agent ne lèvent jamais d'exception. Les erreurs sont retournées sous forme de sortie structurée avec un statut et un code qui nomme le refus — refus de politique, capacité inconnue, graine manquante.

Pour tout ce qui se trouve sous les outils, une seule commande vérifie l'installation, le runtime et la parité inter-langages en une passe.

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

IIILecture seule par construction, non par option

Sécurité

Q06–Q10
Q06

Est-ce vraiment en lecture seule ?

Oui — par construction, non par permission. Le modèle exprime une intention typée, jamais du SQL ; SQAI la valide contre un contrat de capacités épinglé par hash, applique votre politique, et n'exécute qu'ensuite.

Sur 4 778 capacités, 4 574 sont exposées : uniquement celles qui sont en lecture seule et déterministes, ou déterministes avec une graine. Les 204 qui échouent au test — dont toute écriture — sont absentes de la surface packagée. Aucun paramètre ne peut atteindre ce qui n'a jamais été livré.

read_only && (deterministic || deterministic_when_seeded)

Q07

Comment donner à un agent un accès en lecture seule à mes données ?

Enregistrez vos sources dans le code et transmettez au modèle le jeu d'outils — exactement trois outils. L'un liste ce qui existe, l'un prévisualise un plan sans l'exécuter, et l'un exécute contre la surface en lecture seule.

Un rôle de base de données en lecture seule est un flag que quelqu'un peut désactiver. Une surface compilée sans capacités d'écriture, non.

sqai.tools() → listSources · explainQuery · queryData

Q08

Comment bloquer DELETE ou DROP dans du SQL généré par un LLM ?

Vous ne filtrez pas le SQL. Vous cessez d'en générer.

Les filtres de chaînes et les flags en lecture seule protègent un langage qui peut toujours exprimer une écriture — et du SQL injecté par prompt arrive dans la sortie du modèle, après votre sanitizer d'entrée. Le modèle de SQAI écrit un plan typé dans une grammaire sans forme d'écriture : DELETE n'est pas rejeté, il est inexprimable.

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

Q09

Le modèle peut-il élargir ma politique ?

Non. La politique est fixée dans le code à la création du client et vérifiée en processus avant chaque exécution. Les schémas d'outils ne portent aucun champ de liste d'autorisation, il n'y a donc rien qu'un prompt puisse atteindre.

Une liste d'autorisation explicite ne peut que restreindre. Nommer une capacité hors de la surface éligible échoue quand même — la surface packagée est le plafond.

policy_denied_source · policy_denied_field · policy_denied_function

Q10

Existe-t-il une trappe de secours ?

Oui — pour les humains, jamais pour les modèles. Le runtime non protégé se trouve derrière un import séparé qui contourne le contrat, la politique et les vérifications de graine, et il n'est jamais exposé au jeu d'outils agent.

Un ingénieur peut en sortir délibérément. Un agent ne peut l'atteindre avec aucune entrée.

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

Pourquoi les agents ne devraient pas écrire du SQL

IVCe qui sort, ce qui se connecte, ce qui s'entraîne

Données

Q11–Q13
Q11

Quelles données quittent ma machine ?

En mode local par défaut, aucune. Le plan de requête s'exécute en processus et le moteur de calcul est un daemon signé sur votre machine. Le seul appel sortant est le téléchargement initial du bundle d'exécution — du code moteur, pas vos données.

Pointez une variable d'environnement vers un moteur auto-hébergé ou hébergé, et les plans y sont transmis à la place, avec des identifiants chiffrés et aucune copie de données.

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

Q12

Quelles sources de données puis-je interroger ?

En processus sans clé : CSV, TSV, JSON, lignes en mémoire et SQLite — plus Excel et Parquet en Python. Via un moteur : PostgreSQL, MySQL, Oracle avec un pilote Thin-mode intégré, SQL Server, Snowflake, BigQuery, ClickHouse, Redshift, object stores, Redis, Neo4j, Elasticsearch, API REST et dépôts Git.

Chaque source présente la même forme typée, de sorte que le code en aval ne peut distinguer un CSV de Snowflake. Les sources sont immuables une fois enregistrées.

SqaiSource { fields, typed_fields, row_count, schema_revision }

Q13

SQAI s'entraîne-t-il sur mon schéma ou mes données ?

Jamais. SQAI n'est pas un modèle et n'entraîne rien — il n'existe aucune boucle d'apprentissage à alimenter. En mode local, vos données ne quittent jamais la machine.

Le seul modèle dans la boucle est celui que vous apportez, et il voit au plus 25 lignes par résultat. Tout ce qui dépasse est tronqué — de façon déclarée, jamais silencieuse — la valeur complète étant conservée sous un identifiant de résultat opaque qui expire après 15 minutes.

maxRowsToModel 25 · maxCellsToModel 250 · maxBytesToModel 32,000

Connectez vos données

VMême question, mêmes octets

Déterminisme

Q14–Q16
Q14

Comment est-il déterministe — et identique en TypeScript et Python ?

Déterministe dans le cadre d'exécution déclaré — flottants 64 bits, thread unique, runtime épinglé — et chaque résultat enregistre ce cadre plutôt que de surestimer ses garanties.

Le sérialiseur canonique est verrouillé par conformité dans les deux SDK, de sorte que le même calcul retourne le même nombre et des hachages identiques octet pour octet en TypeScript et Python.

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

Q15

Comment empêcher un LLM d'inventer des chiffres ?

En ne lui laissant jamais faire l'arithmétique. Demandez à un modèle un total sur 200 lignes et vous obtenez un chiffre plausible — sans aucun signal qu'il est faux.

Avec SQAI, le modèle choisit uniquement le calcul ; le moteur l'exécute. Dans notre A/B de précision, le même modèle est passé de 0 sur 16 à 16 sur 16 sur des questions quantitatives dès que le moteur a pris en charge le calcul.

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

Q16

Peut-on rejouer ce qu'un agent a répondu ?

Oui — c'est précisément à cela que servent les hachages. Chaque résultat porte un hachage de plan, un hachage d'invocation connu avant l'exécution, un hachage de calcul connu après, et une enveloppe de déterminisme enregistrant la version du runtime, la plateforme, la précision et la graine.

Rejouez l'invocation dans le même cadre, des mois plus tard, et le hachage correspond octet pour octet. Si le schéma sous-jacent a évolué, vous obtenez une erreur nommée de divergence de version de schéma — jamais des chiffres silencieusement différents.

run1 b74f67d0d7a594aa7ac91f6291612452aa8ccdf603351ebc8d801a6fddd91bc8run2 b74f67d0d7a594aa7ac91f6291612452aa8ccdf603351ebc8d801a6fddd91bc8identical: true

Le déterminisme, en détail

VICe qui est gratuit, ce qui est limité

Tarifs

Q17–Q18
Q17

Ai-je besoin d'une clé API ou d'un compte ?

Non. Le mode local est sans configuration — ni clé, ni compte, ni carte. Le runtime se provisionne lui-même au premier appel de calcul.

La connexion est facultative et utilise un code d'appareil ; elle émet une licence hors ligne qui transmet un jeton signé, jamais vos données. Les clés n'existent que pour pointer vers un moteur différent.

sqai login → RFC 8628 device code · WDJB-MJHT

Q18

SQAI est-il gratuit ou payant ?

Le développement local et le calcul géré sont gratuits — il n'y a aucune vérification de licence dans le SDK.

Les niveaux payants limitent les machines, les sièges et les droits commerciaux — jamais les fonctionnalités de calcul. Developer : gratuit, un appareil, usage non commercial. Pro : 25 $ par mois, trois appareils, usage commercial, jobs asynchrones, webhooks, piste d'audit. Team : 99 $ par mois, dix appareils, avec accès basé sur les rôles et gestion des sièges.

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

VIIUne autre question

Posez-la nous.

Si elle n'est pas traitée ci-dessus, elle mérite une vraie réponse — d'une personne.

Parler à l'équipeLire la documentation