Exécuter une requête SQL en langage naturel

Envoie un prompt en langage naturel et un schéma de base de données à un modèle, qui renvoie une requête SQL permettant d’obtenir un résultat de la base de données utilisable dans la réponse.

Options 

  • Nom de compte est une expression de type texte du compte IA pour cette action de script. Dans le fichier actuel, utilisez l'action de script Configurer le compte IA pour configurer le compte et lui attribuer ce nom avant l'exécution de cette action de script.

  • Modèle est le nom du modèle de génération de texte à utiliser. Spécifiez le nom du modèle en tant qu'expression de texte. Pour connaître les modèles pris en charge, consultez les caractéristiques techniques de FileMaker.

  • Prompt est une expression textuelle permettant de formuler une demande en langage naturel à envoyer au modèle.

  • Options spécifiées détermine comment les autres options pour cette action de script sont configurées.

    • Depuis liste : permet de configurer les options individuellement à l'aide des paramètres ci-dessous.

    • Par données JSON : permet de configurer les options suivantes en fournissant un objet JSON. Cette option est utile pour définir des valeurs de manière dynamique. L'objet JSON doit contenir des paires clé-valeur correspondant aux options d'action de script et à leurs valeurs. Les clés des options prises en charge sont les suivantes :

      • Action : valeur de chaîne correspondant à l'action souhaitée : "Requête", "Requête pour les données uniquement", "Obtenir SQL", "Obtenir premier SQL uniquement", "Obtenir DDL".

      • Table de données : un tableau JSON de chaînes, où chaque chaîne correspond au nom d'une table dont le schéma doit être inclus. Par exemple : ["Contacts", "Adresses"].

      • Flux : valeur de chaîne pour l'option Flux ("Activé" ou "Désactivé").

      Par exemple :

      Copier
      {
          "action" : "Obtenir SQL",
          "data tables" : [ "Produits", "Factures" ],
          "stream" : "désactivé"
      }
  • Action spécifie le type de réponse à récupérer depuis le modèle.

    • Requête : renvoie la réponse finale du modèle au prompt de l'utilisateur en langage naturel.

    • Requête pour les données uniquement : renvoie uniquement les données récupérées par la dernière requête SQL du modèle exécutée par cette action de script.

    • Obtenir SQL : renvoie toutes les instructions SQL générées par le modèle pendant l'interaction.

    • Obtenir premier SQL uniquement : renvoie uniquement la première instruction SQL générée par le modèle.

    • Obtenir DDL : renvoie le schéma de base de données (au format DDL) que cette action de script génère et envoie au modèle.

  • Tables de données indique comment vous souhaitez spécifier le schéma de base de données pour les tables dans le modèle. Seul le schéma des tables spécifiées est envoyé.

    • Depuis liste : sélectionnez des tables spécifiques dans une liste.

    • Par nom : fournissez une liste de noms de table sous forme d'expression de texte. Séparez plusieurs noms de table avec des retours chariot.

    • Par DDL : fournissez une expression de texte DDL personnalisée. Cela permet de contrôler exactement quelles informations de schéma sont envoyées au modèle.

  • Tables permet de sélectionner des tables lorsque Tables de données est définie sur Depuis liste.

  • Flux détermine comment la réponse est transmise lorsque Action est définie sur Requête.

    • Activé : la réponse est récupérée et transmise de manière incrémentielle (mot par mot ou par fragments). Cela peut rendre le client FileMaker plus réactif.

    • Désactivé : l'intégralité de la réponse est récupérée avant qu'elle ne soit mise à disposition. Cela peut sembler rendre le client FileMaker moins réactif lorsqu'il attend la réponse complète.

  • Paramètres correspond à une expression de texte relative à un objet JSON qui se compose de paires clé-valeur pour des paramètres supplémentaires pris en charge par le fournisseur de modèles. Par exemple : {"temperature": 0.7, "seed": 42}. Consultez la documentation du fournisseur de modèles pour connaître les noms de clés des paramètres pris en charge et leurs plages de données valides.

  • Nom du modèle de prompt spécifie le nom d'un modèle de prompt personnalisé, configuré à l'aide de l'action de script Configurer un modèle de prompt. Utilisez cette option pour concevoir un prompt supplémentaire afin d'obtenir une réponse optimale de la part d'un modèle d'IA.

  • Cible de la réponse spécifie la rubrique ou la variable dans laquelle le résultat de l'action de script doit être stocké.

  • Exécuter JavaScript dans Web Viewer spécifie le code JavaScript à exécuter dans une cible Web Viewer une fois l'action de script terminée. Cette option est similaire à l'exécution de l'action de script Exécuter JavaScript dans Web Viewer comme action de script suivante, à ceci près que la Cible de la réponse peut être transmise à la fonction JavaScript et la réponse diffusée au Web Viewer lorsque l'option Flux est définie sur Activé.

    • Web Viewer spécifie le nom de l'objet d'un Web Viewer sur le modèle actuel.

    • Nom de la fonction correspond au nom de la fonction JavaScript à appeler dans le Web Viewer.

