Voer SQL-query uit met natuurlijke taal

Verzendt een prompt in natuurlijke taal en een databaseschema naar een model. Dit model stuurt een SQL-opvraag terug om een resultaat uit de database te verkrijgen dat in zijn respons te gebruiken.

Opties 

  • Accountnaam is een tekstexpressie van het AI-account dat voor deze scriptstap moet worden gebruikt. Gebruik in het huidige bestand de scriptstap AI-account configureren scriptstap om het account in te stellen en deze naam toe te wijzen op elk moment voordat deze scriptstap wordt uitgevoerd.

  • Model is de naam van het te gebruiken tekstgeneratiemodel. Geef de modelnaam op als tekstexpressie. Zie de technische specificaties van FileMaker voor ondersteunde modellen.

  • Prompt is een tekstexpressie voor het verzoek of de vraag in natuurlijke taal die naar het model moet worden verzonden.

  • De opgegeven opties bepalen hoe de andere opties voor deze scriptstap worden geconfigureerd.

    • Uit lijst: configureer de opties afzonderlijk met behulp van de onderstaande instellingen.

    • Door JSON-gegevens: configureer de volgende opties door een JSON-object op te geven. Deze optie is handig voor het dynamisch instellen van waarden. Het JSON-object moet sleutel-waardeparen bevatten die overeenkomen met de opties van de scriptstap en de bijbehorende waarden. Sleutels voor de ondersteunde opties zijn:

      • actie: tekenreekswaarde die overeenkomt met de gewenste actie: "query", "query for data only", "get sql", "get first sql only", "get ddl".

      • gegevenstabellen: een JSON-matrix met tekenreeksen, waarbij elke tekenreeks de naam is van een tabel waarvan het schema moet worden opgenomen. Bijvoorbeeld: ["Contactpersonen", "Adressen"]

      • stream: Tekenreekswaarde voor de optie Stream ("aan" of "uit").

      Bijvoorbeeld:

      Kopiëren
      {
          "actie" : "get sql",
          "gegevenstabellen" : [ "Producten", "Facturen" ],
          "stream" : "uit"
      }
  • Actie geeft het type antwoord aan dat van het model moet worden opgehaald.

    • Query: retourneert het definitieve antwoord van het model op de prompt van de gebruiker in natuurlijke taal.

    • Query voor alleen gegevens: retourneert alleen de gegevens die zijn opgehaald door de laatste SQL-query van het model die is uitgevoerd door deze scriptstap.

    • SQL ophalen: retourneert alle SQL-instructies die door het model zijn gegenereerd tijdens de gehele interactie.

    • Alleen eerste SQL ophalen: retourneert alleen de eerste SQL-instructie die door het model is gegenereerd.

    • DDL ophalen: retourneert het databaseschema (in Data Definition Language) dat door deze scriptstap wordt gegenereerd en naar het model wordt verzonden.

  • Gegevenstabellen geven aan hoe u het databaseschema voor tabellen voor het model wilt opgeven. Alleen het schema voor de opgegeven tabellen wordt verzonden.

    • Uit lijst: selecteer specifieke tabellen in een lijst.

    • Op naam: geef een lijst met tabelnamen op als tekstexpressie. Scheid meerdere tabelnamen met een regeleinde.

    • Door DDL: geef een aangepaste DDL-tekstexpressie op. Hiermee kunt u precies bepalen welke schema-informatie naar het model wordt verzonden.

  • Bij Tabellen selecteert u tabellen wanneer Gegevenstabellen op Uit lijst staan.

  • Stream bepaalt hoe het antwoord wordt geleverd wanneer de Actie Query is.

    • Aan: het antwoord wordt opgevraagd en stapsgewijs geleverd (woord voor woord of in stukken). Dit kan ervoor zorgen dat de FileMaker-client sneller reageert.

    • Uit: het volledige antwoord wordt opgehaald voordat het beschikbaar wordt gemaakt. Dit kan ertoe leiden dat de FileMaker-client niet meer reageert tijdens het wachten op de volledige reactie.

  • Parameters is een tekstexpressie voor een JSON-object dat bestaat uit sleutel-waarde-paren voor aanvullende parameters die worden ondersteund door de modelprovider. Bijvoorbeeld: {"temperatuur": 0,7, "zaad": 42}. Raadpleeg de documentatie van de modelprovider voor sleutelnamen van ondersteunde parameters en hun geldige bereiken.

  • Naam van promptsjabloon specificeert de naam van een aangepaste prompt template die is geconfigureerd met behulp van de scriptstap Promptsjabloon configureren scriptstap. Gebruik deze optie om een extra prompt te ontwerpen om een optimale respons van een AI-model te bereiken.

  • Antwoorddoel geeft het veld of de variabele aan waar het resultaat van de scriptstap moet worden opgeslagen.

  • JavaScript uitvoeren in Web Viewer specificeert JavaScript-code die moet worden uitgevoerd in een doel-webviewer nadat de scriptstap is voltooid. Deze optie is vergelijkbaar met het uitvoeren van de JavaScript in Web Viewer uitvoeren scriptstap als de volgende scriptstap, behalve dat Responsdoel kan worden doorgegeven aan de JavaScript-functie en het antwoord kan worden gestreamd naar de webviewer wanneer de optie Stream is ingeschakeld.

    • Web Viewer geeft de objectnaam van een webviewer in de huidige lay-out.

    • Functienaam is de naam van de JavaScript-functie die in de webviewer moet worden aangeroepen.

