Générer une réponse à partir du modèle

Obtient une réponse texte à partir d’un modèle d’IA en fonction d’un prompt utilisateur.

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 utilisateur est une expression textuelle pour la requête en langage naturel ou la question à envoyer au modèle, qui est généralement faite par l'utilisateur.

  • Mode agentique contrôle la façon dont cette action de script gère les interactions automatisées avec les outils :

    • Activé : permet une interaction automatisée en plusieurs étapes où le modèle peut appeler les outils à plusieurs reprises jusqu'à ce qu'il atteigne un résultat final.

    • Désactivé : effectue une seule interaction et s'arrête après le premier appel à l'outil sans exécuter l'appel à l'outil ou renvoyer un résultat dans Réponse, permettant une manipulation et un débogage manuels. Si aucun appel à outil n'est effectué, renvoie le résultat du modèle dans Réponse.

  • Réponse spécifie la rubrique ou la variable dans laquelle le résultat de l'action de script doit être stocké. Si vous spécifiez une rubrique et sélectionnez Flux, la rubrique doit utiliser le modèle actuel.

  • Instructions est une expression de texte qui fournit un contexte ou des directives comportementales supplémentaires pour le modèle.

  • Messages spécifie la rubrique ou la variable qui contient l'historique du message pour fournir le contexte du modèle des interactions précédentes. Les messages se présentent comme un tableau d'objets JSON. Chaque objet JSON doit contenir des paires clé-valeur pour le texte du message (content) et qui a fourni le contenu (role) : soit l'utilisateur ("user"), soit le modèle ("assistant"). Par exemple :

    Copier

      {
        "content": "Quelle température fait-il à Cupertino ?",
        "role": "user"
      },
      {
        "content": "La température à Cupertino est de 22 °C.",
        "role": "assistant"
      }
    ]
  • Enregistrer l'historique des messages dans spécifie la variable où l'action de script stocke l'historique des messages. Le format est le même que pour Messages, et la paire de messages pour l'exécution actuelle de cette action de script est ajoutée à la fin.

    Si vous souhaitez que l'historique des messages persiste après la fin du script actuel, utilisez une variable globale (qui persiste jusqu'à la fin de la session client FileMaker) ou stockez la valeur de la variable dans une rubrique. Consultez la section Utilisation de variables ou de l'action de script Définir rubrique.

  • Décompte des messages dans l'historique est une expression numérique qui contrôle le nombre de paires de messages précédentes (question utilisateur et réponse de l'assistant) à inclure dans la variable spécifiée par Enregistrer l'historique des messages dans.

  • Température contrôle le caractère aléatoire ou créatif de la réponse d'un modèle à un prompt. Les valeurs faibles produisent des résultats plus déterministes et factuels. Des valeurs élevées génèrent des résultats plus créatifs, inattendus ou moins cohérents. Consultez la documentation du fournisseur de modèles pour connaître les plages de valeurs valides pour le modèle spécifique que vous utilisez.

  • Définitions des outils spécifie un tableau JSON d'outils disponibles que le modèle peut appeler pendant le traitement. Consultez « Définitions des outils » ci-dessous.

  • Appels des outils à partir du modèle spécifie où stocker les informations sur les appels d'outils effectués par le modèle. Cela peut être utile pour le débogage ou pour auditer l'utilisation des outils par le modèle.

  • Flux contrôle la façon dont la réponse est fournie :

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

  • 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 réponse peut être transmise à la fonction JavaScript et 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 Oui
FileMaker Cloud Oui
FileMaker Data API Oui
Publication Web personnalisée Oui

Provient de la version 

22.0

Description 

