Przejdź do treści
Chat Completions

Chat Completions

POST /v1/chat/completions przyjmuje rozmowę i zwraca następną wiadomość modelu w formacie OpenAI Chat Completions. Używaj go z dowolnego SDK OpenAI lub przez zwykłe HTTP; ta strona jest referencją pole po polu.

POST https://api.shannon-ai.com/v1/chat/completions

Najmniejsze zapytanie to id modelu i jedna wiadomość użytkownika.

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)

Odpowiedzią jest jeden obiekt JSON:

200 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
  }
}

Nagłówki

Nagłówki zapytania

Nagłówek Wartość Opis
Authorization Bearer YOUR_API_KEY Twój klucz API. W każdym endpoincie zamiast niego akceptowany jest x-api-key: YOUR_API_KEY.
Content-Type application/json Wymagany. Każda inna wartość zwraca 415.
x-request-id Opcjonalny. Twój własny id zapytania. Wraca bez zmian w odpowiedzi.

Nagłówki odpowiedzi

Nagłówek Opis
x-request-id W każdej odpowiedzi, także w błędach i strumieniach: wartość, którą wysłano, albo 12 znaków szesnastkowych, gdy nie wysłano żadnej. Podaj go, zgłaszając problem.
content-type application/json albo text/event-stream, gdy stream ma wartość true.

Pola zapytania

Wymagane jest tylko messages. Kolumna Stosowane przez podaje modele, w których pole zmienia odpowiedź. Hostowane modele open-weight to dwanaście id z listy modeli; rodzina Shannon 3 to shannon-3, shannon-3-pro, shannon-3.1 i shannon-3.1-pro. Modele i ceny

Pole Typ Domyślnie Opis Stosowane przez
model string shannon-1.6-lite Model, który odpowiada: id z listy modeli. Wysyłaj go z każdym zapytaniem. Wielkość liter nie ma znaczenia. Id, który nie jest opublikowany, zwraca 400 unknown model. Wszystkie modele
messages array Wymagane. Rozmowa, od najstarszej wiadomości. Zobacz niżej Wiadomości. Wszystkie modele
stream boolean false true wysyła odpowiedź jako server-sent events w trakcie jej pisania. Wszystkie modele
max_tokens integer 4096 Górny limit odpowiedzi, w tokenach. Wartość spoza zakresu od 1 do 65,536 jest przesuwana do tego zakresu. To także kwota odłożona z Twojego salda na czas trwania zapytania. Zobacz niżej Długość wyjścia. Hostowane modele open-weight, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1
max_completion_tokens integer To samo co max_tokens. Gdy wysłano oba, używane jest max_tokens. Hostowane modele open-weight, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1
temperature number Temperatura próbkowania. W hostowanych modelach open-weight domyślnie wynosi 1, a wartości są utrzymywane między 0 a 2. Hostowane modele open-weight, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1
top_p number 0.95 Próbkowanie jądrowe (nucleus sampling). Wartości są utrzymywane między 0 a 1. Hostowane modele open-weight
seed integer Ziarno próbkowania (seed), dowolna liczba całkowita. Bez niego ziarno jest wyprowadzane z modelu i rozmowy, więc to samo zapytanie wysłane dwa razy używa tego samego ziarna. Hostowane modele open-weight
stop string | array Ciąg znaków albo tablica ciągów. Używane są do 4. Odpowiedź kończy się przed pierwszym z nich, który się pojawi; sam tekst stopu nie jest zwracany. Hostowane modele open-weight
reasoning_effort string high Jak dużo model wnioskuje, zanim odpowie: off, low, medium lub high. none i minimal oznaczają off, default oznacza medium, max oznacza high. Każda inna wartość zwraca 400. Hostowane modele open-weight
reasoning object To samo ustawienie w postaci obiektu: {"effort": "low"}. Gdy wysłano oba, używane jest reasoning_effort. Hostowane modele open-weight
tools array Funkcje, które model może wywołać, każda jako {"type": "function", "function": {"name", "description", "parameters"}}. Wywołania modelu wracają w tool_calls; Twój kod je uruchamia. Wszystkie modele
tool_choice string | object auto "auto" pozwala modelowi zdecydować. "required" zmusza go do wywołania narzędzia. {"type": "function", "function": {"name": "…"}} zmusza go do wywołania tego narzędzia. Hostowane modele open-weight
response_format object {"type": "json_object"} dla odpowiedzi JSON albo {"type": "json_schema", "json_schema": {…}} dla odpowiedzi zgodnej z Twoim schematem. Wszystkie poziomy Shannon; hostowane modele open-weight według listy dla każdego id
web_search boolean false true pozwala modelowi przeszukać sieć, zanim odpowie. shannon-1.6-*, shannon-2-*, rodzina Shannon 3

Inne pola OpenAI, takie jak n, user, stream_options, parallel_tool_calls, presence_penalty, frequency_penalty, logit_bias, logprobs, metadata, store i prompt_cache_key, są akceptowane, aby istniejący kod klienta działał bez zmian. Nie zmieniają odpowiedzi: zawsze jest jeden wybór (choice), a strumień zawsze kończy się użyciem.

