Pereiti prie turinio
Mąstymo pastangos

Mąstymo pastangos

Nauja

Modelis, kuris mąsto, grąžina mąstymo tekstą šalia atsakymo, atskirame lauke. Talpinamuose atvirų svorių modeliuose vienas užklausos laukas nustato, kaip giliai modelis mąsto prieš atsakydamas.

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)

Atsakyme mąstymo tekstas yra reasoning_content, atsakymas – content, o mąstymo tokenai – 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}
  }
}

Kurie modeliai mąsto

Modelis Grąžina mąstymo tekstą Taiko pastangų lauką
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 Taip —
Kiekvienas talpinamas atvirų svorių modelis Taip Taip

Tai požymiai capabilities.reasoning ir capabilities.reasoning_effort, kuriuos GET /v1/models nurodo kiekvienam id. Atsakyme mąstymo teksto yra tik tada, kai modelis jį sukūrė. Modeliai ir kainos

Pastangų nustatymas

Kiekvienas galinis taškas turi savo pastangų užrašymo būdą. Visi jie parenka vieną iš tų pačių keturių lygių.

Laukas Tipas Numatytoji Aprašymas Taiko
reasoning_effort string high /v1/chat/completions. Kaip giliai modelis mąsto prieš atsakydamas: off, low, medium arba high. Talpinami atvirų svorių modeliai
reasoning object | string /v1/chat/completions. Ta pati reikšmė kaip {"effort": "low"} arba kaip paprasta eilutė. Kai siunčiami abu laukai, galioja reasoning_effort. Talpinami atvirų svorių modeliai
reasoning.effort string high /v1/responses. Rašoma kaip objektas {"effort": "low"}. Talpinami atvirų svorių modeliai
thinking object /v1/messages. {"type": "enabled", "budget_tokens": n} arba {"type": "disabled"}. Biudžetas parenka vieną iš lygių; žr. lentelę žemiau. Talpinami atvirų svorių modeliai
{
  "model": "Kimi-K3-3BIT-REAP",
  "reasoning_effort": "low",
  "messages": [{"role": "user", "content": "Is 221 a prime number?"}]
}
Reikšmė Priimama ir Poveikis
off none, minimal Be mąstymo. Atsakyme mąstymo teksto nėra.
low Trumpas mąstymas.
medium default Vidutinis gylis.
high max Giliausias lygis. Toks lygis taikomas užklausai, kuri nesiunčia reikšmės.
  • Reikšmės skaitomos neatsižvelgiant į didžiąsias ir mažąsias raides.
  • Reikšmė default reiškia medium. Jei lauko nenurodoma, tai reiškia high.
  • Shannon modeliai (shannon-*) gylį nustato patys kiekvienoje užklausoje; GET /v1/models jiems nurodo reasoning_effort: false.

Mąstymo biudžetas kelyje /v1/messages

Kelyje /v1/messages lygį parenka laukas thinking. budget_tokens parenka vieną iš aukščiau esančių lygių; tai nėra atskira tokenų riba. adaptive skaitomas kaip enabled.

Jūs siunčiate Lygis
{"type": "disabled"} off
{"type": "enabled", "budget_tokens": n}, kai n iki 2,048 low
n nuo 2,049 iki 8,192 medium
Didesnis n arba enabled be budget_tokens high
Lauko thinking nėra high

Kur ateina mąstymo tekstas

Mąstymo tekstas visada atskiras nuo atsakymo. Kiekvienas formatas turi savo vietą jam:

Galinis taškas Ne srautu Srautu
/v1/chat/completions choices[0].message.reasoning_content: eilutė arba null, jei modelis nieko nesukūrė. Gabalai su choices[0].delta.reasoning_content, prieš gabalus su delta.content.
/v1/responses output elementas {"type": "reasoning", "summary": [{"type": "summary_text", "text": "…"}]} prieš message elementą. Kai mąstymo nėra, elemento nėra. response.output_item.added su reasoning elementu, tada response.reasoning_summary_text.delta įvykiai ir vienas response.reasoning_summary_text.done.
/v1/messages Pirmasis turinio blokas {"type": "thinking", "thinking": "…"}, tada text blokas. Kai mąstymo nėra, thinking bloko nėra. thinking turinio blokas: content_block_start, content_block_delta įvykiai su thinking_delta, content_block_stop. Toliau eina teksto blokas.
{
  "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}
  }
}

