Chat Completions
POST /v1/chat/completions menerima perbualan dan memulangkan mesej seterusnya daripada model dalam format OpenAI Chat Completions. Gunakannya daripada mana-mana SDK OpenAI atau melalui HTTP biasa; halaman ini ialah rujukan medan demi medan.
POST https://api.shannon-ai.com/v1/chat/completions
Permintaan terkecil ialah id model dan satu mesej pengguna.
from openai import OpenAI
client = OpenAI(
api_key="YOUR_API_KEY",
base_url="https://api.shannon-ai.com/v1",
)
response = client.chat.completions.create(
model="shannon-3",
messages=[{"role": "user", "content": "Say hello in one sentence."}],
)
print(response.choices[0].message.content) import OpenAI from "openai";
const client = new OpenAI({
apiKey: "YOUR_API_KEY",
baseURL: "https://api.shannon-ai.com/v1",
});
const response = await client.chat.completions.create({
model: "shannon-3",
messages: [{ role: "user", content: "Say hello in one sentence." }],
});
console.log(response.choices[0].message.content); curl https://api.shannon-ai.com/v1/chat/completions \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "shannon-3",
"messages": [{"role": "user", "content": "Say hello in one sentence."}]
}' Balasan ialah satu objek JSON:
{
"id": "chatcmpl-5f0c1e7a9b3d4c62a8e1f07d2b46c9a3",
"object": "chat.completion",
"created": 1791625200,
"model": "shannon-3",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "Hello, it is good to meet you.",
"reasoning_content": "The user wants a greeting in one sentence. Keep it short and friendly."
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 1184,
"completion_tokens": 46,
"total_tokens": 1230
}
} Header
Header permintaan
| Header | Nilai | Penerangan |
|---|---|---|
Authorization | Bearer YOUR_API_KEY | Kunci API anda. x-api-key: YOUR_API_KEY diterima sebagai gantinya pada setiap endpoint. |
Content-Type | application/json | Diperlukan. Sebarang nilai lain memulangkan 415. |
x-request-id | Pilihan. Id anda sendiri untuk permintaan. Ia dikembalikan tanpa perubahan pada balasan. |
Header balasan
| Header | Penerangan |
|---|---|
x-request-id | Pada setiap balasan, termasuk ralat dan stream: nilai yang anda hantar, atau 12 aksara heksadesimal apabila anda tidak menghantar apa-apa. Nyatakannya apabila anda melaporkan masalah. |
content-type | application/json, atau text/event-stream apabila stream ialah true. |
Medan permintaan
Hanya messages yang diperlukan. Lajur Dilaksanakan oleh menamakan model yang balasannya diubah oleh sesuatu medan. Model open-weight yang dihoskan ialah dua belas id dalam senarai model; keluarga Shannon 3 ialah shannon-3, shannon-3-pro, shannon-3.1 dan shannon-3.1-pro. Model & harga
| Medan | Jenis | Lalai | Penerangan | Dilaksanakan oleh |
|---|---|---|---|---|
model | string | shannon-1.6-lite | Model yang menjawab: id daripada senarai model. Hantar dengan setiap permintaan. Padanan tidak sensitif huruf besar-kecil. Id yang tidak diterbitkan memulangkan 400 unknown model. | Semua model |
messages | array | Diperlukan. Perbualan, mesej tertua dahulu. Lihat Mesej di bawah. | Semua model | |
stream | boolean | false | true menghantar balasan sebagai server-sent events semasa ia ditulis. | Semua model |
max_tokens | integer | 4096 | Had atas balasan, dalam token. Nilai di luar 1 hingga 65,536 dialihkan ke dalam julat itu. Ia juga jumlah yang diketepikan daripada baki anda semasa permintaan berjalan. Lihat Panjang output di bawah. | Model open-weight yang dihoskan, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 |
max_completion_tokens | integer | Sama seperti max_tokens. Apabila kedua-duanya dihantar, max_tokens digunakan. | Model open-weight yang dihoskan, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 | |
temperature | number | Suhu persampelan. Pada model open-weight yang dihoskan lalainya ialah 1 dan nilai dikekalkan antara 0 dan 2. | Model open-weight yang dihoskan, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 | |
top_p | number | 0.95 | Persampelan nukleus. Nilai dikekalkan antara 0 dan 1. | Model open-weight yang dihoskan |
seed | integer | Seed bagi pensampel, sebarang integer. Tanpanya, seed diperoleh daripada model dan perbualan, jadi permintaan yang sama yang dihantar dua kali menggunakan seed yang sama. | Model open-weight yang dihoskan | |
stop | string | array | Rentetan atau tatasusunan rentetan. Sehingga 4 digunakan. Jawapan berakhir sebelum yang pertama muncul; teks henti itu sendiri tidak dipulangkan. | Model open-weight yang dihoskan | |
reasoning_effort | string | high | Sejauh mana model bernalar sebelum menjawab: off, low, medium atau high. none dan minimal bermaksud off, default bermaksud medium, max bermaksud high. Sebarang nilai lain memulangkan 400. | Model open-weight yang dihoskan |
reasoning | object | Tetapan yang sama dalam bentuk objek: {"effort": "low"}. Apabila kedua-duanya dihantar, reasoning_effort digunakan. | Model open-weight yang dihoskan | |
tools | array | Fungsi yang boleh dipanggil oleh model, masing-masing sebagai {"type": "function", "function": {"name", "description", "parameters"}}. Panggilan model kembali dalam tool_calls; kod anda menjalankannya. | Semua model | |
tool_choice | string | object | auto | "auto" membiarkan model memutuskan. "required" membuatnya memanggil alat. {"type": "function", "function": {"name": "…"}} membuatnya memanggil alat itu. | Model open-weight yang dihoskan |
response_format | object | {"type": "json_object"} untuk jawapan JSON, atau {"type": "json_schema", "json_schema": {…}} untuk jawapan yang mengikut skema anda. | Semua peringkat Shannon; model open-weight yang dihoskan seperti disenaraikan bagi setiap id | |
web_search | boolean | false | true membenarkan model mencari di web sebelum menjawab. | shannon-1.6-*, shannon-2-*, keluarga Shannon 3 |
Medan OpenAI yang lain, seperti n, user, stream_options, parallel_tool_calls, presence_penalty, frequency_penalty, logit_bias, logprobs, metadata, store dan prompt_cache_key, diterima supaya kod klien sedia ada berjalan tanpa perubahan. Ia tidak mengubah balasan: sentiasa ada satu choice, dan stream sentiasa berakhir dengan penggunaan.
Medan dengan jenis JSON yang salah, contohnya "max_tokens": "100", memulangkan 422. Permintaan tanpa messages juga begitu.
Alat, output berstruktur, penaakulan dan carian web masing-masing mempunyai halaman tersendiri: Panggilan Fungsi, Output Berstruktur, Usaha penaakulan, Carian Web Terbina dalam.
Permintaan dengan pilihan
Permintaan ini menetapkan mesej sistem, medan persampelan dan tahap usaha penaakulan. Ia menggunakan model open-weight yang dihoskan, yang melaksanakan kesemuanya.
from openai import OpenAI
client = OpenAI(
api_key="YOUR_API_KEY",
base_url="https://api.shannon-ai.com/v1",
)
response = client.chat.completions.create(
model="DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
messages=[
{"role": "system", "content": "You are a physics teacher. Answer in two sentences."},
{"role": "user", "content": "Why is the sky blue?"},
],
max_tokens=512,
temperature=0.3,
top_p=0.9,
seed=7,
stop=["\n\n"],
reasoning_effort="low",
)
message = response.choices[0].message
print(message.reasoning_content) # the reasoning
print(message.content) # the answer
print(response.usage) import OpenAI from "openai";
const client = new OpenAI({
apiKey: "YOUR_API_KEY",
baseURL: "https://api.shannon-ai.com/v1",
});
const response = await client.chat.completions.create({
model: "DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
messages: [
{ role: "system", content: "You are a physics teacher. Answer in two sentences." },
{ role: "user", content: "Why is the sky blue?" },
],
max_tokens: 512,
temperature: 0.3,
top_p: 0.9,
seed: 7,
stop: ["\n\n"],
reasoning_effort: "low",
});
const message = response.choices[0].message;
console.log(message.reasoning_content); // the reasoning
console.log(message.content); // the answer
console.log(response.usage); curl https://api.shannon-ai.com/v1/chat/completions \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
"messages": [
{"role": "system", "content": "You are a physics teacher. Answer in two sentences."},
{"role": "user", "content": "Why is the sky blue?"}
],
"max_tokens": 512,
"temperature": 0.3,
"top_p": 0.9,
"seed": 7,
"stop": ["\n\n"],
"reasoning_effort": "low"
}' Balasan mempunyai bentuk yang sama seperti di atas. usagenya menambah dua butiran pada model open-weight yang dihoskan: token prompt yang dibaca daripada cache dan token yang dibelanjakan untuk penaakulan.
{
"usage": {
"prompt_tokens": 31,
"completion_tokens": 62,
"total_tokens": 93,
"prompt_tokens_details": {
"cached_tokens": 0
},
"completion_tokens_details": {
"reasoning_tokens": 21
}
}
} Panjang output
max_tokens melakukan dua perkara. Pertama, ia ialah bilangan token yang diketepikan daripada baki anda apabila permintaan bermula. Apabila balasan selesai, jumlah itu digantikan dengan token yang digunakan oleh permintaan. Jika max_tokens lebih besar daripada baki anda yang tinggal, permintaan memulangkan 429 Quota exceeded walaupun balasan itu sendiri akan muat. Hantar max_tokens yang lebih rendah untuk mengetepikan lebih sedikit.
shannon-coder-1 dikira secara berbeza pada endpoint ini: setiap permintaan ialah satu daripada panggilan Shannon Coder pelan anda, dan tiada token diketepikan untuknya. Had dan baki
Kedua, ia mengehadkan panjang balasan pada model ini:
| Model | Apa yang dilakukan oleh max_tokens |
|---|---|
shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 | Balasan berhenti apabila mencapai had. Stream kemudian berakhir dengan finish_reason length. |
| Model open-weight yang dihoskan | Teks jawapan berhenti pada max_tokens. Penaakulan tidak dikira terhadapnya. Nilai di bawah 256 bertindak sebagai 256. |
Tanpa max_tokens atau max_completion_tokens, nilainya ialah 4,096. Pada shannon-coder-1 ia ialah 65,536.
Mesej
Setiap mesej ialah objek dengan role dan content. content ialah rentetan, atau tatasusunan bahagian apabila mesej membawa lebih daripada teks.
| Peranan | Penerangan | Dilaksanakan oleh |
|---|---|---|
system | Arahan untuk model. Letakkannya di hadapan. Pada peringkat Shannon, mesej system pertama yang digunakan. | Model open-weight yang dihoskan, shannon-1.6-*, shannon-2-*, shannon-coder-1 |
developer | Dibaca sebagai system. | Model open-weight yang dihoskan |
user | Apa yang anda tanya. Pada peringkat Shannon, mesej user yang terakhir ialah prompt dan mesej sebelumnya ialah sejarah. | Semua model |
assistant | Balasan terdahulu daripada model. Kekalkan tool_callsnya apabila anda menghantar hasil alat selepasnya. | Semua model |
tool | Hasil panggilan alat: tool_call_id mengandungi id panggilan dan content hasilnya sebagai rentetan. | Semua model |
Dengan id keluarga Shannon 3, letakkan arahan yang mesti dipatuhi dalam mesej user.
Pada peringkat Shannon, permintaan tanpa teks pengguna dan tanpa tools memulangkan 400 No user message provided.
Bahagian kandungan
| Bahagian | Penerangan | Tersedia pada |
|---|---|---|
{"type": "text", "text": "…"} | Teks biasa. | Semua model |
{"type": "image_url", "image_url": {"url": "…"}} | Imej, sebagai URL data: dengan kandungan base64 atau sebagai URL http(s). | Keluarga Shannon 3, shannon-1.6-lite, shannon-1.6-pro, dan model open-weight yang dihoskan yang menyenaraikan input imej |
{"type": "file", "source": {"type": "base64", "media_type": "application/pdf", "data": "…"}} | Dokumen (PDF, Word, PowerPoint atau Excel), sebagai base64 atau melalui URL. | Keluarga Shannon 3 |
Saiz, had dan senarai penuh bentuk mempunyai halaman tersendiri. Imej dan fail
Objek balasan
| Medan | Jenis | Penerangan |
|---|---|---|
id | string | chatcmpl- diikuti 32 aksara heksadesimal. |
object | string | Sentiasa chat.completion. |
created | integer | Masa balasan, dalam saat Unix. |
model | string | Id kanonik model yang menjawab. Ejaannya boleh berbeza daripada id yang anda hantar. |
choices | array | Sentiasa tepat satu choice, dengan index 0. |
choices[0].message.role | string | Sentiasa assistant. |
choices[0].message.content | string | null | Teks jawapan. Dengan tool_calls ia ialah null pada peringkat Shannon; model open-weight yang dihoskan boleh menghantar teks di sebelah panggilan. |
choices[0].message.reasoning_content | string | null | Penaakulan yang ditulis oleh model sebelum jawapan, atau null apabila tiada. |
choices[0].message.tool_calls | array | Hanya hadir apabila model memanggil alat. Setiap entri mempunyai id, type function, dan function dengan name dan arguments sebagai rentetan JSON. |
choices[0].message.annotations | array | Hanya pada permintaan dengan web_search: true yang carian untuknya menemui sesuatu. Satu url_citation bagi setiap sumber yang dinamakan oleh penanda dalam content, dengan url, title, start_index dan end_index (kedudukan penanda, dikira dalam aksara, hujung tidak termasuk). |
choices[0].finish_reason | string | Sebab balasan berakhir. Lihat Sebab selesai. |
usage | object | Token bagi permintaan. Lihat Penggunaan. |
sources | array | Hanya pada permintaan dengan web_search: true yang carian untuknya menemui sesuatu: hasil yang diberikan kepada model, setiap satu dengan index, title dan url. [1] dalam jawapan ialah entri dengan index 1. |
Sebab selesai
| finish_reason | Penerangan |
|---|---|
stop | Model menamatkan jawapannya, atau rentetan stop muncul. |
tool_calls | Model memanggil satu atau lebih alat. Jalankannya dan hantar hasilnya dalam mesej tool. |
length | Balasan dipotong pada had output. Dilaporkan dalam stream shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 dan keluarga Shannon 3. |
Balasan yang bukan stream melaporkan stop atau tool_calls.
Penggunaan
| Medan | Jenis | Penerangan | Tersedia pada |
|---|---|---|---|
usage.prompt_tokens | integer | Token input. | Semua model |
usage.completion_tokens | integer | Token output: penaakulan, jawapan dan panggilan alat bersama-sama. | Semua model |
usage.total_tokens | integer | prompt_tokens campur completion_tokens. | Semua model |
usage.prompt_tokens_details.cached_tokens | integer | Bahagian prompt_tokens yang dibaca daripada cache prompt. | Model open-weight yang dihoskan |
usage.completion_tokens_details.reasoning_tokens | integer | Bahagian completion_tokens yang dibelanjakan untuk penaakulan. | Model open-weight yang dihoskan |
Pada model open-weight yang dihoskan, prompt_tokens ialah mesej dan takrifan alat anda yang dikira dengan tokenizer model itu sendiri, ditambah token mana-mana imej. Endpoint pengiraan token memulangkan nombor yang sama sebelum anda menghantar. Pengiraan token
Pada peringkat Shannon, prompt_tokens mengira segala yang dibaca oleh model untuk menulis balasan, jadi ia lebih besar daripada teks mesej anda sahaja.
Streaming
Dengan stream ditetapkan kepada true, balasan tiba sebagai peristiwa chat.completion.chunk dan berakhir dengan data: [DONE]. Ketulan terakhir sebelumnya membawa finish_reason dan usage; tiada stream_options diperlukan. Bentuk ketulan, baris keep-alive dan ralat di dalam stream mempunyai halaman tersendiri. Penstriman
Ralat
Ralat ialah objek JSON dengan ahli error. Semakan berjalan mengikut urutan ini: kunci API, badan permintaan, id model, kemudian baki. Jadual menyenaraikan apa yang paling kerap dipulangkan oleh endpoint ini. Senarai penuh, beserta apa yang perlu dicuba semula, mempunyai halaman tersendiri. Pengendalian Ralat
{
"error": {
"type": "invalid_request_error",
"message": "unknown model: no-such-model"
}
} | Status | Jenis | Mesej | Bila |
|---|---|---|---|
401 | authentication_error | Missing authenticationInvalid API key | Tiada kunci API dihantar, atau kunci itu tidak dikenali atau telah dibatalkan. |
400 | invalid_request_error | unknown model: <id> | model bukan id yang diterbitkan. |
400 | invalid_request_error | No user message provided | Peringkat Shannon: permintaan tidak mempunyai teks pengguna dan tiada tools. |
400 | invalid_request_error | <id> does not accept image input | Bahagian imej dihantar kepada model open-weight yang dihoskan tanpa input imej. |
400 | invalid_request_error | <id> does not accept response_format | response_format dihantar kepada model open-weight yang dihoskan tanpa output berstruktur. |
400 | invalid_request_error | unknown reasoning effort '<value>'; expected off, low, medium or high | reasoning_effort mengandungi nilai di luar senarai. |
422 | invalid_request_error | Failed to deserialize the JSON body into the target type: … | messages tiada, atau sesuatu medan mempunyai jenis JSON yang salah. |
429 | rate_limit_error | Quota exceeded. Upgrade your plan at shannon-ai.com/plan | max_tokens lebih besar daripada baki anda yang tinggal. |
429 | rate_limit_error | Too many requests. Retry in <n>s. | Perlindungan lonjakan: lebih daripada 120 permintaan dalam satu minit pada akaun anda. |
500 | server_error | The model backend failed to answer. Please retry. | Model tidak menghasilkan balasan. Hantar permintaan sekali lagi. |
502 | api_error | The model backend failed to answer. Please retry. | Sama, pada keluarga Shannon 3 dan model open-weight yang dihoskan. |