Compatibiliteit 

Product Ondersteund
FileMaker Pro Ja
FileMaker Go Ja
FileMaker WebDirect Ja
FileMaker Server Gedeeltelijk
FileMaker Cloud Gedeeltelijk
FileMaker Data API Gedeeltelijk
Custom Web Publishing Gedeeltelijk

Afkomstig uit versie 

22.0

Beschrijving 

Met deze scriptstap kunt u uw database doorzoeken met natuurlijke taal in plaats van rechtstreeks SQL-instructies te schrijven. Het maakt gebruik van een AI-model om een prompt in natuurlijke taal te interpreteren, het databaseschema te analyseren, de juiste SQL-query's te genereren, en nadat deze scriptstap de SQL-query's uitvoert, kan het model in natuurlijke taal reageren met de resultaten. Geen van uw FileMaker-gegevens hoeft naar het model te worden verzonden.

De interactie tussen deze scriptstap en het model volgt meestal de volgende stappen:

  1. Deze scriptstap verzendt de prompt en het relevante databaseschema (DDL gespecificeerd door gegevenstabellen) naar het geconfigureerde AI-model. (Dit geldt ook voor prompts in een optionele promptsjabloon.)

  2. Het model analyseert de prompt en het schema en genereert een of meer SQL-query's die zijn ontworpen om de gevraagde informatie uit de database op te halen.

  3. Deze scriptstap ontvangt de gegenereerde SQL-query's van het model en voert deze uit.

  4. Deze scriptstap stuurt de resultaten van de uitvoering van de SQL-query terug naar het model.

  5. Als het model bepaalt dat de resultaten verder moeten worden verwerkt of verfijnd om de prompt volledig te kunnen verwerken, kunnen er extra SQL-query's worden gegenereerd (waarbij de stappen 2-4 worden herhaald). Hierdoor kunnen complexe query's of gegevens uit meerdere stappen worden opgehaald.

  6. Nadat het model voldoende informatie heeft, genereert het een definitief antwoord op basis van de ontvangen prompt- en SQL-queryresultaten.

  7. Deze scriptstap ontvangt het definitieve antwoord en slaat het op in het Responsdoel.

De optie Actie bepaalt wat er in de verschillende fasen van dit proces naar het Responsdoel wordt teruggestuurd:

Actie Doet het volgende

Query

Voltooit de gehele workflow (stap 1-7), waaronder herhaalde SQL-generatie- en -uitvoeringsronden. Het Responsdoel ontvangt de uiteindelijke respons in natuurlijke taal van het model, die mogelijk de gegevens van de SQL-query bevat die in een conversatieantwoord zijn geïntegreerd.

Query voor alleen gegevens

Voert stap 1-6 uit, maar stopt vóór stap 7. Het Responsdoel ontvangt alleen de gegevens die door de laatste query zijn geretourneerd.

Voor debuggen:

SQL ophalen

Voert stap 1-6 uit, maar stopt vóór stap 7. Het Responsdoel ontvangt de tekst van alle SQL-instructies die door het model worden gegenereerd gedurende de interactie.

Alleen eerste SQL ophalen

Voert alleen stap 1-2 uit en stopt. Het Responsdoel ontvangt alleen de tekst van de eerste SQL-instructie die door het model wordt gegenereerd. Met deze optie kunt u het gebruik van tokens tijdens foutopsporing verminderen.

