Cara Menggunakan OpenAI Decisions API

Cara menggunakan API Keputusan OpenAI: panggilan pertama di curl, Python, dan JavaScript, predikat, pilihan dan skor jawaban, masukan gambar, dan tes Apidog.

Ashley Innocent

Ashley Innocent

10 October 2026

Cara Menggunakan OpenAI Decisions API

Apidog untuk Perusahaan

Penerapan On-Premises

SSO & RBAC

Sesuai SOC 2

Jelajahi Apidog Enterprise

Untuk menggunakan OpenAI Decisions API, kirimkan permintaan POST ke https://api.openai.com/v1/decisions dengan "model": "gpt-6-luna", sebuah input (teks, gambar, atau keduanya), dan array questions di mana setiap pertanyaan adalah predicate, choice, atau score. Anda akan mendapatkan kembali jawaban bertipe dengan probabilitas alih-alih teks untuk diurai, dan Anda membayar $0,10 per 1 Juta token input, tanpa biaya output, baca-cache, atau tulis-cache. Endpoint ini dalam versi beta publik per 6 Oktober 2026.

Panduan ini mencakup cara mendapatkan kunci, panggilan pertama di curl, Python, dan JavaScript, membaca setiap jenis jawaban, tiga pertanyaan pada satu tiket dukungan, input gambar, ambang batas, dan pengaturan pengujian di Apidog. Untuk kapan memilih endpoint sama sekali, mulailah dengan apa itu OpenAI Decisions API.

button

Sekilas Permintaan Decisions API

Bidang Apa yang dibutuhkan
model gpt-6-luna (satu-satunya model yang tersedia dalam beta)
input Sebuah string, atau array pesan user yang content-nya adalah string atau bagian-bagian bertipe input_text dan input_image
questions[].type predicate, choice, atau score
questions[].instructions Wajib; pertanyaan dalam kata-kata biasa
questions[].name Opsional; dikembalikan dalam jawaban (null jika dihilangkan)
questions[].choices Hanya choice; 2 hingga 255 objek {value, description} unik, value berupa string atau boolean
questions[].levels Hanya score; objek {label, description} yang berurutan, terendah dahulu, indeks mulai dari 0
safety_identifier ID pengguna akhir buram opsional, hingga 128 karakter

Sumber: referensi Decisions API. Tidak ada temperature, stream, tools, atau text.format pada endpoint ini.

Dapatkan kunci dan lakukan panggilan pertama

Buat kunci di dashboard OpenAI ( panduan kunci OpenAI API membahasnya), ekspor sebagai OPENAI_API_KEY, dan jangan pernah menempelkannya ke dalam kode. Kemudian ajukan satu pertanyaan ya/tidak:

curl https://api.openai.com/v1/decisions \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-6-luna",
    "input": "The box arrived crushed and the screen is cracked.",
    "questions": [
      {"type": "predicate", "name": "damaged",
       "instructions": "Does the customer report a damaged item?"}
    ]
  }'

Respons memiliki tiga bidang tingkat atas: model, answers, dan usage. Ini adalah bentuk dari referensi OpenAI, dengan output_tokens pada 0 karena endpoint tidak menagih output:

{
  "model": "gpt-6-luna",
  "answers": [
    {"type": "predicate", "name": "damaged", "probability": 0.95}
  ],
  "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
  }
}

Panggilan yang sama di Python (SDK 3.26.0 atau lebih baru):

from openai import OpenAI

client = OpenAI()  # reads OPENAI_API_KEY from the environment

decision = client.decisions.create(
    model="gpt-6-luna",
    input="The box arrived crushed and the screen is cracked.",
    questions=[
        {"type": "predicate", "name": "damaged",
         "instructions": "Does the customer report a damaged item?"}
    ],
)
print(decision.answers[0].probability)

Dan di JavaScript (SDK 7.30.0 atau lebih baru):

import OpenAI from "openai";

const client = new OpenAI();

const decision = await client.decisions.create({
  model: "gpt-6-luna",
  input: "The box arrived crushed and the screen is cracked.",
  questions: [
    { type: "predicate", name: "damaged",
      instructions: "Does the customer report a damaged item?" },
  ],
});
console.log(decision.answers[0].probability);

Baca jawaban berdasarkan jenis

Jawaban kembali dalam urutan pertanyaan Anda, masing-masing dengan type. Ganti berdasarkan jenis, karena setiap pertanyaan dapat kembali sebagai refusal.

for a in decision.answers:
    if a.type == "refusal":
        send_to_review(a.name)
    elif a.type == "predicate":
        flag = a.probability > 0.9
    elif a.type == "choice":
        route = a.choice if a.confidence > 0.8 else "review"
    elif a.type == "score":
        priority = round(a.score)

