Utför SQL-fråga på naturligt språk

Skickar en prompt på naturligt språk samt ett databasschema till en modell, som skickar tillbaka en SQL-fråga för att få ett resultat från den databas som ska användas i svaret.

Tillval 

  • Kontonamn är ett textuttryck för AI-kontot som det här scriptsteget ska använda. Använd Scriptsteget Konfigurera AI-konto i den aktuella filen för att konfigurera kontot och tilldela det namnet när som helst innan scriptsteget körs.

  • Modell är namnet på den textgenereringsmodell som ska användas. Ange modellnamnet som ett textuttryck. Information om vilka modeller som stöds finns i Tekniska specifikationer för FileMaker.

  • Prompt är ett textuttryck för den begäran eller fråga på naturligt språk som ska skickas till modellen.

  • Angivna alternativ avgör hur de andra alternativen för det här scriptsteget konfigureras.

    • Från lista: Konfigurera alternativen individuellt med hjälp av inställningarna nedan.

    • Med JSON-data: Konfigurera följande alternativ genom att tillhandahålla ett JSON-objekt. Det här alternativet är användbart för att ställa in värden dynamiskt. JSON-objektet måste innehålla par av nyckel–värde som motsvarar alternativen för scriptsteget och deras värden. Nycklarna för de alternativ som stöds är dessa:

      • åtgärd: strängvärde motsvarande önskad åtgärd: "fråga", "fråga endast efter data", "get sql", "hämta endast första sql", "get ddl".

      • datatabeller: En JSON-matris med strängar där varje sträng motsvarar namnet på en tabell vars schema ska inkluderas. Till exempel: ["Kontakter", "Adresser"].

      • stream: Strängvarde för alternativet Stream ("på" eller "av").

      Till exempel:

      Kopiera
      {
          "åtgärd" : "get sql",
          "datatabeller" : [ "Produkter", "Fakturor" ],
          "stream" : "av"
      }
  • Åtgärd anger typen av svar som ska hämtas från modellen.

    • Fråga: Returnerar modellens slutliga svar till användarens prompt på naturligt språk.

    • Fråga endast efter data: Returnerar endast de data som hämtas av modellens senaste SQL-fråga som utförts av det här scriptsteget.

    • Get SQL: Returnerar alla SQL-uttryck som genererats av modellen under hela interaktionen.

    • Hämta endast första SQL: Returnerar endast den första SQL-satsen som genererats av modellen.

    • Get DDL: Returnerar databasschemat (i Data Definition Language) som det här scriptsteget genererar och skickar det till modellen.

  • Datatabeller anger hur du vill ange databasschema för tabeller till modellen. Endast schemat för de angivna tabellerna skickas.

    • Från lista: Välj specifika tabeller från en lista.

    • Utifrån namn: Ange en lista med tabellnamn som ett textuttryck. Separera flera tabellnamn med vagnreturer.

    • Utifrån DDL: Tillhandahåll ett anpassat DDL-textuttryck. På så sätt kan du kontrollera exakt vilken schemainformation som skickas till modellen.

  • I Tabeller väljer du tabeller när Datatabeller är Från lista.

  • Stream bestämmer hur svaret levereras när Åtgärd är Fråga.

    • På: Svaret hämtas och levereras inkrementellt (ord för ord eller i bitar). Det kan göra att FileMaker-klienten upplevs svara snabbare.

    • Av: Hela svaret hämtas innan det görs tillgängligt. Det kan innebär att FileMaker-klienten upplevs inte svara i väntan på det fullständiga svaret.

  • Parametrar är ett textuttryck för ett JSON-objekt som består av par av nyckel–värde för ytterligare parametrar som stöds av modelleverantören. Till exempel: {"temperatur": 0,7, "frö": 42}. Se modelleverantörens dokumentation för nyckelnamn på de parametrar som stöds och giltiga intervall.

  • Promptmallens namn anger namnet på en anpassad promptmall som konfigurerats med Scriptsteget Konfigurera promptmall. Använd det här alternativet om du vill utforma en ytterligare prompt för att uppnå ett optimalt svar från en AI-modell.

  • Mål för svar anger det fält eller den variabel där scriptstegets resultat ska lagras.

  • Utför JavaScript i webbvisaren anger att JavaScript-koden ska köras i en Webbvisare när scriptsteget har slutförts. Det här alternativet liknar att köra scriptsteget Scriptsteget Utför JavaScript i webbvisaren som nästa scriptsteg, förutom att svaret kan skickas till JavaScript-funktionen och svaret kan streamas till webbvisaren när alternativet Stream är .

    • Webbvisare anger objektnamnet på en webbvisare i den aktuella layouten.

    • Funktionsnamn är namnet på den JavaScript-funktion som ska anropas i webbvisaren.

