Untuk beban kerja agen, Responses API adalah pilihan default yang lebih baik: API ini memberikan status percakapan sisi server melalui previous_response_id, item output yang memiliki tipe (typed) alih-alih sekadar blob pesan tunggal, dan event streaming semantik. Fitur-fitur ini mengurangi beban pembukuan yang seharusnya dikelola oleh lapisan orkestrasi Anda. Chat Completions tetap menjadi pilihan yang valid jika Anda menginginkan kontrol penuh atas riwayat pesan atau sedang berintegrasi dengan alat yang dibangun di sekitar format pesan chat OpenAI, namun untuk agen pemanggil alat (tool-calling) multi-giliran, Responses adalah pilihan yang lebih langsung.
Kedua endpoint tersebut didokumentasikan pada halaman referensi model saat ini untuk GPT-5.6 dan GPT-5.5, dan kontrak permintaan/tanggapan bersama untuk Responses ditentukan dalam referensi pembuatan Responses.
Poin Penting
- Chat Completions dikelola oleh pemanggil: Anda mengirim array
messageslengkap pada setiap permintaan dan menyusun ulang riwayat sendiri. - Responses dibantu oleh server: Anda mengirim
inputditambahinstructionsopsional, dan dapat merangkai giliran denganprevious_response_idalih-alih mengirim ulang riwayat. - Pemanggilan alat berbeda secara struktural: Chat Completions menyarangkan panggilan di bawah
choices[0].message.tool_calls; Responses memancarkannya sebagai item bertipe dalam arrayoutputyang datar. - Hasil alat dicocokkan berdasarkan
tool_call_id(Chat) dibandingkan dengancall_idpada itemfunction_call_output(Responses). - Streaming berbasis delta per potongan (chunk) di Chat Completions dibandingkan dengan event semantik bernama di Responses.
- Dukungan alat yang dihosting (penelusuran web, interpreter kode, pencarian file, dll.) bergantung pada model di kedua API; periksa halaman model sebelum berasumsi mengenai ketersediaannya.
Perbandingan Tingkat Bidang
| Perhatian | Chat Completions | Responses |
|---|---|---|
| Endpoint | POST /v1/chat/completions |
POST /v1/responses |
| Input utama | messages: [] (array lengkap setiap panggilan) |
input (string atau array item) |
| Panduan gaya sistem | messages[0].role = "system" |
Bidang instructions tingkat atas |
| Kelanjutan multi-giliran | Pemanggil mengirim ulang seluruh riwayat messages |
previous_response_id mereferensikan giliran sebelumnya di sisi server |
| Bentuk output | choices[0].message (objek pesan tunggal) |
output: [], array item bertipe (pesan, function_call, dll.) |
| Lokasi panggilan alat | choices[0].message.tool_calls[] |
Item dalam output dengan type: "function_call" |
| Pengiriman hasil alat | Pesan baru dengan role: "tool", tool_call_id |
Item dengan type: "function_call_output", call_id |
| Streaming | Fragmen chunk.choices[0].delta |
Event bernama (response.output_text.delta, response.completed, dll.) |
previous_response_id: Apa Fungsinya Sebenarnya
Dalam Chat Completions, memori percakapan sepenuhnya menjadi tanggung jawab Anda. Setiap permintaan harus menyertakan riwayat pesan lengkap, dan server tidak memiliki gagasan tentang giliran sebelumnya. Sebaliknya, Responses API mengembalikan id pada setiap objek respons. Jika aplikasi Anda menyimpan id tersebut dan meneruskannya kembali sebagai previous_response_id pada panggilan berikutnya, server akan menyusun ulang status percakapan sebelumnya di sisinya. Anda hanya perlu mengirim input baru untuk giliran saat ini ditambah (opsional) instructions baru. Ini mengalihkan manajemen status dari lapisan aplikasi Anda ke infrastruktur OpenAI, yang penting bagi agen yang melakukan banyak pemanggilan alat secara berurutan karena Anda menghindari serialisasi ulang dan pengiriman ulang riwayat yang terus bertambah di setiap lompatan.
Kelemahannya adalah aplikasi Anda masih perlu menyimpan id di tempat yang tahan lama (penyimpanan sesi, baris basis data) di antara giliran; API tidak memberi Anda retensi tak terbatas atau pencarian atas respons masa lalu, API hanya memungkinkan Anda mereferensikan respons yang tepat sebelumnya sebagai titik kelanjutan.
Contoh Permintaan Saat Ini (gpt-5.6)
Chat Completions: Anda memiliki riwayat lengkap:
{
"model": "gpt-5.6",
"messages": [
{ "role": "system", "content": "You are a support agent." },
{ "role": "user", "content": "Check order #4471 status." }
],
"tools": [
{
"type": "function",
"function": {
"name": "get_order_status",
"parameters": { "type": "object", "properties": { "order_id": { "type": "string" } } }
}
}
]
}
Responses: giliran pertama dengan instructions dan input:
{
"model": "gpt-5.6",
"instructions": "You are a support agent.",
"input": "Check order #4471 status.",
"tools": [
{
"type": "function",
"name": "get_order_status",
"parameters": { "type": "object", "properties": { "order_id": { "type": "string" } } }
}
]
}
Responses: giliran tindak lanjut, tidak ada riwayat yang dikirim ulang:
{
"model": "gpt-5.6",
"previous_response_id": "resp_abc123",
"input": "What about order #4472?"
}
Siklus Hidup Function-Call
Chat Completions:
- Model mengembalikan
choices[0].message.tool_calls, masing-masing denganiddan nama/argumen fungsi. - Anda menjalankan fungsi secara lokal.
- Anda menambahkan pesan asisten (dengan
tool_calls) ke arraymessagesAnda, lalu menambahkan pesan baru:{ "role": "tool", "tool_call_id": "<id>", "content": "<result>" }. - Anda mengirim ulang seluruh array
messagesyang diperbarui untuk melanjutkan.
Responses:
- Array
outputberisi item dengantype: "function_call", termasukcall_id,name, danarguments. - Anda menjalankan fungsi secara lokal.
- Anda mengirim permintaan baru dengan
previous_response_iddiatur keidrespons sebelumnya, daninputberisi item dengantype: "function_call_output", yang mencocokkancall_id, dan hasilnya. - Server telah menyimpan konteks pemanggilan fungsi, jadi Anda tidak perlu mengirim ulang giliran sebelumnya.
Perbedaan struktural antara item output bertipe datar dan pesan tunggal dengan array bersarang cenderung menyederhanakan logika penguraian di Responses, karena Anda dapat melakukan iterasi pada output dan beralih berdasarkan type alih-alih menggali bidang opsional pesan.
Daftar Periksa Keputusan
- Membangun agen multi-giliran dengan pemanggilan alat? Gunakan Responses sebagai default;
previous_response_idmenghilangkan pembukuan riwayat. - Perlu kontrol tepat atas apa yang ada dalam riwayat (redaksi, peringkasan kustom, penyisipan pesan non-standar)? Chat Completions memberi Anda kontrol tersebut secara eksplisit, karena Anda menyusun
messagessendiri. - Memigrasikan integrasi Chat Completions yang ada? Timbang biaya refaktor terhadap penghematan manajemen status; untuk panggilan jangka pendek satu giliran, manfaatnya lebih kecil.
- Bergantung pada alat yang dihosting (penelusuran, interpreter kode, alat file)? Verifikasi dukungan di halaman model spesifik sebelum berkomitmen, karena ketersediaan bervariasi menurut model dan endpoint.
- Perlu streaming dengan semantik event yang terperinci (misalnya, membedakan delta teks dari delta pemanggilan alat tanpa memeriksa bentuk delta)? Event bernama Responses lebih eksplisit daripada potongan delta generik Chat Completions.
- Bekerja dalam kerangka kerja atau SDK yang ada yang dibangun di sekitar pesan chat? Konfirmasikan kematangan dukungan Responses-nya sebelum beralih kontrak di tengah proyek.
Agen multi-penyedia dan terjemahan kontrak
Agen jarang bertahan pada satu penyedia dalam waktu lama. Agen pengodean mungkin merutekan ke Claude Sonnet 5 atau Kimi K2.7 Code untuk pekerjaan implementasi, beralih ke DeepSeek V4 Flash atau Gemini 3.5 Flash untuk draf murah, dan sesekali memanggil GLM-5.2 atau Qwen3.7 Plus untuk kontrol biaya model terbuka (open-weight). Tidak satu pun dari penyedia ini yang harus mengekspos kontrak Chat Completions atau Responses OpenAI secara asli.
Di sinilah lapisan perutean berperan. Dokumentasi TokenLab di docs.tokenlab.sh menjelaskan satu permukaan API dan kunci yang digunakan untuk menjangkau beberapa penyedia model, yang menghilangkan kebutuhan untuk menulis integrasi klien terpisah per kontrak penyedia. Artikel terkait kami tentang alias header untuk kompatibilitas kontrak membahas bagaimana header permintaan dapat dipetakan sehingga kode yang ditulis terhadap satu bentuk kontrak dapat menjangkau model yang tidak mendukungnya secara asli. Jika Anda membangun chatbot atau agen yang perlu memanggil lebih dari satu keluarga model, panduan kami tentang membangun chatbot AI dengan satu kunci API membahas penyiapannya dalam istilah yang lebih konkret.
Untuk daftar lengkap model saat ini yang dapat dijangkau melalui TokenLab, termasuk opsi perutean frontier, pengodean, dan berbiaya rendah yang dirujuk di atas, lihat halaman model kami. Konfirmasikan ketersediaan saat ini dan catatan khusus kontrak di sana sebelum menyelesaikan arsitektur Anda, karena jajaran model berubah lebih sering daripada kontrak API.
Keterbatasan
Artikel ini tidak menyatakan kembali referensi API tingkat bidang yang tepat dari OpenAI untuk kedua kontrak, karena detail tersebut memiliki versi dan dapat berubah. Jangan perlakukan contoh bentuk permintaan di atas sebagai kode siap produksi. Kami juga belum membahas kontrak asli setiap penyedia secara mendalam di sini; Claude, Gemini, DeepSeek, dan GLM masing-masing menerbitkan referensi API mereka sendiri, dan tidak satu pun dari mereka berkewajiban untuk mencocokkan bentuk Chat Completions atau Responses OpenAI. Jika agen Anda memerlukan jaminan tentang urutan pemanggilan alat, format event streaming, atau perilaku pemrosesan batch, verifikasi spesifikasi tersebut terhadap dokumentasi penyedia yang disebutkan, bukan terhadap artikel ini.
FAQ
Apakah Responses API merupakan pengganti Chat Completions? Dokumentasi quickstart OpenAI memposisikan Responses API sebagai jalur saat ini untuk pengembangan baru, termasuk kasus penggunaan agen, sementara Chat Completions tetap menjadi bagian dari permukaan API mereka yang didokumentasikan. Apakah Chat Completions sudah tidak digunakan lagi (deprecated), dihentikan (sunset), atau sekadar warisan (legacy) pada waktu tertentu adalah sesuatu yang harus Anda konfirmasikan langsung di dokumen OpenAI saat ini, karena status dukungan dapat berubah.
Apakah penyedia lain seperti Claude, Gemini, atau DeepSeek menggunakan kontrak yang sama? Tidak secara asli. Setiap penyedia menentukan bentuk permintaan dan tanggapannya sendiri. Jika Anda perlu menjalankan agen di seluruh model OpenAI dan penyedia seperti Claude Sonnet 5 atau DeepSeek V4 Pro, rencanakan lapisan terjemahan alih-alih berasumsi adanya kontrak bersama.
Apakah beralih kontrak mengubah kualitas output model? Tidak. Kontrak adalah transportasi dan struktur permintaan dan tanggapan, bukan model itu sendiri. Kualitas output diatur oleh model mana yang Anda panggil (misalnya GPT-5.5 dibandingkan dengan Claude Sonnet 5), bukan oleh apakah Anda menggunakan Chat Completions atau Responses API untuk memanggilnya.
Jika Anda sedang mengevaluasi kontrak dan model mana yang cocok untuk agen Anda, mulailah dengan build uji kecil terhadap endpoint yang didokumentasikan TokenLab dan bandingkan overhead orkestrasi secara langsung. Mulailah di docs.tokenlab.sh untuk menjalankan perbandingan tersebut terhadap beban kerja Anda sendiri.
Sumber
Harga diamati pada 2026-07-14
- OpenAI GPT-5.6 model endpointsDiamati pada 2026-07-14
- OpenAI Responses create referenceDiamati pada 2026-07-14
- OpenAI migration guide for ResponsesDiamati pada 2026-07-14
- TokenLab API documentationDiamati pada 2026-07-14