Panduan OpenAI menarik garis seperti ini: choice untuk kategori tanpa urutan, seperti departemen; score untuk level berurutan, seperti tingkat keparahan.

Tiga pertanyaan pada satu tiket dukungan

Pertanyaan independen berbagi satu permintaan dan satu input, dan setiap pertanyaan dapat menggunakan jenis yang berbeda. Berikut adalah predikat, pilihan, dan skor pada satu tiket:

{
  "model": "gpt-6-luna",
  "input": "I was charged twice for my order.",
  "questions": [
    {"type": "predicate", "name": "refund_requested",
     "instructions": "Is the customer asking for money back?"},
    {"type": "choice", "name": "department",
     "instructions": "Which team should handle this ticket?",
     "choices": [
       {"value": "billing", "description": "Charges, refunds, invoices"},
       {"value": "technical", "description": "Bugs and errors in the product"},
       {"value": "shipping", "description": "Delivery and tracking"},
       {"value": "other", "description": "Anything else"}
     ]},
    {"type": "score", "name": "urgency",
     "instructions": "How urgent is this ticket?",
     "levels": [
       {"label": "low", "description": "No time pressure"},
       {"label": "medium", "description": "Needs a reply this week"},
       {"label": "high", "description": "Customer is blocked or losing money"}
     ]}
  ]
}

Array answers kembali dalam urutan yang sama. Nilai choice di bawah adalah nilai panduan OpenAI untuk input yang persis sama ini; nilai predikat dan skor adalah ilustrasi:

