Obrolan
Penyelesaian chat
Chat Completions API dari OpenAI, untuk semua model teks: permintaan dan respons yang sama, streaming yang sama, SDK yang sama.
/v1/chat/completionsPermintaan
modelstringwajib- ID model dari Model halaman, seperti
claude-opus-5-5ataugpt-6-sol. messagesarraywajib- Percakapan: pesan
system(ataudeveloper),user,assistantdantool.contentberupa string, atau array bagian untuk menambahkan gambar, PDF, audio atau video. streamboolean- Kirim jawaban sebagai server-sent events saat sedang ditulis. Lihat Streaming di bawah.
stream_optionsobject{ "include_usage": true }menambahkan chunk terakhir yang berisi penggunaan token.max_completion_tokensinteger- Jumlah maksimum token yang dihasilkan, termasuk penalaran.
max_tokensjuga bisa digunakan. temperaturenumber- 0 hingga 2. Nilai lebih rendah membuat jawaban lebih terfokus, nilai lebih tinggi membuatnya lebih bervariasi. Beberapa model penalaran mengabaikannya. Claude mulai dari Opus 4.7 (Opus 5 dan 5.5, Fable 5 dan 5.1, Sonnet 5.5, Haiku 5.5) tidak menerima parameter ini, jadi kami tidak menyertakannya untuk model-model tersebut.
top_pnumber- Nucleus sampling, 0 hingga 1. Ubah parameter ini atau temperature, jangan keduanya. Tidak disertakan untuk model Claude yang sama, begitu juga top_k untuk model-model tersebut dan Muse Wonder.
stopstring | array- Hingga 4 urutan yang menghentikan pembuatan teks.
toolsarray- Fungsi yang dapat dipanggil model. Lihat Pemanggilan alat di bawah.
tool_choicestring | objectauto,none,required, atau fungsi tertentu. Jika lab model menolak atau mengabaikan salah satunya (pemaksaan alat pada Claude Opus 5.5, Sonnet 5.5 dan Fable 5.1; apa pun selainautopada Muse Wonder;nonepada beberapa model Gemini, DeepSeek Flash, MiMo, HY4 dan MiniMax), kami mengirimkannya dalam bentuk yang dipatuhi model dan memberi tahu model apa yang Anda minta; fungsi yang dipaksakan berdasarkan nama dikirim sebagai satu-satunya fungsi yang tersedia.response_formatobject- Output JSON:
{ "type": "json_object" }, ataujson_schemadengan skema. Lihat Output terstruktur di bawah. reasoning_effortstring- Seberapa dalam model penalaran berpikir:
none,minimal,low,medium,high,xhighataumax. Setiap model menerima sebagian level ini (lihat Penalaran di bawah); level lain dijalankan pada level terdekat yang didukung. Level lebih tinggi membuat model berpikir lebih lama dan menggunakan lebih banyak token output. seedinteger- Upaya terbaik untuk menghasilkan hasil yang sama, bagi model yang mendukungnya.
modelsarray- Perutean cerdas untuk permintaan ini: alternatif yang dicoba secara berurutan jika model tidak tersedia. Lihat Perutean cerdas.
user dan metadata, yang tetap kami tangani. Parameter yang dipatuhi model (alat, skema JSON, penalaran) bergantung pada model, sama seperti saat mengaksesnya langsung melalui lab pembuatnya. Dengan OpenAI Python SDK, kirim models sebagai extra_body={"models": [...]}.Respons
{ "id": "chatcmpl-AbC123...", "object": "chat.completion", "created": 1790870400, "model": "claude-opus-5-5", "choices": [ { "index": 0, "message": { "role": "assistant", "content": "Here's the summary..." }, "finish_reason": "stop" } ], "usage": { "prompt_tokens": 1204, "completion_tokens": 312, "total_tokens": 1516, "prompt_tokens_details": { "cached_tokens": 1024 }, "completion_tokens_details": { "reasoning_tokens": 128 } }}modeladalah model yang menjawab. Model ini sesuai permintaan Anda, kecuali perutean cerdas menggunakan model alternatif.- Model penalaran dapat menambahkan
reasoning_contentke pesan: proses berpikir model, jika dibagikan. usageadalah penggunaan yang ditagihkan kepada Anda.cached_tokensadalah token input yang dibaca dari cache prompt model, ditagihkan dengan harga cache jika model menyediakan harga tersebut.
Setiap respons juga menyertakan header berikut:
Streaming
Dengan stream: true, jawaban diterima sebagai server-sent events dalam format chunk OpenAI, diakhiri dengan data: [DONE]. Setiap SDK membacanya untuk Anda.
import osfrom openai import OpenAIclient = OpenAI( base_url="https://api.zurelay.com/v1", api_key=os.environ["ZURELAY_API_KEY"],)stream = client.chat.completions.create( model="claude-sonnet-5-5", messages=[ { "role": "user", "content": "Write a limerick about databases." } ], stream=True, stream_options={ "include_usage": True },)for chunk in stream: if chunk.choices and chunk.choices[0].delta.content: print(chunk.choices[0].delta.content, end="", flush=True)- Jawaban baru dikirim setelah model menghasilkan token pertama, sehingga percobaan ulang atau perpindahan ke jalur lain tidak terlihat oleh Anda.
- Saat tidak ada data (model berpikir di antara langkah), baris komentar SSE (
: keep-alive) dikirim setiap 15 detik. Klien mengabaikannya; baris ini mencegah proxy menutup koneksi. Jika token pertama membutuhkan lebih dari 20 detik (prompt panjang, atau jalur yang macet dan sedang diganti), stream dibuka saat itu: header dan komentar keep-alive dikirim selama Anda menunggu. Setiap jalur diberi waktu hingga 3 menit untuk mulai (5 pada tingkat penalaran tinggi) sebelum jalur berikutnya dicoba, jadi atur timeout klien Anda ke 10 menit. - Stream yang dibuka sebelum token pertama hanya menyertakan
x-zurelay-modeljika tidak ada model lain yang dapat menjawab (perutean cerdas nonaktif), dan error setelah stream dibuka dikirim sebagai event error di dalam stream (dengan struktur yang sama seperti body error), bukan sebagai status error. - Dengan
include_usage, chunk terakhir sebelum[DONE]berisi daftarchoiceskosong danusage.
Pemanggilan alat
Jelaskan fungsi dalam tools; saat model ingin memanggil fungsi, model merespons dengan tool_calls, bukan teks. Jalankan fungsi, kirim kembali hasilnya sebagai pesan tool dengan ID pemanggilan tersebut, lalu model melanjutkan.
import osfrom openai import OpenAIclient = OpenAI( base_url="https://api.zurelay.com/v1", api_key=os.environ["ZURELAY_API_KEY"],)response = client.chat.completions.create( model="gpt-6-sol", messages=[ { "role": "user", "content": "What's the weather in Lisbon right now?" } ], tools=[ { "type": "function", "function": { "name": "get_weather", "description": "Current weather for a city", "parameters": { "type": "object", "properties": { "city": { "type": "string" } }, "required": [ "city" ] } } } ],)print(response.choices[0].message.content)Output terstruktur
Minta JSON dengan response_format. json_schema memastikan model yang mendukungnya mengikuti skema Anda; json_object meminta JSON valid dalam bentuk apa pun (nyatakan juga di prompt Anda).
import osfrom openai import OpenAIclient = OpenAI( base_url="https://api.zurelay.com/v1", api_key=os.environ["ZURELAY_API_KEY"],)response = client.chat.completions.create( model="gpt-6.1-sol", messages=[ { "role": "user", "content": "Extract the people: 'Ana met Ben and Chloe in Porto.'" } ], response_format={ "type": "json_schema", "json_schema": { "name": "people", "schema": { "type": "object", "properties": { "names": { "type": "array", "items": { "type": "string" } } }, "required": [ "names" ] } } },)print(response.choices[0].message.content)Penalaran
Model penalaran berpikir sebelum menjawab. Atur reasoning_effort untuk menyeimbangkan kecepatan dan biaya dengan kedalaman penalaran: tingkat yang lebih tinggi membuat model berpikir lebih lama, membutuhkan lebih banyak waktu, dan menggunakan lebih banyak token output. Setiap model mendukung tingkat yang didokumentasikan oleh labnya, mulai dari none (tanpa berpikir), lalu minimal, low, medium, high dan xhigh (sangat tinggi), hingga max; semuanya tercantum dalam tabel di bawah. Jika tidak diisi, model menggunakan pengaturan defaultnya. Cara kerjanya sama dengan SDK OpenAI apa pun, dan Anda dapat mencoba setiap tingkat di Playground dasbor.
from openai import OpenAIclient = OpenAI(base_url="https://api.zurelay.com/v1", api_key="YOUR_ZURELAY_KEY")response = client.chat.completions.create( model="zurelay-auto", reasoning_effort="high", messages=[{"role": "user", "content": "How many primes are there below 1,000?"}],)message = response.choices[0].messageprint(getattr(message, "reasoning_content", None)) # the thinking, when the model shares itprint(message.content)Untuk model yang membagikannya, proses berpikir dikembalikan bersama jawaban dalam message.reasoning_content (saat streaming, dalam delta.reasoning_content); beberapa model menamai kolomnya reasoning. Proses ini ditagih sebagai token output dan selalu termasuk dalam completion_tokens; completion_tokens_details.reasoning_tokens menghitungnya secara terpisah jika model melaporkannya. Pada tingkat penalaran tinggi, jawaban bisa membutuhkan waktu beberapa menit sebelum mulai muncul, jadi beri klien Anda batas waktu yang cukup longgar (lihat Keandalan dan batas waktu).
Tingkat untuk setiap model
Bersumber dari dokumentasi resmi masing-masing lab. Tingkat yang tidak didukung model akan dijalankan pada tingkat terdekat yang didukung (jika ada dua yang sama dekat, dipilih yang lebih rendah; dan proses berpikir hanya dinonaktifkan jika Anda mengirim none), jadi satu permintaan bisa digunakan untuk semua model, termasuk dengan perutean cerdas. Header respons x-zurelay-reasoning-effort menunjukkan tingkat yang dijalankan. Kata yang bukan merupakan tingkat akan ditolak dengan 400 yang mencantumkan tingkat yang didukung model.
Proses berpikir Claude
Melalui endpoint ini, Claude menerima reasoning_effort seperti model lainnya: low, medium, high, xhigh atau max (Opus 4.6 tidak mendukung xhigh). Dalam format asli Anthropic, Claude berpikir secara adaptif pada tingkat tertentu: kirim thinking: { type: "adaptive", display: "summarized" } dengan output_config: { effort: "xhigh" } dan baca blok pemikirannya. Lihat Anthropic Messages.
Ada pertanyaan, atau ada yang kurang? Tanyakan kepada tim dukungan kami dan kami akan menjawab lewat email, biasanya dalam satu menit.