Skip to Content
API-ReferenzEntscheidungen

Decisions API

Mit der Decisions API trifft ein Modell typisierte Entscheidungen über einen Inhalt, statt Text zu generieren. Sie übergeben den zu bewertenden Inhalt und eine Reihe von Fragen, und das Modell liefert für jede Frage eine strukturierte Antwort: die Wahrscheinlichkeit für Ja/Nein, eine Auswahl aus einer Liste von Optionen oder eine Bewertung auf einer abgestuften Skala, jeweils mit den Wahrscheinlichkeiten pro Option und einem Konfidenzwert.

Die API eignet sich für Klassifizierung, Routing, Moderation, Bewertung, Filterung und alle anderen Fälle, in denen Ihr Code direkt anhand des Ergebnisses verzweigen soll. Das Modell antwortet ausschließlich mit den von Ihnen festgelegten Optionen und Stufen, nie mit Werten außerhalb davon; freier Text muss nicht geparst werden.

Bei der erstmaligen Verwendung von Entscheidungsmodellen wird empfohlen, zunächst den Jev-Leitfaden zu lesen. Er enthält Schnellstart, Fragendesign, eine Erläuterung der Rückgabewerte sowie Anwendungsbeispiele. Diese Seite ist die Referenz auf Feldebene.

Endpunkte

Hinter allen drei Endpunkten stehen dieselben Modelle mit derselben Abrechnung; sie unterscheiden sich nur im Format von Anfrage und Antwort. Wählen Sie den Endpunkt, der zu Ihrem Client passt:

EndpunktFormatGeeignet für
POST https://api.ofox.ai/v1/decisionsEinheitliches OfoxAI-Format (Fragen als Array)cURL, beliebige HTTP-Clients, das OpenAI SDK
POST https://api.ofox.ai/openai/v1/decisionsWie obenProjekte, in denen die base_url des OpenAI SDK bereits auf https://api.ofox.ai/openai/v1 gesetzt ist
POST https://api.ofox.ai/typesafe/v1/systemoneOffizielles TypeSafe-System-One-Format (Fragen als Objekt)Das offizielle TypeSafe SDK oder Code, der nach der offiziellen TypeSafe-Dokumentation geschrieben wurde

Die Authentifizierung entspricht der der übrigen Endpunkte: Authorization: Bearer <Ihr OFOXAI_API_KEY>. Es werden nur Anfragen ohne Streaming unterstützt; jede Anfrage liefert alle Antworten synchron.

Verfügbare Modelle

Modell-IDBeschreibung
typesafe/jev-latestTypeSafe Jev, ein spezialisiertes Entscheidungsmodell. Nur Text- oder JSON-Eingabe, 64K Kontext. Kurzform jev-latest möglich
openai/gpt-6-lunaFunktioniert auf allen drei Endpunkten; kann Bilder lesen (input_image im Nachrichten-Array übergeben)

Die vollständige Liste der Modelle, die diese API unterstützen, finden Sie auf der Modellseite . Ein Aufruf mit einem gewöhnlichen Chatmodell (etwa openai/gpt-4o) liefert endpoint_not_supported.

Einheitliches Format: /v1/decisions

Anfrageparameter

ParameterTypPflichtBeschreibung
modelstring✅Modell-ID, z. B. typesafe/jev-latest
inputstring | object | array✅Der zu bewertende Inhalt, siehe Eingabeformat
questionsarray✅Liste der Fragen, jeweils ein Frageobjekt. Die Antworten werden in derselben Reihenfolge zurückgegeben
safety_identifierstring—Eine stabile Endnutzer-ID; gilt nur für OpenAI-Modelle

Eingabeformat

input akzeptiert drei Formen:

  • Text: eine einzelne Zeichenkette.
    "input": "Customer message: I was charged twice, nobody has answered my two emails, and I need a refund today."
  • Strukturierte Daten: ein JSON-Objekt, das unverändert an das Modell übergeben wird. Fragen können Feldnamen in Backticks referenzieren, z. B. `message`.
    "input": { "ticket_id": 4812, "message": "I was charged twice.", "plan": "pro" }
  • Nachrichten-Array: [{ "role", "content" }], wobei content eine Zeichenkette oder eine Liste von Inhaltsblöcken ist. Nur die Blöcke input_text und input_image werden unterstützt. Bilder funktionieren nur mit Modellen, die Bilder lesen können. Jev liest keine Bilder; die Übergabe eines Bildes liefert 400.

Frageobjekt

FeldGilt fürBeschreibung
typeAllepredicate (Ja/Nein), choice (Einfachauswahl) oder score (abgestufte Bewertung)
nameAlleOptional, aber empfohlen. Wird in der Antwort unverändert zurückgegeben, damit Sie die Zuordnung herstellen können. Muss innerhalb einer Anfrage eindeutig sein
instructionsAlleDie Frage selbst. Eine Zeichenkette oder ein JSON-Objekt mit der Frage und Referenzdaten
criteriapredicateOptional. { "true": "...", "false": "..." } beschreibt, was Ja und Nein jeweils bedeuten
choiceschoicePflicht. Array von Optionen, jeweils { "value": "billing", "description": "Charges, refunds" }; description ist optional. Höchstens 255 Optionen
levelsscorePflicht. Array von Stufen, aufsteigend von niedrig nach hoch geordnet, jeweils { "label": "low", "description": "..." }. 2–10 Stufen