Kompatibilitet 

Produkt Stöds
FileMaker Pro Ja
FileMaker Go Ja
FileMaker WebDirect Ja
FileMaker Server Delvis
FileMaker Cloud Delvis
FileMaker Data API Delvis
Anpassad webbpublicering Delvis

Ursprungsversion 

22.0

Beskrivning 

Med det här scriptsteget kan du ställa frågor till din databas med naturligt språk i stället för att skriva SQL-uttryck direkt. Det använder en AI-modell för att tolka en prompt på naturligt språk, analysera databasschemat, generera lämpliga SQL-frågor, och sedan scriptsteget har kört SQL-frågorna kan modellen svara på naturligt språk i resultatet. Inga av FileMaker-data behöver skickas till modellen.

Interaktionen mellan det här scriptsteget och modellen följer vanligtvis följande steg:

  1. Scriptsteget skickar en Prompt och det relevanta databasschemat (DDL specificerat av Datatabeller) till konfigurerad Modell (AI). (Detta inkluderar promptar som tillhandahålls i en valfri promptmall.)

  2. Modellen analyserar prompten och schemat och genererar en eller flera SQL-frågor som är utformade för att hämta den begärda informationen från databasen.

  3. Det här scriptsteget tar emot de genererade SQL-frågorna från modellen och kör dem.

  4. Det här scriptsteget skickar resultatet av SQL-frågekörningen tillbaka till modellen.

  5. Om modellen bedömer att resultaten kräver ytterligare bearbetning eller förfining för att fullt ut besvara prompten kan den generera ytterligare SQL-frågor (då upprepas steg 2–4). Det möjliggör komplexa frågor eller datahämtning i flera steg.

  6. När modellen har tillräcklig information genererar den ett slutgiltigt svar baserat på prompten och det resultat den fått på SQL-frågorna.

  7. Det här scriptsteget tar emot det slutliga svaret och lagrar det i Mål för svar.

Alternativet Åtgärd avgör vad som returneras till Mål för svar vid olika steg i processen:

Åtgärd ... ger följande resultat

Fråga

Slutför hela arbetsflödet (steg 1–7), inklusive upprepade omgångar av att generera SQL-frågor och köra dem. Mål för svar får modellens slutliga svar på naturligt språk, vilket kan inkludera data från SQL-frågan integrerad i ett konversationssvar.

Fråga endast efter data

Utför steg 1–6 men stannar före steg 7. Mål för svar får endast de data som returnerades av den senaste frågan.

För felsökning:

Get SQL

Utför steg 1–6 men stannar före steg 7. Mål för svar tar emot texten i alla SQL-uttryck som genererats av modellen under hela interaktionen.

Hämta endast första SQL

Utför endast steg 1–2 och stannar sedan. Mål för svar får endast texten i det första SQL-uttrycket som genererats av modellen. Det här alternativet hjälper till att minska användningen av token vid felsökning.

Get DDL

Utför endast steg 1 (genererar DDL baserat på alternativet Datatabeller). Interagerar inte med modellen. Mål för svar tar emot texten för genererad DDL.