Cette action de script facilite l'interaction en plusieurs étapes entre votre application personnalisée et les modèles d'IA, permettant au modèle d'accéder et de manipuler les données via des appels d'outils au besoin. L'action de script fonctionne dans deux modes distincts basés sur l'option Mode agentique, chacun offrant différents niveaux d'automatisation et de contrôle sur l'interaction.

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 utilisateur, toutes les Instructions, le contexte de conversation des Messages et les Définitions des outils disponibles au Modèle configuré.

  2. Le modèle analyse le prompt et détermine s'il peut fournir une réponse directe ou s'il doit utiliser des outils pour recueillir des informations supplémentaires ou effectuer des actions.

  3. Si des outils sont nécessaires, le modèle génère des appels à outils avec des paramètres appropriés en fonction des définitions des outils disponibles et de la demande de l'utilisateur.

  4. Cette action de script reçoit les appels d'outils du modèle et le client FileMaker les exécute. L'exécution de l'outil peut inclure les outils prédéfinis, tels que les requêtes SQL ou les appels à vos propres fonctions personnalisées.

  5. Cette action de script renvoie les résultats de l'exécution de l'outil au modèle, en lui fournissant les données ou la confirmation dont il a besoin pour continuer le traitement.

  6. Si le modèle détermine que des outils supplémentaires sont nécessaires pour traiter complètement le prompt, il peut générer plus d'appels d'outils (répétition des étapes 3 à 5). Ce processus itératif se poursuit jusqu'à ce que le modèle dispose d'informations suffisantes pour fournir une réponse complète.

  7. Une fois que le modèle a terminé toutes les interactions nécessaires, il génère une réponse finale qui intègre les résultats des outils et répond au prompt utilisateur d'origine.

  8. Cette action de script reçoit la réponse finale, la stocke dans la cible Réponse spécifiée et met éventuellement à jour l'historique des interactions dans Enregistrer l'historique des messages dans.

L'option Mode agentique détermine la façon dont l'interaction est gérée :

  • Activé : permet une interaction automatisée en plusieurs étapes avec les outils, exécutant automatiquement le flux de travail complet (étapes 1 à 8). Lorsque le modèle d'IA détermine que des outils sont nécessaires pour répondre à la requête, il appelle automatiquement les outils appropriés et continue le traitement jusqu'à atteindre un résultat final. Le modèle peut effectuer plusieurs séries d'appels d'outils au besoin, chaque tour s'appuyant sur les résultats des exécutions d'outils précédentes. Ce mode est adapté aux tâches complexes qui nécessitent plusieurs interactions avec les outils, telles que l'analyse de données sur plusieurs tables, la génération de rapports ou l'exécution d'opérations en plusieurs étapes.

  • Désactivé : effectue une seule interaction avec le modèle d'IA, en exécutant uniquement les étapes 1 à 3 et en s'arrêtant après le premier appel à outil. Si le modèle détermine que les outils sont nécessaires, l'action de script s'arrête et renvoie les informations de l'appel de l'outil dans Appels des outils à partir du modèle plutôt que d'exécuter les outils automatiquement. Ce mode est utile pour déboguer les interactions avec les outils, comprendre quels outils le modèle veut utiliser ou pour profiter d'un contrôle manuel sur l'exécution de l'outil. Vous pouvez examiner les appels d'outils, puis décider de les exécuter manuellement ou de modifier l'approche.

Le flux d'informations entre cette action de script et le modèle garantit que les données sensibles restent sécurisées tout en activant la fonctionnalité d'IA. Le modèle ne reçoit que les informations explicitement fournies par le biais de prompts, d'instructions et de résultats d'outils. Il n'a pas d'accès direct à votre base de données ou à vos fichiers FileMaker. Les appels d'outils sont exécutés dans l'environnement contrôlé de FileMaker, ce qui vous permet de conserver un contrôle total sur l'accès aux données et les opérations via les comptes et les privilèges FileMaker tout en tirant parti des capacités d'analyse et de raisonnement du modèle.

Définitions des outils

