Chat Completions
POST /v1/chat/completions sprejme pogovor in vrne naslednje sporočilo modela v formatu OpenAI Chat Completions. Uporabite ga iz katerega koli SDK-ja OpenAI ali prek navadnega HTTP; ta stran je referenca polje za poljem.
POST https://api.shannon-ai.com/v1/chat/completions
Najmanjši zahtevek je id modela in eno uporabnikovo sporočilo.
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."}]
}' Odgovor je en objekt 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
}
} Glave
Glave zahtevka
| Glava | Vrednost | Opis |
|---|---|---|
Authorization | Bearer YOUR_API_KEY | Vaš API ključ. Namesto njega je na vsakem endpointu sprejet x-api-key: YOUR_API_KEY. |
Content-Type | application/json | Obvezno. Vsaka druga vrednost vrne 415. |
x-request-id | Neobvezno. Vaš lasten id zahtevka. V odgovoru se vrne nespremenjen. |
Glave odgovora
| Glava | Opis |
|---|---|
x-request-id | Na vsakem odgovoru, tudi pri napakah in tokovih: vrednost, ki ste jo poslali, ali 12 šestnajstiških znakov, če je niste poslali. Navedite jo, ko poročate o težavi. |
content-type | application/json ali text/event-stream, kadar je stream enak true. |
Polja zahtevka
Zahtevano je samo messages. Stolpec Uporabljajo navaja modele, pri katerih polje spremeni odgovor. Gostovani modeli z odprtimi utežmi so dvanajst id-jev s seznama modelov; družina Shannon 3 so shannon-3, shannon-3-pro, shannon-3.1 in shannon-3.1-pro. Modeli in cene
| Polje | Tip | Privzeto | Opis | Uporabljajo |
|---|---|---|---|---|
model | string | shannon-1.6-lite | Model, ki odgovori: id s seznama modelov. Pošljite ga z vsakim zahtevkom. Ujemanje ne razlikuje velikih in malih črk. Id, ki ni objavljen, vrne 400 unknown model. | Vsi modeli |
messages | array | Obvezno. Pogovor, najstarejše sporočilo prvo. Glejte spodaj Sporočila. | Vsi modeli | |
stream | boolean | false | true pošlje odgovor kot dogodke, ki jih pošilja strežnik, med pisanjem. | Vsi modeli |
max_tokens | integer | 4096 | Zgornja meja odgovora v tokenih. Vrednost zunaj obsega od 1 do 65,536 se premakne v ta obseg. To je tudi znesek, ki se med izvajanjem zahtevka odloži z vašega stanja. Glejte spodaj Dolžina izhoda. | Gostovani modeli z odprtimi utežmi, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 |
max_completion_tokens | integer | Enako kot max_tokens. Če sta poslana oba, se uporabi max_tokens. | Gostovani modeli z odprtimi utežmi, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 | |
temperature | number | Temperatura vzorčenja. Pri gostovanih modelih z odprtimi utežmi je privzeta 1, vrednosti pa se omejijo med 0 in 2. | Gostovani modeli z odprtimi utežmi, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 | |
top_p | number | 0.95 | Jedrno vzorčenje (nucleus sampling). Vrednosti se omejijo med 0 in 1. | Gostovani modeli z odprtimi utežmi |
seed | integer | Seme vzorčevalnika, poljubno celo število. Brez njega je seme izpeljano iz modela in pogovora, zato isti zahtevek, poslan dvakrat, uporabi isto seme. | Gostovani modeli z odprtimi utežmi | |
stop | string | array | Niz ali polje nizov. Uporabijo se do 4. Odgovor se konča pred prvim, ki se pojavi; samo ustavitveno besedilo se ne vrne. | Gostovani modeli z odprtimi utežmi | |
reasoning_effort | string | high | Koliko model razmišlja, preden odgovori: off, low, medium ali high. none in minimal pomenita off, default pomeni medium, max pomeni high. Vsaka druga vrednost vrne 400. | Gostovani modeli z odprtimi utežmi |
reasoning | object | Ista nastavitev v obliki objekta: {"effort": "low"}. Če sta poslana oba, se uporabi reasoning_effort. | Gostovani modeli z odprtimi utežmi | |
tools | array | Funkcije, ki jih model lahko pokliče, vsaka kot {"type": "function", "function": {"name", "description", "parameters"}}. Klici modela se vrnejo v tool_calls; vaša koda jih zažene. | Vsi modeli | |
tool_choice | string | object | auto | "auto" prepusti odločitev modelu. "required" ga prisili, da pokliče orodje. {"type": "function", "function": {"name": "…"}} ga prisili, da pokliče to orodje. | Gostovani modeli z odprtimi utežmi |
response_format | object | {"type": "json_object"} za odgovor JSON ali {"type": "json_schema", "json_schema": {…}} za odgovor, ki sledi vaši shemi. | Vse ravni Shannon; gostovani modeli z odprtimi utežmi, kot je navedeno za posamezen id | |
web_search | boolean | false | true omogoči modelu iskanje po spletu, preden odgovori. | shannon-1.6-*, shannon-2-*, družina Shannon 3 |
Druga polja OpenAI, kot so n, user, stream_options, parallel_tool_calls, presence_penalty, frequency_penalty, logit_bias, logprobs, metadata, store in prompt_cache_key, so sprejeta, da obstoječa koda odjemalca deluje nespremenjena. Odgovora ne spremenijo: izbira je vedno ena, tok pa se vedno konča s porabo.
Polje z napačnim tipom JSON, na primer "max_tokens": "100", vrne 422. Enako velja za zahtevek brez messages.
Orodja, strukturiran izhod, razmišljanje in spletno iskanje imajo vsak svojo stran: Klicanje funkcij, Strukturirani izhodi, Napor razmišljanja, Vgrajeno spletno iskanje.
Zahtevek z možnostmi
Ta zahtevek nastavi sistemsko sporočilo, polja vzorčenja in napor razmišljanja. Uporablja gostovani model z odprtimi utežmi, ki upošteva vse našteto.
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"
}' Odgovor ima enako obliko kot zgoraj. Njegov usage pri gostovanih modelih z odprtimi utežmi doda dve podrobnosti: tokene prompta, prebrane iz predpomnilnika, in tokene, porabljene za razmišljanje.
{
"usage": {
"prompt_tokens": 31,
"completion_tokens": 62,
"total_tokens": 93,
"prompt_tokens_details": {
"cached_tokens": 0
},
"completion_tokens_details": {
"reasoning_tokens": 21
}
}
} Dolžina izhoda
max_tokens naredi dvoje. Prvič, to je število tokenov, ki se ob začetku zahtevka odložijo z vašega stanja. Ko je odgovor končan, ta znesek nadomestijo tokeni, ki jih je zahtevek porabil. Če je max_tokens večji od tega, kar je ostalo na vašem stanju, zahtevek vrne 429 Quota exceeded, tudi če bi se odgovor sam še izšel. Pošljite manjši max_tokens, da odložite manj.
shannon-coder-1 se na tem endpointu šteje drugače: vsak zahtevek je eden od klicev Shannon Coder vašega paketa in zanj se ne odloži noben token. Omejitve in stanje
Drugič, omejuje dolžino odgovora na teh modelih:
| Modeli | Kaj naredi max_tokens |
|---|---|
shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 | Odgovor se ustavi, ko doseže omejitev. Tok se nato konča s finish_reason length. |
| Gostovani modeli z odprtimi utežmi | Besedilo odgovora se ustavi pri max_tokens. Razmišljanje se ne šteje vanj. Vrednosti pod 256 veljajo kot 256. |
Brez max_tokens ali max_completion_tokens je vrednost 4,096. Pri shannon-coder-1 je 65,536.
Sporočila
Vsako sporočilo je objekt z role in content. content je niz ali polje delov, kadar sporočilo nosi več kot besedilo.
| Vloga | Opis | Uporabljajo |
|---|---|---|
system | Navodila za model. Postavite ga prvega. Pri ravneh Shannon se uporabi prvo sporočilo system. | Gostovani modeli z odprtimi utežmi, shannon-1.6-*, shannon-2-*, shannon-coder-1 |
developer | Prebere se kot system. | Gostovani modeli z odprtimi utežmi |
user | Kar vprašate. Pri ravneh Shannon je zadnje sporočilo user prompt, sporočila pred njim pa zgodovina. | Vsi modeli |
assistant | Prejšnji odgovori modela. Njegove tool_calls obdržite, ko za njimi pošljete rezultat orodja. | Vsi modeli |
tool | Rezultat klica orodja: tool_call_id vsebuje id klica, content pa rezultat kot niz. | Vsi modeli |
Pri id-ju iz družine Shannon 3 navodila, ki morajo veljati, vstavite v sporočilo user.
Pri ravneh Shannon zahtevek brez besedila uporabnika in brez tools vrne 400 No user message provided.
Deli vsebine
| Del | Opis | Na voljo pri |
|---|---|---|
{"type": "text", "text": "…"} | Navadno besedilo. | Vsi modeli |
{"type": "image_url", "image_url": {"url": "…"}} | Slika, kot URL data: z vsebino base64 ali kot URL http(s). | Družina Shannon 3, shannon-1.6-lite, shannon-1.6-pro in gostovani modeli z odprtimi utežmi, ki navajajo vhod s slikami |
{"type": "file", "source": {"type": "base64", "media_type": "application/pdf", "data": "…"}} | Dokument (PDF, Word, PowerPoint ali Excel), kot base64 ali prek URL-ja. | Družina Shannon 3 |
Velikosti, omejitve in celoten seznam oblik imajo svojo stran. Slike in datoteke
Objekt odgovora
| Polje | Tip | Opis |
|---|---|---|
id | string | chatcmpl-, ki mu sledi 32 šestnajstiških znakov. |
object | string | Vedno chat.completion. |
created | integer | Čas odgovora v sekundah Unix. |
model | string | Kanonični id modela, ki je odgovoril. Po črkovanju se lahko razlikuje od ida, ki ste ga poslali. |
choices | array | Vedno natanko ena izbira, z index 0. |
choices[0].message.role | string | Vedno assistant. |
choices[0].message.content | string | null | Besedilo odgovora. Pri tool_calls je na ravneh Shannon null; gostovani modeli z odprtimi utežmi lahko poleg klicev pošljejo besedilo. |
choices[0].message.reasoning_content | string | null | Razmišljanje, ki ga je model zapisal pred odgovorom, ali null, kadar ga ni. |
choices[0].message.tool_calls | array | Prisotno samo, kadar model pokliče orodja. Vsak vnos ima id, type function in function z name in arguments kot nizom JSON. |
choices[0].message.annotations | array | Samo pri zahtevku z web_search: true, katerega iskanje je kaj našlo. En url_citation za vsak vir, ki ga poimenuje oznaka v content, z url, title, start_index in end_index (položaj oznake, štet v znakih, konec ni vključen). |
choices[0].finish_reason | string | Zakaj se je odgovor končal. Glejte Razlogi za konec. |
usage | object | Tokeni zahtevka. Glejte Poraba. |
sources | array | Samo pri zahtevku z web_search: true, katerega iskanje je kaj našlo: rezultati, ki jih je model dobil, vsak z index, title in url. [1] v odgovoru je vnos z index 1. |
Razlogi za konec
| finish_reason | Opis |
|---|---|
stop | Model je dokončal odgovor ali pa se je pojavil niz stop. |
tool_calls | Model pokliče eno ali več orodij. Zaženite jih in rezultate pošljite v sporočilih tool. |
length | Odgovor je bil odrezan na omejitvi izhoda. Sporoča se v tokovih shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 in družine Shannon 3. |
Odgovor, ki ni pretočen, sporoča stop ali tool_calls.
Poraba
| Polje | Tip | Opis | Na voljo pri |
|---|---|---|---|
usage.prompt_tokens | integer | Vhodni tokeni. | Vsi modeli |
usage.completion_tokens | integer | Izhodni tokeni: razmišljanje, odgovor in klici orodij skupaj. | Vsi modeli |
usage.total_tokens | integer | prompt_tokens plus completion_tokens. | Vsi modeli |
usage.prompt_tokens_details.cached_tokens | integer | Del prompt_tokens, ki je bil prebran iz predpomnilnika promptov. | Gostovani modeli z odprtimi utežmi |
usage.completion_tokens_details.reasoning_tokens | integer | Del completion_tokens, ki je bil porabljen za razmišljanje. | Gostovani modeli z odprtimi utežmi |
Pri gostovanih modelih z odprtimi utežmi so prompt_tokens vaša sporočila in definicije orodij, prešteti z modelovim lastnim tokenizerjem, plus tokeni morebitnih slik. Endpointa za štetje tokenov vrneta isto število, preden pošljete. Štetje tokenov
Pri ravneh Shannon prompt_tokens šteje vse, kar je model prebral, da je napisal odgovor, zato je večje od besedila samih vaših sporočil.
Pretakanje
Ko je stream nastavljen na true, odgovor prihaja kot dogodki chat.completion.chunk in se konča z data: [DONE]. Zadnji kos pred tem nosi finish_reason in usage; stream_options ni treba. Oblike kosov, vrstice keep-alive in napake znotraj toka imajo svojo stran. Pretakanje
Napake
Napaka je objekt JSON s članom error. Preverjanja potekajo v tem vrstnem redu: API ključ, telo zahtevka, id modela, nato stanje. Tabela navaja, kaj ta endpoint najpogosteje vrne. Celoten seznam s priporočili, kaj ponoviti, ima svojo stran. Obravnava napak
{
"error": {
"type": "invalid_request_error",
"message": "unknown model: no-such-model"
}
} | Status | Tip | Sporočilo | Kdaj |
|---|---|---|---|
401 | authentication_error | Missing authenticationInvalid API key | API ključ ni bil poslan ali pa je ključ neznan ali preklican. |
400 | invalid_request_error | unknown model: <id> | model ni objavljen id. |
400 | invalid_request_error | No user message provided | Ravni Shannon: zahtevek nima besedila uporabnika in nima tools. |
400 | invalid_request_error | <id> does not accept image input | Del s sliko je bil poslan gostovanemu modelu z odprtimi utežmi brez vhoda s slikami. |
400 | invalid_request_error | <id> does not accept response_format | response_format je bil poslan gostovanemu modelu z odprtimi utežmi brez strukturiranega izhoda. |
400 | invalid_request_error | unknown reasoning effort '<value>'; expected off, low, medium or high | reasoning_effort vsebuje vrednost zunaj seznama. |
422 | invalid_request_error | Failed to deserialize the JSON body into the target type: … | messages manjka ali ima polje napačen tip JSON. |
429 | rate_limit_error | Quota exceeded. Upgrade your plan at shannon-ai.com/plan | max_tokens je večji od tega, kar je ostalo na vašem stanju. |
429 | rate_limit_error | Too many requests. Retry in <n>s. | Zaščita pred poplavo zahtevkov: več kot 120 zahtevkov v eni minuti na vašem računu. |
500 | server_error | The model backend failed to answer. Please retry. | Model ni ustvaril odgovora. Pošljite zahtevek znova. |
502 | api_error | The model backend failed to answer. Please retry. | Enako, na družini Shannon 3 in gostovanih modelih z odprtimi utežmi. |