Felsökningsåtgärderna är främst användbara för att förstå hur scriptsteget interagerar med modellen och ditt databasschema medan du testar scriptet.

Kommentarer 

  • Om du anger Promptmallens namn använder scriptsteget den mall som konfigurerats via Scriptsteget Konfigurera promptmall. De här mallarna använder konstanter som :schema:, :question:, :sql_query: och :sql_results: som ersätts dynamiskt under körning. Vilka konstanter som är tillgängliga beror på typen av mall och aktuell Åtgärd.

  • Fältkommentarer som du anger i dialogrutan Hantera databas inkluderas med det databasschema som skickas till modellen. För att förbättra modellens förmåga att generera användbara SQL-uttryck kan du använda kommentaren för att förklara syftet med fältet (till exempel när ett fält är en främmande nyckel som identifierar en post i relaterad tabell). Mer information finns i Bästa praxis för databasschema i generering av DDL och SQL-frågor

  • Det här scriptsteget kan inte avgöra vilken omgång av generering och körning av SQL-frågor som är den sista tills det slutliga svaret på naturligt språk tas emot från modellen.

  • När åtgärderna Fråga eller Fråga endast efter data körs tar det här scriptsteget emot och lagrar alla SQL-uttryck som genererats av modellen och resultatet av den senast utförda SQL-frågan. Det här är samma resultat som returneras av åtgärderna Get SQL respektive Fråga endast efter data.

  • När det här scriptsteg körs utan fel men ingen relevant information hittas returneras ett meddelande i Mål för svar, och Funktionen Get ( SenasteFel ) returnerar fel 0 ("Inget fel").

  • I script som körs av FileMaker Server, FileMaker Cloud, FileMaker Data API, OData API och Egen webbpublicering stöds inte alternativet Utför JavaScript i webbvisaren.

Exempel 1 

Konfigurerar ett AI-konto och använder sedan scriptsteget Utför SQL-fråga på naturligt språk för att ställa en fråga om data i tabellen Kontakter, som har data i fälten Namn och Företag. Scriptsteget skickar schemat för tabellen Kontakter och prompten "På vilket företag jobbar Alea?” till modellen. Modellen genererar den nödvändiga SQL-frågan och scriptsteget kör den, därefter lämnar modellen ett svar på naturligt språk som lagras i fältet Svar.

Kopiera
Konfigurera AI-konto [ Kontonamn: "mitt-konto" ; Modelleverantör: OpenAI ; API-nyckel: "sk-..." ]

Utför SQL-fråga på naturligt språk [ Kontonamn: "mitt-konto" ; Modell: "gpt-4o" ; Prompt: "På vilket företag jobbar Alea?" ; Angivna alternativ: Från lista ; Åtgärd: Fråga ; Datatabeller: Från lista ; Tabeller... ; Stream ; Mål för svar: Kontakter::Svar ]

Möjligt svar som lagras i fältet Kontakter::Svar:

Alea jobbar för Acme Anvils, Inc.

Exempel 2 

Ber användaren om en fråga i en anpassad dialogruta – där standardknappen är "Fråga", knapp 2 är "Endast data" och knapp 3 är "Avbryt" – och frågan lagras i variabeln $$AnvändarensPrompt. Ställer sedan in variabeln $alternativ så att den återspeglar användarens val för åtgärd att utföra: fråga eller fråga endast efter data. Om användaren angav en fråga och inte klickar på Avbryt körs scriptsteget Utför SQL-fråga på naturligt språk, skickar in $$AnvändarensPrompt och $alternativ och returnerar sedan resultaten från modellen i $$FrågeresultatData, som visas i en annan anpassad dialogruta. Frågor är begränsade till tabellerna Kontakter och Anställda.

Kopiera
Konfigurera AI-konto [ Kontonamn: "mitt-konto" ; Modelleverantör: OpenAI ; API-nyckel: "sk-..." ]

