Preskoči na sadržaj
Napor pri zaključivanju

Napor pri zaključivanju

Novo

Model koji rezonuje vraća tekst rezonovanja pored odgovora, u posebnom polju. Na hostovanim open-weight modelima jedno polje zahteva određuje koliko duboko model rezonuje pre nego što odgovori.

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)

Odgovor nosi tekst rezonovanja u reasoning_content, odgovor u content, a tokene rezonovanja u 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}
  }
}

Koji modeli rezonuju

Model Vraća tekst rezonovanja Primenjuje polje napora
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 Da —
Svaki hostovani open-weight model Da Da

To su flagovi capabilities.reasoning i capabilities.reasoning_effort koje GET /v1/models prijavljuje za svaki id. Odgovor nosi tekst rezonovanja samo kada ga je model proizveo. Modeli i cene

Podešavanje napora

Svaki endpoint ima svoj zapis napora. Svi biraju jedan od istih četiri nivoa.

Polje Tip Podrazumevano Opis Primenjuju
reasoning_effort string high /v1/chat/completions. Koliko duboko model rezonuje pre nego što odgovori: off, low, medium ili high. Hostovani open-weight modeli
reasoning object | string /v1/chat/completions. Ista vrednost kao {"effort": "low"} ili kao običan string. Kada se pošalju oba polja, važi reasoning_effort. Hostovani open-weight modeli
reasoning.effort string high /v1/responses. Piše se kao objekat {"effort": "low"}. Hostovani open-weight modeli
thinking object /v1/messages. {"type": "enabled", "budget_tokens": n} ili {"type": "disabled"}. Budžet bira jedan od nivoa; pogledajte tabelu niže. Hostovani open-weight modeli
{
  "model": "Kimi-K3-3BIT-REAP",
  "reasoning_effort": "low",
  "messages": [{"role": "user", "content": "Is 221 a prime number?"}]
}
Vrednost Prihvata se i Efekat
off none, minimal Bez rezonovanja. Odgovor ne nosi tekst rezonovanja.
low Kratko rezonovanje.
medium default Srednja dubina.
high max Najdublji nivo. To je nivo zahteva koji ne šalje nijednu vrednost.
  • Vrednosti se čitaju bez obzira na velika i mala slova.
  • Vrednost default znači medium. Izostavljanje polja znači high.
  • Shannon modeli (shannon-*) sami određuju dubinu u svakom zahtevu; GET /v1/models za njih prijavljuje reasoning_effort: false.

Thinking budžet na /v1/messages

Na /v1/messages polje thinking bira nivo. budget_tokens bira jedan od gornjih nivoa; to nije sopstveno ograničenje tokena. adaptive se čita kao enabled.

Vi šaljete Nivo
{"type": "disabled"} off
{"type": "enabled", "budget_tokens": n} sa n do 2,048 low
n od 2,049 do 8,192 medium
Veći n, ili enabled bez budget_tokens high
Bez polja thinking high

Gde tekst rezonovanja stiže

Tekst rezonovanja je uvek odvojen od odgovora. Svaki format ima svoje mesto za njega:

Endpoint Bez streama Sa streamom
/v1/chat/completions choices[0].message.reasoning_content: string, ili null kada model nije proizveo nijedno. Delovi sa choices[0].delta.reasoning_content, pre delova sa delta.content.
/v1/responses Stavka output {"type": "reasoning", "summary": [{"type": "summary_text", "text": "…"}]} pre stavke message. Nema stavke kada nema rezonovanja. response.output_item.added sa stavkom reasoning, zatim događaji response.reasoning_summary_text.delta i jedan response.reasoning_summary_text.done.
/v1/messages Prvi blok sadržaja {"type": "thinking", "thinking": "…"}, zatim blok text. Nema thinking bloka kada nema rezonovanja. Blok sadržaja thinking: događaji content_block_start, content_block_delta sa thinking_delta, content_block_stop. Tekstualni blok sledi.
{
  "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}
  }
}

Gde gledati, po modelu:

Modeli Gde tekst stiže
Hostovani open-weight modeli Na svakom endpointu, sa streamom ili bez. Na zahtev sa naporom off, ili sa response_format / text.format, odgovara se bez teksta rezonovanja.
shannon-3, shannon-3-pro, shannon-3.1, shannon-3.1-pro Na svakom endpointu, sa streamom ili bez, kad god je model proizveo tekst rezonovanja.
shannon-2-lite, shannon-2-pro /v1/chat/completions, bez streama: u message.reasoning_content. Sa streamom, u zahtevu bez tools ili response_format: stream nosi komentarske linije : thinking dok model rezonuje, zatim delove odgovora. /v1/messages, sa streamom: thinking blok pre tekstualnog bloka.
shannon-1.6-pro, shannon-coder-1 U strimovanim odgovorima i u odgovorima na zahteve koji nose tools, kad god je model proizveo tekst rezonovanja.

Na /v1/responses odgovor bez streama nosi stavku reasoning za porodicu Shannon 3 i hostovane open-weight modele.

Čitanje streama

U streamu tekst rezonovanja stiže prvi, u sopstvenim delta-ma, a odgovor sledi. Ispišite ili sačuvajte ova dva odvojeno:

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

Prvi deo hostovanog open-weight modela, bilo rezonovanje ili odgovor, nosi i delta.role: "assistant". Streaming

Tokeni rezonovanja i naplata

Na hostovanim open-weight modelima tokeni rezonovanja su izlazni tokeni: naplaćuju se po ceni izlaza modela, a izlazni broj ih već uključuje. usage ovde prikazuje udeo rezonovanja:

Endpoint Polje Napomena
/v1/chat/completions usage.completion_tokens_details.reasoning_tokens Već uključeno u completion_tokens.
/v1/responses usage.output_tokens_details.reasoning_tokens Već uključeno u output_tokens.
/v1/messages usage.output_tokens Rezonovanje i odgovor zajedno. Ovaj format nema poseban broj.
  • Na hostovanim open-weight modelima max_tokens ograničava tekst odgovora. Tokeni rezonovanja se ne računaju u to.
  • Pošto se rezonovanje naplaćuje kao izlaz, nivo napora je ujedno i podešavanje troška: off ne proizvodi tokene rezonovanja.
  • Shannon modeli prijavljuju prompt_tokens, completion_tokens i total_tokens (input_tokens i output_tokens na /v1/messages) bez udela rezonovanja i naplaćuju jednu paušalnu cenu po tokenu. Modeli i cene

Rezonovanje u sledećem zahtevu

Ne morate da šaljete rezonovanje nazad. Blok thinking ili stavka reasoning u razgovoru koji šaljete ne prosleđuje se modelu, pa potez asistenta može da se vrati sa njim ili bez njega. Blok thinking ima dva polja type i thinking; nema signature.

Greške

Status Tip Poruka Kada
400 invalid_request_error unknown reasoning effort '<value>'; expected off, low, medium or high Hostovani open-weight model primio je vrednost van liste, na primer xhigh. Sa vašeg stanja se ništa ne skida.
422 invalid_request_error Failed to deserialize the JSON body into the target type: … reasoning_effort nije string.

Greške autentikacije, stanja i servera iste su kao za svaki zahtev. Upravljanje greškama