Generera svar från modell

Hämtar ett textsvar från en AI-modell med angiven användarprompt.

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.

  • Användarprompt är ett textuttryck för den begäran eller fråga på naturligt språk som ska skickas till modellen, vilket vanligtvis är användarens begäran.

  • Agentläge styr hur det här scriptsteget hanterar automatiserade verktygsinteraktioner:

    • På: Möjliggör automatiserad flerstegsinteraktion där modellen kan anropa verktyg upprepade gånger tills det slutliga resultatet uppnås.

    • Av: Utför en enda interaktion och stannar efter det första verktygsanropet utan att utföra verktygsanropet eller returnera ett resultat i Svar, vilket möjliggör manuell hantering och felsökning. Om inga verktygsanrop görs returneras resultatet från modellen i Svar.

  • Svar anger det fält eller den variabel där scriptstegets resultat ska lagras. Om du anger ett fält och väljer Stream måste fältet finnas i den aktuella layouten.

  • Anvisningar är ett textuttryck som ger ytterligare kontext eller riktlinjer för modellen.

  • Meddelanden anger det fältet eller den variabel som innehåller meddelandehistorik för att ge modellen kontexten från tidigare interaktioner. Meddelandena är en matris med JSON-objekt. Varje JSON-objekt måste innehålla par av nyckel–värde för meddelandetexten (content) och vem som tillhandahöll innehållet (role), antingen användaren ("user") eller modellen ("assistant"). Till exempel:

    Kopiera

      {
        "content": "Vad är det för temperatur i Cupertino?",
        "role": "user"
      },
      {
        "content": "Temperaturen i Cupertino är 22 grader Celsius.",
        "role": "assistant"
      }
    ]
  • Spara meddelandehistorik i anger den variabel där scriptsteget lagrar meddelandehistoriken. Formatet är detsamma som för Meddelanden, och meddelandeparet för den aktuella körningen av scriptsteget läggs till i slutet.

    Om du vill att meddelandehistoriken ska finnas kvar när det aktuella scriptet har avslutats ska du använda en global variabel (som finns var tills FileMaker-klientsessionen avslutas) eller lagra variabelns värde i ett fält. Mer information finns i Använda variabler och Scriptsteget Tilldela fält.

  • Antal i meddelandehistorik är ett numeriskt uttryck som styr antalet tidigare meddelandepar (användarfråga och assistentsvar) som ska inkluderas i den variabel som anges av Spara meddelandehistorik i.

  • Temperatur styr slumpmässigheten eller kreativiteten hos en modells svar på en prompt. Låga värden ger mer deterministiska, faktiska resultat. Höga värden genererar mer kreativa, oväntade eller mindre sammanhängande resultat. Se modelleverantörens dokumentation för giltiga intervall för den specifika modell du använder.

  • Verktygsdefinitioner anger en JSON-matris med tillgängliga verktyg som modellen kan anropa under bearbetningen. Mer information finns i ”Verktygsdefinitioner” nedan.

  • Verktygsanrop från modell anger var information om verktygsanrop som gjorts av modellen ska lagras. Detta kan vara användbart för felsökning eller för att granska modellens användning av verktyg.

  • Stream styr hur svaret levereras:

    • 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.

  • 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 Ja
FileMaker Cloud Ja
FileMaker Data API Ja
Anpassad webbpublicering Ja

Ursprungsversion 

22.0

Beskrivning 

