Decisions

Fai domande strutturate su un testo (quale team, quanto è irritato il cliente, è vero?) e ricevi risposte tipizzate invece di paragrafi. Per smistare ticket, valutare feedback e controllare email o moduli.

9 min di lettura · Aggiornato il 28 settembre 2026

Decisions serve per le domande che ti poni continuamente sullo stesso tipo di testo: quale team deve gestire questo ticket, quanto è arrabbiato questo cliente, questa email chiede un rimborso? Incolla il testo, scrivi le domande e ogni risposta torna nella forma che hai definito: una delle tue opzioni, un livello della tua scala oppure un valore tra falso e vero. Ottieni risposte su cui agire, non paragrafi da leggere.

Le risposte a scelta e a punteggio mostrano quanto è sicuro il modello e come si distribuisce la probabilità tra le tue opzioni, così capisci al volo se la risposta era netta o in bilico. Decisions funziona con Jev 1.13 di TypeSafe AI, un modello decisionale: invece di scrivere testo, risponde alle tue domande nelle forme che definisci tu.

Tipi di domanda

Decisions si trova in Apps, nella scheda con la scritta Classify, score and check text with structured questions. Una decisione può contenere più domande sullo stesso testo e ogni domanda è di uno di questi tre tipi:

TipoCosa scriviCosa ricevi
ChoiceUna domanda e le sue opzioni. Ogni opzione ha un nome e una descrizione When it applies (quando si applica).L’opzione scelta dal modello, un livello di confidenza e la probabilità di ogni opzione.
ScoreUna domanda e i suoi livelli, dal più basso al più alto, ognuno descritto in una frase. I livelli sono numerati 0, 1, 2 e così via.Il livello, un punteggio su quella scala, ad esempio 1.9 / 2, un livello di confidenza e la probabilità di ogni livello.
True / falseUn’affermazione, più criteri facoltativi per quando è vera e quando non lo è.Un valore da 0 (falso) a 1 (vero), ad esempio 0.97.

Prendere una decisione

  1. Avvia una nuova decisione

    Vai su Apps e scegli Decisions. La pagina elenca le tue decisioni passate; seleziona New decision.

  2. Incolla il testo

    In TEXT, incolla ciò che vuoi controllare: un ticket di assistenza, una recensione, un’email, l’invio di un modulo.

  3. Aggiungi le domande

    In QUESTIONS, aggiungi una domanda con Choice, Score o True / false.

    • Choice. Scrivi la domanda, ad esempio Which team should handle this? (quale team deve occuparsene?). Dai un nome a ogni opzione e descrivi When it applies. Add option aggiunge un’altra opzione.
    • Score. Scrivi la domanda, ad esempio How frustrated is the customer? (quanto è irritato il cliente?). Descrivi ogni livello, dal più basso al più alto. Add level aggiunge un livello e le frecce su e giù li riordinano.
    • True / false. Scrivi l’affermazione, ad esempio The customer is threatening to cancel (il cliente minaccia di disdire). Se vuoi, compila i Criteria, valutati da 0 (falso) a 1 (vero): TRUE per quando l’affermazione è vera (Mentions a prior attempt or ticket, cioè cita un tentativo o un ticket precedente) e FALSE per quando non lo è.
  4. Controlla il modello

    Il pannello MODEL mostra il modello che risponderà. Il predefinito è Jev 1.13 di TypeSafe AI.

  5. Eseguila

    Seleziona Run decision. Le risposte compaiono nel pannello ANSWERS. Per provare una formulazione diversa, modifica il testo o le domande e seleziona Run again.

Esempio: smistare un ticket di assistenza

È l’esecuzione che vedi nella registrazione qui sopra. Il team di assistenza di Northwind riceve un messaggio come questo da una cliente, Marta (la sua coperta in merino non è mai arrivata, è il secondo ordine che va perso e sta pensando di disdire l’abbonamento):

Hi, I ordered a merino throw (order NW-4471) and it still hasn't arrived.
This is the second order from you that has gone missing. I'm seriously
thinking about cancelling my membership. - Marta