Pole ze złym typem JSON, na przykład "max_tokens": "100", zwraca 422. Zapytanie bez messages także.

Narzędzia, wyjście strukturyzowane, wnioskowanie i wyszukiwanie w sieci mają każde własną stronę: Wywołanie funkcji, Ustrukturyzowane odpowiedzi, Wysiłek rozumowania, Wbudowane wyszukiwanie w sieci.

Zapytanie z opcjami

To zapytanie ustawia wiadomość systemową, pola próbkowania i wysiłek rozumowania. Używa hostowanego modelu open-weight, który stosuje je wszystkie.

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)

Odpowiedź ma ten sam kształt co powyżej. Jej usage dodaje w hostowanych modelach open-weight dwie pozycje: tokeny promptu odczytane z cache i tokeny wydane na wnioskowanie.

200 JSON
{
  "usage": {
    "prompt_tokens": 31,
    "completion_tokens": 62,
    "total_tokens": 93,
    "prompt_tokens_details": {
      "cached_tokens": 0
    },
    "completion_tokens_details": {
      "reasoning_tokens": 21
    }
  }
}

Długość wyjścia

max_tokens robi dwie rzeczy. Po pierwsze, jest liczbą tokenów odłożoną z Twojego salda na początku zapytania. Gdy odpowiedź jest kompletna, ta kwota jest zastępowana tokenami, które zapytanie zużyło. Jeśli max_tokens jest większe niż to, co zostało z Twojego salda, zapytanie zwraca 429 Quota exceeded, nawet gdyby sama odpowiedź się zmieściła. Wyślij niższe max_tokens, aby odłożyć mniej.

shannon-coder-1 jest w tym endpoincie liczony inaczej: każde zapytanie to jedno z wywołań Shannon Coder w Twoim planie i żadne tokeny nie są na nie odkładane. Limity i saldo

Po drugie, ogranicza długość odpowiedzi w tych modelach:

Modele Co robi max_tokens
shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 Odpowiedź zatrzymuje się po osiągnięciu limitu. Strumień kończy się wtedy z finish_reason length.
Hostowane modele open-weight Tekst odpowiedzi kończy się na max_tokens. Wnioskowanie nie jest wliczane do limitu. Wartości poniżej 256 działają jak 256.

Bez max_tokens i max_completion_tokens wartość wynosi 4,096. W shannon-coder-1 jest to 65,536.

Wiadomości

Każda wiadomość to obiekt z role i content. content to ciąg znaków albo tablica części, gdy wiadomość niesie coś więcej niż tekst.

Rola Opis Stosowane przez
system Instrukcje dla modelu. Umieść ją na początku. W poziomach Shannon używana jest pierwsza wiadomość system. Hostowane modele open-weight, shannon-1.6-*, shannon-2-*, shannon-coder-1
developer Odczytywana jak system. Hostowane modele open-weight
user To, o co pytasz. W poziomach Shannon ostatnia wiadomość user jest promptem, a wcześniejsze wiadomości są historią. Wszystkie modele
assistant Wcześniejsze odpowiedzi modelu. Zachowaj jego tool_calls, gdy po nim wysyłasz wynik narzędzia. Wszystkie modele
tool Wynik wywołania narzędzia: tool_call_id zawiera id wywołania, a content wynik jako ciąg znaków. Wszystkie modele

Przy id z rodziny Shannon 3 umieść instrukcje, które muszą obowiązywać, w wiadomości user.

W poziomach Shannon zapytanie bez tekstu użytkownika i bez tools zwraca 400 No user message provided.

Części treści

Część Opis Dostępne w
{"type": "text", "text": "…"} Zwykły tekst. Wszystkie modele
{"type": "image_url", "image_url": {"url": "…"}} Obraz, jako URL data: z zawartością base64 lub jako URL http(s). Rodzina Shannon 3, shannon-1.6-lite, shannon-1.6-pro oraz hostowane modele open-weight, które obsługują obraz na wejściu
{"type": "file", "source": {"type": "base64", "media_type": "application/pdf", "data": "…"}} Dokument (PDF, Word, PowerPoint lub Excel), jako base64 lub przez URL. Rodzina Shannon 3

Rozmiary, limity i pełna lista form mają własną stronę. Obrazy i pliki

Obiekt odpowiedzi

