API ChatGPT berkembang pesat, sering melanggar kontrak, dan menagih Anda per token bahkan ketika pengujian Anda salah. Respons streaming gagal secara berbeda dari non-streaming. Pemanggilan fungsi menambahkan lapisan skema JSON yang tidak selalu cocok dengan apa yang dikembalikan model. Batas laju tercapai secara diam-diam dalam produksi dan bukan di konsol pengembang Anda. Jika Anda men-debug semua ini di Python REPL atau loop curl, Anda akan menghabiskan uang dan waktu.
Panduan ini membahas alur kerja pengujian API ChatGPT secara lengkap di dalam Apidog: autentikasi, penyelesaian chat pertama, streaming SSE, pemanggilan fungsi, penanganan kesalahan, pemeriksaan batas laju, dan respons tiruan untuk pekerjaan frontend paralel. Pada akhirnya, Anda akan memiliki proyek Apidog yang dapat digunakan kembali yang menangkap pergeseran kontrak OpenAI sebelum mencapai produksi.
TL;DR
- Tambahkan URL dasar ChatGPT
https://api.openai.com/v1sebagai lingkungan Apidog, simpan kunci API sebagai variabel rahasia, dan terapkan otentikasi Bearer di tingkat folder. - Buat permintaan
/chat/completionssekali, simpan, dan gunakan kembali untuk setiap model (GPT-5.5, GPT-5.5 Pro, GPT-4o, o3). - Apidog menangani streaming SSE secara native, sehingga Anda melihat keluaran token-per-token di panel respons tanpa alat tambahan.
- Pemanggilan fungsi hanyalah array
toolsdalam body permintaan; Apidog memvalidasi JSONtool_callsyang dikembalikan terhadap skema Anda. - Buat tiruan ChatGPT di dalam Apidog saat frontend Anda siap sebelum anggaran kunci OpenAI Anda habis.
- Simpan permintaan yang berfungsi sebagai skenario pengujian dengan penegasan pada kode status,
choices[0].message.content, danusage.total_tokens. Jalankan di CI sebelum setiap perubahan prompt.
Mengapa perlu menguji API ChatGPT sama sekali
Permukaan API OpenAI terlihat stabil. Padahal tidak. Antara Januari 2024 dan sekarang, tim telah merilis atau mengubah:
function_callmenjaditool_calls(dua bentuk yang bersaing masih ada)- Mode ketat untuk skema alat
- Model penalaran (
o1,o3) yang menghilangkan kontroltemperaturedantop_p response_format: { type: "json_schema" }dengan penerapan versi- Perilaku streaming untuk pemanggilan alat (delta datang secara terpisah, Anda harus menggabungkannya)
- Endpoint baru
/v1/responsesyang tumpang tindih dengan/v1/chat/completions
Jika Anda menghubungkan salah satu dari ini langsung ke aplikasi Anda dan melewatkan lapisan pengujian, PR perubahan prompt Anda berikutnya akan mengirimkan regresi yang tidak akan Anda lihat sampai pengguna mengeluh. Koleksi permintaan di Apidog memberi Anda kontrak yang dapat Anda kontrol. Anda dapat memutar ulang permintaan yang tepat, membandingkan respons, dan gagal dengan keras ketika bentuknya berubah.
Langkah 1: Tambahkan OpenAI sebagai lingkungan di Apidog
Buka Apidog dan buat proyek baru. Di dalam proyek, buka Manajemen Lingkungan (dropdown kanan atas) dan tambahkan lingkungan bernama OpenAI Prod:
| Variabel | Nilai |
|---|---|
baseUrl |
https://api.openai.com/v1 |
OPENAI_API_KEY |
sk-proj-... (simpan sebagai Rahasia) |
defaultModel |
gpt-5.5 |
Tandai OPENAI_API_KEY sebagai rahasia agar tersembunyi di ruang kerja bersama dan tidak pernah ditulis ke koleksi yang diekspor. Apidog menyimpan rahasia per-pengguna, sehingga rekan satu tim yang menarik proyek akan melihat nama variabel tetapi menyediakan kunci mereka sendiri.
Langkah 2: Atur otentikasi Bearer di tingkat folder
Buat folder bernama ChatGPT di dalam proyek. Buka pengaturan folder, masuk ke Auth, pilih Bearer Token, dan tempel {{OPENAI_API_KEY}}. Setiap permintaan di dalam folder mewarisi header ini. Anda tidak perlu lagi menempel Authorization: Bearer sk-... ke setiap permintaan, dan rotasi kunci hanyalah satu kali edit.
Ini adalah detail kecil yang membuat Apidog lebih cepat daripada alur kerja curl mentah: otentikasi berada di satu tempat, body permintaan tetap bersih.Langkah 3: Bangun permintaan penyelesaian chat pertama
Di dalam folder ChatGPT, buat permintaan baru:
- Metode:
POST - URL:
{{baseUrl}}/chat/completions - Body (JSON):
{
"model": "{{defaultModel}}",
"messages": [
{ "role": "system", "content": "Anda adalah seorang insinyur backend senior. Jawab dalam di bawah 100 kata." },
{ "role": "user", "content": "Apa perbedaan antara metode HTTP idempoten dan aman?" }
],
"temperature": 0.2
}
Tekan Kirim. Anda akan mendapatkan 200 dengan bidang choices[0].message.content yang berisi jawaban dan blok usage dengan jumlah token. Simpan permintaan sebagai chat-completion-basic.
Jika Anda mendapatkan 401, kunci Anda tidak dimuat. Periksa dropdown lingkungan di kanan atas apakah sudah diatur ke OpenAI Prod. Jika Anda mendapatkan 429, Anda telah mencapai batas laju, yang akan dibahas pada langkah berikutnya.
Langkah 4: Uji respons streaming (SSE)
Streaming adalah titik di mana sebagian besar integrasi ChatGPT rusak. Responsnya adalah text/event-stream, bukan JSON, dan setiap bagian adalah baris data: {...} dengan delta parsial. Apidog mendukung SSE secara native.
Duplikat chat-completion-basic, ganti nama menjadi chat-completion-stream, dan tambahkan "stream": true ke body:
{
"model": "{{defaultModel}}",
"stream": true,
"messages": [
{ "role": "user", "content": "Streaming 100 bilangan prima pertama, dipisahkan koma." }
]
}
Tekan Kirim. Panel respons beralih ke tampilan streaming dan menampilkan setiap bagian data: saat tiba. Anda melihat frame SSE yang sebenarnya, bukan hanya teks yang digabungkan. Itu adalah tampilan yang Anda perlukan saat men-debug delta yang salah format atau terminator [DONE] yang hilang.
Yang perlu diperhatikan:
- Frame terakhir adalah string literal
data: [DONE]. Jika klien Anda tidak menanganinya, itu akan memicu kesalahan penguraian JSON. usagetidak ada dalam respons streaming kecuali Anda meneruskan"stream_options": { "include_usage": true }. Tambahkan jika pipeline penagihan Anda bergantung pada jumlah token per panggilan.- Delta pemanggilan alat tiba secara terpisah:
index, laluid, lalufunction.name, lalufunction.argumentsyang terakumulasi karakter demi karakter. Uji ini secara eksplisit.
Langkah 5: Uji pemanggilan fungsi dan penggunaan alat
Pemanggilan fungsi adalah tempat paling umum di mana perubahan prompt secara diam-diam merusak kode downstream. Model mengembalikan array tool_calls; tugas Anda adalah memvalidasi argumen yang diurai sebagai Skema JSON yang Anda daftarkan.
Buat permintaan chat-completion-tools dengan body ini:
{
"model": "{{defaultModel}}",
"messages": [
{ "role": "user", "content": "Bagaimana cuaca di Singapura saat ini?" }
],
"tools": [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "Dapatkan cuaca saat ini untuk suatu kota.",
"parameters": {
"type": "object",
"properties": {
"city": { "type": "string" },
"unit": { "type": "string", "enum": ["c", "f"] }
},
"required": ["city"]
},
"strict": true
}
}
],
"tool_choice": "auto"
}
```Respons yang benar memiliki choices[0].message.tool_calls[0].function.name === "get_weather" dan function.arguments adalah string JSON yang diurai menjadi { "city": "Singapore", "unit": "c" } (atau serupa).
Di tab Tests pada permintaan, tambahkan:
pm.test("Alat dipanggil", () => {
const body = pm.response.json();
const call = body.choices[0].message.tool_calls?.[0];
pm.expect(call?.function?.name).to.eql("get_weather");
});
pm.test("Argumen diurai sebagai JSON yang valid", () => {
const body = pm.response.json();
const args = JSON.parse(body.choices[0].message.tool_calls[0].function.arguments);
pm.expect(args.city).to.be.a("string");
});
Jalankan. Pengujian hijau sekarang adalah kontrak Anda. Ketika OpenAI mengubah bentuknya, pengujian akan berubah merah sebelum traffic produksi Anda terpengaruh.
Langkah 6: Tangani kesalahan dan batas laju secara eksplisit
Integrasi ChatGPT produksi gagal dalam lima cara yang dapat diprediksi. Buat permintaan untuk setiap kasus dan tegaskan perilaku yang diharapkan:
| Skenario | Cara memicu | Diharapkan |
|---|---|---|
| Kunci tidak valid | Atur OPENAI_API_KEY ke sk-bad di lingkungan Sandbox |
401 dengan error.code = "invalid_api_key" |
| Batas laju | Lakukan loop permintaan 200x di collection runner Apidog | 429 dengan header Retry-After |
| Batas token terlampaui | Kirim prompt 200K-token ke model 128K-konteks | 400 dengan error.code = "context_length_exceeded" |
| Nama model salah | "model": "gpt-99" |
404 |
| Pelanggaran skema | Pemanggilan alat dengan strict: true dan input yang salah bentuk |
Model menolak alat tersebut, mengembalikan teks biasa |
Tambahkan penegasan di tab Tests sehingga regresi muncul sebagai pengujian merah, bukan badai percobaan ulang yang senyap. Header Retry-After adalah yang paling sering salah ditangani oleh kode produksi. Ini dalam hitungan detik, terkadang nilai pecahan, dan Anda harus membacanya alih-alih melakukan hardcode backoff.
Langkah 7: Mock ChatGPT untuk pengembangan frontend paralel
Kunci OpenAI Anda memiliki batas bulanan. Tim frontend Anda tidak. Ketika UI perlu merender token streaming, saran tindak lanjut, dan kartu pemanggilan alat sebelum prompt backend diselesaikan, berikan mereka mock Apidog.
Di folder ChatGPT, klik kanan permintaan chat-completion-basic, pilih Smart Mock, dan aktifkan. Apidog mengembalikan respons sintetik yang cocok dengan skema OpenAI: id, object, created, model, choices, usage. URL mock terlihat seperti https://mock.apidog.com/m1/<projectId>/chat/completions dan menerima body yang sama.
Untuk mock streaming, definisikan skrip di tab Advanced Mock yang menulis bagian data: { ... }\n\n pada interval 50ms. Frontend mendapatkan aliran SSE yang realistis tanpa traffic OpenAI apa pun.
Ketika prompt asli tiba, ubah kembali URL dasar frontend ke https://api.openai.com/v1. Tidak ada yang lain yang berubah.
Langkah 8: Simpan suite sebagai skenario pengujian CI
Skenario Pengujian Apidog memungkinkan Anda merangkai permintaan dengan penegasan dan menjalankannya tanpa antarmuka grafis. Buat skenario yang:
Memanggil chat-completion-basic, menegaskan status === 200 dan usage.total_tokens > 0.Memanggil chat-completion-stream, menegaskan SSE selesai dengan [DONE].Memanggil chat-completion-tools, menegaskan skema pemanggilan alat tervalidasi.Memanggil setiap skenario kesalahan dari Langkah 6, menegaskan kode status yang benar.
Ekspor skenario dan jalankan di CI melalui apidog-cli run scenario.json --env OpenAI Prod. Sambungkan ke pipeline PR untuk file yang menyimpan prompt Anda. Setiap perubahan prompt sekarang berjalan terhadap API OpenAI langsung sebagai pemeriksaan pra-gabungan. Biaya: beberapa sen per eksekusi CI. Nilai: Anda berhenti mengirimkan regresi prompt.
FAQ
Apakah ini berfungsi dengan Azure OpenAI? Ya. Ganti baseUrl dengan URL sumber daya Azure Anda, tambahkan parameter kueri api-version, dan ubah otentikasi dari Bearer ke header api-key. Body permintaan identik.
Bisakah saya menggunakan ini untuk model penalaran o1 dan o3? Ya, tetapi model-model tersebut menolak temperature, top_p, presence_penalty, dan frequency_penalty. Buat folder Reasoning terpisah dengan template body yang disederhanakan.
Bagaimana cara melakukan versi prompt di dalam Apidog? Apidog memiliki dukungan cabang. Buat cabang per eksperimen prompt, jalankan skenario pengujian terhadap API langsung, bandingkan penggunaan token dan kualitas respons, lalu gabungkan. Ini adalah alur kerja yang sama dengan kode, diterapkan pada prompt.
Bagaimana dengan endpoint /v1/responses yang baru? Siapkan folder terpisah untuk itu. Otentikasi dan URL dasar identik; hanya bentuk body yang berbeda. Pertahankan kedua folder agar Anda dapat melakukan A/B testing terhadap prompt yang sama.
Apakah Apidog mengenakan biaya per panggilan API? Tidak. Klien Apidog gratis untuk penggunaan individu dan sebagian besar penggunaan tim. OpenAI mengenakan biaya per token; Apidog tidak menyisipkan dirinya di antara Anda dan OpenAI.
Penutup
API ChatGPT akan terus berubah. Streaming akan rusak dengan cara baru, skema alat akan menjadi lebih ketat, dan model penalaran akan terus menghilangkan parameter yang Anda kira stabil. Pertahanannya adalah koleksi permintaan yang Anda kontrol, server mock yang dapat diandalkan frontend Anda, dan skenario pengujian yang dijalankan CI Anda sebelum setiap PR prompt.
Unduh Apidog dan impor panggilan OpenAI Anda yang sudah ada. Koleksi Postman dan perintah curl keduanya dapat dikonversi dalam satu klik. Bangun delapan permintaan di atas sekali, dan setiap pembaruan ChatGPT di masa mendatang menjadi pengujian terkontrol alih-alih insiden produksi.
