Decisions
Posez des questions structurées sur un texte (quelle équipe, quel degré d'agacement, est-ce vrai) et obtenez des réponses au format que vous avez défini plutôt que du texte libre. Pour orienter des tickets, noter des retours clients et vérifier des e-mails ou des formulaires.
Decisions sert aux questions que vous vous posez encore et encore sur le même type de texte : quelle équipe doit traiter ce ticket, à quel point ce client est-il mécontent, cet e-mail demande-t-il un remboursement ? Collez le texte, rédigez les questions, et chaque réponse revient sous la forme que vous avez choisie : l’une de vos options, un niveau sur votre échelle ou une valeur entre faux et vrai. Vous obtenez des réponses sur lesquelles agir, pas des paragraphes à lire.
Pour les réponses à choix et à score, vous voyez le degré de certitude du modèle et la répartition des probabilités entre vos options : vous savez ainsi d’un coup d’œil si la réponse était évidente ou serrée. Decisions s’appuie sur Jev 1.13 de TypeSafe AI, un modèle de décision : au lieu de rédiger du texte, il répond à vos questions sous les formes que vous définissez.
Types de questions
Decisions se trouve dans Apps, sur la carte intitulée Classify, score and check text with structured questions. Une même décision peut poser plusieurs questions sur le même texte, et chaque question est de l’un des trois types suivants :
| Type | Ce que vous rédigez | Ce que vous obtenez |
|---|---|---|
| Choice | Une question et ses options. Chaque option a un nom et une description When it applies (quand elle s’applique). | L’option choisie par le modèle, un indice de confiance et la probabilité de chaque option. |
| Score | Une question et ses niveaux, du plus bas au plus haut, chacun décrit en une phrase. Les niveaux sont numérotés 0, 1, 2, etc. | Le niveau, un score sur cette échelle, par exemple 1.9 / 2, un indice de confiance et la probabilité de chaque niveau. |
| True / false | Un énoncé, avec des critères facultatifs indiquant quand il est vrai et quand il ne l’est pas. | Une valeur de 0 (faux) à 1 (vrai), par exemple 0.97. |
Créer une décision
- Lancer une nouvelle décision
Allez dans Apps et choisissez Decisions. La page liste vos décisions précédentes ; sélectionnez New decision.
- Coller le texte
Sous TEXT, collez ce que vous voulez vérifier : un ticket de support, un avis client, un e-mail, un formulaire envoyé.
- Ajouter vos questions
Sous QUESTIONS, ajoutez une question avec Choice, Score ou True / false.
- Choice. Rédigez la question, par exemple Quelle équipe doit traiter cette demande ? Donnez un nom à chaque option et décrivez When it applies. Add option ajoute une option.
- Score. Rédigez la question, par exemple Quel est le degré d’agacement du client ? Décrivez chaque niveau, du plus bas au plus haut. Add level ajoute un niveau, et les flèches vers le haut et vers le bas permettent de les réordonner.
- True / false. Rédigez l’énoncé, par exemple Le client menace de résilier. Vous pouvez aussi remplir les Criteria, évalués de 0 (faux) à 1 (vrai) : TRUE pour les cas où l’énoncé est vrai (Mentionne une tentative ou un ticket précédent) et FALSE pour ceux où il ne l’est pas.
- Vérifier le modèle
Le panneau MODEL indique le modèle qui va répondre. Jev 1.13 de TypeSafe AI est sélectionné par défaut.
- Lancer la décision
Sélectionnez Run decision. Les réponses s’affichent dans le panneau ANSWERS. Pour tester une autre formulation, modifiez le texte ou les questions et sélectionnez Run again.
Exemple : trier un ticket de support
Voici, traduit en français, le traitement présenté dans la vidéo ci-dessus. L’équipe support de Northwind reçoit un message de ce type de la part d’une cliente, Marta :
Bonjour, j'ai commandé un plaid en mérinos (commande NW-4471) et il n'est
toujours pas arrivé. C'est la deuxième commande chez vous qui se perd. J'envisage
sérieusement de résilier mon abonnement. - Marta
Trois questions à son sujet :
| Question | Type | Options ou niveaux | Réponse |
|---|---|---|---|
| Quelle équipe doit traiter cette demande ? | Choice | facturation : paiements, remboursements et factures. livraison : livraisons, suivi et colis perdus. produit : questions sur nos produits. | livraison, confiance de 100 % |
| Quel est le degré d’agacement du client ? | Score | 0 Calme, 1 Agacé mais courtois, 2 En colère, prêt à partir | En colère, prêt à partir : 1.9 / 2, confiance de 79 % (0 %, 14 % et 86 % pour les trois niveaux) |
| Le client menace de résilier | True / false | Aucun critère | 0.97 |
Chaque réponse débouche sur une action : le ticket part dans la file de l’équipe livraison, et le score d’agacement ainsi que l’indicateur de résiliation le signalent pour une réponse rapide et attentive, avant que Marta ne parte.
Lire les réponses
- Choice. L’option choisie par le modèle, avec un indice de confiance comme 100% confidence, et la probabilité de chaque option sous forme de barre avec un pourcentage. Les barres montrent à quel point la réponse était serrée : une répartition presque égale entre deux options mérite un regard humain, un gagnant net généralement pas.
- Score. Le niveau atteint par le texte, un score sur votre échelle comme 1.9 / 2, un indice de confiance comme 79% confidence, et la probabilité de chaque niveau. Le score peut tomber entre deux niveaux : il est donc utile pour trier, et pas seulement pour étiqueter.
- True / false. Une valeur entre 0 et 1 sur une barre allant de False à True. Plus elle est proche de 1, plus l’énoncé est clairement vrai ; plus elle est proche de 0, plus il est clairement faux.
Décisions enregistrées
Chaque décision est enregistrée avec son texte, ses questions et ses réponses. La page Decisions liste les décisions que vous avez prises dans un tableau avec les colonnes Text, Model, Status et Created, et New decision en lance une nouvelle.
Une décision enregistrée garde la trace exacte de ce qui a été demandé et de ce qui a été répondu, ce qui est utile lorsque quelqu’un demande plus tard pourquoi un ticket a été orienté de telle façon.
Garde-fous et accès
Les décisions suivent les mêmes règles d’espace de travail que le chat :
- Garde-fous. Les garde-fous de votre espace de travail contrôlent le texte, ainsi que chaque question et chaque description, avant que le modèle ne les voie. Selon leur configuration, les informations sensibles sont masquées ou l’exécution est bloquée.
- Accès aux modèles et résidence des données. Les paramètres d’accès aux modèles et de résidence des données de votre espace de travail s’appliquent à Jev comme à tout autre modèle. S’ils l’excluent pour vous, vous ne pouvez pas lancer de décision avec ce modèle.
Depuis l’API
Decisions dispose de ses propres endpoints REST : vous pouvez poser les mêmes questions sur chaque nouveau ticket, avis ou e-mail depuis votre propre code. Tous les chemins sont relatifs à https://api.stickyprompts.com/api/v1, et chaque requête envoie votre clé API comme bearer token dans l’en-tête Authorization. Vous découvrez l’API ? Commencez par le Démarrage rapide.
La clé a besoin des autorisations suivantes (dans l’éditeur de clés de l’application, elles s’appellent Decision Get, Decision Manage et Decision Delete) :
decision_get: lister les modèles de décision, lister et lire vos décisionsdecision_manage: lancer une décisiondecision_delete: supprimer une décision
Decisions n’est pas disponible comme outil MCP ; utilisez les endpoints REST.
Lister les modèles de décision
/api/v1/decision_model Renvoie les modèles de décision sous forme de tableau JSON (extrait) :
[
{
"ID": 1,
"name": "Jev 1.13",
"selectable": true
}
]
Transmettez l’ID du modèle comme decision_model_id. Chaque modèle possède aussi version, powered_by, description et default. Comme pour les modèles de chat, selectable: false signifie que les règles d’accès aux modèles ou de résidence des données de votre espace de travail bloquent ce modèle pour vous, et restriction_reason en donne la raison. Les exemples ci-dessous utilisent 1, l’ID qu’avait Jev 1.13 au moment de la rédaction de cette page ; récupérez-le plutôt que de l’inscrire en dur dans votre code.
Lancer une décision
/api/v1/decision Exécute la décision de façon synchrone (l’appel répond une fois les réponses prêtes) et l’enregistre avec vos autres décisions.
-
decision_model_idinteger obligatoire IDdu modèle, obtenu avecGET /decision_model.-
statestring obligatoire - Le texte à vérifier.
-
questionsobject obligatoire - Au moins une question, chacune sous une clé de votre choix, comme
teamouurgent. Les réponses reviennent sous les mêmes clés.
Chaque question a un type, ses instructions (la question ou l’énoncé) et ses criteria :
type | Dans l’application | criteria |
|---|---|---|
choice | Choice | Obligatoire. Un objet qui associe chaque nom d’option aux cas où elle s’applique. |
score | Score | Obligatoire. Un tableau de descriptions de niveaux, du plus bas au plus haut. Le premier correspond au niveau 0. |
noul | True / false | Facultatif. Un objet avec une clé true (quand l’énoncé est vrai), une clé false (quand il ne l’est pas), ou les deux. Aucune autre clé n’est acceptée. |
Cette requête pose une question à choix et une question vrai / faux :
curl -X POST https://api.stickyprompts.com/api/v1/decision \
-H "Authorization: Bearer $STICKY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"decision_model_id": 1,
"state": "My parcel never arrived and the tracking link is broken. Second time this month!",
"questions": {
"team": {
"type": "choice",
"instructions": "Which team should handle this?",
"criteria": {
"billing": "Payments and refunds",
"shipping": "Delivery and tracking"
}
},
"urgent": {
"type": "noul",
"instructions": "The customer needs a fast reply"
}
}
}'import os
import requests
BASE = "https://api.stickyprompts.com/api/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['STICKY_API_KEY']}"}
r = requests.post(
f"{BASE}/decision",
headers=HEADERS,
json={
"decision_model_id": 1,
"state": "My parcel never arrived and the tracking link is broken. Second time this month!",
"questions": {
"team": {
"type": "choice",
"instructions": "Which team should handle this?",
"criteria": {
"billing": "Payments and refunds",
"shipping": "Delivery and tracking",
},
},
"urgent": {
"type": "noul",
"instructions": "The customer needs a fast reply",
},
},
},
)
r.raise_for_status()
decision = r.json()
if decision["status"] != "done":
raise RuntimeError(decision["error"])
answers = decision["answers"]
print(answers["team"]["choice"], answers["urgent"]["noul"])const BASE = "https://api.stickyprompts.com/api/v1";
const headers = { Authorization: `Bearer ${process.env.STICKY_API_KEY}` };
const res = await fetch(`${BASE}/decision`, {
method: "POST",
headers: { ...headers, "Content-Type": "application/json" },
body: JSON.stringify({
decision_model_id: 1,
state: "My parcel never arrived and the tracking link is broken. Second time this month!",
questions: {
team: {
type: "choice",
instructions: "Which team should handle this?",
criteria: {
billing: "Payments and refunds",
shipping: "Delivery and tracking",
},
},
urgent: {
type: "noul",
instructions: "The customer needs a fast reply",
},
},
}),
});
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
const decision = await res.json();
if (decision.status !== "done") throw new Error(decision.error);
console.log(decision.answers.team.choice, decision.answers.urgent.noul);La réponse est un 201 contenant la décision enregistrée. En voici un extrait, avec un ID et un slug donnés à titre d’exemple :
{
"ID": 27,
"slug": "q4m8x2kd",
"decision_model_id": 1,
"state": "My parcel never arrived and the tracking link is broken. Second time this month!",
"status": "done",
"error": "",
"answers": {
"team": {
"type": "choice",
"choice": "shipping",
"confidence": 1,
"probabilities": { "billing": 0, "shipping": 1 }
},
"urgent": {
"type": "noul",
"noul": 0.87
}
}
}
La réponse renvoie aussi questions telles qu’elles ont été envoyées au modèle (après un éventuel masquage par les garde-fous), le decision_model intégré, et resolved_model, la version exacte du modèle qui a répondu.
Questions à score
Une question à score envoie ses niveaux sous forme de tableau, du plus bas au plus haut :
{
"frustration": {
"type": "score",
"instructions": "How frustrated is the customer?",
"criteria": ["Calm", "Frustrated but civil", "Angry, ready to leave"]
}
}
Sa réponse contient le score, une confidence, une legend qui associe chaque numéro de niveau à votre description, et les probabilities de chaque niveau, indexées par numéro de niveau. La structure ressemble à ceci (valeurs données à titre d’exemple) :
{
"frustration": {
"type": "score",
"score": 1,
"confidence": 1,
"legend": { "0": "Calm", "1": "Frustrated but civil", "2": "Angry, ready to leave" },
"probabilities": { "0": 0, "1": 1, "2": 0 }
}
}
En cas d’échec d’une décision
400:stateest absent, une question n’est pas valide (pas d’instructions, unchoiceou unscoresanscriteria, des critèresnoulavec d’autres clés quetrueetfalse, ou untypeinconnu), oudecision_model_idne correspond à aucun modèle.400avec uncode: un garde-fou a bloqué le texte ou une question.403: les règles d’accès aux modèles de votre espace de travail restreignent ce modèle.429: le quota ou la limite de l’offre de l’espace de travail est atteint. Consultez Erreurs, pagination et quotas.
Lister, lire et supprimer des décisions
/api/v1/decision Liste vos décisions, de la plus récente à la plus ancienne. Prend en charge page et size, ainsi que status (processing, done ou error) pour filtrer. Le total figure dans l’en-tête X-Total-Count ; consultez la section pagination.
/api/v1/decision/:id Une décision, par ID ou par slug, avec son texte, ses questions et ses réponses. Une décision inexistante ou qui ne vous appartient pas renvoie 404 {"error":"Decision not found"}.
/api/v1/decision/:id Supprime une décision à partir de son ID numérique. Renvoie 204, y compris lorsque rien ne correspond.
Idées
- Orientez les tickets. Une question Choice avec vos équipes comme options envoie chaque ticket dans la bonne file.
- Notez le ressenti des avis clients. Une question Score allant de Mécontent à Ravi transforme une pile d’avis en un chiffre que vous pouvez trier et représenter en graphique.
- Vérifiez une condition dans des e-mails et des formulaires. Un énoncé True / false comme L’e-mail demande un remboursement ou Le formulaire contient un numéro de commande repère ceux qui demandent une action.
- Posez les trois à la fois. Une même décision peut orienter, noter et vérifier le même texte, comme dans l’exemple ci-dessus.