"answers": [
  {"type": "predicate", "name": "refund_requested", "probability": 0.88},
  {"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},
  {"type": "score", "name": "urgency", "score": 1.6,
   "probabilities": [
     {"value": 0, "label": "low", "probability": 0.05},
     {"value": 1, "label": "medium", "probability": 0.30},
     {"value": 2, "label": "high", "probability": 0.65}
   ],
   "confidence": 0.65}
]

Dua aturan dari panduan: sertakan cadangan seperti other ketika kategori Anda tidak mencakup setiap input, dan tulis pertanyaan berdasarkan kriteria yang dapat diamati sehingga level skor yang berdekatan memiliki arti yang berbeda. Jika keputusan kedua bergantung pada jawaban pertama, kirimkan permintaan terpisah.

Input gambar

Lewatkan gambar sebagai bagian konten di dalam pesan user. Panduan ini mendokumentasikan URL data base64 sebaris:

{
  "model": "gpt-6-luna",
  "input": [{
    "role": "user",
    "content": [
      {"type": "input_text", "text": "Photo attached to a return request."},
      {"type": "input_image", "image_url": "data:image/jpeg;base64,/9j/4AAQ..."}
    ]
  }],
  "questions": [
    {"type": "predicate", "name": "visible_damage",
     "instructions": "Is the product visibly damaged?"}
  ]
}

Referensi API juga mencantumkan URL HTTP(S) yang dapat diakses publik, hingga 128 gambar di semua pesan dalam satu permintaan, dan bidang detail opsional (low, high, auto, original), jadi uji URL yang di-host terhadap akun Anda sendiri sebelum mengandalkannya. Input file_id tidak didukung di kedua halaman.

Pilih ambang batas dari contoh berlabel

OpenAI tidak menerbitkan angka akurasi atau kalibrasi untuk endpoint. Panduannya adalah menggunakan contoh berlabel dari aplikasi Anda sendiri untuk menetapkan ambang batas untuk perutean, pemfilteran, atau peninjauan, berdasarkan biaya positif palsu versus negatif palsu. Dalam praktiknya, itu berarti CSV kecil dari tiket nyata dengan departemen yang dipilih oleh manusia, dijalankan melalui permintaan yang sama, sehingga Anda dapat melihat di mana confidence memisahkan rute bersih dari yang membutuhkan orang. Bagian selanjutnya membangun loop itu.

Uji Decisions API di Apidog

Permintaan yang disimpan membuat penyetelan ambang batas dan pemeriksaan regresi dapat diulang. Berikut pengaturannya di Apidog:

  1. Simpan kunci sebagai variabel lingkungan. Buat lingkungan, tambahkan OPENAI_API_KEY sebagai variabel rahasia (Lingkungan Apidog dan variabel rahasia menunjukkan pengaturannya), dan atur header Authorization ke Bearer {{OPENAI_API_KEY}}. Kunci tidak pernah masuk ke isi permintaan bersama.
  2. Simpan satu permintaan per jenis pertanyaan. Buat POST ke https://api.openai.com/v1/decisions dengan Content-Type: application/json, tempel pertanyaan choice dari contoh tiket di atas secara terpisah, dan simpan. Gandakan untuk versi predikat dan skor.
  3. Tambahkan pernyataan JSONPath. Pada permintaan pilihan: status adalah 200, $.answers[0].type sama dengan choice, $.answers[0].choice sama dengan billing, $.answers[0].confidence lebih besar dari 0.8, dan $.usage.output_tokens sama dengan 0. Untuk predikat kerusakan, nyatakan $.answers[?(@.name=='damaged')].probability lebih besar dari 0.9. Perubahan kata dalam instruksi Anda, atau perubahan perilaku model, sekarang menggagalkan pengujian alih-alih salah mengarahkan tiket.
  4. Jalankan di atas tiket berlabel. Bangun skenario pengujian dari permintaan yang disimpan dan lampirkan CSV kecil dengan dua kolom, ticket_text dan expected_department. Petakan {{ticket_text}} ke dalam input dan nyatakan $.answers[0].choice sama dengan {{expected_department}}. Laporan jalankan menunjukkan confidence untuk setiap baris, yang merupakan data yang OpenAI katakan kepada Anda untuk menetapkan ambang batasnya. Titik di bawah mana setiap rute yang salah berada menjadi ambang batas "rute otomatis" Anda dalam kode.
  5. Mengejek array answers untuk frontend. Arahkan router atau UI ke mock dari endpoint yang sama yang mengembalikan jawaban choice dengan confidence di atas dan di bawah ambang batas Anda, ditambah refusal, sehingga jalur antrean peninjauan dibangun sebelum Anda menghabiskan token input. Respons mock bersyarat di Apidog membahas pengalihan mock pada konten permintaan.
  6. Jalankan skenario di CI. Ekspor token akses, lalu tambahkan langkah ke pipeline Anda:
apidog run --access-token "$APIDOG_ACCESS_TOKEN" \
  -t "$SCENARIO_ID" -e "$ENV_ID" -r cli,junit

Pernyataan yang gagal menggagalkan build, jadi penurunan confidence yang tenang tertangkap sebelum deploy daripada di antrean dukungan. Untuk pola yang lebih luas, lihat pengujian aplikasi LLM.

Tangani kesalahan dan kasus tepi

FAQ

Berapa biaya Decisions API? $0.10 per 1 Juta token input pada gpt-6-luna, tanpa biaya output, baca-cache, atau tulis-cache. Tiket 500 token dengan tiga pertanyaan berharga 500 / 1.000.000 x $0.10 = $0.00005, jadi satu juta tiket semacam itu berharga $50. Input konteks panjang lebih dari 272K token adalah 2x, dan pemrosesan regional menambahkan 10%.

Apakah Decisions API gratis? Tidak. Tidak ada tingkatan Decisions gratis. Jika Anda ingin mencoba GPT-6 Luna tanpa membayar, posting rute gratis GPT-6 Luna mencantumkan apa yang ada.

Seberapa cepat itu? OpenAI mengatakan sekitar 10x lebih cepat daripada Responses API dan tidak mempublikasikan angka latensi absolut. Seorang pengembang di forum OpenAI melaporkan keputusan gambar dalam sekitar 0,8 detik.

Model mana yang berfungsi dengan Decisions API? Hanya gpt-6-luna hari ini. Ini adalah endpoint di Luna, bukan model terpisah. Lihat apa itu GPT-6 Luna untuk model itu sendiri.

Kapan saya harus menggunakan Output Terstruktur sebagai gantinya? Ketika Anda memerlukan objek dalam skema JSON Anda sendiri, seperti bidang yang diekstraksi atau penjelasan tertulis, atau panggilan fungsi ketika model harus meminta alat dengan argumen. Posting Decisions API vs Responses API menunjukkan tiket yang sama dilakukan dengan kedua cara.

Bagaimana perbandingannya dengan Jev? Keduanya mengembalikan jawaban bertipe dengan probabilitas dan hanya menagih input; Jev hanya teks dengan biaya $0,042 per 1 Juta. Perbandingan Decisions API vs Jev memiliki tabel lengkap.

Langkah selanjutnya

Kirimkan permintaan tiket tiga pertanyaan dari panduan ini, lalu jalankan di atas 20 tiket berlabel Anda sendiri dan lihat di mana confidence memisahkan rute yang benar dari yang salah. Kemudian unduh Apidog untuk menyimpan permintaan, skenario CSV, dan pernyataan bersama, sehingga ambang batas yang Anda pilih hari ini diperiksa ulang pada setiap penyebaran.

Mengembangkan API dengan Apidog

Apidog adalah alat pengembangan API yang membantu Anda mengembangkan API dengan lebih mudah dan efisien.