Chat Completions
A POST /v1/chat/completions egy beszélgetést fogad, és a modell következő üzenetét adja vissza az OpenAI Chat Completions formátumában. Használhatod bármelyik OpenAI SDK-ból vagy sima HTTP-n; ez az oldal a mezőnkénti referencia.
POST https://api.shannon-ai.com/v1/chat/completions
A legkisebb kérés egy modellazonosító és egy felhasználói üzenet.
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."}]
}' A válasz egyetlen JSON-objektum:
{
"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
}
} Fejlécek
Kérésfejlécek
| Fejléc | Érték | Leírás |
|---|---|---|
Authorization | Bearer YOUR_API_KEY | Az API-kulcsod. Helyette minden végponton elfogadott az x-api-key: YOUR_API_KEY. |
Content-Type | application/json | Kötelező. Bármilyen más érték 415 hibát ad. |
x-request-id | Nem kötelező. A kérés saját azonosítód. Változtatás nélkül visszajön a válaszban. |
Válaszfejlécek
| Fejléc | Leírás |
|---|---|
x-request-id | Minden válaszon, a hibákon és a streameken is: az általad küldött érték, vagy 12 hexadecimális karakter, ha nem küldtél. Hibabejelentéskor add meg. |
content-type | application/json, vagy text/event-stream, ha a stream értéke true. |
Kérésmezők
Csak a messages kötelező. Az Alkalmazza oszlop megnevezi azokat a modelleket, amelyeken a mező megváltoztatja a választ. A hosztolt nyílt súlyú modellek a modelllista tizenkét azonosítója; a Shannon 3 család a shannon-3, shannon-3-pro, shannon-3.1 és shannon-3.1-pro. Modellek és árak
| Mező | Típus | Alapérték | Leírás | Alkalmazza |
|---|---|---|---|---|
model | string | shannon-1.6-lite | A válaszoló modell: egy azonosító a modelllistából. Minden kéréssel küldd el. Az egyeztetés nem tesz különbséget kis- és nagybetű között. A nem közzétett azonosító 400 unknown model hibát ad. | Minden modell |
messages | array | Kötelező. A beszélgetés, a legrégebbi üzenettel kezdve. Lásd lent az Üzenetek részt. | Minden modell | |
stream | boolean | false | true esetén a válasz írás közben server-sent eventsként érkezik. | Minden modell |
max_tokens | integer | 4096 | A válasz felső korlátja tokenben. Az 1 és 65,536 közötti tartományon kívüli értéket a rendszer a tartományba igazítja. Ennyit foglal le az egyenlegedből a kérés futása alatt. Lásd lent a Kimenet hossza részt. | Hosztolt nyílt súlyú modellek, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 |
max_completion_tokens | integer | Ugyanaz, mint a max_tokens. Ha mindkettőt elküldöd, a max_tokens érvényes. | Hosztolt nyílt súlyú modellek, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 | |
temperature | number | Mintavételi hőmérséklet. A hosztolt nyílt súlyú modelleken az alapérték 1, és az értékek 0 és 2 között maradnak. | Hosztolt nyílt súlyú modellek, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 | |
top_p | number | 0.95 | Nucleus sampling. Az értékek 0 és 1 között maradnak. | Hosztolt nyílt súlyú modellek |
seed | integer | A mintavételező seed értéke, tetszőleges egész szám. Nélküle a seed a modellből és a beszélgetésből származik, így kétszer elküldött ugyanaz a kérés ugyanazt a seedet használja. | Hosztolt nyílt súlyú modellek | |
stop | string | array | Egy string vagy stringek tömbje. Legfeljebb 4-et használ a rendszer. A válasz az első megjelenő előtt véget ér; magát a stop szöveget nem adja vissza. | Hosztolt nyílt súlyú modellek | |
reasoning_effort | string | high | Mennyit gondolkodik a modell a válasz előtt: off, low, medium vagy high. A none és a minimal jelentése off, a default jelentése medium, a max jelentése high. Bármilyen más érték 400 hibát ad. | Hosztolt nyílt súlyú modellek |
reasoning | object | Ugyanez a beállítás objektum alakban: {"effort": "low"}. Ha mindkettőt elküldöd, a reasoning_effort érvényes. | Hosztolt nyílt súlyú modellek | |
tools | array | A függvények, amelyeket a modell meghívhat, mindegyik {"type": "function", "function": {"name", "description", "parameters"}} alakban. A modell hívásai a tool_calls mezőben jönnek vissza; a kódod futtatja őket. | Minden modell | |
tool_choice | string | object | auto | Az "auto" a modellre bízza a döntést. A "required" eszközhívásra kényszeríti. A {"type": "function", "function": {"name": "…"}} arra kényszeríti, hogy azt az eszközt hívja. | Hosztolt nyílt súlyú modellek |
response_format | object | {"type": "json_object"} JSON-válaszhoz, vagy {"type": "json_schema", "json_schema": {…}} a sémádat követő válaszhoz. | Minden Shannon szint; a hosztolt nyílt súlyú modellek azonosítónként a listán szereplő módon | |
web_search | boolean | false | true esetén a modell a válasz előtt keres a weben. | shannon-1.6-*, shannon-2-*, Shannon 3 család |
Más OpenAI-mezők, például az n, user, stream_options, parallel_tool_calls, presence_penalty, frequency_penalty, logit_bias, logprobs, metadata, store és prompt_cache_key elfogadottak, hogy a meglévő klienskód változtatás nélkül fusson. Nem változtatják meg a választ: mindig egyetlen choice van, és a stream mindig használati adattal végződik.
A hibás JSON-típusú mező, például "max_tokens": "100", 422 hibát ad. A messages nélküli kérés is.
Az eszközöknek, a strukturált kimenetnek, a reasoningnak és a webes keresésnek külön oldaluk van: Funkcióhívás, Strukturált kimenetek, Reasoning effort, Beépített webes keresés.
Egy kérés opciókkal
Ez a kérés rendszerüzenetet, mintavételi mezőket és reasoning effortot állít be. Hosztolt nyílt súlyú modellt használ, amely mindet alkalmazza.
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"
}' A válasz alakja ugyanaz, mint fent. A hosztolt nyílt súlyú modelleken a usage két részlettel bővül: a gyorsítótárból olvasott prompt-tokenekkel és a reasoningra költött tokenekkel.
{
"usage": {
"prompt_tokens": 31,
"completion_tokens": 62,
"total_tokens": 93,
"prompt_tokens_details": {
"cached_tokens": 0
},
"completion_tokens_details": {
"reasoning_tokens": 21
}
}
} Kimenet hossza
A max_tokens két dolgot tesz. Először: ennyi tokent foglal le az egyenlegedből a kérés indulásakor. Ha a válasz kész, ezt a mennyiséget a kérés által ténylegesen használt tokenek váltják fel. Ha a max_tokens nagyobb, mint az egyenlegedből megmaradt rész, a kérés 429 Quota exceeded hibát ad, még akkor is, ha maga a válasz elfért volna. Kevesebb lefoglalásához küldj kisebb max_tokens értéket.
A shannon-coder-1 ezen a végponton másképp számít: minden kérés a csomagod egy Shannon Coder hívása, és nem foglalnak le hozzá tokent. Korlátok és egyenleg
Másodszor: ezeken a modelleken korlátozza a válasz hosszát:
| Modellek | Mit csinál a max_tokens |
|---|---|
shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 | A válasz a korlát elérésekor megáll. A stream ilyenkor length finish_reason értékkel ér véget. |
| Hosztolt nyílt súlyú modellek | A válasz szövege a max_tokens értéknél megáll. A reasoning nem számít bele. A 256 alatti értékeket a rendszer 256-ként kezeli. |
max_tokens vagy max_completion_tokens nélkül az érték 4,096. A shannon-coder-1 modellen 65,536.
Üzenetek
Minden üzenet egy objektum role és content mezővel. A content egy string, vagy részek tömbje, ha az üzenet nem csak szöveget hordoz.
| Szerep | Leírás | Alkalmazza |
|---|---|---|
system | Utasítások a modellnek. Tedd az elejére. A Shannon szinteken az első system üzenetet használja a rendszer. | Hosztolt nyílt súlyú modellek, shannon-1.6-*, shannon-2-*, shannon-coder-1 |
developer | system üzenetként olvasva. | Hosztolt nyílt súlyú modellek |
user | Amit kérdezel. A Shannon szinteken az utolsó user üzenet a prompt, az előtte lévő üzenetek az előzmények. | Minden modell |
assistant | A modell korábbi válaszai. Tartsd meg a tool_calls mezőt, ha utána eszköz eredményét küldöd. | Minden modell |
tool | Egy eszközhívás eredménye: a tool_call_id a hívás azonosítóját, a content az eredményt tartalmazza stringként. | Minden modell |
Shannon 3 családbeli azonosítónál a feltétlenül betartandó utasításokat tedd a user üzenetbe.
A Shannon szinteken a felhasználói szöveg és tools nélküli kérés 400 No user message provided hibát ad.
Tartalomrészek
| Rész | Leírás | Elérhető ezeken |
|---|---|---|
{"type": "text", "text": "…"} | Sima szöveg. | Minden modell |
{"type": "image_url", "image_url": {"url": "…"}} | Egy kép, data: URL-ként base64 tartalommal vagy http(s) URL-ként. | Shannon 3 család, shannon-1.6-lite, shannon-1.6-pro, és a hosztolt nyílt súlyú modellek, amelyek képbemenetet támogatnak |
{"type": "file", "source": {"type": "base64", "media_type": "application/pdf", "data": "…"}} | Egy dokumentum (PDF, Word, PowerPoint vagy Excel), base64-ként vagy URL-lel. | Shannon 3 család |
A méreteknek, korlátoknak és az alakok teljes listájának külön oldala van. Képek és fájlok
A válaszobjektum
| Mező | Típus | Leírás |
|---|---|---|
id | string | chatcmpl-, utána 32 hexadecimális karakter. |
object | string | Mindig chat.completion. |
created | integer | A válasz ideje Unix-másodpercben. |
model | string | A válaszoló modell kanonikus azonosítója. Írásmódjában eltérhet az általad küldött azonosítótól. |
choices | array | Mindig pontosan egy choice, index értéke 0. |
choices[0].message.role | string | Mindig assistant. |
choices[0].message.content | string | null | A válasz szövege. tool_calls esetén a Shannon szinteken null; a hosztolt nyílt súlyú modellek a hívások mellett szöveget is küldhetnek. |
choices[0].message.reasoning_content | string | null | A reasoning, amelyet a modell a válasz előtt írt, vagy null, ha nincs. |
choices[0].message.tool_calls | array | Csak akkor van jelen, ha a modell eszközöket hív. Minden elemnek van id, type (function) és function mezője, benne a name és az arguments JSON-stringként. |
choices[0].message.annotations | array | Csak olyan kérésnél, amely web_search: true értéket küld, és amelynek a keresése talált valamit. Egy url_citation minden olyan forráshoz, amelyet a content egy jelölője megnevez, url, title, start_index és end_index mezővel (a jelölő helye karakterekben számolva, a vég nem tartozik bele). |
choices[0].finish_reason | string | Miért ért véget a válasz. Lásd a Befejezési okok részt. |
usage | object | A kérés tokenjei. Lásd: Használat. |
sources | array | Csak olyan kérésnél, amely web_search: true értéket küld, és amelynek a keresése talált valamit: az eredmények, amelyeket a modell megkapott, mindegyik index, title és url mezővel. A válaszban az [1] az index 1 értékű elem. |
Befejezési okok
| finish_reason | Leírás |
|---|---|
stop | A modell befejezte a válaszát, vagy megjelent egy stop string. |
tool_calls | A modell egy vagy több eszközt hív. Futtasd le őket, és az eredményeket tool üzenetekben küldd vissza. |
length | A választ a kimeneti korlátnál megszakította a rendszer. A shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 és a Shannon 3 család streamjeiben jelenik meg. |
A nem streamelt válasz stop vagy tool_calls értéket jelez.
Használat
| Mező | Típus | Leírás | Elérhető ezeken |
|---|---|---|---|
usage.prompt_tokens | integer | Bemeneti tokenek. | Minden modell |
usage.completion_tokens | integer | Kimeneti tokenek: a reasoning, a válasz és az eszközhívások együtt. | Minden modell |
usage.total_tokens | integer | prompt_tokens plusz completion_tokens. | Minden modell |
usage.prompt_tokens_details.cached_tokens | integer | A prompt_tokens prompt-gyorsítótárból olvasott része. | Hosztolt nyílt súlyú modellek |
usage.completion_tokens_details.reasoning_tokens | integer | A completion_tokens reasoningra költött része. | Hosztolt nyílt súlyú modellek |
A hosztolt nyílt súlyú modelleken a prompt_tokens az üzeneteid és eszközdefiníciód a modell saját tokenizerével számolva, plusz az esetleges képek tokenjei. A tokenszámláló végpontok küldés előtt ugyanezt a számot adják vissza. Tokenszámlálás
A Shannon szinteken a prompt_tokens mindent számol, amit a modell a válasz megírásához elolvasott, ezért nagyobb, mint az üzeneteid szövege egyedül.
Streaming
A stream true értékével a válasz chat.completion.chunk eseményekként érkezik, és data: [DONE] sorral ér véget. Az előtte lévő utolsó chunk tartalmazza a finish_reason és a usage értékét; stream_options nem szükséges. A chunkok alakjának, a keep-alive soroknak és a streamen belüli hibáknak külön oldaluk van. Streaming
Hibák
A hiba egy JSON-objektum error taggal. Az ellenőrzések ebben a sorrendben futnak: API-kulcs, kérés törzse, modellazonosító, majd egyenleg. A táblázat azt sorolja fel, amit ez a végpont leggyakrabban visszaad. A teljes listának, azzal együtt, hogy mit érdemes újrapróbálni, külön oldala van. Hibakezelés
{
"error": {
"type": "invalid_request_error",
"message": "unknown model: no-such-model"
}
} | Státusz | Típus | Üzenet | Mikor |
|---|---|---|---|
401 | authentication_error | Missing authenticationInvalid API key | Nem küldtél API-kulcsot, vagy a kulcs ismeretlen vagy vissza van vonva. |
400 | invalid_request_error | unknown model: <id> | A model nem közzétett azonosító. |
400 | invalid_request_error | No user message provided | Shannon szintek: a kérésben nincs felhasználói szöveg és nincs tools. |
400 | invalid_request_error | <id> does not accept image input | Képrészt küldtek egy olyan hosztolt nyílt súlyú modellnek, amely nem támogat képbemenetet. |
400 | invalid_request_error | <id> does not accept response_format | response_format mezőt küldtek egy strukturált kimenet nélküli hosztolt nyílt súlyú modellnek. |
400 | invalid_request_error | unknown reasoning effort '<value>'; expected off, low, medium or high | A reasoning_effort a listán kívüli értéket tartalmaz. |
422 | invalid_request_error | Failed to deserialize the JSON body into the target type: … | A messages hiányzik, vagy egy mező JSON-típusa hibás. |
429 | rate_limit_error | Quota exceeded. Upgrade your plan at shannon-ai.com/plan | A max_tokens nagyobb, mint az egyenlegedből megmaradt rész. |
429 | rate_limit_error | Too many requests. Retry in <n>s. | Flood protection: egy percen belül több mint 120 kérés érkezett a fiókodról. |
500 | server_error | The model backend failed to answer. Please retry. | A modell nem adott választ. Küldd el újra a kérést. |
502 | api_error | The model backend failed to answer. Please retry. | Ugyanez a Shannon 3 családon és a hosztolt nyílt súlyú modelleken. |