L'utilisation d'outils (également appelée appel de fonction par certains fournisseurs de modèles) permet au modèle de rappeler votre application FileMaker Pro pour faire ou fournir quelque chose dont le modèle a besoin pour générer sa réponse finale. En mode agentique, le modèle peut appeler plusieurs outils à plusieurs reprises. Dans l'option Définitions des outils, vous pouvez définir les outils suivants :

  • execute_sql : un outil prédéfini qui exécute la requête SQL spécifiée, capable d'exécuter une instruction SQL transmise par le modèle de la même manière que l'action de script Exécuter une requête SQL en langage naturel.

  • retrieve_image : un outil prédéfini qui récupère une image à partir de la rubrique Conteneur spécifiée par une requête SQL, un nom de table et un nom de rubrique Conteneur.

  • Fonctions personnalisées : toutes les fonctions personnalisées définies dans votre fichier. Consultez la section Utilisation de fonctions personnalisées.

Les définitions des outils sont spécifiées à l'aide du format JSON requis par le fournisseur de modèles. En général, la définition s'apparente à un tableau d'objets où chacun spécifie le nom d'un outil, une description détaillée de ce que fait l'outil et des règles que le modèle doit suivre lors de son utilisation, et pour chaque paramètre d'entrée, son nom, son type de données et sa description. Les descriptions doivent être aussi détaillées que nécessaire pour que le modèle utilise l'outil de manière fiable. Si vous utilisez les outils prédéfinis, commencez par utiliser les définitions fournies ci-dessous. Si nécessaire, modifiez-les pour obtenir des résultats optimaux pour les modèles que vous utilisez.

Pour vous aider à déboguer vos définitions d'outils, définissez l'option Appels des outils à partir du modèle sur une rubrique ou une variable qui permet de voir comment et si le modèle a appelé les outils. Cela peut aider à obtenir ce que vous pourriez avoir besoin d'ajouter ou de modifier dans les descriptions que vous fournissez dans vos définitions d'outils.

Pour le format JSON spécifique utilisé pour les définitions et les appels d'outils, consultez la documentation du fournisseur de modèles, comme Anthropic, Cohere et OpenAI.

execute_sql

Nom de la fonction

execute_sql

 

Description de la fonction

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.\r 2. Perform separate SQL instead of one nested SQL.\r 3. 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.

 

Nom du paramètre

sql_query

 

Description du paramètre

Generate a fully formed SQL query based on following rules:\r 1. Enclose all table and field names in double quotes.\r 2. Format dates as \"DATE 'YYYY-MM-DD'\", times as \"TIME 'HH:MM:SS'\" and timestamps as \"TIMESTAMP 'YYYY-MM-DD HH:MM:SS'\".\r 3. 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

Ajoutez le schéma que le modèle doit utiliser à la fin de cette description. Fournissez le schéma en langage de définition de données (DDL) tel que renvoyé par la fonction GetTableDDL pour les occurrences de table que vous souhaitez inclure.

 

Renvoie : le résultat de la requête SQL sous forme de chaîne.

retrieve_image

Nom de la fonction

retrieve_image

 

Description de la fonction

This function MUST be called whenever the user asks for any image-related data, such as photos, profile pictures, avatars, or any visual representation stored in the database. Use this to fetch image data by constructing an SQL query that returns the ROWID (unquoted) of the relevant row. Always prefer this over other functions for image retrieval.

 

Nom du paramètre 1

sql_query

 

Description du paramètre 1

An SQL query used to locate the ROWID of the row containing the desired image. Example: SELECT ROWID FROM \"Contacts\" WHERE \"Last Name\" = 'Smith'. \r\r Only utilize the following database schema:\r

Ajoutez le schéma que vous souhaitez que le modèle utilise à la fin de cette description. Fournissez le schéma en langage de définition de données (DDL) tel que renvoyé par la fonction GetTableDDL pour les occurrences de table que vous souhaitez inclure.

 

Nom du paramètre 2

table

 

Description du paramètre 2

Nom de la table contenant la rubrique d'image.

 

Nom du paramètre 3

field

 

Description du paramètre 3

La rubrique Conteneur dans laquelle l'image est stockée.

 