Det här scriptsteget underlättar flerstegsinteraktion mellan den anpassade appen och AI-modeller, vilket gör att modellen vid behov kan komma åt och manipulera data via verktygsanrop. Scriptsteget verkar i två olika lägen baserat på alternativet Agentläge, som vart och ett ger olika nivåer av automatisering och kontroll över interaktionen.

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

  1. Scriptsteget skickar Användarprompt, eventuella Anvisningar, konversationskontext från Meddelanden och tillgängliga Verktygsdefinitioner till konfigurerad Modell.

  2. Modellen analyserar prompten och avgör om den kan ge ett svar direkt eller om den behöver använda verktyg för att samla in ytterligare information eller utföra åtgärder.

  3. Om verktyg behövs genererar modellen verktygsanrop med lämpliga parametrar baserat på tillgängliga verktygsdefinitioner och användarens begäran.

  4. Scriptsteget tar emot verktygsanrop från modellen och FileMaker-klienten utför dem. Använda verktyg kan omfatta de fördefinierade verktygen, som SQL-frågor eller anrop till egna anpassade funktioner.

  5. Scriptsteget skickar resultatet av verktygskörningen tillbaka till modellen, vilket ger modellen de data eller den bekräftelse som behövs för att fortsätta bearbetningen.

  6. Om modellen bedömer att ytterligare verktyg behövs för att fullt ut svara på prompten kan den generera fler verktygsanrop (och upprepa steg 3–5). Denna iterativa process fortsätter tills modellen har tillräcklig information för att ge ett uttömmande svar.

  7. När modellen har slutfört alla nödvändiga verktygsinteraktioner genererar den ett slutligt svar som innehåller verktygsresultaten och som besvarar den ursprungliga användarprompten.

  8. Scriptsteget tar emot det slutliga svaret, lagrar det i det angivna målet Svar och uppdaterar eventuellt historiken för interaktioner i Spara meddelandehistorik i.

Alternativet Agentläge avgör hur interaktionen hanteras:

  • På: Möjliggör automatisk flerstegsinteraktion med verktyg och utför hela arbetsflödet (steg 1–8) automatiskt. När AI-modellen bedömer att verktyg krävs för att uppfylla begäran, anropar den automatiskt lämpliga verktyg och fortsätter bearbetningen tills det slutliga resultatet uppnås. Modellen kan vid behov göra flera rundor av verktygsanrop, där varje runda bygger på resultatet från tidigare verktygskörningar. Det här läget är till för komplexa uppgifter som kräver flera verktygsinteraktioner, till exempel att analysera data från flera tabeller, generera rapporter eller utföra flerstegsåtgärder.

  • Av: Utför en enda interaktion med AI-modellen, och utför då endast steg 1–3 och stoppar efter det första verktygsanropet. Om modellen bedömer att det krävs verktyg stannar scriptsteget och returnerar verktygsanropsinformationen i Verktygsanrop från modell i stället för att köra verktygen automatiskt. Det här läget är användbart om du vill felsöka verktygsinteraktioner, förstå vilka verktyg modellen vill använda eller när du vill ha manuell kontroll över verktygskörningen. Du kan granska verktygsanropen och sedan bestämma om du vill köra dem manuellt eller ändra tillvägagångssättet.

Informationsflödet mellan det här scriptsteget och modellen säkerställer att känsliga data förblir skyddade samtidigt som AI-funktioner kan användas. Modellen får endast den information som uttryckligen ges via promptar, anvisningar och verktygsresultat – den har inte direkt åtkomst till din FileMaker-databas eller dina filer. Verktygsanrop utförs i den kontrollerade FileMaker-miljön, så att du kan behålla full kontroll över dataåtkomst och åtgärder via FileMaker-konton och behörigheter samtidigt som du utnyttjar modellens analytiska och resonerande funktioner.

Verktygsdefinitioner

Användning av verktyg (kallas även funktionsanrop av vissa modelleverantörer) gör att modellen kan anropa FileMaker Pro-appen för att göra eller tillhandahålla något som modellen behöver för att generera sitt slutliga svar. I agentläge kan modellen anropa flera verktyg upprepade gånger tills det är klart. I alternativet Verktygsdefinitioner kan du definiera följande verktyg:

  • execute_sql: Ett fördefinierat verktyg som utför den angivna SQL-frågan och kan köra en SQL-sats som skickats av modellen på samma sätt som scriptsteget Scriptsteget Utför SQL-fråga på naturligt språk.

  • retrieve_image: Ett fördefinierat verktyg som hämtar en bild från containerfältet som anges av en SQL-fråga, ett tabellnamn och ett containerfältnamn.

  • Anpassade funktioner: Alla anpassade funktioner som definierats i filen. Mer information finns i Använda anpassade funktioner.

Verktygsdefinitioner anges med det JSON-format som krävs av modelleverantören. I allmänhet är definitionen en matris med objekt där vart och ett anger ett verktygs namn, en detaljerad beskrivning av vad verktyget gör och vilka regler modellen ska följa när den använder det, och för varje indataparameter, dess namn, datatyp och beskrivning. Beskrivningarna ska vara så detaljerade som behövs för att modellen ska kunna använda verktyget på ett tillförlitligt sätt. Om du använder de fördefinierade verktygen börjar du med att använda definitionerna nedan. Vid behov kan du ändra dem för att uppnå optimala resultat för de modeller du använder.