Tre domande su questo messaggio:

DomandaTipoOpzioni o livelliRisposta
Which team should handle this? (quale team deve occuparsene?)Choicebilling: Payments, refunds and invoices. shipping: Delivery, tracking and missing parcels. product: Questions about our products.shipping, confidenza del 100%
How frustrated is the customer? (quanto è irritato il cliente?)Score0 Calm, 1 Frustrated but civil, 2 Angry, ready to leaveAngry, ready to leave: 1.9 / 2, confidenza del 79% (0%, 14% e 86% per i tre livelli)
The customer is threatening to cancel (il cliente minaccia di disdire)True / falseNessun criterio0.97

Ogni risposta si traduce in un’azione: il ticket va nella coda delle spedizioni, mentre il punteggio di irritazione e il segnale di disdetta lo contrassegnano per una risposta rapida e attenta, prima che Marta se ne vada.

Leggere le risposte

  • Choice. L’opzione scelta dal modello, con un livello di confidenza come 100% confidence, e la probabilità di ogni opzione sotto forma di barra con una percentuale. Le barre mostrano quanto era in bilico la risposta: una divisione quasi alla pari tra due opzioni merita un controllo umano, un vincitore netto di solito no.
  • Score. Il livello in cui è finito il testo, un punteggio sulla tua scala come 1.9 / 2, un livello di confidenza come 79% confidence e la probabilità di ogni livello. Il punteggio può cadere tra due livelli, quindi è utile sia per ordinare sia per etichettare.
  • True / false. Un valore tra 0 e 1 su una barra che va da False a True. Più è vicino a 1, più l’affermazione è chiaramente vera; più è vicino a 0, più è chiaramente falsa.

Decisioni salvate

Ogni decisione viene salvata con il suo testo, le sue domande e le sue risposte. La pagina Decisions elenca le decisioni che hai preso in una tabella con le colonne Text, Model, Status e Created, e New decision ne avvia un’altra.

Una decisione salvata registra esattamente cosa è stato chiesto e cosa è stato risposto: utile quando, in seguito, qualcuno chiede perché un ticket è finito proprio lì.

Guardrail e accesso

Le decisioni seguono le stesse regole del workspace che valgono per la chat:

  • Guardrail. I guardrail del tuo workspace controllano il testo e ogni domanda e descrizione prima che il modello li veda. A seconda di come sono configurati, i dati sensibili vengono oscurati oppure l’esecuzione viene bloccata.
  • Accesso ai modelli e residenza dei dati. Le impostazioni di accesso ai modelli e di residenza dei dati del tuo workspace si applicano a Jev come a qualsiasi altro modello. Se lo escludono per te, non puoi eseguire una decisione con questo modello.

Dall’API

Decisions ha i suoi endpoint REST, così puoi porre le stesse domande su ogni nuovo ticket, recensione o email dal tuo codice. Tutti i percorsi sono relativi a https://api.stickyprompts.com/api/v1 e ogni richiesta invia la tua chiave API come bearer token nell’header Authorization. Non hai mai usato l’API? Parti dall’Avvio rapido.

La chiave ha bisogno di queste autorizzazioni (nell’editor delle chiavi dell’app si chiamano Decision Get, Decision Manage e Decision Delete):

Decisions non è disponibile come strumento MCP; usa gli endpoint REST.

Elencare i modelli decisionali

GET /api/v1/decision_model
Autorizzazione decision_get

Restituisce i modelli decisionali come array JSON (abbreviato):

[
  {
    "ID": 1,
    "name": "Jev 1.13",
    "selectable": true
  }
]

Passa l’ID del modello come decision_model_id. Ogni modello ha anche version, powered_by, description e default. Come per i modelli di chat, selectable: false significa che le regole di accesso ai modelli o di residenza dei dati del tuo workspace bloccano il modello per te, e restriction_reason ne spiega il motivo. Gli esempi qui sotto usano 1, l’ID che Jev 1.13 aveva quando è stata scritta questa pagina; recuperalo ogni volta invece di inserirlo fisso nel codice.

