JavaScript-Guide

OpenAI Decisions API in JavaScript

OpenAI hat kein SDK für seine Decisions API veröffentlicht — es gibt kein client.decisions.create zum Kopieren. Diese Seite zeigt funktionierendes JavaScript für den Endpoint dieser Seite — eine aufrufbare OpenAI-Decisions-API-Alternative, die decisions-1 liefert und demselben eingeschränkten Entscheidungsmuster folgt.

Aktualisiert

Den Call ausführen

Ein POST an /api/v1/decisions mit einem Bearer-Schlüssel. Der Body besteht aus model, state und questions — 1 bis 6 Fragen, jeweils vom Typ noul, choice oder score. Setze DECISIONS_API_KEY auf einen Schlüssel aus dem Dashboard.

Nutze fetch — dieselbe API in Node 18+, Deno und Browsern. Setze bei jedem Call ein Timeout (AbortSignal.timeout); eine hängende Entscheidung soll schnell fehlschlagen, nicht die Pipeline blockieren.

JavaScript

const res = await fetch('https://decisions-api.net/api/v1/decisions', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DECISIONS_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    model: 'decisions-1',
    state: 'I was charged twice for my subscription this morning.',
    questions: {
      refund: {
        type: 'noul',
        instructions: 'Is the customer asking for money back?',
      },
    },
  }),
})
const { answers } = await res.json()
console.log(answers.refund.noul)

Die Wahrscheinlichkeiten lesen

answers kommt unter deinen Frage-IDs zurück. Eine noul-Antwort ist die Wahrscheinlichkeit, dass die Aussage wahr ist. Eine choice-Antwort enthält den siegenden choice, eine Wahrscheinlichkeit pro Option und einen Konfidenzwert — nutze die Konfidenz, nicht nur den Sieger, um über automatisches Handeln zu entscheiden.

JavaScript

// noul: probability the statement is true
if (answers.refund.noul >= 0.8) routeToRefunds()

// choice: winning label + per-option probabilities + confidence
const team = answers.team
console.log(team.choice, team.probabilities, team.confidence)

Timeouts und Retries

429 und 502 lohnen einen kurzen Backoff-Retry — fehlgeschlagene Calls werden nicht berechnet. 402 heißt Guthaben leer: aufladen, nicht erneut versuchen. 422 ist ein Validierungsfehler; die Meldung nennt das Feld, also korrigiere den Body statt zu wiederholen.

JavaScript

async function decide(body, attempts = 3) {
  for (let i = 0; i < attempts; i++) {
    const res = await fetch('https://decisions-api.net/api/v1/decisions', {
      method: 'POST',
      headers: {
        Authorization: `Bearer ${process.env.DECISIONS_API_KEY}`,
        'Content-Type': 'application/json',
      },
      body: JSON.stringify(body),
      signal: AbortSignal.timeout(30000),
    })
    if (res.status === 429 || res.status === 502) {
      await new Promise(r => setTimeout(r, 2 ** i * 1000))
      continue
    }
    if (res.status === 402) throw new Error('out of credits')
    if (!res.ok) throw new Error(`decision call failed: ${res.status}`)
    return (await res.json()).answers
  }
  throw new Error('decision call failed')

Den Anbieter hinter einer Funktion halten

Aufrufer sollten eine Funktion sehen, die Text nimmt und ein Label zurückgibt — keine HTTP-Details. Wenn OpenAI seine Decisions API öffnet, tauschst du das Innere von decide() aus und alle Aufrufstellen bleiben gleich. Fragetexte, Optionen und Schwellenwerte bleiben erhalten.

JavaScript

// Keep the decision behind one function. Swap the HTTP layer
// when OpenAI publishes its schema — callers never change.
export async function routeTicket(text) {
  const answers = await decide({
    model: 'decisions-1',
    state: text,
    questions: {
      team: {
        type: 'choice',
        instructions: 'Which team should own this ticket?',
        criteria: {
          payments: 'Checkout or billing.',
          frontend: 'Rendering or browser behavior.',
          account: 'Login or permissions.',
        },
      },
    },
  })
  const team = answers.team
  return team.confidence >= 0.7 ? team.choice : 'triage'
}

FAQ

Gibt es ein offizielles OpenAI-SDK-Beispiel für die Decisions API?

Nein. OpenAI hat weder SDK-Methoden noch ein Request-Schema für seine Decisions API veröffentlicht — alles mit client.decisions.create ist erfunden. Diese Seite nutzt schlichtes HTTP, was jedes Provider-SDK ohnehin nur kapseln würde.

Kann ich axios oder einen anderen HTTP-Client statt fetch verwenden?

Ja — der Endpoint ist ein schlichter HTTPS-POST. Axios, undici oder got funktionieren gleich; halte Timeout und Statusbehandlung identisch.

Wie sende ich strukturierten Kontext?

state akzeptiert ein JSON-Objekt oder -Array, nicht nur einen String — übergib dicts direkt im json-Body; das Modell liest sie als Kontext.

Eine Entscheidung im Browser ausführen

Ganz ohne Setup — führe einen echten Call im Playground mit 2 kostenlosen Credits für neue Besucher aus.