För att hjälpa dig att felsöka dina verktygsdefinitioner kan du ställa in alternativet Verktygsanrop från modell till ett fält eller en variabel där du kan se hur eller om modellen anropade verktygen. Det kan hjälpa till att avslöja vad du kan behöva lägga till eller ändra i de beskrivningar du tillhandahåller i verktygsdefinitionerna.

Information om det specifika JSON-format som används för verktygsdefinitioner och verktygsanrop finns i modelleverantörens dokumentation, till exempel Anthropic, Cohere och OpenAI.

execute_sql

Funktionsnamn

execute_sql

 

Funktionsbeskrivning

Respond to the user’s questions by executing the appropriate SQL query using this function. Strictly follow these rules:\r 1. The input should be a fully formed SQL query.\r2. Perform separate SQL instead of one nested SQL.\r3. Escaping special characters for SQL query.\r 4. If the result of the toolCall is a raw string that reads 'empty' or 'null', the answer should contain the quoted raw string, which is case sensitive.\r 5. Convert the user’s request into an SQL query using standard SQL syntax only. Ensure that table names and field names match exactly as they appear in the database schema.

 

Parameternamn

sql_query

 

Parameterbeskrivning

Generate a fully formed SQL query based on following rules:\r 1. Enclose all table and field names in double quotes.\r2. Format dates as \"DATE 'YYYY-MM-DD'\", times as \"TIME 'HH:MM:SS'\" and timestamps as \"TIMESTAMP 'YYYY-MM-DD HH:MM:SS'\".\r3. Return queries in plain text (not JSON).\r 4. Use \"FETCH FIRST n ROW ONLY\" instead of \"LIMIT\".\r 5. Support single queries only.\r 6. No semicolon is needed at the end of SQL query.\r 7. Don't generate nested SQL queries.\r 8. Use \"LIKE\" instead of \"ILIKE\".\r 9. Keep all comparisons case-sensitive.\r 10. Do not include fields that are not included in the question.\r 11. Use unquoted ROWID in queries.\r 12. Only utilize the following database schema:\r

Lägg till det schema du vill att modellen ska använda i slutet av den här beskrivningen. Ange schemat i DDL (Data Definition Language) som returnerats av Funktionen GetTableDDL för de tabellförekomster du vill inkludera.

 

Returnerar: Resultatet av SQL-frågan som en sträng.

retrieve_image

Funktionsnamn

retrieve_image

 

Funktionsbeskrivning

Den här funktionen MÅSTE anropas när användaren begär bildrelaterade data, till exempel foton, profilbilder, avatarer eller någon annan visuell representation som lagras i databasen. Använd det här alternativet för att hämta bilddata genom att konstruera en SQL-fråga som returnerar RADID (ociterat) för den relevanta raden. Välj alltid det här alternativet framför andra funktioner för bildhämtning.

 

Parameter 1 name

sql_query

 

Parameter 1 description

En SQL-fråga som används för att hitta ROWID för den rad som innehåller den önskade bilden. Exempel: SELECT ROWID FROM \"Kontakter\" WHERE \"Efternamn\" = 'Svensson'. \r\r Använd endast följande databasschema:\r

Lägg till det schema du vill att modellen ska använda i slutet av den här beskrivningen. Ange schemat i DDL (Data Definition Language) som returnerats av Funktionen GetTableDDL för de tabellförekomster du vill inkludera.

 

Parameter 2 name

tabell

 

Parameter 2 description

Namnet på den tabell som innehåller bildfältet.

 

Parameter 3 name

fält

 

Parameter 3 description

Containerfältet där bilden lagras.

 

Returnerar: JSON-data i följande format, inklusive bilden som en Base64-kodad sträng.

Kopiera
[
  {
    "data": "/9j/4AAQ...//2Q=="
  }
]

Egna funktioner