Anfragebeispiele

Terminal
curl https://api.ofox.ai/v1/decisions \ -H "Authorization: Bearer $OFOX_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "typesafe/jev-latest", "input": "Customer message: I was charged twice, nobody has answered my two emails, and I need a refund today.", "questions": [ { "type": "predicate", "name": "is_frustrated", "instructions": "Is the customer frustrated?" }, { "type": "choice", "name": "category", "instructions": "Which category does this ticket belong to?", "choices": [ { "value": "billing", "description": "Charges and refunds" }, { "value": "bug", "description": "Product issue" }, { "value": "other", "description": "Other" } ] }, { "type": "score", "name": "urgency", "instructions": "How quickly does a human need to respond?", "levels": [ { "label": "low", "description": "Within a week is fine" }, { "label": "medium", "description": "Should respond soon" }, { "label": "high", "description": "Must respond today" } ] } ] }'

Antwortformat

{ "model": "typesafe/jev-latest", "answers": [ { "type": "predicate", "name": "is_frustrated", "probability": 0.97 }, { "type": "choice", "name": "category", "choice": "billing", "confidence": 1, "probabilities": [ { "value": "billing", "probability": 1 }, { "value": "bug", "probability": 0 }, { "value": "other", "probability": 0 } ] }, { "type": "score", "name": "urgency", "score": 2, "confidence": 1, "legend": { "0": "low: Within a week is fine", "1": "medium: Should respond soon", "2": "high: Must respond today" }, "probabilities": [ { "value": 0, "label": "low", "probability": 0 }, { "value": 1, "label": "medium", "probability": 0 }, { "value": 2, "label": "high", "probability": 1 } ] } ], "usage": { "prompt_tokens": 407, "completion_tokens": 72, "total_tokens": 479 } }

answers entspricht eins zu eins questions, in derselben Reihenfolge. Felder je Antworttyp:

TypFeldBeschreibung
predicateprobabilityWahrscheinlichkeit, dass die Antwort Ja lautet, 0–1
choicechoiceDie Option mit der höchsten Wahrscheinlichkeit
probabilitiesWahrscheinlichkeit jeder Option; Summe 1
confidenceWie sicher sich das Modell bei dieser Entscheidung ist, 0–1; siehe Wahrscheinlichkeit und Konfidenz
scorescoreWahrscheinlichkeitsgewichteter Stufenwert, beginnend bei 0. Er kann zwischen zwei Stufen liegen (z. B. 1.43)
legendZuordnung von Stufenindex zu Beschreibung
probabilitiesWahrscheinlichkeit jeder Stufe
confidenceWie oben

Natives TypeSafe-Format: /typesafe/v1/systemone

Anfrage- und Antwortformat entsprechen der offiziellen TypeSafe API , sodass Sie das TypeSafe SDK direkt verwenden oder bestehenden Code migrieren können. Gegenüber dem einheitlichen Format gibt es folgende Unterschiede:

Einheitliches Format /v1/decisionsNatives TypeSafe-Format
Zu bewertender Inhaltinputstate
FragenArray, gekennzeichnet über nameObjekt, jeder Schlüssel ist die Fragen-ID
Ja/Nein-Fragentype: "predicate", Antwortfeld probabilitytype: "noul", Antwortfeld noul
Optionen und StufenArrays choices / levelsBeide stehen in criteria: bei choice ein Objekt {Option: Beschreibung}, bei score ein Array von Beschreibungszeichenketten
Verbrauchsfelderprompt_tokens / completion_tokensinput_tokens / output_tokens
Terminal
curl https://api.ofox.ai/typesafe/v1/systemone \ -H "Authorization: Bearer $OFOX_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "jev-latest", "state": "Help! My payouts have been failing for 3 days.", "questions": { "is_urgent": { "type": "noul", "instructions": "Does this convey urgency?" }, "department": { "type": "choice", "instructions": "Which team should handle this?", "criteria": { "billing": "Payments, invoicing, refunds", "technical": "Bugs, outages, integrations", "sales": "Pricing, upgrades" } }, "frustration": { "type": "score", "instructions": "How frustrated is the customer?", "criteria": ["Calm", "Frustrated", "Very angry"] } } }'
{ "model": "typesafe/jev-latest", "answers": { "is_urgent": { "type": "noul", "noul": 0.95 }, "department": { "type": "choice", "choice": "billing", "confidence": 0.85, "probabilities": { "billing": 0.9, "technical": 0.1, "sales": 0 } }, "frustration": { "type": "score", "score": 1.03, "confidence": 0.95, "legend": { "0": "Calm", "1": "Frustrated", "2": "Very angry" }, "probabilities": { "0": 0, "1": 0.97, "2": 0.03 } } }, "usage": { "input_tokens": 399, "output_tokens": 73 } }