Eseguire una decisione

POST /api/v1/decision
Autorizzazione decision_manage

Esegue la decisione in modo sincrono (la chiamata restituisce il risultato quando le risposte sono pronte) e la salva insieme alle tue altre decisioni.

Body
decision_model_id integer obbligatorio
ID del modello ottenuto da GET /decision_model.
state string obbligatorio
Il testo da controllare.
questions object obbligatorio
Almeno una domanda, ognuna sotto una chiave a tua scelta, come team o urgent. Le risposte tornano sotto le stesse chiavi.

Ogni domanda ha un type, le sue instructions (la domanda o l’affermazione) e i suoi criteria:

typeNell’appcriteria
choiceChoiceObbligatorio. Un oggetto che associa a ogni nome di opzione il caso in cui si applica.
scoreScoreObbligatorio. Un array di descrizioni dei livelli, a partire dal più basso. Il primo è il livello 0.
noulTrue / falseFacoltativo. Un oggetto con una chiave true (quando è vera), una chiave false (quando non lo è) o entrambe. Non sono ammesse altre chiavi.

Questa richiesta pone una domanda a scelta e una domanda vero / falso:

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 risposta è un 201 con la decisione salvata. Ecco una versione abbreviata, con un ID e uno slug di esempio:

{
  "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 risposta restituisce anche questions così come sono state inviate al modello (dopo un eventuale oscuramento da parte dei guardrail), il decision_model incorporato e resolved_model, la versione esatta del modello che ha risposto.

Domande a punteggio

Una domanda a punteggio invia i suoi livelli come array, a partire dal più basso:

{
  "frustration": {
    "type": "score",
    "instructions": "How frustrated is the customer?",
    "criteria": ["Calm", "Frustrated but civil", "Angry, ready to leave"]
  }
}

La risposta contiene lo score, una confidence, una legend che associa ogni numero di livello alla tua descrizione e le probabilities di ogni livello, indicizzate per numero di livello. La struttura è questa (valori di esempio):

{
  "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 }
  }
}

Quando una decisione non riesce

  • 400: manca state, una domanda non è valida (senza instructions, una choice o uno score senza criteria, criteri noul con chiavi diverse da true e false, oppure un type sconosciuto), oppure decision_model_id non corrisponde a nessun modello.
  • 400 con un code: un guardrail ha bloccato il testo o una domanda.
  • 403: le regole di accesso ai modelli del tuo workspace limitano il modello.
  • 429: è stata raggiunta la quota del workspace o il limite del piano. Vedi Errori, paginazione e quote.

Elencare, leggere ed eliminare le decisioni

GET /api/v1/decision
Autorizzazione decision_get

Elenca le tue decisioni, dalla più recente. Supporta page e size, più status (processing, done o error) per filtrare. Il totale è nell’header X-Total-Count: vedi paginazione.

GET /api/v1/decision/:id
Autorizzazione decision_get

Una decisione per ID o slug, con il suo testo, le domande e le risposte. Una decisione che non esiste o non è tua restituisce 404 {"error":"Decision not found"}.

DELETE /api/v1/decision/:id
Autorizzazione decision_delete

Elimina una decisione tramite il suo ID numerico. Restituisce 204, anche quando non trova nulla.

Idee

  • Smista i ticket. Una domanda Choice con i tuoi team come opzioni manda ogni ticket nella coda giusta.
  • Valuta il tono delle recensioni. Una domanda Score da Insoddisfatto a Entusiasta trasforma una pila di recensioni in un numero che puoi ordinare e rappresentare in un grafico.
  • Controlla una condizione in email e moduli. Un’affermazione True / false come L’email chiede un rimborso o Il modulo contiene un numero d’ordine segnala quelli su cui bisogna intervenire.
  • Chiedi tutte e tre le cose insieme. Una sola decisione può smistare, valutare e controllare lo stesso testo, come nell’esempio qui sopra.