- TDACorp
- Réalisations
- QueryFlow
Un système d'analyse en langage naturel.
De l'anglais en entrée, du SQL sur le vrai schéma, un résultat, un graphique. Le plus difficile n'est pas de générer la requête : c'est d'être assez sûr pour viser une base de production et assez lisible pour qu'une mauvaise réponse puisse être déboguée.
Une requête générée est une requête non fiable.
Un modèle de langage qui écrit du SQL est un programme qui accepte les instructions d'un utilisateur et produit du code exécuté sur une base de données. Formulée ainsi, la question de sécurité se résout d'elle-même : le SQL généré est une entrée non fiable, et il doit être traité comme n'importe quelle autre donnée franchissant une frontière de confiance, aussi raisonnable qu'il paraisse.
Le second problème est une confiance d'un autre ordre. Un graphique affichant un chiffre sans dérivation visible n'est pas réfutable. Le lecteur ne peut pas distinguer une réponse correcte d'une réponse fausse énoncée avec assurance, et cette dernière est le véritable mode de défaillance de cette catégorie.
Les deux poussent dans le même sens : la requête est le produit, pas un détail d'implémentation. Elle est validée comme du code non fiable et affichée comme un résultat.
Les exigences qui en découlent.
Chacune suppose que le modèle finira par produire quelque chose de faux, parce que sur un nombre suffisant de requêtes, il le fera.
- Un SQL généré vérifié avant d'atteindre la base de données, et non après
- Une exécution en lecture seule, avec une borne sur ce qu'une requête peut coûter
- La requête montrée au lecteur, pas cachée derrière le graphique
- Un fournisseur de modèle remplaçable sans toucher aux appelants
Ce qui devait être vrai avant qu'une requête puisse s'exécuter.
Quatre choix, qui coûtent tous plus cher à mesure qu'on les fait tard.
Présentés comme des décisions plutôt que comme des fonctionnalités, parce que chacune a un contraire défendable. Voici dans quel sens celle-ci a tranché et pourquoi.
Valider la requête analysée, pas la chaîne de caractères
Le SQL généré est analysé et inspecté sous forme d'arbre syntaxique avant l'exécution : ce qui est vérifié, c'est l'instruction que la base de données exécutera réellement, et non un texte qui correspond par hasard à un motif. La recherche de motifs dans du SQL généré échoue dès qu'un modèle formule quelque chose d'une manière que le motif n'avait pas prévue, ce qui est le seul type de cas qui compte.
En lecture seule, borné, à chaque fois
L'exécution passe par un chemin en lecture seule avec un délai d'expiration par instruction : dans le pire des cas, une mauvaise requête échoue, au lieu de modifier une table ou de bloquer une base de données sous un balayage incontrôlé. C'est cette propriété qui rend tout simplement défendable le fait de brancher le système sur des données réelles.
Montrer le SQL
La requête générée est affichée et modifiable à côté de son résultat. Elle transforme une mauvaise réponse en réponse déboguable, et c'est la différence entre un outil dont un analyste peut répondre et une boîte noire qu'il doit soit croire entièrement, soit ne pas utiliser.
Le modèle se trouve derrière une interface
La génération passe par une abstraction de fournisseur plutôt que par le SDK d'un fournisseur appelé directement. Les modèles sont la dépendance qui évolue le plus vite dans la pile, et celle qui risque le plus de voir son prix changer, d'être abandonnée ou d'être dépassée ; l'interface fait de ce changement une modification de configuration plutôt qu'une réécriture.
La décision qui a compté.
Un choix par réalisation, fait avec une vraie alternative sur la table. L'alternative est nommée ici, et le coût d'avoir choisi contre elle aussi.
Montrer la requête, même si cela rend le produit moins magique.
Le SQL généré est affiché à côté de son résultat et peut être modifié et relancé. Le système ne présente pas le graphique comme la réponse en gardant la dérivation pour lui.
C'est la décision qui a compté parce qu'elle tranche ce qu'est le produit. Cacher la requête fait une meilleure démonstration ; la montrer en fait un outil dont quelqu'un peut assumer l'usage.
- L'alternative
- La cacher. Une question en entrée, un graphique en sortie, rien entre les deux. C'est l'interface la plus nette, c'est ce que promet la catégorie, et c'est la version qui fait bonne figure auprès de quelqu'un qui n'écrit pas de SQL, soit précisément l'acheteur auquel ce type de produit est vendu.
- Ce que cela a coûté
- L'illusion, et une partie du public avec elle. Une requête visible rappelle qu'une machine a écrit du code exécuté sur votre base de données, et pour un lecteur qui ne peut pas l'évaluer, le panneau est au mieux du bruit, au pire alarmant. Elle expose aussi chaque jointure maladroite que produit le générateur : le produit est donc jugé sur une sortie qu'il préférerait ne pas montrer.
- Pourquoi le compromis tient
- Le mode de défaillance de cette catégorie n'est pas une erreur, c'est une réponse fausse énoncée avec assurance, et un chiffre sans dérivation visible ne se distingue pas d'un chiffre exact. Cacher la requête supprime le seul mécanisme par lequel un lecteur pourrait un jour s'en apercevoir. Le coût se paie en finition ; l'alternative se paie la première fois que quelqu'un prend une décision sur un chiffre qui n'a jamais été juste.
Aucun taux d'exactitude, aucune latence, aucun taux de réussite n'apparaît ici. Le README du dépôt contient de tels chiffres et rien ne les étaye : ils ne sont donc délibérément pas repris sur ce site. Un compromis énoncé sans mesure est un argument, et cette page ne prétend être qu'un argument. Il en va de même de son état : c'est un logiciel qui a été construit et qui est en développement, pas un produit hébergé, et /products indique son état actuel à côté de son nom.
Le raisonnement, publié.
Cette page décrit une classe de problème et non une mission pour un client. Voici les textes où le même raisonnement est développé en entier.
- ArticleDes scripts shell qui passent à l'échelleÉchouer bruyamment plutôt qu'en silence, au niveau du code de liaison. Un système qui avale une erreur et renvoie quand même un chiffre est exactement la défaillance autour de laquelle cette réalisation est écrite.
- ServiceInfrastructure d'IA et orchestration d'agentsL'offre permanente dont relève cette réalisation, avec ce qui est livré et ce que cela vous apporte, offre par offre.
Interrogez-nous sur l'une ou l'autre de ces réalisations.
Les détails ne figurent pas sur cette page. Demandez-les directement, ou envoyez-nous le problème que vous avez réellement besoin de résoudre.