Към съдържанието
Бърз старт

Бърз старт

Направете първата си заявка: вземете ключ, изпратете едно съобщение и прочетете отговора. API говори форматите на OpenAI и Anthropic, така че SDK, който вече използвате, работи, след като смените базовия му URL и ключа.

1. Вземете своя ключ

Всеки акаунт има един API ключ. Влезте, отворете Keys & usage и го копирайте. Ключът работи на всеки ендпоинт и с всеки модел. Keys & usage

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 Id на модела, който отговаря. Id-тата са изброени в Models & pricing.
messages array Разговорът дотук: обекти с role и content. Последното съобщение user е prompt-ът. Задължително.
max_tokens integer 4096 Изходният бюджет на заявката, от 1 до 65,536. Заявката резервира тази сума от баланса Ви и се таксува за това, което действително е използвала.
stream boolean false true изпраща отговора парче по парче, докато се пише.

Тялото на заявката е JSON и изисква хедъра 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 Публикуваното id на модела, който е отговорил, и когато сте изпратили псевдоним или друго изписване.
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 съдържа броя токени, не пари. Какво е взело извикването от баланса Ви се показва за всяка заявка в Keys & usage; как се изчислява, е на страницата Limits and balance. Ограничения и баланс
  • Всеки отговор, включително грешка и стрийм, има хедъра x-request-id. Ако Вашата заявка носи хедър x-request-id, стойността му се връща; иначе стойността е 12 шестнадесетични знака. Пазете я в логовете си: тя назовава тази единствена заявка.

Същото извикване като стрийм

Задайте 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)

Всеки кадър на стрийма е един ред, който започва с 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_content": "…"} null
Отговорът, парче по парче. Нула или повече кадъра. {"content": "…"} null
Последният JSON кадър. Той носи и usage; не е нужно да го искате. {} "stop"
Краят на стрийма: редът data: [DONE].
  • Отговорът има статус 200 и content-type: text/event-stream. Всеки кадър е ред data: <json>, следван от празен ред.
  • Ред : ping пристига на всеки 15 секунди. Това е коментар, който държи връзката отворена; SSE клиентите го пропускат.
  • Неуспех, след като стриймът е отворен, пристига като кадър data: {"error": {…}}. Статусът остава 200, затова проверявайте кадрите.

Стрийминг

Ако извикването се провали

Грешката е JSON обект с error, който съдържа type и message. Това са отговорите, които първото извикване среща най-често.

Статус Тип Съобщение Какво означава
401 authentication_error Missing authentication Никакъв ключ не е стигнал до API. Изпратете Authorization: Bearer, последван от Вашия ключ.
401 authentication_error Invalid API key Ключът не е текущият ключ на акаунт. Копирайте го отново от Keys & usage.
400 invalid_request_error unknown model: <id> model не е публикувано id. Използвайте id от Models & pricing.
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 Изходният бюджет на заявката не се побира в баланса Ви.

Обработка на грешки

Накъде нататък

  • Модели и цени — Изберете модел: id-та, контекстни прозорци и цени.
  • Chat Completions — Всяко поле на заявката, поле на отговора и събитие на стрийма на ендпоинта, който сте извикали.
  • Стрийминг — Кадрите на стрийма, keep-alive редовете и грешките вътре в стрийм.
  • Извикване на функции — Оставете модела да извиква Вашите функции.
  • Ограничения и баланс — Какво резервира и струва една заявка и колко заявки можете да изпратите.
  • Playground — Пробвайте заявки в браузъра с Вашия ключ.