Перейти к содержимому
Быстрый старт

Быстрый старт

Сделайте первый запрос: получите ключ, отправьте одно сообщение и прочитайте ответ. API понимает форматы OpenAI и Anthropic, поэтому SDK, которым вы уже пользуетесь, заработает после смены базового URL и ключа.

1. Получите ключ

У каждого аккаунта есть один API-ключ. Войдите, откройте Keys & usage и скопируйте его. Ключ работает на всех эндпоинтах и со всеми моделями. Keys & usage

2. Укажите клиенту адрес API

Все эндпоинты находятся под одним базовым URL. OpenAI SDK принимает его с /v1 на конце; Anthropic SDK — без него, потому что сам добавляет /v1/messages.

Клиент Базовый URL
OpenAI SDK и OpenAI-совместимые клиенты https://api.shannon-ai.com/v1
Anthropic SDK 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 приведен на странице Модели и цены.
messages array Разговор на данный момент: объекты с role и content. Последнее сообщение user — это промпт. Обязательное поле.
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 Reasoning модели перед ответом или 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; как это считается, описано на странице Лимиты и баланс. Лимиты и баланс
  • В каждом ответе, в том числе в ошибке и в потоке, есть заголовок 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 со страницы Модели и цены.
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 строки и ошибки внутри потока.
  • Вызов функций — Позвольте модели вызывать ваши функции.
  • Лимиты и баланс — Что запрос резервирует и сколько стоит, и сколько запросов можно отправлять.
  • Песочница API — Попробуйте запросы в браузере со своим ключом.