Decisions

Stellen Sie strukturierte Fragen zu einem Text (welches Team, wie verärgert, stimmt das?) und erhalten Sie Antworten in fester Form statt Fließtext. Zum Zuordnen von Tickets, Bewerten von Feedback und Prüfen von E-Mails oder Formularen.

9 Min. Lesezeit · Aktualisiert am 28. September 2026

Decisions ist für die Fragen gedacht, die Sie immer wieder zur gleichen Art von Text stellen: Welches Team soll dieses Ticket bearbeiten? Wie verärgert ist dieser Kunde? Bittet diese E-Mail um eine Rückerstattung? Fügen Sie den Text ein, schreiben Sie die Fragen, und jede Antwort kommt in der Form zurück, die Sie festgelegt haben: als eine Ihrer Optionen, als Stufe auf Ihrer Skala oder als Wert zwischen falsch und wahr. Sie erhalten Antworten, mit denen Sie direkt weiterarbeiten können, statt Absätze, die Sie erst lesen müssen.

Bei Auswahl- und Skalenantworten sehen Sie, wie sicher sich das Modell ist (die Konfidenz) und wie sich die Wahrscheinlichkeit auf Ihre Optionen verteilt. So erkennen Sie auf einen Blick, ob eine Einschätzung eindeutig oder knapp war. Decisions läuft mit Jev 1.13 von TypeSafe AI, einem Entscheidungsmodell: Statt Fließtext zu schreiben, beantwortet es Ihre Fragen in der Form, die Sie vorgeben.

Fragetypen

Decisions finden Sie unter Apps, auf der Karte mit der Beschreibung Classify, score and check text with structured questions. Eine Entscheidung kann mehrere Fragen zum selben Text stellen, und jede Frage hat einen von drei Typen:

TypWas Sie eingebenWas Sie zurückbekommen
ChoiceEine Frage und ihre Optionen. Jede Option hat einen Namen und unter When it applies eine Beschreibung, wann sie zutrifft.Die vom Modell gewählte Option, eine Konfidenz und die Wahrscheinlichkeit jeder Option.
ScoreEine Frage und ihre Stufen, von der niedrigsten bis zur höchsten, jede in einem Satz beschrieben. Die Stufen sind mit 0, 1, 2 und so weiter nummeriert.Die Stufe, einen Wert auf dieser Skala wie 1.9 / 2, eine Konfidenz und die Wahrscheinlichkeit jeder Stufe.
True / falseEine Aussage, dazu optional Kriterien dafür, wann sie zutrifft und wann nicht.Einen Wert von 0 (falsch) bis 1 (wahr), etwa 0.97.

Eine Entscheidung erstellen

  1. Eine neue Entscheidung beginnen

    Gehen Sie zu Apps und wählen Sie Decisions. Die Seite listet Ihre bisherigen Entscheidungen auf. Wählen Sie New decision.

  2. Den Text einfügen

    Fügen Sie unter TEXT ein, was Sie prüfen möchten: ein Support-Ticket, eine Rezension, eine E-Mail, eine Formulareingabe.

  3. Ihre Fragen hinzufügen

    Fügen Sie unter QUESTIONS eine Frage vom Typ Choice, Score oder True / false hinzu.

    • Choice. Schreiben Sie die Frage, zum Beispiel Welches Team soll sich darum kümmern? Geben Sie jeder Option einen Namen und beschreiben Sie unter When it applies, wann sie zutrifft. Mit Add option fügen Sie eine weitere hinzu.
    • Score. Schreiben Sie die Frage, zum Beispiel Wie verärgert ist der Kunde? Beschreiben Sie jede Stufe, von der niedrigsten bis zur höchsten. Mit Add level fügen Sie eine Stufe hinzu, mit den Pfeilen nach oben und unten ändern Sie die Reihenfolge.
    • True / false. Schreiben Sie die Aussage, zum Beispiel Der Kunde droht mit Kündigung. Optional füllen Sie die Criteria aus, beantwortet auf einer Skala von 0 (falsch) bis 1 (wahr): unter TRUE, wann die Aussage zutrifft (Erwähnt einen früheren Versuch oder ein früheres Ticket), und unter FALSE, wann nicht.
  4. Das Modell prüfen

    Der Bereich MODEL zeigt, welches Modell antworten wird. Voreingestellt ist Jev 1.13 von TypeSafe AI.

  5. Ausführen

    Wählen Sie Run decision. Die Antworten erscheinen im Bereich ANSWERS. Möchten Sie eine andere Formulierung ausprobieren, bearbeiten Sie den Text oder die Fragen und wählen Sie Run again.

Beispiel: ein Support-Ticket einordnen

