Sari la conținut
Efort de raționament

Efort de raționament

Nou

Un model care raționează returnează textul raționamentului alături de răspuns, într-un câmp separat. La modelele open-weight găzduite, un câmp al cererii stabilește cât de adânc raționează modelul înainte de a răspunde.

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)

Răspunsul conține textul raționamentului în reasoning_content, răspunsul în content și token-urile de raționament în 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}
  }
}

Care modele raționează

Model Returnează text de raționament Aplică câmpul de efort
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 —
Fiecare model open-weight găzduit Da Da

Acestea sunt indicatorii capabilities.reasoning și capabilities.reasoning_effort pe care GET /v1/models îi raportează pentru fiecare id. Un răspuns conține text de raționament doar când modelul a produs unul. Modele și prețuri

Setarea efortului

Fiecare endpoint are propria scriere a efortului. Toate aleg unul dintre aceleași patru niveluri.

Câmp Tip Implicit Descriere Aplicat de
reasoning_effort string high /v1/chat/completions. Cât de adânc raționează modelul înainte de a răspunde: off, low, medium sau high. Modele open-weight găzduite
reasoning object | string /v1/chat/completions. Aceeași valoare ca {"effort": "low"} sau ca un șir simplu. Când sunt trimise ambele câmpuri, reasoning_effort are prioritate. Modele open-weight găzduite
reasoning.effort string high /v1/responses. Scris ca obiectul {"effort": "low"}. Modele open-weight găzduite
thinking object /v1/messages. {"type": "enabled", "budget_tokens": n} sau {"type": "disabled"}. Bugetul alege unul dintre niveluri; vezi tabelul de mai jos. Modele open-weight găzduite
{
  "model": "Kimi-K3-3BIT-REAP",
  "reasoning_effort": "low",
  "messages": [{"role": "user", "content": "Is 221 a prime number?"}]
}
Valoare Acceptat și Efect
off none, minimal Fără raționament. Răspunsul nu conține text de raționament.
low Raționament scurt.
medium default Adâncime medie.
high max Cel mai adânc nivel. Acesta este nivelul unei cereri care nu trimite nicio valoare.
  • Valorile sunt citite fără a ține seama de majuscule sau minuscule.
  • Valoarea default înseamnă medium. Omiterea câmpului înseamnă high.
  • Modelele Shannon (shannon-*) își stabilesc singure adâncimea la fiecare cerere; GET /v1/models raportează pentru ele reasoning_effort: false.

Bugetul de gândire pe /v1/messages

Pe /v1/messages, câmpul thinking alege nivelul. budget_tokens alege unul dintre nivelurile de mai sus; nu este o limită proprie de token-uri. adaptive este citit ca enabled.

Trimiți Nivel
{"type": "disabled"} off
{"type": "enabled", "budget_tokens": n} cu n până la 2,048 low
n de la 2,049 la 8,192 medium
Un n mai mare sau enabled fără budget_tokens high
Fără câmpul thinking high

Unde sosește textul raționamentului

Textul raționamentului este întotdeauna separat de răspuns. Fiecare format are locul lui pentru el:

Endpoint Fără streaming Cu streaming
/v1/chat/completions choices[0].message.reasoning_content: un șir sau null când modelul nu a produs raționament. Chunk-uri cu choices[0].delta.reasoning_content, înaintea chunk-urilor cu delta.content.
/v1/responses Un element output {"type": "reasoning", "summary": [{"type": "summary_text", "text": "…"}]} înaintea elementului message. Niciun element când nu există raționament. response.output_item.added cu un element reasoning, apoi evenimente response.reasoning_summary_text.delta și un response.reasoning_summary_text.done.
/v1/messages Un prim bloc de conținut {"type": "thinking", "thinking": "…"}, apoi blocul text. Niciun bloc thinking când nu există raționament. Un bloc de conținut thinking: content_block_start, evenimente content_block_delta cu thinking_delta, content_block_stop. Blocul de text urmează.
{
  "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}
  }
}

Unde te uiți, pe model:

Modele Unde sosește textul
Modele open-weight găzduite Pe fiecare endpoint, cu sau fără streaming. O cerere cu efort off sau cu response_format / text.format primește răspuns fără text de raționament.
shannon-3, shannon-3-pro, shannon-3.1, shannon-3.1-pro Pe fiecare endpoint, cu sau fără streaming, ori de câte ori modelul a produs text de raționament.
shannon-2-lite, shannon-2-pro /v1/chat/completions, fără streaming: în message.reasoning_content. Cu streaming, într-o cerere fără tools sau response_format: stream-ul conține linii de comentariu : thinking cât timp modelul raționează, apoi chunk-urile răspunsului. /v1/messages, cu streaming: un bloc thinking înaintea blocului de text.
shannon-1.6-pro, shannon-coder-1 În răspunsurile cu streaming și în răspunsurile la cereri care conțin tools, ori de câte ori modelul a produs text de raționament.

Pe /v1/responses, un răspuns fără streaming conține elementul reasoning pentru familia Shannon 3 și pentru modelele open-weight găzduite.

Citirea unui stream

Într-un stream, textul raționamentului vine primul, în delta-uri proprii, iar răspunsul urmează. Afișează sau stochează-le separat:

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

Primul chunk al unui model open-weight găzduit, de raționament sau de răspuns, conține și delta.role: "assistant". Streaming

Token-uri de raționament și facturare

La modelele open-weight găzduite, token-urile de raționament sunt token-uri de ieșire: sunt taxate la prețul de ieșire al modelului, iar numărul de ieșire le include deja. usage arată aici partea de raționament:

Endpoint Câmp Notă
/v1/chat/completions usage.completion_tokens_details.reasoning_tokens Deja inclus în completion_tokens.
/v1/responses usage.output_tokens_details.reasoning_tokens Deja inclus în output_tokens.
/v1/messages usage.output_tokens Raționamentul și răspunsul împreună. Acest format nu are o numărătoare separată.
  • La modelele open-weight găzduite, max_tokens limitează textul răspunsului. Token-urile de raționament nu se numără în el.
  • Fiindcă raționamentul este taxat ca ieșire, nivelul de efort este și o setare de cost: off nu produce token-uri de raționament.
  • Modelele Shannon raportează prompt_tokens, completion_tokens și total_tokens (input_tokens și output_tokens pe /v1/messages) fără o parte de raționament și taxează un singur preț fix per token. Modele și prețuri

Raționamentul în cererea următoare

Nu trebuie să trimiți raționamentul înapoi. Un bloc thinking sau un element reasoning din conversația pe care o trimiți nu este transmis modelului, deci o rundă a asistentului se poate întoarce cu sau fără el. Un bloc thinking are cele două câmpuri type și thinking; nu are signature.

Erori

Stare Tip Mesaj Când
400 invalid_request_error unknown reasoning effort '<value>'; expected off, low, medium or high Un model open-weight găzduit a primit o valoare din afara listei, de exemplu xhigh. Nu se scade nimic din soldul tău.
422 invalid_request_error Failed to deserialize the JSON body into the target type: … reasoning_effort nu este un șir.

Erorile de autentificare, de sold și de server sunt aceleași ca pentru orice cerere. Gestionare erori