Compatibilité 

Produit Prise en charge
FileMaker Pro Oui
FileMaker Go Oui
FileMaker WebDirect Oui
FileMaker Server Partiel
FileMaker Cloud Partiel
FileMaker Data API Partiel
Publication Web personnalisée Partiel

Provient de la version 

22.0

Description 

Cette action de script permet d'interroger votre base de données en langage naturel au lieu d'avoir directement recours à des instructions SQL. Elle s'appuie sur un modèle d'IA pour interpréter un prompt en langage naturel, analyser le schéma de la base de données, et générer des requêtes SQL appropriées. Après avoir exécuté lesdites requêtes, le modèle peut répondre en langage naturel. Aucune de vos données FileMaker n'a besoin d'être envoyée au modèle.

L'interaction entre cette action de script et le modèle suit généralement la structure suivante :

  1. Cette action de script envoie le Prompt et le schéma de base de données pertinent (DDL spécifié par les Tables de données) au Modèle d'IA configuré. Cela inclut les prompts fournis dans un modèle de prompt facultatif.

  2. Le modèle analyse le prompt et le schéma, puis génère une ou plusieurs requêtes SQL conçues pour récupérer les informations demandées à partir de la base de données.

  3. Cette action de script reçoit les requêtes SQL générées par le modèle et les exécute.

  4. Cette action de script renvoie les résultats de l'exécution de la requête SQL au modèle.

  5. Si le modèle détermine que les résultats nécessitent un traitement ou un affinement supplémentaire pour répondre pleinement au prompt, il peut générer des requêtes SQL supplémentaires (répétition des étapes 2 à 4). Cela permet des requêtes complexes ou la récupération de données en plusieurs étapes.

  6. Une fois que le modèle dispose d'informations suffisantes, il génère une réponse finale basée sur le prompt et les résultats de la requête SQL qu'il a reçus.

  7. Cette action de script reçoit la réponse finale et la stocke dans la Cible de la réponse.

L'option Action détermine ce qui est renvoyé à la Cible de la réponse à différentes étapes de ce processus :

Action Résultat

Requête

Termine l'ensemble du processus (étapes 1 à 7), y compris les répétitions de génération et d'exécution SQL. La Cible de la réponse reçoit la réponse finale en langage naturel, qui peut inclure les données de la requête SQL intégrée dans une réponse conversationnelle.

Requête pour les données uniquement

Effectue les étapes 1 à 6, mais s'arrête avant l'étape 7. La Cible de la réponse ne reçoit que les données renvoyées par la dernière requête.

Pour le débogage :

Obtenir SQL

Effectue les étapes 1 à 6, mais s'arrête avant l'étape 7. La Cible de la réponse reçoit le texte de toutes les instructions SQL générées par le modèle tout au long de l'interaction.

Obtenir premier SQL uniquement

Effectue seulement les étapes 1-2, puis s'arrête. La Cible de la réponse reçoit le texte de la première instruction SQL générée par le modèle. Cette option permet de réduire l'utilisation des jetons lors du débogage.

Obtenir DDL

Effectue uniquement l'étape 1 (génération du DDL en fonction de l'option Tables de données). N'interagit pas avec le modèle. La Cible de la réponse reçoit le texte du DDL généré.