Följ de här riktlinjerna för verktygsdefinitioner för att anropa anpassade funktioner:

  • För funktionen:

    • I nyckeln name ska du använda exakt samma namn på den anpassade funktionen som definierats i dialogrutan Ändra egen funktion.

    • I nyckeln description ska du ange en detaljerad beskrivning av vad den anpassade funktionen gör och vilka regler modellen ska följa när den används.

  • För parametrar:

    • Definiera exakt samma antal parametrar och i samma ordning som de parametrar som definierats i dialogrutan Ändra egen funktion. Parameternamnen behöver inte vara desamma.

    • I nyckeln description ska du ange en detaljerad beskrivning av vad modellen måste tillhandahålla i parametern.

    • Ställ in värdet för nyckeln type till "string" (parametrarna behandlas alltid som text).

Kommentarer 

  • Några vanliga felmeddelanden är "Inget verktygsanrop finns för prompten" när modellen inte kan avgöra vilka verktyg som ska användas, och "Funktionen hittades inte" när en verktygsdefinition refererar till en anpassad funktion som inte finns.

Exempel 1 

Konfigurerar ett AI-konto, går till layouten Kontakter och visar sedan en dialogruta där användaren kan ange en fråga. Scriptsteget Generera svar från modell skickar sedan prompten och den senaste meddelandehistoriken till modellen och streamar resultatet till fältet Svar. För en enkel fråga-och-svar-interaktion som den här har Agentläge inte valts. Om du vill behålla kontexten hos modellen under den aktuella FileMaker-klientsessionen lagrar scriptsteget de senaste 10 meddelandena i den globala variabeln $$Meddelanden via alternativet Spara meddelandehistorik i. Via alternativet Meddelanden skickar scriptsteget värdet för variabeln $$Meddelanden till modellen när scriptet körs senare i samma session. Eftersom alternativet Verktygsdefinitioner inte används kan modellen inte svara på frågor om dina data.

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

Gå till Layout [ "Kontakter" (Kontakter) ]

Visa anpassad dialogruta [ "Skriv en fråga" ; $Användarprompt ]

Generera svar från modell [ Kontonamn: "mitt-konto" ; Modell: Global::Modellnamn ; Användarprompt: $Användarprompt ; Svar: Kontakter::Svar ; Meddelanden: $$Meddelanden ; Spara meddelandehistorik i: $$Meddelanden ; Antal i meddelandehistorik: 10 ; Stream ]

Exempel 2 

Konfigurerar ett AI-konto, går till layouten Kontakter och skickar sedan en prompt om data i tabellen Kontakter till modellen, som använder verktyg för att generera ett svar. Eftersom upp till 10 meddelanden sparas via $$Meddelanden i det globala fältet Meddelanden bevaras kontexten mellan olika FileMaker-klientsessioner.

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

Gå till Layout [ "Kontakter" (Kontakter) ]

Ange variabel [ $Anvisningar ; Värde: "Du är en hjälpsam assistent som kan svara på frågor om information i databasen. Ge alltid tydliga, formaterade svar." ]

