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

Усилие за разсъждение

Ново

Модел, който разсъждава, връща текста на разсъжденията си до отговора, в отделно поле. При хостваните open-weight модели едно поле на заявката задава колко дълбоко моделът разсъждава, преди да отговори.

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="Kimi-K3-3BIT-REAP",
    reasoning_effort="low",
    messages=[{"role": "user", "content": "Is 221 a prime number?"}],
)

message = response.choices[0].message
print("Reasoning:", getattr(message, "reasoning_content", None))
print("Answer:", message.content)
print("Reasoning tokens:", response.usage.completion_tokens_details.reasoning_tokens)

Отговорът носи текста на разсъжденията в reasoning_content, отговора в content и токените на разсъжденията в usage:

200 JSON
{
  "id": "chatcmpl-2a6c8e0b4d1f4a3c9e7b5d3f1a8c6e4b",
  "object": "chat.completion",
  "created": 1791590400,
  "model": "Kimi-K3-3BIT-REAP",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "No. 221 = 13 x 17, so it is not prime.",
        "reasoning_content": "Try small primes. 221 / 13 = 17, so 221 = 13 x 17."
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 14,
    "completion_tokens": 43,
    "total_tokens": 57,
    "prompt_tokens_details": {"cached_tokens": 0},
    "completion_tokens_details": {"reasoning_tokens": 27}
  }
}

Кои модели разсъждават

Модел Връща текст на разсъжденията Прилага полето за усилия
shannon-1.6-lite — —
shannon-1.6-pro, shannon-2-lite, shannon-2-pro, shannon-3, shannon-3-pro, shannon-3.1, shannon-3.1-pro, shannon-coder-1 Да —
Всеки хостван open-weight модел Да Да

Това са флаговете capabilities.reasoning и capabilities.reasoning_effort, които GET /v1/models докладва за всяко id. Отговорът носи текст на разсъждения само когато моделът е създал такъв. Модели и цени

Задаване на усилията

Всеки ендпоинт има собствено изписване на усилията. Всички те избират едно от същите четири нива.

Поле Тип По подразбиране Описание Прилага се от
reasoning_effort string high /v1/chat/completions. Колко дълбоко разсъждава моделът, преди да отговори: off, low, medium или high. Хоствани open-weight модели
reasoning object | string /v1/chat/completions. Същата стойност като {"effort": "low"} или като гол низ. Когато са изпратени и двете полета, брои се reasoning_effort. Хоствани open-weight модели
reasoning.effort string high /v1/responses. Записва се като обекта {"effort": "low"}. Хоствани open-weight модели
thinking object /v1/messages. {"type": "enabled", "budget_tokens": n} или {"type": "disabled"}. Бюджетът избира едно от нивата; вижте таблицата по-надолу. Хоствани open-weight модели
{
  "model": "Kimi-K3-3BIT-REAP",
  "reasoning_effort": "low",
  "messages": [{"role": "user", "content": "Is 221 a prime number?"}]
}
Стойност Приема се и Ефект
off none, minimal Без разсъждения. Отговорът не носи текст на разсъждения.
low Кратки разсъждения.
medium default Средна дълбочина.
high max Най-дълбокото ниво. Това е нивото на заявка, която не изпраща стойност.
  • Стойностите се четат без значение дали са с главни, или с малки букви.
  • Стойността default означава medium. Пропускането на полето означава high.
  • Моделите на Shannon (shannon-*) сами задават дълбочината си при всяка заявка; GET /v1/models докладва reasoning_effort: false за тях.

Бюджетът за thinking на /v1/messages

На /v1/messages полето thinking избира нивото. budget_tokens избира едно от нивата по-горе; не е собствено ограничение на токени. adaptive се чете като enabled.

Изпращате Ниво
{"type": "disabled"} off
{"type": "enabled", "budget_tokens": n} с n до 2,048 low
n от 2,049 до 8,192 medium
По-голямо n или enabled без budget_tokens high
Няма поле thinking high

Къде пристига текстът на разсъжденията

Текстът на разсъжденията винаги е отделен от отговора. Всеки формат има собствено място за него:

