Gunakan Decisions API ketika tugasnya adalah untuk mengklasifikasikan, merutekan, menilai, atau membatasi sesuatu dan Anda menginginkan probabilitas kembali: API ini berjalan di GPT-6 Luna, mengembalikan jawaban berjenis alih-alih teks, hanya mengenakan biaya input sebesar $0,10 per 1 juta token tanpa biaya output, baca-cache, atau tulis-cache, dan OpenAI mengatakan API ini sekitar 10x lebih cepat daripada Responses API. Gunakan Responses API ketika Anda membutuhkan teks yang dihasilkan, JSON dalam skema Anda sendiri, panggilan alat, streaming, atau status percakapan. Decisions memasuki beta publik pada 2026-10-06.
Pos ini menjalankan satu tugas (merutekan tiket dukungan) melalui kedua endpoint, membandingkan apa yang dikembalikan masing-masing, menghitung biaya sekali, dan ditutup dengan catatan migrasi serta cara untuk menguji keduanya dalam satu proyek Apidog. Untuk anatomi endpoint, mulailah dengan pilar Decisions API; untuk dasar, lihat panduan Responses API kami.
Matriks fitur
| Decisions API | Responses API (GPT-6 Luna) | |
|---|---|---|
| Endpoint | POST /v1/decisions |
POST /v1/responses |
| Output | jawaban predicate, choice, score (ditambah refusal) dengan probabilitas dan kepercayaan dari endpoint |
Teks yang dihasilkan, atau JSON yang mengikuti skema Anda melalui text.format |
| Skema JSON Anda sendiri | Tidak | Ya, json_schema dengan strict: true |
| Alat / pemanggilan fungsi | Tidak | Ya |
| Streaming | Tidak | Ya |
| Status percakapan | Tidak | Ya |
| Prompt caching | Tidak ada biaya cache; menurut forum OpenAI, belum ada caching | Ya, input yang di-cache $0,01 per 1 juta |
| Batch | Tidak didokumentasikan | Ya, 50% dari standar |
| Gambar | Ya, URL data base64; referensi juga mencantumkan URL HTTP(S) publik, hingga 128 per permintaan | Ya, Luna menerima teks dan gambar |
| Keputusan berantai (bergantung) | Permintaan terpisah | Satu respons yang dihasilkan dapat membawa bidang-bidang yang bergantung |
| Harga per 1 juta, konteks singkat | $0,10 input; tanpa biaya output | $0,10 input, $0,50 output termasuk token penalaran |
| ZDR / HIPAA | Didukung untuk pelanggan yang memenuhi syarat; pemrosesan regional di AS dan UE | Tidak dibahas dalam perbandingan ini; lihat halaman kontrol data OpenAI |
Setiap baris berasal dari panduan Decisions OpenAI, referensi API, dan halaman harga.
Pekerjaan yang sama dengan dua cara: merutekan tiket dukungan
Tiket berbunyi “Saya ditagih dua kali untuk pesanan saya.” Departemen-departemennya adalah penagihan, teknis, pengiriman, dan lainnya. Berikut adalah permintaan Responses dengan Output Terstruktur, yang merupakan cara kebanyakan tim melakukannya saat ini:
curl https://api.openai.com/v1/responses \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-6-luna",
"input": "Route this support ticket to one department.\n\nTicket: I was charged twice for my order.",
"text": {
"format": {
"type": "json_schema",
"name": "ticket_route",
"strict": true,
"schema": {
"type": "object",
"properties": {
"department": {
"type": "string",
"enum": ["billing", "technical", "shipping", "other"]
}
},
"required": ["department"],
"additionalProperties": false
}
}
}
}'
Dan permintaan Decisions untuk tiket yang sama:
curl https://api.openai.com/v1/decisions \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-6-luna",
"input": "I was charged twice for my order.",
"questions": [
{
"type": "choice",
"name": "department",
"instructions": "Which department should handle this ticket?",
"choices": [
{"value": "billing", "description": "Charges, refunds, invoices"},
{"value": "technical", "description": "Bugs, errors, login problems"},
{"value": "shipping", "description": "Delivery, tracking, returns in transit"},
{"value": "other", "description": "Anything else"}
]
}
]
}'
Body Responses membawa pertanyaan di dalam prompt dan jawaban yang diizinkan di dalam skema. Body Decisions membawa tiket mentah sebagai input dan pertanyaan sebagai choice dengan 2 hingga 255 nilai unik; ia tidak memiliki bidang temperature, reasoning, stream, atau text, karena tidak ada di endpoint tersebut.
Apa yang dikembalikan masing-masing
Responses mengembalikan teks yang dihasilkan. Dengan skema yang ketat, teks tersebut adalah JSON yang valid, jadi setelah parsing Anda memegang label:
{"department": "billing"}
Jika Anda menginginkan angka kepercayaan, Anda menambahkan bidang ke skema dan meminta model untuk menuliskannya; yang kembali adalah teks yang dihasilkan yang terlihat seperti probabilitas, bukan yang terukur.
Decisions mengembalikan label ditambah distribusi di baliknya. Angka-angka di bawah ini adalah contoh panduan OpenAI untuk input yang persis sama:
{
"model": "gpt-6-luna",
"answers": [
{
"type": "choice",
"name": "department",
"choice": "billing",
"probabilities": [
{"value": "billing", "probability": 0.95},
{"value": "technical", "probability": 0.02},
{"value": "shipping", "probability": 0.01},
{"value": "other", "probability": 0.02}
],
"confidence": 0.93
}
]
}
Objek usage mengikuti answers (ditampilkan di bagian biaya). Tanpa parser, tanpa regex. Bidang confidence adalah yang Anda gunakan sebagai ambang batas, dan panduan OpenAI adalah mengatur ambang batas tersebut dari contoh berlabel Anda sendiri, karena tidak ada angka akurasi atau kalibrasi yang dipublikasikan. Penolakan tiba sebagai {"type": "refusal", "name": "department"}; pertanyaan lain dalam permintaan yang sama tetap mendapatkan jawaban.
Biaya: perhitungan sekali
Kedua endpoint mengenakan biaya input Luna sebesar $0,10 per 1 juta token dalam konteks singkat (hingga 272 ribu token input). Perbedaannya ada pada output. Ambil tiket 500-token untuk 1.000.000 permintaan:
- Decisions: 500 / 1.000.000 x $0,10 = $0,00005 per permintaan, jadi $50 untuk satu juta, tanpa output atau baris cache untuk ditambahkan.
- Responses: input $50 yang sama, ditambah output seharga $0,50 per 1 juta. Label JSON 40-token adalah 40 / 1.000.000 x $0,50 = $0,00002 per permintaan, atau $20 untuk satu juta. Kemudian tambahkan token penalaran, yang Luna kenakan sebagai output dengan harga yang sama $0,50.
Jadi, selisih yang terlihat pada label saja adalah $50 berbanding $70. Selisih yang lebih besar adalah pada baris penalaran, dan cara jujur untuk menyatakannya adalah bahwa Decisions tidak mengenakan biaya token output sama sekali; kedua penghitung membaca 0 dalam contoh referensi OpenAI:
"usage": {
"input_tokens": 42,
"input_tokens_details": {"cached_tokens": 0, "cache_write_tokens": 0},
"output_tokens": 0,
"output_tokens_details": {"reasoning_tokens": 0},
"total_tokens": 42
}
Dua peringatan. Responses memiliki fitur yang tidak dimiliki Decisions: reasoning.effort bisa diturunkan hingga none di Luna, prompt caching mengurangi input berulang menjadi $0,01 per 1 juta, dan Batch API memotong setengah tarif standar. Tak satu pun dari itu didokumentasikan untuk Decisions. Dan input konteks panjang (lebih dari 272 ribu token) menggandakan tarif input pada keduanya, jadi permintaan Decisions yang panjang adalah $0,20 per 1 juta input (berasal dari pengganda halaman harga); pemrosesan regional menambahkan 10%.
Kecepatan
OpenAI mengatakan Decisions API sekitar 10x lebih cepat daripada Responses API. Tidak ada angka latensi absolut yang dipublikasikan, jadi perlakukan klaim tersebut sebagai arah daripada anggaran dan ukur p50 dan p95 Anda sendiri sebelum Anda memindahkan jalur kritis. Seorang pengembang di forum OpenAI melaporkan keputusan input gambar kembali dalam sekitar 0,8 detik pada koneksi lambat; itu adalah anekdot, bukan tolok ukur. Arah ini masuk akal: Responses menghasilkan token, termasuk penalaran, dan Anda menunggu yang terakhir.
Aturan keputusan
Pilih Decisions ketika outputnya adalah salah satu dari berikut ini:
- Ya/tidak dengan probabilitas (
predicate): “Apakah pesan ini spam?” - Salah satu dari N kategori yang tidak berurutan (
choice): departemen, niat, model atau alat mana yang akan dipanggil selanjutnya. Sertakan cadangan seperti “lain-lain”. - Tingkat yang terurut (
score): tingkat keparahan, prioritas, urgensi. Skor adalah rata-rata berbobot probabilitas dari indeks tingkat berbasis 0, jadi 1.1 berarti antara tingkat 1 dan tingkat 2, mendekati 1. - Sebuah gerbang: bandingkan
confidenceatauprobabilitydengan ambang batas dan kirim item dengan kepercayaan rendah ke antrean manusia.
Pilih Responses ketika salah satu dari ini benar:
- Anda membutuhkan teks yang akan dibaca orang: ringkasan, balasan, penjelasan.
- Anda membutuhkan objek dalam bentuk Anda sendiri: bidang yang diekstrak, struktur bersarang, array dengan panjang yang tidak diketahui. Itu adalah wilayah Output Terstruktur, dan panduan OpenAI mengatakannya.
- Model harus meminta panggilan alat dengan argumen: pemanggilan fungsi.
- Anda membutuhkan streaming, status percakapan, atau model selain Luna.
- Satu keputusan bergantung pada yang lain dan Anda menginginkan keduanya dalam satu perjalanan pulang pergi. Decisions menampung beberapa pertanyaan independen pada satu input, tetapi keputusan yang bergantung memerlukan permintaan terpisah.
Banyak pipeline menginginkan keduanya: Decisions untuk mengklasifikasikan dan membatasi, Responses untuk menulis balasan.
Migrasi pengklasifikasi dari Responses ke Decisions
Jika Anda sudah merutekan tiket dengan skema enum yang ketat, perpindahannya kecil:
- Pertahankan
inputyang sama, dipreteli kembali ke tiket mentah; pertanyaan dipindahkan keluar dari prompt. - Letakkan pertanyaan di
questionssebagaichoice, dengan nilai enum Anda sebagaichoices[].valuedandescriptionsatu baris masing-masing. Nilai dapat berupa string atau boolean, dantrueserta"true"berbeda. - Hapus parser. Baca
answers[0].choicedananswers[0].confidence; jawaban tiba dalam urutan yang Anda minta dan menggemakannameyang Anda atur. Kemudian atur ambang batas dari sampel berlabel. - Periksa jalur input. Decisions hanya menerima pesan pengguna: tidak ada peran sistem atau asisten, tidak ada panggilan fungsi, tidak ada file, tidak ada
file_id. Gabungkan aturan prompt sistem ke dalaminstructionsatau deskripsi pilihan. Gambar masuk sebagai URL data base64; referensi juga mencantumkan URL HTTP(S) publik, jadi uji gambar yang di-hosting terlebih dahulu. - Pisahkan rantai. “Klasifikasikan, lalu jika penagihan putuskan kelayakan pengembalian dana” menjadi dua permintaan.
Uji keduanya dalam satu proyek Apidog
Cara paling bersih untuk memutuskan adalah dengan menjalankan kedua permintaan terhadap tiket berlabel yang sama dan membandingkannya. Di Apidog, simpan kunci sekali sebagai variabel lingkungan dan referensikan {{OPENAI_API_KEY}} di header Authorization: Bearer dari kedua permintaan yang disimpan, sehingga tidak ada kunci literal yang masuk ke body yang disimpan.
Berikan kedua permintaan penegasan yang sama: departemen sama dengan billing. Pada permintaan Decisions, itu adalah penegasan JSONPath pada $.answers[0].choice, dengan $.answers[0].confidence lebih besar dari 0,8 dan $.usage.output_tokens sama dengan 0 di sampingnya. Pada permintaan Responses, label berada di dalam teks yang dihasilkan, jadi skrip pasca-permintaan singkat menguraikannya menjadi variabel yang diperiksa oleh penegasan. Kemudian bandingkan usage pada kedua respons: Decisions melaporkan nol token output dan penalaran, Responses tidak.
Ubah pasangan tersebut menjadi skenario pengujian berbasis data melalui CSV teks tiket dan departemen yang diharapkan, dan jalankan untuk melihat berapa banyak tiket yang dirutekan dengan benar oleh setiap endpoint di atas garis kepercayaan Anda. Mock array answers agar router dapat dibangun terlebih dahulu, seperti dalam respons mock kondisional, dan jalankan skenario di CI dengan Apidog CLI sehingga perubahan kata atau alias model akan menyebabkan pengujian gagal alih-alih salah merutekan tiket. Lihat pengujian aplikasi LLM untuk pola penegasan lebih lanjut.
FAQ
Bisakah Responses API mengembalikan probabilitas seperti Decisions? Tidak sebagai nilai terukur. Bidang confidence dalam skema JSON memberi Anda angka yang ditulis model, yang merupakan teks yang dihasilkan. Decisions mengembalikan probabilitas atas opsi yang Anda berikan dari endpoint itu sendiri.
Bisakah saya menggunakan model selain GPT-6 Luna di Decisions? Tidak. Panduan menyatakan gpt-6-luna adalah satu-satunya model yang tersedia saat ini. Lihat ikhtisar GPT-6 Luna kami.
Bagaimana Decisions berbeda dari Jev milik TypeSafe? Keduanya mengembalikan jawaban berjenis dengan probabilitas dan hanya mengenakan biaya input; mereka berbeda dalam harga, input, dan bentuk respons. Lihat Decisions API vs Jev.
Apakah Decisions API gratis? Tidak. API ini mengenakan biaya $0,10 per 1 juta token input, tanpa tingkat Decisions gratis yang didokumentasikan. Untuk rute gratis ke Luna itu sendiri, lihat cara menggunakan GPT-6 Luna secara gratis.
Langkah selanjutnya
Ambil satu pengklasifikasi yang Anda jalankan melalui Responses hari ini, bangun kembali sebagai pertanyaan choice, dan jalankan keduanya pada 50 tiket berlabel di Apidog dengan penegasan yang sama. Jika ambang kepercayaan terpenuhi dan penggunaan menunjukkan nol token output, Anda memiliki jawabannya. Unduh Apidog, lalu ikuti cara menggunakan Decisions API untuk panggilan pertama dan panduan pengujian lengkap.