Das ist der Durchlauf aus der Aufnahme oben. Text und Fragen stehen deshalb auf Englisch. Das Support-Team von Northwind erhält eine Nachricht wie diese von einer Kundin namens Marta:

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

Marta schreibt, dass ihre Merino-Decke (Bestellung NW-4471) immer noch nicht angekommen ist, dass dies schon die zweite verloren gegangene Bestellung ist und dass sie ernsthaft überlegt, ihre Mitgliedschaft zu kündigen. Dazu stellen wir drei Fragen:

FrageTypOptionen oder StufenAntwort
Which team should handle this? (Welches Team soll sich darum kümmern?)Choicebilling (Abrechnung): Payments, refunds and invoices. shipping (Versand): Delivery, tracking and missing parcels. product (Produkt): Questions about our products.shipping, Konfidenz 100 %
How frustrated is the customer? (Wie verärgert ist der Kunde?)Score0 Calm (ruhig), 1 Frustrated but civil (verärgert, aber höflich), 2 Angry, ready to leave (wütend, kurz vor dem Absprung)Angry, ready to leave: 1.9 / 2, Konfidenz 79 % (0 %, 14 % und 86 % für die drei Stufen)
The customer is threatening to cancel (Der Kunde droht mit Kündigung)True / falseKeine Kriterien0.97

Jede Antwort führt zu einer Maßnahme: Das Ticket geht in die Versand-Warteschlange, und der Frustrationswert sowie das Kündigungssignal markieren es für eine schnelle, umsichtige Antwort, bevor Marta abspringt.

Die Antworten lesen

  • Choice. Die vom Modell gewählte Option mit einer Konfidenz wie 100% confidence sowie die Wahrscheinlichkeit jeder Option als Balken mit Prozentangabe. Die Balken zeigen, wie knapp die Einschätzung war: Liegen zwei Optionen fast gleichauf, lohnt sich ein menschlicher Blick, bei einem klaren Sieger meist nicht.
  • Score. Die Stufe, auf der der Text gelandet ist, ein Wert auf Ihrer Skala wie 1.9 / 2, eine Konfidenz wie 79% confidence und die Wahrscheinlichkeit jeder Stufe. Der Wert kann zwischen zwei Stufen liegen. Er eignet sich daher zum Sortieren ebenso wie zum Einordnen.
  • True / false. Ein Wert zwischen 0 und 1 auf einem Balken von False bis True. Je näher an 1, desto eindeutiger trifft die Aussage zu. Je näher an 0, desto eindeutiger trifft sie nicht zu.

Gespeicherte Entscheidungen

Jede Entscheidung wird mit ihrem Text, ihren Fragen und ihren Antworten gespeichert. Die Seite Decisions listet Ihre Entscheidungen in einer Tabelle mit den Spalten Text, Model, Status und Created auf, und New decision startet eine neue.

Eine gespeicherte Entscheidung hält genau fest, was gefragt wurde und was zurückkam. Das hilft, wenn später jemand wissen möchte, warum ein Ticket dort gelandet ist, wo es gelandet ist.

Guardrails und Zugriff

Für Decisions gelten dieselben Workspace-Regeln wie für den Chat:

  • Guardrails. Die Guardrails Ihres Workspace prüfen den Text sowie jede Frage und Beschreibung, bevor das Modell sie sieht. Je nach Einrichtung werden sensible Angaben geschwärzt oder der Durchlauf wird blockiert.
  • Modellzugriff und Datenresidenz. Die Einstellungen für Modellzugriff und Datenresidenz in Ihrem Workspace gelten für Jev wie für jedes andere Modell. Schließen sie Jev für Sie aus, können Sie damit keine Entscheidung ausführen.

Über die API

Für Decisions gibt es eigene REST-Endpunkte. So können Sie aus Ihrem eigenen Code dieselben Fragen zu jedem neuen Ticket, jeder Rezension oder jeder E-Mail stellen. Alle Pfade sind relativ zu https://api.stickyprompts.com/api/v1, und jede Anfrage sendet Ihren API-Schlüssel als Bearer-Token im Header Authorization. Neu bei der API? Beginnen Sie mit dem Schnellstart.

Der Schlüssel braucht diese Berechtigungen (im Schlüssel-Editor der App heißen sie Decision Get, Decision Manage und Decision Delete):

Decisions gibt es nicht als MCP-Tool. Verwenden Sie die REST-Endpunkte.

Die Entscheidungsmodelle auflisten

GET /api/v1/decision_model
Berechtigung decision_get

Gibt die Entscheidungsmodelle als JSON-Array zurück (gekürzt):

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