Ендпоинт Без стрийминг Със стрийминг
/v1/chat/completions choices[0].message.reasoning_content: низ или null, когато моделът не е създал такива. Фрагменти с choices[0].delta.reasoning_content, преди фрагментите с delta.content.
/v1/responses Елемент на output {"type": "reasoning", "summary": [{"type": "summary_text", "text": "…"}]} преди елемента message. Няма елемент, когато няма разсъждения. response.output_item.added с елемент reasoning, после събития response.reasoning_summary_text.delta и едно response.reasoning_summary_text.done.
/v1/messages Първи блок със съдържание {"type": "thinking", "thinking": "…"}, после блокът text. Няма блок thinking, когато няма разсъждения. Блок със съдържание thinking: content_block_start, събития content_block_delta с thinking_delta, content_block_stop. Текстовият блок следва.
{
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "No. 221 = 13 x 17, so it is not prime.",
        "reasoning_content": "Try small primes. 221 / 13 = 17, so 221 = 13 x 17."
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 14,
    "completion_tokens": 43,
    "total_tokens": 57,
    "prompt_tokens_details": {"cached_tokens": 0},
    "completion_tokens_details": {"reasoning_tokens": 27}
  }
}

Къде да гледате, по модел:

Модели Къде пристига текстът
Хоствани open-weight модели На всеки ендпоинт, със или без стрийминг. Заявка с усилия off или с response_format / text.format получава отговор без текст на разсъждения.
shannon-3, shannon-3-pro, shannon-3.1, shannon-3.1-pro На всеки ендпоинт, със или без стрийминг, винаги когато моделът е създал текст на разсъждения.
shannon-2-lite, shannon-2-pro /v1/chat/completions, без стрийминг: в message.reasoning_content. Със стрийминг, в заявка без tools или response_format: стриймът носи коментарни редове : thinking, докато моделът разсъждава, после фрагментите на отговора. /v1/messages, със стрийминг: блок thinking преди текстовия блок.
shannon-1.6-pro, shannon-coder-1 В отговори със стрийминг и в отговори на заявки, които носят tools, винаги когато моделът е създал текст на разсъждения.

На /v1/responses отговор без стрийминг носи елемента reasoning за семейството Shannon 3 и хостваните open-weight модели.

Четене на стрийм

При стрийм текстът на разсъжденията идва първи, в собствени делти, а отговорът следва. Отпечатвайте или съхранявайте двете поотделно:

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="Kimi-K3-3BIT-REAP",
    reasoning_effort="medium",
    stream=True,
    messages=[{"role": "user", "content": "Is 221 a prime number?"}],
)

for chunk in stream:
    if not chunk.choices:
        continue
    delta = chunk.choices[0].delta
    reasoning = getattr(delta, "reasoning_content", None)
    if reasoning:
        print(reasoning, end="", flush=True)      # the reasoning text comes first
    if delta.content:
        print(delta.content, end="", flush=True)  # then the answer

Първият фрагмент на хостван open-weight модел, разсъждение или отговор, носи и delta.role: "assistant". Стрийминг

Токени на разсъжденията и фактуриране

При хостваните open-weight модели токените на разсъжденията са изходни токени: таксуват се по изходната цена на модела, а изходният брой вече ги включва. usage показва дела на разсъжденията тук:

Ендпоинт Поле Бележка
/v1/chat/completions usage.completion_tokens_details.reasoning_tokens Вече е включено в completion_tokens.
/v1/responses usage.output_tokens_details.reasoning_tokens Вече е включено в output_tokens.
/v1/messages usage.output_tokens Разсъждения и отговор заедно. Този формат няма отделно броене.
  • При хостваните open-weight модели max_tokens ограничава текста на отговора. Токените на разсъжденията не се броят към него.
  • Тъй като разсъжденията се таксуват като изход, нивото на усилията е и настройка на цената: off не създава токени за разсъждения.
  • Моделите на Shannon докладват prompt_tokens, completion_tokens и total_tokens (input_tokens и output_tokens на /v1/messages) без дял за разсъждения и таксуват една единна цена на токен. Модели и цени

Разсъжденията в следващата заявка

Не е нужно да изпращате разсъжденията обратно. Блок thinking или елемент reasoning в разговора, който изпращате, не се предава на модела, така че ход на асистента може да се върне със или без него. Блокът thinking има двете полета type и thinking; няма signature.

Грешки

Статус Тип Съобщение Кога
400 invalid_request_error unknown reasoning effort '<value>'; expected off, low, medium or high Хостван open-weight модел е получил стойност извън списъка, например xhigh. Нищо не се взема от баланса Ви.
422 invalid_request_error Failed to deserialize the JSON body into the target type: … reasoning_effort не е низ.

Грешките при удостоверяване, баланс и сървър са същите като за всяка заявка. Обработка на грешки