Pole Typ Opis
id string chatcmpl- i 32 znaki szesnastkowe.
object string Zawsze chat.completion.
created integer Czas odpowiedzi, w sekundach Unix.
model string Kanoniczny id modelu, który odpowiedział. Jego pisownia może różnić się od id, który wysłano.
choices array Zawsze dokładnie jeden wybór (choice), z index 0.
choices[0].message.role string Zawsze assistant.
choices[0].message.content string | null Tekst odpowiedzi. Z tool_calls w poziomach Shannon ma wartość null; hostowane modele open-weight mogą wysłać tekst obok wywołań.
choices[0].message.reasoning_content string | null Wnioskowanie, które model napisał przed odpowiedzią, albo null, gdy go nie ma.
choices[0].message.tool_calls array Obecne tylko wtedy, gdy model wywołuje narzędzia. Każda pozycja ma id, type function oraz function z name i arguments jako ciągiem JSON.
choices[0].message.annotations array Tylko w zapytaniu z web_search: true, którego wyszukiwanie coś znalazło. Jedno url_citation dla każdego źródła, które wskazuje znacznik w content, z url, title, start_index i end_index (pozycja znacznika liczona w znakach, koniec nie jest wliczony).
choices[0].finish_reason string Dlaczego odpowiedź się zakończyła. Zobacz Powody zakończenia.
usage object Tokeny zapytania. Zobacz Użycie.
sources array Tylko w zapytaniu z web_search: true, którego wyszukiwanie coś znalazło: wyniki przekazane modelowi, każdy z index, title i url. [1] w odpowiedzi to wpis z index 1.

Powody zakończenia

finish_reason Opis
stop Model zakończył odpowiedź albo pojawił się ciąg stop.
tool_calls Model wywołuje jedno lub więcej narzędzi. Uruchom je i odeślij wyniki w wiadomościach tool.
length Odpowiedź została ucięta na limicie wyjścia. Raportowane w strumieniach shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 i rodziny Shannon 3.

Odpowiedź bez streamingu raportuje stop lub tool_calls.

Użycie

Pole Typ Opis Dostępne w
usage.prompt_tokens integer Tokeny wejściowe. Wszystkie modele
usage.completion_tokens integer Tokeny wyjściowe: wnioskowanie, odpowiedź i wywołania narzędzi razem. Wszystkie modele
usage.total_tokens integer prompt_tokens plus completion_tokens. Wszystkie modele
usage.prompt_tokens_details.cached_tokens integer Część prompt_tokens, która została odczytana z cache promptów. Hostowane modele open-weight
usage.completion_tokens_details.reasoning_tokens integer Część completion_tokens, która została wydana na wnioskowanie. Hostowane modele open-weight

W hostowanych modelach open-weight prompt_tokens to Twoje wiadomości i definicje narzędzi policzone własnym tokenizerem modelu, plus tokeny wszystkich obrazów. Endpointy liczenia tokenów zwracają tę samą liczbę, zanim wyślesz zapytanie. Liczenie tokenów

W poziomach Shannon prompt_tokens liczy wszystko, co model przeczytał, by napisać odpowiedź, więc jest większe niż sam tekst Twoich wiadomości.

Streaming

Gdy stream ma wartość true, odpowiedź przychodzi jako zdarzenia chat.completion.chunk i kończy się data: [DONE]. Ostatni fragment przed nim niesie finish_reason i usage; stream_options nie są potrzebne. Kształty fragmentów, linie keep-alive i błędy wewnątrz strumienia mają własną stronę. Streaming

Błędy

Błąd to obiekt JSON z polem error. Kontrole przebiegają w tej kolejności: klucz API, treść zapytania, id modelu, a potem saldo. Tabela pokazuje, co ten endpoint zwraca najczęściej. Pełna lista, razem z informacją, co ponawiać, ma własną stronę. Obsługa błędów

400 JSON
{
  "error": {
    "type": "invalid_request_error",
    "message": "unknown model: no-such-model"
  }
}
Status Typ Komunikat Kiedy
401 authentication_error Missing authentication
Invalid API key
Nie wysłano klucza API albo klucz jest nieznany lub unieważniony.
400 invalid_request_error unknown model: <id> model nie jest opublikowanym id.
400 invalid_request_error No user message provided Poziomy Shannon: zapytanie nie ma tekstu użytkownika ani tools.
400 invalid_request_error <id> does not accept image input Część z obrazem wysłano do hostowanego modelu open-weight bez obsługi obrazu na wejściu.
400 invalid_request_error <id> does not accept response_format response_format wysłano do hostowanego modelu open-weight bez wyjścia strukturyzowanego.
400 invalid_request_error unknown reasoning effort '<value>'; expected off, low, medium or high reasoning_effort ma wartość spoza listy.
422 invalid_request_error Failed to deserialize the JSON body into the target type: … Brakuje messages albo pole ma zły typ JSON.
429 rate_limit_error Quota exceeded. Upgrade your plan at shannon-ai.com/plan max_tokens jest większe niż to, co zostało z Twojego salda.
429 rate_limit_error Too many requests. Retry in <n>s. Ochrona przed floodem: ponad 120 zapytań w ciągu jednej minuty na Twoim koncie.
500 server_error The model backend failed to answer. Please retry. Model nie wygenerował odpowiedzi. Wyślij zapytanie ponownie.
502 api_error The model backend failed to answer. Please retry. To samo, w rodzinie Shannon 3 i w hostowanych modelach open-weight.