DDL ophalen

Voert alleen stap 1 uit (de DDL genereren op basis van de optie Gegevenstabellen). Heeft geen interactie met het model. Het Responsdoel ontvangt de tekst van de gegenereerde DDL.

De foutopsporingsacties zijn vooral handig om te begrijpen hoe de scriptstap samenwerkt met het model en uw databaseschema tijdens het testen van uw script.

Opmerkingen 

  • Als u een Promptsjabloonnaam opgeeft, wordt in deze scriptstap de sjabloon gebruikt die is geconfigureerd via de Promptsjabloon configureren scriptstap. Deze sjablonen kunnen constanten gebruiken zoals :schema:, :question:, :sql_query: en :sql_results: die dynamisch worden vervangen tijdens de uitvoering. De beschikbare constanten zijn afhankelijk van het sjabloontype en de huidige Actie.

  • Veldopmerkingen die u invoert in het dialoogvenster Database beheren, worden opgenomen in het databaseschema dat naar het model wordt verzonden. Om het model beter in staat te stellen nuttige SQL-instructies te genereren, kunt u de opmerking gebruiken om het doel van het veld uit te leggen (bijvoorbeeld wanneer een veld een vreemde sleutel is die een record in de gerelateerde tabel identificeert). Zie Aanbevolen procedures voor databaseschema's bij het genereren van DDL- en SQL-query's.

  • Deze scriptstap kan niet bepalen welke ronde van SQL-generatie en -uitvoering de laatste is totdat de uiteindelijke respons in natuurlijke taal van het model is ontvangen.

  • Tijdens de uitvoering van de acties Query of Query voor alleen gegevens ontvangt en slaat deze scriptstap alle SQL-instructies op die door het model zijn gegenereerd en het resultaat van de laatst uitgevoerde SQL-query. Dit zijn dezelfde resultaten die worden geretourneerd door respectievelijk de acties SQL ophalen en Query voor alleen gegevens.

  • Wanneer deze scriptstap wordt uitgevoerd zonder een fout maar er geen relevante informatie wordt gevonden, wordt er een bericht geretourneerd in het Responsdoel en geeft de Get (LaatsteFout) functie fout 0 („No error”) terug.

  • In scripts die worden uitgevoerd door FileMaker Server, FileMaker Cloud, FileMaker Data API, OData API en Custom Web Publishing, wordt de optie JavaScript in Web Viewer uitvoeren niet ondersteund.

Voorbeeld 1 

Configureert een AI-account en gebruikt vervolgens de scriptstap SQL-query uitvoeren via natuurlijke taal om een vraag te stellen over gegevens in de tabel Contactpersonen, die gegevens bevat in de velden Naam en Bedrijf. De scriptstap verzendt het schema voor de tabel Contactpersonen en de prompt "Voor welk bedrijf werkt Alea?" naar het model. Het model genereert de benodigde SQL-query en deze scriptstap voert deze uit. Vervolgens biedt het model een respons in natuurlijke taal die is opgeslagen in het veld Antwoord.

Kopiëren
AI-account configureren [ Accountnaam: "my-account" ; Modelprovider: OpenAI ; API-sleutel: "sk-..." ]

SQL-query uitvoeren via natuurlijke taal [ Accountnaam: "my-account" ; Model: "gpt-4o" ; Prompt: "Voor welk bedrijf werkt Alea?" ; Opgegeven opties: Uit lijst ; Actie: Query ; Gegevenstabellen: Uit lijst ; Tabellen... ; Stream ; Responsdoel: Contacts::Response ]

Mogelijke respons opgeslagen in het veld Contacts::Response:

Alea werkt voor Acme Anvils, Inc.

Voorbeeld 2 

Vraagt de gebruiker om een vraag in een aangepast dialoogvenster, waarbij de standaardknop "Query" is, knop 2 "Alleen gegevens" en knop 3 "Annuleren" is. De vraag wordt opgeslagen in de variabele $$Userprompt. Stelt vervolgens de variabele $options in om de keuze van de gebruiker weer te geven voor de uit te voeren actie: query or query alleen voor gegevens. Als de gebruiker een vraag heeft ingevoerd en niet op Annuleren heeft geklikt, wordt de scriptstap SQL-query uitvoeren op natuurlijke taal uitgevoerd, worden $$Userprompt en $options doorgegeven en worden de resultaten van het model geretourneerd in $$QueryResultData, dat wordt weergegeven in een ander aangepast dialoogvenster. Query's zijn beperkt tot de tabellen Contactpersonen en Werknemers.

