Outils de modèle SOQL
Qu’est-ce qu’un outil de modèle SOQL ?
Modèle SOQL est le plus léger des trois types du générateur d’outils. Utilisez-le lorsque :
- Vous souhaitez que l’agent récupère des données avec une requête que vous maîtrisez entièrement.
- Vous voulez exposer uniquement certains paramètres, sans laisser le modèle écrire librement du SOQL.
- Le résultat est en lecture seule, sans insertion, modification ni suppression.
- Vous ne souhaitez pas écrire de code Apex.
La requête est fixée à la conception. L’agent choisit l’outil à appeler et les valeurs des paramètres déclarés ; il n’édite pas la définition SOQL, l’objet ou les clauses du modèle. Choisissez des paramètres de valeur précisément définis pour conserver ce périmètre.
Fonctionnement d’un modèle SOQL
-
Vous écrivez le modèle
Une requête SOQL contenant des paramètres nommés sous la forme
{param_name}. -
Le schéma est généré
Le générateur d’outils extrait ces paramètres et produit un schéma JSON les décrivant. Le générateur IA peut enrichir leurs descriptions à partir du contexte de la requête.
-
L’agent reçoit un contrat de paramètres typés
Le modèle voit le nom de l’outil, sa description et sa liste de paramètres. Le SOQL sous-jacent ne lui est pas exposé.
-
Les paramètres sont substitués à l’exécution
À l’appel, la plateforme remplace chaque paramètre par la valeur fournie après échappement des apostrophes. Elle vérifie que la requête commence par SELECT, bloque les mots-clés DML et ajoute une limite de lignes lorsque les règles le prévoient.
-
La requête s’exécute en mode utilisateur
La requête s’exécute en mode utilisateur : CRUD, FLS et partage des enregistrements s’appliquent. Pour un agent API avec Contexte d'exécution = Système, les contrôles CRUD et FLS sont élevés, mais le partage ne l’est pas.
-
L’agent reçoit le résultat
Le résultat est sérialisé en JSON avec
totalSize,recordset une indication si l’affichage a été limité. L’agent le lit pour répondre à l’utilisateur.
Écrire le modèle
Les paramètres sont entre accolades et suivent les règles habituelles des identifiants : une lettre ou un trait de soulignement au début, puis des caractères alphanumériques ou des traits de soulignement. Exemple :
SELECT Id, Name, AccountId, StageName, Amount, CloseDate
FROM Opportunity
WHERE StageName = '{stage}'
AND CloseDate >= {start_date}
AND CloseDate <= {end_date}
ORDER BY CloseDate ASC
À l’exécution, l’agent fournit stage, start_date et end_date. Les apostrophes de chaque valeur sont échappées avant substitution. Le modèle doit conserver la syntaxe adaptée : guillemets simples pour le texte, syntaxe SOQL appropriée pour les dates et nombres.
Éléments utilisables
- Toute requête SELECT valide, y compris les relations parentes et les sous-requêtes sur les relations enfants
- Requêtes d’agrégation avec
COUNT(),SUM()etGROUP BY: la plateforme n’ajoute pas automatiquement de LIMIT aux agrégats ou aux regroupements, pour ne pas tronquer les totaux ou les groupes - Plusieurs paramètres dans une requête, avec un schéma qui impose des valeurs adaptées à leur emplacement ; évitez de donner au modèle des fragments de structure SOQL libres
- Conditions fixes pour délimiter les données accessibles, par exemple
WHERE OwnerId = '{user_id}'
Éléments bloqués
- Les requêtes qui ne sont pas des SELECT : les mots-clés INSERT, UPDATE, DELETE, UPSERT, MERGE et UNDELETE sont refusés à la validation
- Les paramètres attendus mais absents du schéma d’entrée ou sans valeur
- Les modèles dépassant la longueur maximale du champ Modèle SOQL
Champs de la définition de l’outil
| Champ | Obligatoire | Objectif |
|---|---|---|
| Type d'outil | Oui | Définir sur SOQL_Template. |
| Modèle SOQL | Oui | La requête paramétrée avec ses emplacements {param_name}. |
| Catégorie | Verrouillé | Toujours Tool, en lecture seule. Le générateur impose cette catégorie ; un modèle SOQL ne peut pas être une Action. |
| Description | Oui | Permet à l’agent de décider quand appeler l’outil. Précisez le résultat renvoyé et les restrictions déjà intégrées à la requête. |
| Schéma d'entrée (JSON) | Généré automatiquement | Produit à partir des paramètres du modèle. Le générateur IA peut enrichir les descriptions de chaque paramètre ; vous pouvez aussi modifier directement le schéma. |
| Niveau d'outil (obsolète), Chaînes, Nom de l'agent, Objets de contexte | Facultatif | Paramètres habituels de la définition : canaux, restriction à un agent et objets pertinents. L’ancien niveau d’outil est obsolète et ignoré lors de l’exécution. |
Comportement à l’exécution
Échappement et contrôles des requêtes
Chaque valeur passe par l’échappement des apostrophes SOQL avant substitution. La requête obtenue est ensuite contrôlée : elle doit commencer par SELECT et ne contenir aucun des mots-clés DML bloqués. Ces protections n’exemptent pas de définir des paramètres typés et une structure de requête maîtrisée, notamment pour les valeurs qui ne sont pas entre guillemets.
FLS, CRUD et partage
Les requêtes s’exécutent en mode utilisateur. Les objets, champs et lignes inaccessibles à l’utilisateur ne sont pas renvoyés. Il s’agit du même modèle de sécurité que les outils intégrés.
L’exception est un agent avec Contexte d'exécution = Système sur le canal API, dont l’accès aux objets et champs est élevé. Le partage des enregistrements n’est jamais élevé : l’exécution reste with sharing. L’agent peut donc obtenir davantage de colonnes, jamais davantage de lignes grâce à cette élévation.
Limites des résultats
Si le modèle n’a pas de clause LIMIT, la plateforme en ajoute une selon le paramètre Nombre maximal de lignes de requête. Les requêtes d’agrégation et de regroupement en sont exemptées afin de préserver les totaux et groupes. Le résultat sérialisé est aussi limité par Longueur maximale des résultats de requête : les réponses trop volumineuses sont tronquées et signalées pour éviter de saturer le contexte du modèle.
Structure du résultat
L’agent reçoit un objet JSON :
{
"totalSize": 12,
"showing": 12,
"records": [
{ "Id": "006...", "Name": "Acme Renewal", "Amount": 25000 },
...
]
}
Si l’affichage est limité et que l’agent voit moins de lignes que celles obtenues, un champ note indique le nombre renvoyé et le nombre affiché.
Une requête par appel
Chaque appel d’un modèle SOQL exécute exactement une requête. L’outil intégré soql_query possède un mode par lot permettant plusieurs requêtes en un aller-retour ; les modèles SOQL ne le proposent pas. Pour ce besoin, donnez accès à soql_query ou utilisez un outil de classe Apex.
Sécurité et gouvernance
- Les apostrophes des paramètres sont échappées automatiquement. Conservez dans le modèle les guillemets requis par les littéraux de texte ; la plateforme n’ajoute pas ces guillemets.
- Lecture SELECT uniquement. Les mots-clés DML sont refusés à la validation et de nouveau lors de l’exécution.
- Exécution en mode utilisateur. Les autorisations CRUD, FLS et les règles de partage s’appliquent, sous réserve de l’exception de contexte système sur API expliquée ci-dessus.
- Définition fixée à la conception. L’agent ne peut modifier ni la définition SOQL ni le schéma des paramètres. Un administrateur doit mettre à jour la définition de l’outil.
- Piste d’audit. L’appel et son résultat sont enregistrés dans la conversation et ses messages, avec l’outil utilisé et les paramètres transmis.
Quand choisir un modèle SOQL
| Pour… | Utilisez |
|---|---|
| Laisser l’agent composer du SOQL à la demande | L’outil intégré soql_query : consultez la Référence des outils intégrés |
| Limiter une requête à une structure et des paramètres précis | Un outil de modèle SOQL, décrit ici |
| Insérer, modifier ou supprimer des enregistrements | Les outils d’action intégrés, ou un outil de classe Apex pour une logique personnalisée |
| Combiner plusieurs requêtes avec des conditions, ou appeler un autre système | Un outil de classe Apex |
| Charger des lignes CSV dans un objet Salesforce | Un outil de correspondance de fichiers |
Bonnes pratiques
Fixez les limites dans la requête. Intégrez les restrictions de types d’enregistrement, de propriétaire ou de statut dans le modèle plutôt que de compter sur l’agent pour les ajouter.
Donnez des noms explicites aux paramètres. {stage} et {close_date_after} sont plus clairs pour le modèle que {p1} et {p2}. Ces noms figurent dans le schéma qu’il lit.
Incluez les champs nécessaires à la réponse. L’agent ne voit que ce que renvoie SELECT. Si une question probable est « Qui en est propriétaire ? », ajoutez Owner.Name dès maintenant.
Ajoutez un LIMIT explicite pour les résultats ciblés. La limite automatique est un filet de sécurité. Si dix lignes suffisent, indiquez-le dans le modèle.
Testez avant de rendre l’outil disponible. Le générateur permet d’exécuter le modèle avec des valeurs d’exemple et d’examiner la requête substituée, les résultats et les avertissements de validation.
Questions fréquentes
Non. Ces outils sont en lecture seule. Les mots-clés INSERT, UPDATE, DELETE, UPSERT, MERGE et UNDELETE sont refusés à la validation, et l’exécution utilise un chemin réservé aux SELECT. Pour écrire des données, utilisez les actions intégrées ou un outil de classe Apex.
Non. Les apostrophes de chaque valeur sont échappées avant substitution. En revanche, conservez les guillemets simples autour des paramètres de texte dans le modèle, comme '{stage}'. La plateforme échappe les valeurs mais n’ajoute pas les guillemets. Les dates et nombres doivent conserver leur syntaxe SOQL appropriée.
Non. Le modèle reçoit le nom de l’outil, sa description et le schéma des paramètres. Le SOQL sous-jacent fait partie de la définition de l’outil et reste dans Salesforce.
La plateforme ajoute un plafond selon Nombre maximal de lignes de requête lorsqu’une requête ordinaire ne contient pas déjà LIMIT. Elle tronque aussi le résultat sérialisé selon Longueur maximale des résultats de requête si nécessaire. Une note signale la limitation d’affichage à l’agent, qui peut alors proposer de préciser la requête.
Oui, il peut appeler plusieurs outils dans un tour, mais chaque invocation de modèle SOQL exécute une seule requête. Pour regrouper plusieurs requêtes dans un appel, utilisez le mode par lot de soql_query.
Oui. Les requêtes s’exécutent en mode utilisateur avec les autorisations CRUD, FLS et les règles de partage, comme les outils intégrés de lecture. L’exception de contexte système sur API décrite ci-dessus élève l’accès aux objets et champs, sans élargir le partage des enregistrements.
Oui. Le générateur produit un schéma de base à partir des paramètres, que vous pouvez enrichir avec des types, listes de valeurs, descriptions et indicateurs obligatoires. Un schéma précis aide l’agent à appeler correctement l’outil.
Prochaines étapes
Consultez la Référence des outils intégrés pour les outils fournis par la plateforme, ou Comprendre les champs de contexte pour choisir les données ajoutées automatiquement aux conversations.