Renvoie : données JSON au format suivant, contenant l'image sous forme de chaîne codée en Base64.

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

Fonctions personnalisées

Suivez ces directives pour les définitions d'outils permettant d'appeler des fonctions personnalisées :

  • Pour la fonction :

    • Dans la clé name, utilisez le nom exact de la fonction personnalisée tel que défini dans la boîte de dialogue Modifier la fonction personnalisée.

    • Dans la clé description, fournissez une description détaillée de ce que fait la fonction personnalisée et des règles que le modèle doit suivre lors de son utilisation.

  • Pour les paramètres :

    • Définissez exactement le même nombre de paramètres et dans le même ordre que les paramètres définis dans la boîte de dialogue Modifier la fonction personnalisée. Les noms des paramètres n'ont pas besoin d'être les mêmes.

    • Dans la clé description, spécifiez une description détaillée de ce que le modèle doit fournir dans le paramètre.

    • Définissez la valeur de la clé type sur « string » (les paramètres sont toujours traités comme du texte).

Remarques 

  • Les messages d'erreur courants incluent « Aucun appel d'outil n'existe pour le prompt » lorsque le modèle ne peut pas déterminer les outils appropriés à utiliser, et « Fonction introuvable » lorsqu'une définition d'outil fait référence à une fonction personnalisée qui n'existe pas.

Exemple 1 

Configure un compte d'IA, accède au modèle Contacts, puis affiche une boîte de dialogue pour que l'utilisateur puisse saisir une question. L'action de script Générer une réponse à partir du modèle envoie ensuite le prompt et l'historique des messages récents au modèle et diffuse le résultat dans la rubrique Réponse. Pour une simple interaction question-réponse comme celle-ci, Mode agentique n'est pas sélectionné. Pour maintenir le contexte avec le modèle pendant la session client FileMaker en cours, l'action de script stocke les 10 messages les plus récents dans la variable globale $$Messages via l'option Enregistrer l'historique des messages dans. Grâce à l'option Messages, l'action de script envoie la valeur de la variable $$Messages au modèle lorsque ce script est exécuté ultérieurement dans la même session. Étant donné que l'option Définitions des outils n'est pas utilisée, le modèle ne pourra pas répondre aux questions concernant vos données.

Copier
Configurer le compte IA [ Nom du compte: "mon-compte" ; Fournisseur de modèle: OpenAI ; Clé API : Global::Clé_API ] 

Activer modèle [ "Contacts" (Contacts) ]

Ouvrir boîte dial. person. [ "Saisir une question" ; $PromptUtilisateur ]

Générer une réponse à partir du modèle [ Nom de compte: "mon-compte" ; Modèle: Global::NomModèle ; Prompt utilisateur: $PromptUtilisateur ; Réponse: Contacts::Réponse ; Messages: $$Messages ; Enregistrer l'historique des messages dans : $$Messages ; Décompte des messages dans l'historique : 10 ; Flux ]

Exemple 2 

Configure un compte d'IA, accède au modèle Contacts, puis envoie un prompt demandant des données du tableau Contacts au modèle, qui utilise des outils pour générer une réponse. Étant donné que jusqu'à 10 messages sont enregistrés via $$Messages dans la rubrique globale Messages, le contexte est préservé dans les sessions client FileMaker.

Copier
Configurer le compte IA [ Nom du compte: "mon-compte" ; Fournisseur de modèle: OpenAI ; Clé API : Global::Clé_API ] 

Activer modèle [ "Contacts" (Contacts) ]

Définir variable [ $Instructions ; Valeur: "Tu es un assistant pratique qui peut rechercher des informations de base de données. Tu dois toujours fournir des réponses claires et formatées." ]

Définir variable [ $PromptUtilisateur ; "Combien de contacts avons-nous chez Acme Anvils, et quels sont leurs noms et adresses e-mail ? Ajoute un astérisque après les contacts qui se trouvent dans une ville où nous avons une agence commerciale." ]