Kur žiūrėti, pagal modelį:

Modeliai Kur ateina tekstas
Talpinami atvirų svorių modeliai Kiekviename galiniame taške, srautu ar ne. Į užklausą su pastangomis off arba su response_format / text.format atsakoma be mąstymo teksto.
shannon-3, shannon-3-pro, shannon-3.1, shannon-3.1-pro Kiekviename galiniame taške, srautu ar ne, kai tik modelis sukūrė mąstymo tekstą.
shannon-2-lite, shannon-2-pro /v1/chat/completions, ne srautu: message.reasoning_content. Srautu, užklausoje be tools ar response_format: kol modelis mąsto, sraute eina komentarų eilutės : thinking, tada atsakymo gabalai. /v1/messages, srautu: thinking blokas prieš teksto bloką.
shannon-1.6-pro, shannon-coder-1 Srautiniuose atsakymuose ir atsakymuose į užklausas su tools, kai tik modelis sukūrė mąstymo tekstą.

Kelyje /v1/responses ne srautinis atsakymas Shannon 3 šeimai ir talpinamiems atvirų svorių modeliams turi reasoning elementą.

Srauto skaitymas

Sraute pirmiausia ateina mąstymo tekstas savo delta, o paskui atsakymas. Spausdinkite arba saugokite abu atskirai:

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

Pirmasis talpinamo atvirų svorių modelio gabalas, mąstymo ar atsakymo, taip pat turi delta.role: "assistant". Srautinė transliacija

Mąstymo tokenai ir apmokestinimas

Talpinamuose atvirų svorių modeliuose mąstymo tokenai yra išvesties tokenai: jie apmokestinami pagal modelio išvesties kainą, o išvesties skaičius juos jau apima. Čia mąstymo dalį rodo usage:

Galinis taškas Laukas Pastaba
/v1/chat/completions usage.completion_tokens_details.reasoning_tokens Jau įskaičiuota į completion_tokens.
/v1/responses usage.output_tokens_details.reasoning_tokens Jau įskaičiuota į output_tokens.
/v1/messages usage.output_tokens Mąstymas ir atsakymas kartu. Šis formatas atskiro skaičiaus neturi.
  • Talpinamuose atvirų svorių modeliuose max_tokens riboja atsakymo tekstą. Mąstymo tokenai į jį neįskaičiuojami.
  • Kadangi mąstymas apmokestinamas kaip išvestis, pastangų lygis yra ir kainos nustatymas: off mąstymo tokenų nesukuria.
  • Shannon modeliai nurodo prompt_tokens, completion_tokens ir total_tokens (input_tokens ir output_tokens kelyje /v1/messages) be mąstymo dalies ir apmokestina viena vienoda kaina už tokeną. Modeliai ir kainos

Mąstymas kitoje užklausoje

Mąstymo grąžinti nereikia. thinking blokas arba reasoning elementas jūsų siunčiamame pokalbyje modeliui neperduodamas, todėl asistento ėjimą galima grąžinti su juo arba be jo. thinking blokas turi du laukus, type ir thinking; signature jis neturi.

Klaidos

Būsena Tipas Pranešimas Kada
400 invalid_request_error unknown reasoning effort '<value>'; expected off, low, medium or high Talpinamas atvirų svorių modelis gavo reikšmę, kurios nėra sąraše, pavyzdžiui, xhigh. Iš jūsų balanso nieko nenuskaičiuojama.
422 invalid_request_error Failed to deserialize the JSON body into the target type: … reasoning_effort nėra eilutė.

Autentifikavimo, balanso ir serverio klaidos tokios pačios kaip ir kiekvienai užklausai. Klaidų tvarkymas