Les actions de débogage sont principalement utiles pour comprendre comment l'action du script interagit avec le modèle et votre schéma de base de données lors du test de votre script.

Remarques 

  • Si vous spécifiez un Nom du modèle de prompt, cette action de script utilise le modèle configuré via l'action de script Configurer un modèle de prompt. Ces modèles peuvent utiliser des constantes comme :schema:, :question:, :sql_query: et :sql_results: qui sont remplacées dynamiquement pendant l'exécution. Les constantes disponibles dépendent du type de modèle et de l'Action actuelle.

  • Les commentaires de rubrique que vous saisissez dans la boîte de dialogue Gérer la base de données sont inclus dans le schéma de base de données envoyé au modèle. Pour améliorer la capacité du modèle à générer des instructions SQL utiles, expliquez le rôle de la rubrique en commentaire (par exemple, une clé étrangère qui identifie un enregistrement dans une table liée). Consultez la section Meilleures pratiques pour le schéma de base de données avec la génération de requêtes DDL et SQL.

  • Cette action de script ne peut pas déterminer quel tour de génération et d'exécution SQL est le dernier jusqu'à ce que la réponse finale en langage naturel, en provenance du modèle, soit reçue.

  • Lors de l'exécution des actions Requête ou Requête pour les données uniquement, cette action de script reçoit et stocke toutes les instructions SQL générées par le modèle et le résultat de la dernière requête SQL exécutée. Ce sont les mêmes résultats renvoyés par les actions Obtenir SQL et Requête pour les données uniquement, respectivement.

  • Lorsque cette action de script s'exécute sans erreur mais qu'aucune information pertinente n'est trouvée, un message est renvoyé dans la Cible de la réponse, et la fonction Obtenir ( DernièreErreur ) renvoie l'erreur 0 ("Aucune erreur").

  • L'option Exécuter JavaScript dans Web Viewer n'est pas prise en charge dans les scripts exécutés par FileMaker Server, FileMaker Cloud, FileMaker Data API, OData API et la Publication Web personnalisée.

Exemple 1 

Configure un compte d'IA, puis utilise l'action de script Exécuter une requête SQL en langage naturel pour poser une question sur les données de la table Contacts, qui contient des données dans les rubriques Nom et Société. L'action de script envoie le schéma de la table Contacts et le prompt « Pour quelle entreprise Alea travaille-t-elle ? » au modèle. Le modèle génère la requête SQL nécessaire et cette action de script l'exécute, puis le modèle fournit une réponse en langage naturel, conservée dans la rubrique Réponse.

Copier
Configurer le compte IA [ Nom de compte: "mon-compte" ; Fournisseur de modèles: OpenAI ; Clé API : "sk-..." ]

Exécuter une requête SQL en langage naturel [ Nom de compte: "mon-compte" ; Modèle: "gpt-4o" ; Prompt: "Pour quelle entreprise Alea travaille-t-elle ?" ; Options spécifiées: Depuis liste ; Action: Requête ; Tables de données: Depuis liste ; Tables... ; Flux ; Cible de la réponse: Contacts::Réponse ]

Réponse possible dans la rubrique Contacts::Réponse :

Alea travaille pour Acme Anvils, Inc.

Exemple 2 

Pose une question à l'utilisateur dans une boîte de dialogue personnalisée, où le bouton par défaut est « Requête », le bouton 2 est « Données uniquement » et le bouton 3 est « Annuler », et la question est stockée dans la variable $$PromptUtilisateur. Ensuite, définit la variable $options pour refléter le choix de l'utilisateur pour l'exécution de l'Action : Requête ou Requête pour les données uniquement. Si l'utilisateur a saisi une question et n'a pas cliqué sur Annuler, exécute l'action de script Exécuter une requête SQL en langage naturel, passe dans $$PromptUtilisateur et $options, puis renvoie les résultats du modèle dans $$DonnéesRésultatRequête, qui s'affiche dans une autre boîte de dialogue personnalisée. Les requêtes sont limitées aux tables Contacts et Employés.