Générer une réponse à partir du modèle [ Nom de compte: "mon-compte" ; Modèle: Global::NomModèle ; Prompt utilisateur: $PromptUtilisateur ; Réponse: Contacts::Réponse ; Appels des outils à partir du modèle: $$AppelsOutils ; Instructions: $Instructions ; Messages: Global::Messages ; Enregistrer l'historique des messages dans : $$Messages ; Décompte des messages dans l'historique : 10 ; Définitions des outils: Global::DéfinitionsOutils ; Flux ]

Définir rubrique [ Global::Messages ; $$Messages ]

La rubrique DéfinitionsOutils contient les éléments suivants au format JSON pour le fournisseur de modèle OpenAI :

Copier
[
  {
    "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.\r 2. Perform separate SQL instead of one nested SQL.\r 3. 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.\r 2. Format dates as \"DATE 'YYYY-MM-DD'\", times as \"TIME 'HH:MM:SS'\" and timestamps as \"TIMESTAMP 'YYYY-MM-DD HH:MM:SS'\".\r 3. 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": "Vérifie si notre société détient une agence commerciale dans une ville spécifiée. Si tel est le cas, cette fonction renvoie « oui » ; sinon, elle renvoie « non ».",
        "name": "VilleAvecAgenceCommerciale",
        "parameters": {
          "properties": {
            "city": {
              "description": "Nom d'une ville",
              "type": "string"
            }
          },
          "type": "object",
          "required": ["city"]
        }
      },
      "type": "function"
  }
]

Pour execute_sql, utilisez la description de la fonction et la description des paramètres fournis ci-dessus. Dans le paramètre sql_query, utilisez la description fournie ci-dessus suivie du schéma du tableau Contacts.

La fonction personnalisée VilleAvecAgenceCommerciale renvoie « oui » ou « non » selon que la ville spécifiée dispose d'une agence.

Réponse possible diffusée dans la rubrique Réponse :

Copier
Nous avons 4 contacts chez Acme Anvils. Voici leurs noms, leurs adresses e-mail et un astérisque indiquant s'ils se trouvent dans une ville avec une agence commerciale :

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

La variable $$AppelsOutils contient plusieurs appels pour execute_sql et VilleAvecAgenceCommerciale.

Copier
[
  {
    "index": 0,
    "id": "call_e7...",
    "type": "function",
    "function": {
      "name": "execute_sql",
      "arguments": "{\"sql_query\":\"SELECT COUNT(*) FROM \\\"Contacts\\\" WHERE \\\"Société\\\" = 'Acme Anvils'\"}"
    }
  },
  {
    "index": 0,
    "id": "call_o0...",
    "type": "function",
    "function": {
      "name": "execute_sql",
      "arguments": "{\"sql_query\":\"SELECT \\\"Prénom\\\", \\\"Nom\\\", \\\"E-mail\\\", \\\"Ville\\\" FROM \\\"Contacts\\\" WHERE \\\"Société\\\" = 'Acme Anvils'\"}"
    }
  },
  {
    "index": 0,
    "id": "call_ev...",
    "type": "function",
    "function": {
      "name": "VilleAvecAgenceCommerciale",
      "arguments": "{\"city\": \"Onitsha\"}"
    }
  },
  {
    "index": 1,
    "id": "call_IC...",
    "type": "function",
    "function": {
      "name": "VilleAvecAgenceCommerciale",
      "arguments": "{\"city\": \"Berlin\"}"
    }
  },
  {
    "index": 2,
    "id": "call_Pw...",
    "type": "function",
    "function": {
      "name": "VilleAvecAgenceCommerciale",
      "arguments": "{\"city\": \"Saint-Malo\"}"
    }
  },
  {
    "index": 3,
    "id": "call_Uy...",
    "type": "function",
    "function": {
      "name": "VilleAvecAgenceCommerciale",
      "arguments": "{\"city\": \"Wanneroo\"}"
    }
  }
]