Gå til indhold
Reasoning effort

Reasoning effort

Ny

En model, der ræsonnerer, returnerer sin ræsonnementstekst ved siden af svaret, i et felt for sig. På de hostede open-weight-modeller fastsætter ét anmodningsfelt, hvor dybt modellen ræsonnerer, før den svarer.

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 indeholder ræsonnementsteksten i reasoning_content, svaret i content og ræsonnement-tokens 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}
  }
}

Hvilke modeller der ræsonnerer

Model Returnerer ræsonnementstekst Anvender effort-feltet
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 —
Hver hostet open-weight-model Ja Ja

Det er flagene capabilities.reasoning og capabilities.reasoning_effort, som GET /v1/models melder for hvert id. Et svar indeholder kun ræsonnementstekst, når modellen har frembragt noget. Modeller og priser

Indstilling af effort

Hvert endpoint har sin egen stavemåde for effort. Alle vælger et af de samme fire niveauer.

Felt Type Standard Beskrivelse Anvendes af
reasoning_effort string high /v1/chat/completions. Hvor dybt modellen ræsonnerer, før den svarer: off, low, medium eller high. Hostede open-weight-modeller
reasoning object | string /v1/chat/completions. Samme værdi som {"effort": "low"} eller som en ren streng. Når begge felter sendes, gælder reasoning_effort. Hostede open-weight-modeller
reasoning.effort string high /v1/responses. Skrives som objektet {"effort": "low"}. Hostede open-weight-modeller
thinking object /v1/messages. {"type": "enabled", "budget_tokens": n} eller {"type": "disabled"}. Budgettet vælger et af niveauerne; se tabellen længere nede. Hostede open-weight-modeller
{
  "model": "Kimi-K3-3BIT-REAP",
  "reasoning_effort": "low",
  "messages": [{"role": "user", "content": "Is 221 a prime number?"}]
}
Værdi Accepteres også Virkning
off none, minimal Intet ræsonnement. Svaret indeholder ingen ræsonnementstekst.
low Kortfattet ræsonnement.
medium default Middel dybde.
high max Det dybeste niveau. Det er niveauet for en anmodning, der ikke sender nogen værdi.
  • Værdier læses uden hensyn til store eller små bogstaver.
  • Værdien default betyder medium. Udelader du feltet, betyder det high.
  • Shannon-modellerne (shannon-*) fastsætter selv deres dybde i hver anmodning; GET /v1/models melder reasoning_effort: false for dem.

Thinking-budgettet på /v1/messages

På /v1/messages vælger feltet thinking niveauet. budget_tokens vælger et af niveauerne ovenfor; det er ikke en token-grænse for sig. adaptive læses som enabled.

Du sender Niveau
{"type": "disabled"} off
{"type": "enabled", "budget_tokens": n} med n op til 2,048 low
n fra 2,049 til 8,192 medium
Et større n, eller enabled uden budget_tokens high
Intet thinking-felt high

Hvor ræsonnementsteksten ankommer

Ræsonnementstekst er altid adskilt fra svaret. Hvert format har sit eget sted til den:

Endpoint Ikke streamet Streamet
/v1/chat/completions choices[0].message.reasoning_content: en streng, eller null, når modellen ikke frembragte noget. Chunks med choices[0].delta.reasoning_content, før chunks med delta.content.
/v1/responses Et output-element {"type": "reasoning", "summary": [{"type": "summary_text", "text": "…"}]} før message-elementet. Intet element, når der ikke er noget ræsonnement. response.output_item.added med et reasoning-element, derefter response.reasoning_summary_text.delta-hændelser og én response.reasoning_summary_text.done.
/v1/messages En første indholdsblok {"type": "thinking", "thinking": "…"}, derefter text-blokken. Ingen thinking-blok, når der ikke er noget ræsonnement. En indholdsblok af typen thinking: content_block_start, content_block_delta-hændelser med thinking_delta, content_block_stop. Tekstblokken følger.
{
  "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}
  }
}

Hvor du skal kigge, per model:

Modeller Hvor teksten ankommer
Hostede open-weight-modeller På alle endpoints, streamet eller ej. En anmodning med effort off eller med response_format / text.format besvares uden ræsonnementstekst.
shannon-3, shannon-3-pro, shannon-3.1, shannon-3.1-pro På alle endpoints, streamet eller ej, når modellen har frembragt ræsonnementstekst.
shannon-2-lite, shannon-2-pro /v1/chat/completions, ikke streamet: i message.reasoning_content. Streamet, i en anmodning uden tools eller response_format: streamen har kommentarlinjer : thinking, mens modellen ræsonnerer, derefter svar-chunks. /v1/messages, streamet: en thinking-blok før tekstblokken.
shannon-1.6-pro, shannon-coder-1 I streamede svar og i svar på anmodninger med tools, når modellen har frembragt ræsonnementstekst.

På /v1/responses indeholder et svar, der ikke streames, reasoning-elementet for Shannon 3-familien og de hostede open-weight-modeller.

Sådan læser du en stream

I en stream kommer ræsonnementsteksten først, i deltaer for sig, og svaret følger. Udskriv eller gem de to hver for sig:

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

Det første chunk fra en hostet open-weight-model, ræsonnement eller svar, indeholder også delta.role: "assistant". Streaming

Ræsonnement-tokens og afregning

På de hostede open-weight-modeller er ræsonnement-tokens output-tokens: de afregnes til modellens outputpris, og outputtællingen indeholder dem allerede. usage viser her ræsonnementets andel:

Endpoint Felt Note
/v1/chat/completions usage.completion_tokens_details.reasoning_tokens Allerede inkluderet i completion_tokens.
/v1/responses usage.output_tokens_details.reasoning_tokens Allerede inkluderet i output_tokens.
/v1/messages usage.output_tokens Ræsonnement og svar tilsammen. Dette format har ingen separat tælling.
  • På de hostede open-weight-modeller begrænser max_tokens svarteksten. Ræsonnement-tokens tælles ikke med i den.
  • Fordi ræsonnement afregnes som output, er effort-niveauet også en omkostningsindstilling: off giver ingen ræsonnement-tokens.
  • Shannon-modellerne melder prompt_tokens, completion_tokens og total_tokens (input_tokens og output_tokens på /v1/messages) uden en ræsonnementsandel og afregner én fast pris per token. Modeller og priser

Ræsonnement i den næste anmodning

Du behøver ikke sende ræsonnement tilbage. En thinking-blok eller et reasoning-element i den samtale, du sender, gives ikke videre til modellen, så en assistent-tur kan sendes tilbage med eller uden det. En thinking-blok har de to felter type og thinking; den har ingen signature.

Fejl

Status Type Besked Hvornår
400 invalid_request_error unknown reasoning effort '<value>'; expected off, low, medium or high En hostet open-weight-model modtog en værdi uden for listen, f.eks. xhigh. Intet trækkes fra din saldo.
422 invalid_request_error Failed to deserialize the JSON body into the target type: … reasoning_effort er ikke en streng.

Fejl i godkendelse, saldo og server er de samme som for enhver anmodning. Fejlhåndtering