Visa anpassad dialogruta [ "Fråga databasen:" ; $$AnvändarensPrompt ]

Ange variabel [ $alternativ ; Value: 
    Let ( [
        $choice = Get ( SenasteMeddelandeval ) ;
        action_choice = Case ( 
            $choice = 1 ; "fråga" ;
            $choice = 2 ; "fråga endast efter data"
            ) 
        ] ; 
    
        JSONSetElement (
            ""; 
            [ "åtgärd" ; action_choice ; JSONString ] ;
            [ "datatabeller" ; JSONMakeArray ( 
                    "Kontakter¶Anställda" ;
                    "¶" ; 
                    JSONString 
                ) ;
                JSONArray ] ; 
            [ "stream" ; "av" ; JSONString ]
        )
    )
]

If [ not IsEmpty ( $$AnvändarensPrompt ) and $choice ≠ 3 ]

    Utför SQL-fråga på naturligt språk [ Kontonamn: "mitt-konto" ; Modell: "gpt-4o" ; Prompt: $$AnvändarensPrompt ; Angivna alternativ: Med JSON-data ; Mål för svar: $$FrågeresultatData ]
    
    Visa anpassad dialogruta [ "Dataresultat:" ; $$FrågeresultatData ]
    
End If

Möjligt svar som lagras i $$FrågeresultatData, förutsatt att prompten var "På vilket företag jobbar Alea?" och användaren klickade på knappen Endast data:

Acme Anvils, Inc.

Exempel 3 

Demonstration av åtgärder för felsökning med Get SQL och Get DDL. Scriptet hämtar först DDL som genererats för tabellerna Produkter och Beställningar, och hämtar sedan alla SQL-uttryck som genererats av modellen för en specifik prompt och lagrar var och en i separata variabler för granskning.

Kopiera
Utför SQL-fråga på naturligt språk [ Kontonamn: "mitt-konto" ; Modell: "gpt-4o" ; Prompt: " " ; Angivna alternativ: Från lista ; Åtgärd: Get DDL ; Datatabeller: Utifrån namn ; "Produkter¶Beställningar" ; Mål för svar: $$ProdukterBeställningarDDL ]

Utför SQL-fråga på naturligt språk [ Kontonamn: "mitt-konto" ; Modell: "gpt-4o" ; Prompt: "Hitta det totala värdet för beställningar av Produkt-ID 101" ; Angivna alternativ: Från lista ; Åtgärd: Get SQL ; Datatabeller: Utifrån namn ; "Produkter¶Beställningar" ; Mål för svar: $$GenereradSQL ]

Visa anpassad dialogruta [ "Felsökningsinformation" ; "Genererad DDL:" & ¶ & $$ProdukterBeställningarDDL & ¶ & ¶ & "Genererad SQL:" & ¶ & $$GenereradSQL ]

Möjlig DDL som lagras i $$ProdukterBeställningarDDL:

Kopiera
CREATE TABLE "Produkter" (
"ProduktID" int, /*Primär nyckel som unikt identifierar en produkt*/
"Produktnamn" varchar(255), /*Beskrivande namn på produkten*/
"Pris" int, /*Pris på produkten i SEK*/
PRIMARY KEY (ProduktID)
);

CREATE TABLE "Beställningar" (
"OrderID" int, /*Primär nyckel som unikt identifierar en beställning*/
"ProduktID" int, /*Främmande nyckel för många-till-en-relation med tabellen Produkter*/
"Antal" int, /*Antal av produkten i beställningen*/
PRIMARY KEY (OrderID),
FOREIGN KEY (ProduktID) REFERENCES Produkter(ProduktID)
);

Möjligt SQL-uttryck som lagras i $$GenereradSQL:

Kopiera
SELECT SUM("Antal" * "Pris") AS "TotaltVärde" FROM "Beställningar" JOIN "Produkter" ON "Beställningar"."ProduktID" = "Produkter"."ProduktID" WHERE "Beställningar"."ProduktID = 101