Hoppa till innehållet
Resonemangsansträngning

Resonemangsansträngning

Ny

En modell som resonerar returnerar sin resonemangstext bredvid svaret, i ett eget fält. På de hostade open-weight-modellerna anger ett begäranfält hur djupt modellen resonerar innan den svarar.

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)

Svaret bär resonemangstexten i reasoning_content, svaret i content och resonemangstokens i 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}
  }
}

Vilka modeller som resonerar

Modell Returnerar resonemangstext Tillämpar nivåfältet
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 Ja —
Varje hostad open-weight-modell Ja Ja

Det här är flaggorna capabilities.reasoning och capabilities.reasoning_effort som GET /v1/models rapporterar för varje id. Ett svar bär resonemangstext bara när modellen skapade någon. Modeller och priser

Ange resonemangsnivån

Varje endpoint har sin egen stavning av nivån. Alla väljer en av samma fyra nivåer.

Fält Typ Standard Beskrivning Tillämpas av
reasoning_effort string high /v1/chat/completions. Hur djupt modellen resonerar innan den svarar: off, low, medium eller high. Hostade open-weight-modeller
reasoning object | string /v1/chat/completions. Samma värde som {"effort": "low"} eller som en ren sträng. När båda fälten skickas gäller reasoning_effort. Hostade open-weight-modeller
reasoning.effort string high /v1/responses. Skrivs som objektet {"effort": "low"}. Hostade open-weight-modeller
thinking object /v1/messages. {"type": "enabled", "budget_tokens": n} eller {"type": "disabled"}. Budgeten väljer en av nivåerna; se tabellen längre ned. Hostade open-weight-modeller
{
  "model": "Kimi-K3-3BIT-REAP",
  "reasoning_effort": "low",
  "messages": [{"role": "user", "content": "Is 221 a prime number?"}]
}
Värde Accepteras också Effekt
off none, minimal Inget resonemang. Svaret bär ingen resonemangstext.
low Kort resonemang.
medium default Medeldjup.
high max Den djupaste nivån. Det här är nivån för en begäran som inte skickar något värde.
  • Värden läses utan hänsyn till versaler eller gemener.
  • Värdet default betyder medium. Om fältet utelämnas betyder det high.
  • Shannon-modellerna (shannon-*) bestämmer sitt eget djup i varje begäran; GET /v1/models rapporterar reasoning_effort: false för dem.

Thinking-budgeten på /v1/messages

På /v1/messages väljer fältet thinking nivån. budget_tokens väljer en av nivåerna ovan; det är ingen egen tokengräns. adaptive läses som enabled.

Du skickar Nivå
{"type": "disabled"} off
{"type": "enabled", "budget_tokens": n} med n upp till 2,048 low
n från 2,049 till 8,192 medium
Ett större n, eller enabled utan budget_tokens high
Inget thinking-fält high

Var resonemangstexten kommer

Resonemangstexten är alltid skild från svaret. Varje format har sin egen plats för den:

Endpoint Inte streamat Streamat
/v1/chat/completions choices[0].message.reasoning_content: en sträng, eller null när modellen inte skapade något. Chunks med choices[0].delta.reasoning_content, före chunkarna med delta.content.
/v1/responses Ett output-objekt {"type": "reasoning", "summary": [{"type": "summary_text", "text": "…"}]} före message-objektet. Inget objekt när det inte finns något resonemang. response.output_item.added med ett reasoning-objekt, sedan response.reasoning_summary_text.delta-händelser och en response.reasoning_summary_text.done.
/v1/messages Ett första innehållsblock {"type": "thinking", "thinking": "…"}, sedan text-blocket. Inget thinking-block när det inte finns något resonemang. Ett innehållsblock av typen thinking: content_block_start, content_block_delta-händelser med thinking_delta, content_block_stop. Textblocket följer.
{
  "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}
  }
}

Var du ska titta, per modell:

Modeller Var texten kommer
Hostade open-weight-modeller På varje endpoint, streamat eller inte. En begäran med nivån off, eller med response_format / text.format, besvaras utan resonemangstext.
shannon-3, shannon-3-pro, shannon-3.1, shannon-3.1-pro På varje endpoint, streamat eller inte, så snart modellen skapade resonemangstext.
shannon-2-lite, shannon-2-pro /v1/chat/completions, inte streamat: i message.reasoning_content. Streamat, i en begäran utan tools eller response_format: strömmen bär kommentarsraderna : thinking medan modellen resonerar, sedan svarschunkarna. /v1/messages, streamat: ett thinking-block före textblocket.
shannon-1.6-pro, shannon-coder-1 I streamade svar och i svar på begäranden som bär tools, så snart modellen skapade resonemangstext.

På /v1/responses bär ett svar som inte streamas reasoning-objektet för Shannon 3-familjen och de hostade open-weight-modellerna.

Läsa en ström

I en ström kommer resonemangstexten först, i egna deltan, och svaret följer. Skriv ut eller spara de två 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

Den första chunken från en hostad open-weight-modell, resonemang eller svar, bär också delta.role: "assistant". Streaming

Resonemangstokens och fakturering

På de hostade open-weight-modellerna är resonemangstokens outputtokens: de faktureras till modellens outputpris, och outputantalet inkluderar dem redan. usage visar resonemangsandelen här:

Endpoint Fält Anmärkning
/v1/chat/completions usage.completion_tokens_details.reasoning_tokens Ingår redan i completion_tokens.
/v1/responses usage.output_tokens_details.reasoning_tokens Ingår redan i output_tokens.
/v1/messages usage.output_tokens Resonemang och svar tillsammans. Det här formatet har ingen separat räkning.
  • På de hostade open-weight-modellerna begränsar max_tokens svarstexten. Resonemangstokens räknas inte mot den.
  • Eftersom resonemang faktureras som output är resonemangsnivån också en kostnadsinställning: off ger inga resonemangstokens.
  • Shannon-modellerna rapporterar prompt_tokens, completion_tokens och total_tokens (input_tokens och output_tokens på /v1/messages) utan resonemangsandel, och fakturerar ett fast pris per token. Modeller och priser

Resonemang i nästa begäran

Du behöver inte skicka tillbaka resonemanget. Ett thinking-block eller ett reasoning-objekt i konversationen du skickar förs inte vidare till modellen, så en assistentvändning kan skickas tillbaka med eller utan det. Ett thinking-block har de två fälten type och thinking; det har ingen signature.

Fel

Status Typ Meddelande När
400 invalid_request_error unknown reasoning effort '<value>'; expected off, low, medium or high En hostad open-weight-modell fick ett värde utanför listan, till exempel xhigh. Ingenting dras från din balans.
422 invalid_request_error Failed to deserialize the JSON body into the target type: … reasoning_effort är inte en sträng.

Fel gällande autentisering, balans och server är desamma som för varje begäran. Felhantering