JavaScript rehberi

JavaScript'te OpenAI Decisions API

OpenAI, Decisions API'si için bir SDK yayınlamadı — kopyalanacak client.decisions.create yok. Bu sayfa, bu sitenin uç noktası için çalışan JavaScript gösterir — decisions-1 sunan ve aynı kısıtlı karar örüntüsünü izleyen, çağrılabilir bir OpenAI Decisions API alternatifi.

Güncellendi

Çağrıyı yapın

Bearer anahtarıyla /api/v1/decisions'a tek POST. Gövde; model, state ve questions'tır — her biri noul, choice veya score tipte 1–6 soru. DECISIONS_API_KEY'i paneldeki bir anahtara ayarlayın.

fetch kullanın — Node 18+, Deno ve tarayıcılarda aynı API. Her çağrıya timeout koyun (AbortSignal.timeout); takılan bir karar hızlıca başarısız olmalı, pipeline'ı kilitlememeli.

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)

Olasılıkları okuyun

answers, soru kimliklerinizle anahtarlanmış olarak döner. Bir noul yanıtı, ifadenin doğru olma olasılığıdır. Bir choice yanıtı; kazanan choice'u, her seçenek için bir olasılık ve bir güven değeri taşır — otomatik davranıp davranmayacağınıza yalnız kazanana değil, güvene göre karar verin.

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)

Timeout'lar ve yeniden denemeler

429 ve 502 kısa bir backoff denemesini hak eder — başarısız çağrılar ücretlendirilmez. 402 bakiyenin boş olduğu anlamına gelir: yükleyin, tekrar denemeyin. 422 doğrulama hatasıdır; mesaj alanı belirtir, yani tekrar denemek yerine gövdeyi düzeltin.

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

Sağlayıcıyı tek fonksiyonun arkasında tutun

Çağıranlar, metin alıp etiket döndüren bir fonksiyon görmeli — HTTP detaylarını değil. OpenAI Decisions API'sini açtığında decide() içeriğini değiştirirsiniz ve tüm çağrı noktaları aynı kalır. Soru metinleri, seçenekler ve eşikler korunur.

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'
}

SSS

Decisions API için resmi bir OpenAI SDK örneği var mı?

Hayır. OpenAI, Decisions API'si için SDK metodları veya istek şeması yayımlamadı — client.decisions.create gösteren her şey uydurmadır. Bu sayfa düz HTTP kullanır; her sağlayıcı SDK'sı zaten bunu sarar.

fetch yerine axios veya başka bir HTTP istemcisi kullanabilir miyim?

Evet — uç nokta düz bir HTTPS POST'tur. Axios, undici veya got aynı şekilde çalışır; timeout ve durum işlemeyi aynı tutun.

Yapılandırılmış bağlamı nasıl gönderirim?

state yalnızca string değil, JSON objesi veya dizi de kabul eder — json gövdesinde doğrudan dict geçirin, model onu bağlam olarak okur.

Tarayıcıdan bir karar çalıştırın

Kurulum yok — yeni ziyaretçilere 2 ücretsiz krediyle oyun alanında gerçek bir çağrı yapın.