Ange variabel [ $Användarprompt ; "Hur många kontakter har vi från Acme Anvils, vad heter de och vilken e-postadress har de? Lägg till en asterisk efter de kontakter som finns i en stad där vi har ett försäljningskontor. ]

Generera svar från modell [ Kontonamn: "mitt-konto" ; Modell: Global::Modellnamn ; Användarprompt: $Användarprompt ; Svar: Kontakter::Svar ; Verktygsanrop från modell: $$Verktygsanrop ; Anvisningar: $Anvisningar ; Meddelanden: Global::Meddelanden ; Spara meddelandehistorik i: $$Meddelanden ; Antal i meddelandehistorik: 10 ; Verktygsdefinitioner: Global::Verktygsdefinitioner ; Stream ]

Tilldela fält [ Global::Meddelande ; $$Meddelanden ]

Fältet Verktygsdefinitioner innehåller följande i JSON-formatet för modelleverantören OpenAI:

Kopiera
[
  {
    "function": {
      "description": "Respond to the user’s questions by executing the appropriate SQL query using this function. Strictly follow these rules:\r 1. The input should be a fully formed SQL query.\r2. Perform separate SQL instead of one nested SQL.\r3. Escaping special characters for SQL query.\r 4. If the result of the toolCall is a raw string that reads 'empty' or 'null', the answer should contain the quoted raw string, which is case sensitive.\r 5. Convert the user’s request into an SQL query using standard SQL syntax only. Ensure that table names and field names match exactly as they appear in the database schema.",
        "name": "execute_sql",
        "parameters": {
          "properties": {
            "sql_query": {
              "description": "Generate a fully formed SQL query based on following rules:\r 1. Enclose all table and field names in double quotes.\r2. Format dates as \"DATE 'YYYY-MM-DD'\", times as \"TIME 'HH:MM:SS'\" and timestamps as \"TIMESTAMP 'YYYY-MM-DD HH:MM:SS'\".\r3. Return queries in plain text (not JSON).\r 4. Use \"FETCH FIRST n ROW ONLY\" instead of \"LIMIT\".\r 5. Support single queries only.\r 6. No semicolon is needed at the end of SQL query.\r 7. Don't generate nested SQL queries.\r 8. Use \"LIKE\" instead of \"ILIKE\".\r 9. Keep all comparisons case-sensitive.\r 10. Do not include fields that are not included in the question.\r 11. Use unquoted ROWID in queries.\r 12. Only utilize the following database schema:\rCREATE TABLE \"Contacts\" (\r\"First Name\" varchar(255),\r\"Last Name\" varchar(255),\r\"Email\" varchar(255),\r\r\"City\" varchar(255),\r\"Company\" varchar(255)\r);\r\r",
              "type": "string"
            }
          },
          "type": "object",
          "required": ["sql_query"]
        }
      },
      "type": "function"
  },
  {
    "function": {
      "description": "kontrollera om vårt företag har ett försäljningskontor i en viss stad. I så fall returnerar funktionen 'ja'; i annat fall returneras 'nej'.",
        "name": "SäljkontorIStaden",
        "parameters": {
          "properties": {
            "stad": {
              "description": "Namn på en stad",
              "type": "string"
            }
          },
          "type": "object",
          "required": ["city"]
        }
      },
      "type": "function"
  }
]

För execute_sql använder du funktionsbeskrivningen och parameterbeskrivningen ovan. I parametern sql_query använder du beskrivningen ovan följt av schemat för tabellen Kontakter.

Den anpassade funktionen SäljkontorIStaden returnerar "ja" eller "nej" beroende på om den angivna staden har ett försäljningskontor.

Möjligt svar som streamas till fältet Svar:

Kopiera
Vi har 4 kontakter från Acme Anvils. Här är deras namn, e-postadresser och en asterisk som indikerar om det finns ett försäljningskontor i samma stad:

1. Alea Marks, aleamarks165@example.com
2. Kelly Holden, kellyholden1361@example.com *
3. Kelsey Cummings, kelseycummings1396@example.com
4. Kuame Savage, kuamesavage7146@example.com

Variabeln $$Verktygsanrop innehåller flera anrop till execute_sql och SäljkontorIStaden.

Kopiera
[
  {
    "index": 0,
    "id": "call_e7...",
    "type": "function",
    "function": {
      "name": "execute_sql",
      "arguments": "{\"sql_query\":\"SELECT COUNT(*) FROM \\\"Kontakter\\\" WHERE \\\"Företag\\\" = 'Acme Anvils'\"}"
    }
  },
  {
    "index": 0,
    "id": "call_o0...",
    "type": "function",
    "function": {
      "name": "execute_sql",
      "arguments": "{\"sql_query\":\"SELECT \\\"Förnamn\\\", \\\"Efternamn\\\", \\\"E-post\\\", \\\"Stad\\\" FROM \\\"Kontakter\\\" WHERE \\\"Företag\\\" = 'Acme Anvils'\"}"
    }
  },
  {
    "index": 0,
    "id": "call_ev...",
    "type": "function",
    "function": {
      "name": "SäljkontorIStaden",
      "arguments": "{\"stad\": \"Onitsha\"}"
    }
  },
  {
    "index": 1,
    "id": "call_IC...",
    "type": "function",
    "function": {
      "name": "SäljkontorIStaden",
      "arguments": "{\"stad\": \"Berlin\"}"
    }
  },
  {
    "index": 2,
    "id": "call_Pw...",
    "type": "function",
    "function": {
      "name": "SäljkontorIStaden",
      "arguments": "{\"stad\": \"Saint-Malo\"}"
    }
  },
  {
    "index": 3,
    "id": "call_Uy...",
    "type": "function",
    "function": {
      "name": "SäljkontorIStaden",
      "arguments": "{\"stad\": \"Wanneroo\"}"
    }
  }
]