Прескокни до содржината
Брз почеток

Брз почеток

Направете го првото барање: земете го вашиот клуч, испратете една порака и прочитајте го одговорот. API-то ги зборува форматите на OpenAI и Anthropic, па SDK-то што веќе го користите работи откако ќе му го смените основниот URL и клучот.

1. Земете го вашиот клуч

Секоја сметка има еден API клуч. Најавете се, отворете Клучеви и употреба и копирајте го. Клучот работи на секој ендпоинт и секој модел. Клучеви и употреба

2. Насочете го клиентот кон API-то

Сите ендпоинти се под еден основен URL. SDK на OpenAI го прима со /v1 на крајот; SDK на Anthropic го прима без него, бидејќи сам додава /v1/messages.

Клиент Основен URL
SDK-а на OpenAI и клиенти компатибилни со OpenAI https://api.shannon-ai.com/v1
SDK-а на Anthropic https://api.shannon-ai.com

Три ендпоинти создаваат текст. Стигнуваат до истите модели; изберете го оној чиј формат го користи вашиот код.

Ендпоинт Формат
POST /v1/chat/completions OpenAI Chat Completions
POST /v1/messages Anthropic Messages
POST /v1/responses OpenAI Responses

3. Испратете го првото барање

Испратете една порака user до shannon-3 на ендпоинтот Chat Completions. Заменете го YOUR_API_KEY со вашиот клуч.

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

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": "Hello, Shannon!"}
    ],
    max_tokens=1024
)

print(response.choices[0].message.content)
Поле Тип Стандардно Опис
model string Идот на моделот што одговара. Идовите се наведени на Модели и цени.
messages array Разговорот досега: објекти со role и content. Последната порака user е prompt-от. Задолжително.
max_tokens integer 4096 Излезниот буџет на барањето, од 1 до 65,536. Барањето го резервира овој износ од вашето салдо и се наплатува за она што навистина го искористило.
stream boolean false true го испраќа одговорот парче по парче додека се пишува.

Телото на барањето е JSON и бара header Content-Type: application/json. Целосната листа на полиња е на страницата на ендпоинтот. Chat Completions

Одговорот

Повик без stream враќа еден JSON објект кога одговорот е готов. Текстовите и броевите подолу се примери.

200 JSON
{
  "id": "chatcmpl-9b2f6c1e4a7d4f0f8a3c5d2e1b6a7c90",
  "object": "chat.completion",
  "created": 1791590400,
  "model": "shannon-3",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "Hello! What would you like to work on?",
        "reasoning_content": "A greeting. A short, friendly reply fits."
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 1386,
    "completion_tokens": 74,
    "total_tokens": 1460
  }
}
Поле Тип Опис
id string chatcmpl- проследено со 32 хексадецимални знаци.
object string Секогаш chat.completion.
created integer Времето на одговорот во Unix секунди.
model string Објавениот ид на моделот што одговорил, и кога сте испратиле алијас или друг запис.
choices array Секогаш еден запис, со index 0.
choices[0].message.role string Секогаш assistant.
choices[0].message.content string | null Одговорот. Може да биде null кога одговорот носи tool_calls.
choices[0].message.reasoning_content string | null Размислувањето на моделот пред неговиот одговор, или null кога нема.
choices[0].message.tool_calls array Присутно само кога моделот повикува една од алатките што сте ги декларирале.
choices[0].finish_reason string stop за одговор, tool_calls кога моделот повикува алатка.
usage.prompt_tokens integer Токените што моделот ги прочитал за овој одговор. На shannon-2-* и фамилијата Shannon 3 ова може да биде повеќе од текстот што сте го испратиле.
usage.completion_tokens integer Токените што ги напишал моделот.
usage.total_tokens integer Вкупниот збир. Наплатата на модел Shannon се пресметува од овој број.
  • usage содржи бројки на токени, а не пари. Што повикот зел од вашето салдо се прикажува по барање на Клучеви и употреба; како се пресметува е на Ограничувања и салдо. Ограничувања и салдо
  • Секој одговор, вклучително грешка и streaming, го има header-от x-request-id. Ако вашето барање носи header x-request-id, неговата вредност се враќа; инаку вредноста е 12 хексадецимални знаци. Чувајте го во вашите логови: го именува токму ова барање.

Истиот повик како streaming

Поставете stream на true за да го читате одговорот додека се пишува. Сè друго во барањето останува исто.

from openai import OpenAI

client = OpenAI(
    api_key="YOUR_API_KEY",
    base_url="https://api.shannon-ai.com/v1"
)

stream = client.chat.completions.create(
    model="shannon-3",
    messages=[
        {"role": "user", "content": "Hello, Shannon!"}
    ],
    max_tokens=1024,
    stream=True
)

for chunk in stream:
    if chunk.choices and chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="", flush=True)

Секој фрејм на streaming е еден ред што започнува со data: и содржи JSON објект. Еден фрејм, испечатен на повеќе редови:

Еден фрејм
{
  "id": "chatcmpl-9b2f6c1e4a7d4f0f8a3c5d2e1b6a7c90",
  "object": "chat.completion.chunk",
  "created": 1791590400,
  "model": "shannon-3",
  "choices": [
    {
      "index": 0,
      "delta": {
        "content": "Hello! "
      },
      "finish_reason": null
    }
  ]
}
Фрејмови, по редослед delta finish_reason
Додека моделот прави reasoning. Нула или повеќе фрејмови. {"reasoning_content": "…"} null
Одговорот, парче по парче. Нула или повеќе фрејмови. {"content": "…"} null
Последниот JSON фрејм. Носи и usage; не мора да го барате. {} "stop"
Крајот на streaming-от: редот data: [DONE].
  • Одговорот има статус 200 и content-type: text/event-stream. Секој фрејм е ред data: <json> проследен со празен ред.
  • На секои 15 секунди пристигнува ред : ping. Тоа е коментар што ја држи врската отворена; SSE клиентите го прескокнуваат.
  • Неуспех откако streaming-от е отворен пристигнува како фрејм data: {"error": {…}}. Статусот останува 200, затоа проверувајте ги фрејмовите.

Стриминг

Ако повикот не успее

Грешката е JSON објект со error што ги содржи type и message. Ова се одговорите што првиот повик најчесто ги среќава.

Статус Тип Порака Што значи
401 authentication_error Missing authentication Ниту еден клуч не стигнал до API-то. Испратете Authorization: Bearer проследено со вашиот клуч.
401 authentication_error Invalid API key Клучот не е тековниот клуч на ниту една сметка. Копирајте го повторно од Клучеви и употреба.
400 invalid_request_error unknown model: <id> model не е објавен ид. Користете ид од Модели и цени.
422 invalid_request_error Failed to deserialize the JSON body into the target type… Поле има погрешен JSON тип, или недостасува messages.
429 rate_limit_error Quota exceeded. Upgrade your plan at shannon-ai.com/plan Излезниот буџет на барањето не собира во вашето салдо.

Ракување со грешки

Каде да продолжите

  • Модели и цени — Изберете модел: идови, контекстни прозорци и цени.
  • Chat Completions — Секое поле на барање, поле на одговор и настан на streaming на ендпоинтот што го повикавте.
  • Стриминг — Фрејмовите на streaming, keep-alive редови и грешки во streaming.
  • Повик на функции — Дозволете му на моделот да ги повикува вашите функции.
  • Ограничувања и салдо — Што резервира и чини едно барање и колку барања смеете да испратите.
  • API Playground — Пробајте барања во прелистувачот со вашиот клуч.