SDK-Integration

OpenAI SDK

Das offizielle OpenAI SDK stellt client.decisions.create() bereit. Setzen Sie base_url auf https://api.ofox.ai/v1 und verwenden Sie für den Anfragekörper das einheitliche Format. Ein Beispiel finden Sie oben im Python-Tab. Erforderlich ist eine SDK-Version, die die Decisions API enthält (getestet mit openai Python 3.31.0).

TypeSafe SDK

Setzen Sie im offiziellen TypeSafe SDK base_url auf https://api.ofox.ai/typesafe und ersetzen Sie api_key durch Ihren OfoxAI API Key. Der übrige Code bleibt unverändert:

typesafe_sdk.py
# pip install typesafe-sdk import os from typesafe_sdk import TypeSafeClient, Noul, Choice, Score with TypeSafeClient(base_url="https://api.ofox.ai/typesafe", api_key=os.environ["OFOX_API_KEY"]) as client: r = client.system_one( model="jev-latest", state={"message": "I was charged twice, nobody has answered my two emails, and I need a refund today."}, questions={ "urgent": Noul(instructions="Is the customer asking for this to be handled today?"), "dept": Choice( instructions="Which team should handle this?", criteria={"billing": "Charges, invoices, refunds", "technical": "Bugs, integrations", "sales": "Pricing, upgrades"}, ), "anger": Score(instructions="How upset is the customer?", criteria=["Calm", "Upset but polite", "Very angry"]), }, ) print(r.nouls["urgent"].noul) # 0.98 print(r.choices["dept"].choice) # billing print(r.scores["anger"].score) # 1.56

Wahrscheinlichkeit und Konfidenz

  • Wahrscheinlichkeit beantwortet die Frage „Wie lautet die Antwort?“: probability und probabilities sind die kalibrierten Wahrscheinlichkeiten des Modells für jede mögliche Antwort.
  • Konfidenz beantwortet die Frage „Kann ich dieser Entscheidung vertrauen?“: confidence wird aus der Wahrscheinlichkeitsverteilung abgeleitet und ist umso höher, je konzentrierter die Verteilung ist. Liegen zwei Optionen jeweils bei 0.5, liefert choice dennoch eine davon, confidence ist dann jedoch niedrig.

Üblich ist ein Schwellenwert im Code: Bei hoher Konfidenz wird automatisch gehandelt, bei niedriger Konfidenz wird der Fall an einen Menschen oder ein stärkeres Modell zur Prüfung weitergeleitet.

Abrechnung

Abgerechnet wird pro Token; die Preise finden Sie auf der Modellseite . Bei typesafe/jev-latest werden nur Eingabe-Token berechnet; die Ausgabe ist kostenfrei (completion_tokens / output_tokens werden dennoch zurückgegeben).

Alle Fragen einer Anfrage teilen sich dieselbe Eingabe. Mehrere Fragen in einer Anfrage sind daher deutlich günstiger und schneller als getrennte Aufrufe.

Limits

PunktLimit
AnfragekörperHöchstens 32 MiB
Kontext64K Token bei Jev; bei Überschreitung wird 400 zurückgegeben
choice-OptionenHöchstens 255
score-Stufen2–10
JSON-VerschachtelungJeweils höchstens 64 Ebenen für input/state, instructions und criteria
StreamingNicht unterstützt

Häufige Fehler

HTTP · typeFehlermeldung (Original)UrsacheLösung
400 invalid_request_errorquestion "a" has kind choice and requires criteria optionsEine choice-Frage hat keine choicesOptions-Array ergänzen
400 invalid_request_errorquestion name "a" is used more than onceZwei Fragen haben denselben nameEindeutige Namen verwenden
400 invalid_request_errorToo many score levels. Must have at most 10 levels.Eine score-Frage hat mehr als 10 StufenStufen zusammenfassen oder auf mehrere Fragen aufteilen
400 invalid_request_errordecision input carries an "input_image" part, which Typesafe cannot readAn Jev wurde ein Bild übergebenBild entfernen oder ein Modell verwenden, das Bilder lesen kann
400 invalid_request_errorInvalid request payloadDas native TypeSafe-Format (state + questions als Objekt) wurde an /v1/decisions gesendetZum einheitlichen Format wechseln oder stattdessen /typesafe/v1/systemone aufrufen
400 endpoint_not_supportedModel 'openai/gpt-4o' does not support the /v1/decisions endpoint on this platform.Das Modell ist kein EntscheidungsmodellEines der verfügbaren Modelle verwenden
404 model_not_foundModel 'typesafe/jev-9' not foundFalsche Modell-IDtypesafe/jev-latest verwenden
404 invalid_request_errorUnsupported API endpoint.Der Pfad wurde als /v1/systemone angegebenDer Endpunkt für das native TypeSafe-Format lautet /typesafe/v1/systemone

Weitere allgemeine Fehler finden Sie unter Fehlerbehandlung.

Zuletzt aktualisiert am