Chat Completions
POST /v1/chat/completions prenas konversacion kaj redonas la sekvan mesaĝon de la modelo en la formato OpenAI Chat Completions. Uzu ĝin el ajna SDK de OpenAI aŭ per simpla HTTP; ĉi tiu paĝo estas la referenco kampo post kampo.
POST https://api.shannon-ai.com/v1/chat/completions
La plej malgranda peto estas modelo-id kaj unu uzanta mesaĝo.
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."}]
}' La respondo estas unu JSON-objekto:
{
"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
}
} Kapoj
Kapoj de peto
| Kapo | Valoro | Priskribo |
|---|---|---|
Authorization | Bearer YOUR_API_KEY | Via API-ŝlosilo. x-api-key: YOUR_API_KEY estas akceptata anstataŭ ĝi ĉe ĉiu endpoint. |
Content-Type | application/json | Deviga. Ĉiu alia valoro redonas 415. |
x-request-id | Laŭvola. Via propra id por la peto. Ĝi revenas senŝanĝe en la respondo. |
Kapoj de respondo
| Kapo | Priskribo |
|---|---|
x-request-id | Ĉe ĉiu respondo, inkluzive de eraroj kaj fluoj: la valoro, kiun vi sendis, aŭ 12 deksesumaj signoj, kiam vi sendis nenion. Citu ĝin, kiam vi raportas problemon. |
content-type | application/json, aŭ text/event-stream kiam stream estas true. |
Kampoj de peto
Nur messages estas deviga. La kolumno Aplikata de nomas la modelojn, ĉe kiuj kampo ŝanĝas la respondon. La gastigitaj malfermpezaj modeloj estas la dek du id-oj de la modellisto; la familio Shannon 3 estas shannon-3, shannon-3-pro, shannon-3.1 kaj shannon-3.1-pro. Modeloj kaj prezoj
| Kampo | Tipo | Defaŭlto | Priskribo | Aplikata de |
|---|---|---|---|---|
model | string | shannon-1.6-lite | La modelo, kiu respondas: id el la modellisto. Sendu ĝin kun ĉiu peto. La kongruigo ne distingas majusklojn. Id, kiu ne estas publikigita, redonas 400 unknown model. | Ĉiuj modeloj |
messages | array | Deviga. La konversacio, plej malnova mesaĝo unue. Vidu Mesaĝoj sube. | Ĉiuj modeloj | |
stream | boolean | false | true sendas la respondon kiel server-sent events dum ĝi estas skribata. | Ĉiuj modeloj |
max_tokens | integer | 4096 | Supra limo de la respondo, en tokenoj. Valoro ekster 1 ĝis 65,536 estas movita en tiun intervalon. Ĝi ankaŭ estas la kvanto, kiu estas rezervita el via saldo dum la peto funkcias. Vidu Longeco de la eligo sube. | Gastigitaj malfermpezaj modeloj, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 |
max_completion_tokens | integer | Same kiel max_tokens. Kiam ambaŭ estas senditaj, max_tokens estas uzata. | Gastigitaj malfermpezaj modeloj, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 | |
temperature | number | Specimena temperaturo. Ĉe la gastigitaj malfermpezaj modeloj la defaŭlto estas 1 kaj la valoroj estas tenataj inter 0 kaj 2. | Gastigitaj malfermpezaj modeloj, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 | |
top_p | number | 0.95 | Specimenado per nukleo (nucleus sampling). La valoroj estas tenataj inter 0 kaj 1. | Gastigitaj malfermpezaj modeloj |
seed | integer | Semo de la specimenilo, ajna entjero. Sen ĝi la semo estas derivata el la modelo kaj la konversacio, do la sama peto, sendita dufoje, uzas la saman semon. | Gastigitaj malfermpezaj modeloj | |
stop | string | array | Ĉeno aŭ tabelo de ĉenoj. Ĝis 4 estas uzataj. La respondo finiĝas antaŭ la unua, kiu aperas; la halta teksto mem ne estas redonata. | Gastigitaj malfermpezaj modeloj | |
reasoning_effort | string | high | Kiom la modelo rezonas antaŭ ol respondi: off, low, medium aŭ high. none kaj minimal signifas off, default signifas medium, max signifas high. Ĉiu alia valoro redonas 400. | Gastigitaj malfermpezaj modeloj |
reasoning | object | La sama agordo en objekta formo: {"effort": "low"}. Kiam ambaŭ estas senditaj, reasoning_effort estas uzata. | Gastigitaj malfermpezaj modeloj | |
tools | array | La funkcioj, kiujn la modelo rajtas voki, ĉiu kiel {"type": "function", "function": {"name", "description", "parameters"}}. La vokoj de la modelo revenas en tool_calls; via kodo plenumas ilin. | Ĉiuj modeloj | |
tool_choice | string | object | auto | "auto" lasas la modelon decidi. "required" devigas ĝin voki ilon. {"type": "function", "function": {"name": "…"}} devigas ĝin voki tiun ilon. | Gastigitaj malfermpezaj modeloj |
response_format | object | {"type": "json_object"} por JSON-respondo, aŭ {"type": "json_schema", "json_schema": {…}} por respondo, kiu sekvas vian skemon. | Ĉiuj Shannon-niveloj; gastigitaj malfermpezaj modeloj laŭ la listo por ĉiu id | |
web_search | boolean | false | true lasas la modelon serĉi en la reto antaŭ ol respondi. | shannon-1.6-*, shannon-2-*, familio Shannon 3 |
Aliaj kampoj de OpenAI, kiel n, user, stream_options, parallel_tool_calls, presence_penalty, frequency_penalty, logit_bias, logprobs, metadata, store kaj prompt_cache_key, estas akceptataj, por ke ekzistanta klienta kodo funkciu senŝanĝe. Ili ne ŝanĝas la respondon: ĉiam ekzistas unu elekto, kaj fluo ĉiam finiĝas per uzado.
Kampo kun malĝusta JSON-tipo, ekzemple "max_tokens": "100", redonas 422. Peto sen messages same.
Iloj, strukturita eligo, reasoning kaj retserĉo havas ĉiu sian propran paĝon: Funkci-alvokoj, Strukturitaj eligoj, Peno de reasoning, Retserĉo.
Peto kun opcioj
Ĉi tiu peto agordas mesaĝon system, la specimenajn kampojn kaj la penon de reasoning. Ĝi uzas gastigitan malfermpezan modelon, kiu aplikas ĉiujn.
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"
}' La respondo havas la saman formon kiel supre. Ĝia usage aldonas du detalojn ĉe la gastigitaj malfermpezaj modeloj: la prompt-tokenojn legitajn el la kaŝmemoro kaj la tokenojn elspezitajn por reasoning.
{
"usage": {
"prompt_tokens": 31,
"completion_tokens": 62,
"total_tokens": 93,
"prompt_tokens_details": {
"cached_tokens": 0
},
"completion_tokens_details": {
"reasoning_tokens": 21
}
}
} Longeco de la eligo
max_tokens faras du aferojn. Unue, ĝi estas la nombro de tokenoj rezervitaj el via saldo, kiam la peto komenciĝas. Kiam la respondo estas kompleta, tiu kvanto estas anstataŭigita per la tokenoj, kiujn la peto uzis. Se max_tokens estas pli granda ol tio, kio restas el via saldo, la peto redonas 429 Quota exceeded eĉ se la respondo mem sufiĉus. Sendu pli malaltan max_tokens por rezervi malpli.
shannon-coder-1 estas kalkulata alie ĉe ĉi tiu endpoint: ĉiu peto estas unu el la vokoj de Shannon Coder de via plano, kaj neniuj tokenoj estas rezervataj por ĝi. Limoj kaj saldo
Due, ĝi limigas la longecon de la respondo ĉe ĉi tiuj modeloj:
| Modeloj | Kion faras max_tokens |
|---|---|
shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 | La respondo haltas, kiam ĝi atingas la limon. Fluo tiam finiĝas per finish_reason length. |
| Gastigitaj malfermpezaj modeloj | La teksto de la respondo haltas ĉe max_tokens. Reasoning ne estas kalkulata kontraŭ ĝi. Valoroj sub 256 agas kiel 256. |
Sen max_tokens aŭ max_completion_tokens la valoro estas 4,096. Ĉe shannon-coder-1 ĝi estas 65,536.
Mesaĝoj
Ĉiu mesaĝo estas objekto kun role kaj content. content estas ĉeno, aŭ tabelo de partoj, kiam la mesaĝo portas pli ol tekston.
| Rolo | Priskribo | Aplikata de |
|---|---|---|
system | Instrukcioj por la modelo. Metu ĝin unue. Ĉe la Shannon-niveloj la unua mesaĝo system estas tiu, kiu estas uzata. | Gastigitaj malfermpezaj modeloj, shannon-1.6-*, shannon-2-*, shannon-coder-1 |
developer | Legata kiel system. | Gastigitaj malfermpezaj modeloj |
user | Tio, kion vi demandas. Ĉe la Shannon-niveloj la lasta mesaĝo user estas la prompto kaj la antaŭaj mesaĝoj estas la historio. | Ĉiuj modeloj |
assistant | Pli fruaj respondoj de la modelo. Konservu ĝiajn tool_calls, kiam vi sendas ilo-rezulton post ĝi. | Ĉiuj modeloj |
tool | La rezulto de ilovoko: tool_call_id enhavas la id de la voko kaj content la rezulton kiel ĉenon. | Ĉiuj modeloj |
Kun id de la familio Shannon 3 metu instrukciojn, kiuj devas validi, en la mesaĝon user.
Ĉe la Shannon-niveloj peto sen uzanta teksto kaj sen tools redonas 400 No user message provided.
Partoj de enhavo
| Parto | Priskribo | Disponebla ĉe |
|---|---|---|
{"type": "text", "text": "…"} | Simpla teksto. | Ĉiuj modeloj |
{"type": "image_url", "image_url": {"url": "…"}} | Bildo, kiel URL data: kun base64-enhavo aŭ kiel URL http(s). | Familio Shannon 3, shannon-1.6-lite, shannon-1.6-pro kaj la gastigitaj malfermpezaj modeloj, kiuj listigas bildan enigon |
{"type": "file", "source": {"type": "base64", "media_type": "application/pdf", "data": "…"}} | Dokumento (PDF, Word, PowerPoint aŭ Excel), kiel base64 aŭ per URL. | Familio Shannon 3 |
Grandoj, limoj kaj la plena listo de formoj havas sian propran paĝon. Bildoj kaj dosieroj
La responda objekto
| Kampo | Tipo | Priskribo |
|---|---|---|
id | string | chatcmpl- sekvata de 32 deksesumaj signoj. |
object | string | Ĉiam chat.completion. |
created | integer | Tempo de la respondo, en Unix-sekundoj. |
model | string | La kanona id de la modelo, kiu respondis. Ĝi povas diferenci en literumo de la id, kiun vi sendis. |
choices | array | Ĉiam ĝuste unu elekto, kun index 0. |
choices[0].message.role | string | Ĉiam assistant. |
choices[0].message.content | string | null | La teksto de la respondo. Kun tool_calls ĝi estas null ĉe la Shannon-niveloj; la gastigitaj malfermpezaj modeloj povas sendi tekston apud la vokoj. |
choices[0].message.reasoning_content | string | null | La reasoning, kiun la modelo skribis antaŭ la respondo, aŭ null, kiam ne ekzistas. |
choices[0].message.tool_calls | array | Nur kiam la modelo vokas ilojn. Ĉiu ero havas id, type function, kaj function kun name kaj la arguments kiel JSON-ĉeno. |
choices[0].message.annotations | array | Nur ĉe peto kun web_search: true, kies serĉo trovis ion. Unu url_citation por ĉiu fonto, kiun marko en content nomas, kun url, title, start_index kaj end_index (la pozicio de la marko, kalkulita en signoj, fino ne inkluzivita). |
choices[0].finish_reason | string | Kial la respondo finiĝis. Vidu Kialoj de fino. |
usage | object | La tokenoj de la peto. Vidu Uzado. |
sources | array | Nur ĉe peto kun web_search: true, kies serĉo trovis ion: la rezultoj, kiujn la modelo ricevis, ĉiu kun index, title kaj url. [1] en la respondo estas la enskribo kun index 1. |
Kialoj de fino
| finish_reason | Priskribo |
|---|---|
stop | La modelo finis sian respondon, aŭ aperis ĉeno stop. |
tool_calls | La modelo vokas unu aŭ pli da iloj. Plenumu ilin kaj sendu la rezultojn en mesaĝoj tool. |
length | La respondo estis detranĉita ĉe la eliga limo. Raportata en fluoj de shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 kaj la familio Shannon 3. |
Nefluata respondo raportas stop aŭ tool_calls.
Uzado
| Kampo | Tipo | Priskribo | Disponebla ĉe |
|---|---|---|---|
usage.prompt_tokens | integer | Enirtokenoj. | Ĉiuj modeloj |
usage.completion_tokens | integer | Eligtokenoj: reasoning, respondo kaj ilovokoj kune. | Ĉiuj modeloj |
usage.total_tokens | integer | prompt_tokens plus completion_tokens. | Ĉiuj modeloj |
usage.prompt_tokens_details.cached_tokens | integer | La parto de prompt_tokens, kiu estis legita el la prompt-kaŝmemoro. | Gastigitaj malfermpezaj modeloj |
usage.completion_tokens_details.reasoning_tokens | integer | La parto de completion_tokens, kiu estis elspezita por reasoning. | Gastigitaj malfermpezaj modeloj |
Ĉe la gastigitaj malfermpezaj modeloj prompt_tokens estas viaj mesaĝoj kaj ilo-difinoj kalkulitaj per la propra tokenigilo de la modelo, plus la tokenoj de eventualaj bildoj. La endpoints por kalkulado de tokenoj redonas la saman nombron antaŭ ol vi sendas. Kalkulado de tokenoj
Ĉe la Shannon-niveloj prompt_tokens kalkulas ĉion, kion la modelo legis por skribi la respondon, do ĝi estas pli granda ol la teksto de viaj mesaĝoj sola.
Streaming
Kun stream agordita al true la respondo alvenas kiel eventoj chat.completion.chunk kaj finiĝas per data: [DONE]. La lasta peco antaŭ ĝi portas finish_reason kaj usage; neniuj stream_options estas necesaj. La formoj de pecoj, linioj keep-alive kaj eraroj en fluo havas sian propran paĝon. Fluigo
Eraroj
Eraro estas JSON-objekto kun membro error. La kontroloj okazas en ĉi tiu ordo: API-ŝlosilo, petkorpo, modelo-id, poste saldo. La tabelo listigas tion, kion ĉi tiu endpoint plej ofte redonas. La plena listo, kun indiko kiam reprovi, havas sian propran paĝon. Erarotraktado
{
"error": {
"type": "invalid_request_error",
"message": "unknown model: no-such-model"
}
} | Stato | Tipo | Mesaĝo | Kiam |
|---|---|---|---|
401 | authentication_error | Missing authenticationInvalid API key | Neniu API-ŝlosilo estis sendita, aŭ la ŝlosilo estas nekonata aŭ revokita. |
400 | invalid_request_error | unknown model: <id> | model ne estas publikigita id. |
400 | invalid_request_error | No user message provided | Shannon-niveloj: la peto havas nek uzantan tekston nek tools. |
400 | invalid_request_error | <id> does not accept image input | Bilda parto estis sendita al gastigita malfermpeza modelo sen bilda enigo. |
400 | invalid_request_error | <id> does not accept response_format | response_format estis sendita al gastigita malfermpeza modelo sen strukturita eligo. |
400 | invalid_request_error | unknown reasoning effort '<value>'; expected off, low, medium or high | reasoning_effort enhavas valoron ekster la listo. |
422 | invalid_request_error | Failed to deserialize the JSON body into the target type: … | messages mankas, aŭ kampo havas malĝustan JSON-tipon. |
429 | rate_limit_error | Quota exceeded. Upgrade your plan at shannon-ai.com/plan | max_tokens estas pli granda ol tio, kio restas el via saldo. |
429 | rate_limit_error | Too many requests. Retry in <n>s. | Flood protection: pli ol 120 petoj en unu minuto en via konto. |
500 | server_error | The model backend failed to answer. Please retry. | La modelo ne produktis respondon. Sendu la peton denove. |
502 | api_error | The model backend failed to answer. Please retry. | Same, ĉe la familio Shannon 3 kaj la gastigitaj malfermpezaj modeloj. |