Übergeben Sie die ID des Modells als decision_model_id. Jedes Modell hat außerdem version, powered_by, description und default. Wie bei Chat-Modellen bedeutet selectable: false, dass die Regeln Ihres Workspace für Modellzugriff oder Datenresidenz das Modell für Sie sperren. restriction_reason nennt den Grund. Die Beispiele unten verwenden 1, die ID, die Jev 1.13 hatte, als diese Seite geschrieben wurde. Fragen Sie die ID ab, statt sie fest in Ihren Code zu schreiben.

Eine Entscheidung ausführen

POST /api/v1/decision
Berechtigung decision_manage

Führt die Entscheidung synchron aus (der Aufruf kehrt erst zurück, wenn die Antworten vorliegen) und speichert sie bei Ihren anderen Entscheidungen.

Body
decision_model_id integer erforderlich
ID des Modells aus GET /decision_model.
state string erforderlich
Der zu prüfende Text.
questions object erforderlich
Mindestens eine Frage, jeweils unter einem Schlüssel Ihrer Wahl, etwa team oder urgent. Die Antworten kommen unter denselben Schlüsseln zurück.

Jede Frage hat einen type, ihre instructions (die Frage oder Aussage) und ihre criteria:

typeIn der Appcriteria
choiceChoicePflicht. Ein Objekt, das jedem Optionsnamen zuordnet, wann die Option zutrifft.
scoreScorePflicht. Ein Array von Stufenbeschreibungen, die niedrigste zuerst. Die erste ist Stufe 0.
noulTrue / falseOptional. Ein Objekt mit einem Schlüssel true (wann die Aussage zutrifft), einem Schlüssel false (wann nicht) oder beiden. Andere Schlüssel sind nicht erlaubt.

Diese Anfrage stellt eine Frage vom Typ Choice und eine vom Typ True / false:

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);

Die Antwort ist 201 mit der gespeicherten Entscheidung. Gekürzt, mit beispielhaften Werten für ID und slug:

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

Die Antwort enthält außerdem questions so, wie sie an das Modell gesendet wurden (also nach einer eventuellen Schwärzung durch Guardrails), das eingebettete decision_model und resolved_model, die genaue Modellversion, die geantwortet hat.

Score-Fragen

Eine Score-Frage sendet ihre Stufen als Array, die niedrigste zuerst:

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

Ihre Antwort enthält den score, eine confidence, eine legend, die jeder Stufennummer Ihre Beschreibung zuordnet, und die probabilities jeder Stufe, mit der Stufennummer als Schlüssel. So sieht die Struktur aus (Beispielwerte):

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

Wenn eine Entscheidung fehlschlägt

  • 400 - state fehlt, eine Frage ist ungültig (keine instructions, ein choice oder score ohne criteria, noul-Kriterien mit anderen Schlüsseln als true und false oder ein unbekannter type), oder decision_model_id passt zu keinem Modell.
  • 400 mit einem code - Guardrails haben den Text oder eine Frage blockiert.
  • 403 - die Regeln Ihres Workspace für den Modellzugriff schränken das Modell ein.
  • 429 - das Kontingent oder das Tariflimit des Workspace ist erreicht. Siehe Fehler, Paginierung und Kontingente.

Entscheidungen auflisten, abrufen und löschen

GET /api/v1/decision
Berechtigung decision_get

Listet Ihre Entscheidungen auf, die neuesten zuerst. Unterstützt page und size sowie status (processing, done oder error) als Filter. Die Gesamtzahl steht im Header X-Total-Count, siehe Paginierung.

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

Eine einzelne Entscheidung nach ID oder slug, mit Text, Fragen und Antworten. Für eine Entscheidung, die nicht existiert oder nicht Ihnen gehört, kommt 404 {"error":"Decision not found"} zurück.

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

Löscht eine Entscheidung anhand ihrer numerischen ID. Gibt 204 zurück, auch wenn nichts gefunden wurde.

Ideen

  • Tickets zuordnen. Eine Choice-Frage mit Ihren Teams als Optionen schickt jedes Ticket in die richtige Warteschlange.
  • Die Stimmung in Rezensionen bewerten. Eine Score-Frage von Unzufrieden bis Begeistert macht aus einem Stapel Rezensionen eine Zahl, die Sie sortieren und als Diagramm darstellen können.
  • E-Mails und Formulare auf eine Bedingung prüfen. Eine Aussage vom Typ True / false wie Die E-Mail bittet um eine Rückerstattung oder Das Formular enthält eine Bestellnummer markiert die Fälle, bei denen etwas zu tun ist.
  • Alle drei auf einmal fragen. Eine Entscheidung kann denselben Text zuordnen, bewerten und prüfen, wie im Beispiel oben.