Kopiëren
AI-account configureren [ Accountnaam: "my-account" ; Modelprovider: OpenAI ; API-sleutel: "sk-..." ]

Aangepast dialoogvenster tonen [ "Vraag de database:" ; $$UserPrompt ]

Variabele instellen [ $options ; Waarde: 
    Let ( [
        $choice = Get ( LastMessageChoice ) ;
        action_choice = Case ( 
            $choice = 1 ; "query" ;
            $choice = 2 ; "query for data only"
            ) 
        ] ; 
    
        JSONSetElement (
            ""; 
            [ "action" ; action_choice ; JSONString ] ;
            [ "data tables" ; JSONMakeArray ( 
                    "Contacts¶Employees" ;
                    "¶" ; 
                    JSONString 
                ) ;
                JSONArray ] ; 
            [ "stream" ; "off" ; JSONString ]
        )
    )
]

If [ not IsEmpty ( $$UserPrompt ) and $choice ≠ 3 ]

    Voer SQL-query uit met natuurlijke taal [ Accountnaam: "my-account" ; Model: "gpt-4o" ; Prompt: $$UserPrompt ; Opgegeven opties: Door JSON-gegevens ; Responsdoel: $$QueryResultData ]
    
    Aangepast dialoogvenster tonen [ "Gegevensresultaat:" ; $$QueryResultData ]
    
End If

Mogelijke reactie opgeslagen in $$QueryResultData, aangenomen dat de prompt was "Voor welk bedrijf werkt Alea?" En de gebruiker heeft op de knop Alleen gegevens geklikt:

Acme Anvils, Inc.

Voorbeeld 3 

Demonstreert het gebruik van de acties SQL ophalen en DDL ophalen voor foutopsporing. Het script haalt eerst de DDL op die is gegenereerd voor de tabellen Producten en Bestellingen en haalt vervolgens alle SQL-instructies op die door het model zijn gegenereerd voor een specifieke prompt, en slaat ze op in afzonderlijke variabelen voor controle.

Kopiëren
Voer SQL-query uit met natuurlijke taal [ Accountnaam: "my-account" ; Model: "gpt-4o" ; Prompt: " " ; Opgegeven opties: Uit lijst ; Actie: DDL ophalen ; Gegevenstabellen: Op naam ; "Products¶Orders" ; Responsdoel: $$ProductsOrdersDDL ]

Voer SQL-query uit met natuurlijke taal [ Accountnaam: "my-account" ; Model: "gpt-4o" ; Prompt: "Vind de totale waarde van de bestellingen voor product-ID 101" ; Opgegeven opties: Uit lijst ; Actie: SQL ophalen ; Gegevenstabellen: Op naam ; "Products¶Orders" ; Responsdoel: $$GeneratedSQL ]

Aangepast dialoogvenster [ "Informatie over debuggen" ; "Gegenereerde DDL:" & ¶ & $$ProductsOrdersDDL & ¶ & ¶ & "Gegenereerde SQL:" & ¶ & $$GeneratedSQL ]

Mogelijke DDL opgeslagen in $$ProductsOrdersDDL:

Kopiëren
CREATE TABLE "Producten" (
"ProductID" int, /*Primaire sleutel die een product uniek identificeert*/
"ProductName" varchar(255), /*Beschrijvende naam van het product*/
"Price" int, /*Prijs van het product in USD*/
PRIMARY KEY (ProductID)
);

CREATE TABLE "Orders" (
"OrderID" int, /*Primaire sleutel die een bestelling uniek identificeert*/
"ProductID" int, /*Refererende sleutel voor een veel-op-één-relatie met de tabel Producten*/
"Quantity" int, /*Aantal producten in de bestelling*/
PRIMARY KEY (OrderID),
FOREIGN KEY (ProductID) REFERENCES Products(ProductID)
);

Mogelijke SQL-instructie opgeslagen in $$GeneratedSQL:

Kopiëren
SELECT SUM("Hoeveelheid" * "Prijs") AS "TotalValue" FROM "Orders" JOIN "Producten" ON "Bestellingen"."Productid” = "Producten"."Productid", WAARBIJ "Orders"."ProductID" = 101