Copier
Configurer le compte IA [ Nom de compte: "mon-compte" ; Fournisseur de modèles: OpenAI ; Clé API : "sk-..." ]

Ouvrir boîte dial. person. [ "Demander à la base de données:" ; $$PromptUtilisateur ]

Définir variable [ $options ; Valeur: 
    Definir ( [
        $choix =     Obtenir ( DernierChoixMessage ) ;
        choix_action = Cas ( 
            $choix = 1 ; "Requête" ;
            $choix = 2 ; "Requête pour les données uniquement"
            ) 
        ] ; 
    
        JSONSetElement (
            ""; 
            [ "action" ; choix_action ; JSONString ] ;
            [ "tables de données" ; JSONMakeArray ( 
                    "Contacts¶Employés" ;
                    "¶" ; 
                    JSONString 
                ) ;
                JSONArray ] ; 
            [ "flux" ; "désactivé" ; JSONString ]
        )
    )
]

Si [ not EstVide ( $$PromptUtilisateur ) et $choix ≠ 3 ]

    Exécuter une requête SQL en langage naturel [ Nom de compte: "mon-compte" ; Modèle: "gpt-4o" ; Prompt: $$PromptUtilisateur ; Options spécifiées: Par données JSON ; Cible de la réponse: $$DonnéesRésultatRequête ]
    
    Ouvrir boîte dial. person. [ "Résultat des données :" ; $$DonnéesRésultatRequête ]
    
Fin de si

Réponse possible stockée dans $$DonnéesRésultatRequête, en supposant que le prompt était « Pour quelle entreprise Alea travaille-t-elle ? » et que l'utilisateur a cliqué sur le bouton Données uniquement :

Acme Anvils, Inc.

Exemple 3 

Démontre l'utilisation des actions Obtenir SQL et Obtenir DDL pour le débogage. Le script récupère d'abord le DDL généré pour les tables Produits et Commandes, puis toutes les instructions SQL générées par le modèle pour un prompt spécifique, en les stockant dans des variables distinctes pour examen.

Copier
Exécuter une requête SQL en langage naturel [ Nom de compte: "mon-compte" ; Modèle: "gpt-4o" ; Prompt: " " ; Options spécifiées: Depuis liste ; Action: Obtenir DDL ; Tables de données: Par nom ; "Produits¶Commandes" ; Cible de la réponse: $$DDLProduitsCommandes ]

Exécuter une requête SQL en langage naturel [ Nom de compte: "mon-compte" ; Modèle: "gpt-4o" ; Prompt: "Trouve la valeur totale des commandes pour l'ID produit 101" ; Options spécifiées: Depuis liste ; Action: Obtenir SQL ; Tables de données: Par nom ; "Produits¶Commandes" ; Cible de la réponse: $$SQLGénérées ]

Ouvrir boîte dial. person. [ "Informations de débogage" ; "DDL généré :" & ¶ & $$DDLProduitsCommandes & ¶ & ¶ & "SQL générées :" & ¶ & $$SQLGénérées ]

DDL possible stocké dans $$DDLProduitsCommandes :

Copier
 CREATE TABLE "Produits" (
"IDProduit" int, /*Clé primaire qui identifie un produit de manière unique*/
"NomProduit" varchar(255), /*Nom descriptif du produit*/
"Prix" int, /*Prix du produit en EUR*/
PRIMARY KEY (IDProduit)
);

CREATE TABLE "Commandes" (
"IDCommande" int, /*Clé primaire qui identifie une commande de manière unique*/
"IDProduit" int, /*Clé étrangère pour une relation plusieurs-à-un avec la table Produits*/
"Quantité" int, /*Quantité du produit dans la commande*/
PRIMARY KEY (IDCommande),
FOREIGN KEY (IDProduit) REFERENCES Produits(IDProduit)
);

Instruction SQL possible stockée dans $$SQLGénérées :

Copier
SELECT SUM("Quantité" * "Prix") AS "ValeurTotale" FROM "Commandes" JOIN "Produits" ON "Commandes"."IDProduit" = "Produits"."IDProduit" WHERE "Commandes"."IDProduit" = 101