TypeScript rehberi
TypeScript'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, tamamen tiplenmiş TypeScript 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
Sözleşmeyi tanımlayın
İsteği bir kez tipleştirin ve her yerde kullanın. model bir literal union'dır, sabit ID asla yazım hatasına dönüşmez. questions, kimliklerinizle anahtarlanmış bir record'dur; her biri noul, choice veya score tipindedir.
Yanıtları type üzerinden ayrıştırılmış bir union olarak tipleştirin — yanıt işlemeyi güvenli yapan budur: noul yanıtında noul, choice yanıtında choice ve probabilities vardır — type'a göre daraltmak doğru alanları verir.
TypeScript
interface DecisionQuestion {
type: 'noul' | 'choice' | 'score'
instructions: string
criteria?: Record<string, string> | string[]
}
interface DecisionRequest {
model: 'decisions-1' | 'decisions-latest'
state: string | Record<string, unknown> | unknown[]
questions: Record<string, DecisionQuestion>
}
interface DecisionAnswers {
[questionId: string]:
| { type: 'noul'; noul: number }
| { type: 'choice'; choice: string; probabilities: Record<string, number>; confidence: number }
| { type: 'score'; score: number; legend: string[]; probabilities: Record<string, number>; confidence: number }
}Çağrıyı yapın
Bearer anahtarıyla tek POST. satisfies DecisionRequest gövdeyi derleme zamanında denetler; AbortSignal.timeout takılan çağrıların pipeline'ı kilitlemesini önler. answers'ı okumadan önce type alanına göre daraltın.
TypeScript
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(request satisfies DecisionRequest),
signal: AbortSignal.timeout(30000),
})
const { answers } = (await res.json()) as { answers: DecisionAnswers }
const team = answers.team
if (team.type === 'choice' && team.confidence >= 0.7) {
routeTo(team.choice)
}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.
TypeScript
async function decide(body: DecisionRequest, attempts = 3): Promise<DecisionAnswers> {
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() as { answers: DecisionAnswers }).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 tipli 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.
TypeScript
// Keep the decision behind one typed function. Swap the HTTP
// layer when OpenAI publishes its schema — callers never change.
export async function routeTicket(text: string): Promise<string> {
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.type === 'choice' && 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.
Tipler için kod üreticisine ihtiyacım var mı?
Hayır — bu sayfadaki arayüzler tüm sözleşmeyi kapsıyor. Projenize kopyalayın; denetlenecek kadar küçük ve sağlayıcılar arasında stabildir.
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 1 ücretsiz krediyle oyun alanında gerçek bir çağrı yapın.