Reasoning effort
ÚjA gondolkodó modell a gondolkodási szövegét a válasz mellett, külön mezőben adja vissza. A hosztolt nyílt súlyú modelleknél egyetlen kérésmező állítja be, mennyire mélyen gondolkodik a modell a válasz előtt.
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) import OpenAI from "openai";
const client = new OpenAI({ apiKey: "YOUR_API_KEY", baseURL: "https://api.shannon-ai.com/v1" });
const response = await client.chat.completions.create({
model: "Kimi-K3-3BIT-REAP",
reasoning_effort: "low",
messages: [{ role: "user", content: "Is 221 a prime number?" }],
});
const message = response.choices[0].message;
console.log("Reasoning:", message.reasoning_content);
console.log("Answer:", message.content);
console.log("Reasoning tokens:", response.usage.completion_tokens_details.reasoning_tokens); curl https://api.shannon-ai.com/v1/chat/completions \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "Kimi-K3-3BIT-REAP",
"reasoning_effort": "low",
"messages": [
{"role": "user", "content": "Is 221 a prime number?"}
]
}' A válasz a gondolkodási szöveget a reasoning_content, a választ a content, a gondolkodási tokeneket pedig a usage mezőben hordozza:
{
"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}
}
} Mely modellek gondolkodnak
| Modell | Gondolkodási szöveget ad vissza | Érvényesíti az effort mezőt |
|---|---|---|
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 | Igen | — |
| Minden hosztolt nyílt súlyú modell | Igen | Igen |
Ezek a capabilities.reasoning és capabilities.reasoning_effort jelzők, amelyeket a GET /v1/models minden azonosítóhoz jelent. A válasz csak akkor hordoz gondolkodási szöveget, ha a modell hozott létre ilyet. Modellek és árak
Az effort beállítása
Minden végpontnak saját írásmódja van az effortra. Mindegyik ugyanazon négy szint egyikét választja.
| Mező | Típus | Alapérték | Leírás | Alkalmazza |
|---|---|---|---|---|
reasoning_effort | string | high | /v1/chat/completions. Mennyire mélyen gondolkodik a modell a válasz előtt: off, low, medium vagy high. | Hosztolt nyílt súlyú modellek |
reasoning | object | string | /v1/chat/completions. Ugyanaz az érték {"effort": "low"} alakban vagy sima stringként. Ha mindkét mezőt elküldöd, a reasoning_effort számít. | Hosztolt nyílt súlyú modellek | |
reasoning.effort | string | high | /v1/responses. A {"effort": "low"} objektumként írva. | Hosztolt nyílt súlyú modellek |
thinking | object | /v1/messages. {"type": "enabled", "budget_tokens": n} vagy {"type": "disabled"}. A budget a szintek egyikét választja; lásd lejjebb a táblázatot. | Hosztolt nyílt súlyú modellek |
{
"model": "Kimi-K3-3BIT-REAP",
"reasoning_effort": "low",
"messages": [{"role": "user", "content": "Is 221 a prime number?"}]
} {
"model": "Kimi-K3-3BIT-REAP",
"reasoning": {"effort": "low"},
"input": "Is 221 a prime number?"
} {
"model": "Kimi-K3-3BIT-REAP",
"max_tokens": 1024,
"thinking": {"type": "enabled", "budget_tokens": 2048},
"messages": [{"role": "user", "content": "Is 221 a prime number?"}]
} | Érték | Szintén elfogadott | Hatás |
|---|---|---|
off | none, minimal | Nincs gondolkodás. A válasz nem hordoz gondolkodási szöveget. |
low | Rövid gondolkodás. | |
medium | default | Közepes mélység. |
high | max | A legmélyebb szint. Ez annak a kérésnek a szintje, amely nem küld értéket. |
- Az értékeket kis- és nagybetűre való tekintet nélkül olvassa.
- A
defaultértékmedium-ot jelent. Ha a mezőt kihagyod, azhigh. - A Shannon modellek (
shannon-*) minden kérésnél maguk állítják be a mélységet; aGET /v1/modelsnálukreasoning_effort: falseértéket jelent.
A thinking budget a /v1/messages végponton
A /v1/messages végponton a thinking mező választja ki a szintet. A budget_tokens a fenti szintek egyikét választja; nem önálló tokenkorlát. Az adaptive értéket úgy olvassa, mint az enabled értéket.
| Te ezt küldöd | Szint |
|---|---|
{"type": "disabled"} | off |
{"type": "enabled", "budget_tokens": n}, ahol az n legfeljebb 2,048 | low |
Az n 2,049 és 8,192 között | medium |
Nagyobb n, vagy enabled budget_tokens nélkül | high |
Nincs thinking mező | high |
Hol érkezik a gondolkodási szöveg
A gondolkodási szöveg mindig elkülönül a választól. Minden formátumnak saját helye van rá:
| Végpont | Nem streamelve | Streamelve |
|---|---|---|
/v1/chat/completions | choices[0].message.reasoning_content: string, vagy null, ha a modell nem hozott létre semmit. | A choices[0].delta.reasoning_content mezőt tartalmazó chunkok, a delta.content chunkok előtt. |
/v1/responses | Egy output elem {"type": "reasoning", "summary": [{"type": "summary_text", "text": "…"}]} alakban a message elem előtt. Ha nincs gondolkodás (reasoning), nincs elem. | response.output_item.added egy reasoning elemmel, majd response.reasoning_summary_text.delta események és egy response.reasoning_summary_text.done. |
/v1/messages | Az első tartalmi blokk {"type": "thinking", "thinking": "…"}, utána a text blokk. Ha nincs gondolkodás (reasoning), nincs thinking blokk. | Egy thinking tartalmi blokk: content_block_start, thinking_delta értékű content_block_delta események, content_block_stop. A szövegblokk követi. |
{
"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}
}
} {
"output": [
{
"id": "rs_6f0a2c4e8b1d4f3a9c7e5b3d1f8a6c4e",
"type": "reasoning",
"summary": [
{
"type": "summary_text",
"text": "Try small primes. 221 / 13 = 17, so 221 = 13 x 17."
}
]
},
{
"id": "msg_1b3d5f7a9c2e4b6d8f0a2c4e6b8d0f1a",
"type": "message",
"role": "assistant",
"status": "completed",
"content": [
{
"type": "output_text",
"text": "No. 221 = 13 x 17, so it is not prime.",
"annotations": []
}
]
}
],
"usage": {
"input_tokens": 14,
"input_tokens_details": {"cached_tokens": 0},
"output_tokens": 43,
"output_tokens_details": {"reasoning_tokens": 27},
"total_tokens": 57
}
} {
"content": [
{
"type": "thinking",
"thinking": "Try small primes. 221 / 13 = 17, so 221 = 13 x 17."
},
{"type": "text", "text": "No. 221 = 13 x 17, so it is not prime."}
],
"stop_reason": "end_turn",
"usage": {
"input_tokens": 14,
"cache_read_input_tokens": 0,
"cache_creation_input_tokens": 0,
"output_tokens": 43
}
} Hol keresd, modellenként:
| Modellek | Hol érkezik a szöveg |
|---|---|
| Hosztolt nyílt súlyú modellek | Minden végponton, streamelve vagy anélkül. Az off effortú, vagy response_format / text.format mezőt tartalmazó kérésre gondolkodási szöveg nélkül válaszol. |
shannon-3, shannon-3-pro, shannon-3.1, shannon-3.1-pro | Minden végponton, streamelve vagy anélkül, ha a modell gondolkodási szöveget hozott létre. |
shannon-2-lite, shannon-2-pro | /v1/chat/completions, nem streamelve: a message.reasoning_content mezőben. Streamelve, tools vagy response_format nélküli kérésnél: a stream : thinking megjegyzéssorokat hordoz, amíg a modell gondolkodik, majd a válasz chunkjait. /v1/messages, streamelve: egy thinking blokk a szövegblokk előtt. |
shannon-1.6-pro, shannon-coder-1 | Streamelt válaszokban és a tools mezőt tartalmazó kérések válaszaiban, ha a modell gondolkodási szöveget hozott létre. |
A /v1/responses végponton a nem streamelt válasz a Shannon 3 családnál és a hosztolt nyílt súlyú modelleknél hordozza a reasoning elemet.
Stream olvasása
Streamben a gondolkodási szöveg érkezik először, saját deltákban, utána a válasz. A kettőt külön írasd ki vagy tárold:
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 import OpenAI from "openai";
const client = new OpenAI({ apiKey: "YOUR_API_KEY", baseURL: "https://api.shannon-ai.com/v1" });
const stream = await client.chat.completions.create({
model: "Kimi-K3-3BIT-REAP",
reasoning_effort: "medium",
stream: true,
messages: [{ role: "user", content: "Is 221 a prime number?" }],
});
for await (const chunk of stream) {
const delta = chunk.choices[0]?.delta ?? {};
if (delta.reasoning_content) process.stdout.write(delta.reasoning_content); // the reasoning text comes first
if (delta.content) process.stdout.write(delta.content); // then the answer
} curl -N https://api.shannon-ai.com/v1/chat/completions \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "Kimi-K3-3BIT-REAP",
"reasoning_effort": "medium",
"stream": true,
"messages": [
{"role": "user", "content": "Is 221 a prime number?"}
]
}' A hosztolt nyílt súlyú modell első chunkja, akár gondolkodás, akár válasz, a delta.role: "assistant" mezőt is hordozza. Streaming
Gondolkodási tokenek és számlázás
A hosztolt nyílt súlyú modelleknél a gondolkodási tokenek kimeneti tokenek: a modell kimeneti árán számlázódnak, és a kimeneti szám már tartalmazza őket. A usage itt megmutatja a gondolkodási részt:
| Végpont | Mező | Megjegyzés |
|---|---|---|
/v1/chat/completions | usage.completion_tokens_details.reasoning_tokens | Már benne van a completion_tokens értékben. |
/v1/responses | usage.output_tokens_details.reasoning_tokens | Már benne van az output_tokens értékben. |
/v1/messages | usage.output_tokens | A gondolkodás és a válasz együtt. Ennek a formátumnak nincs külön számlálója. |
- A hosztolt nyílt súlyú modelleknél a
max_tokensa válaszszöveget korlátozza. A gondolkodási tokenek nem számítanak bele. - Mivel a gondolkodást kimenetként számlázza, az effort szint költségbeállítás is: az
offnem hoz létre gondolkodási tokeneket. - A Shannon modellek a
prompt_tokens,completion_tokenséstotal_tokensértéket (a/v1/messagesvégpontoninput_tokensésoutput_tokens) gondolkodási rész nélkül jelentik, és tokenenként egy egységes árat számláznak. Modellek és árak
Gondolkodás a következő kérésben
A gondolkodást nem kell visszaküldened. A küldött beszélgetésben szereplő thinking blokkot vagy reasoning elemet nem adja tovább a modellnek, így az assistant forduló vele vagy nélküle is mehet vissza. A thinking blokknak két mezője van, a type és a thinking; nincs signature mezője.
Hibák
| Státusz | Típus | Üzenet | Mikor |
|---|---|---|---|
400 | invalid_request_error | unknown reasoning effort '<value>'; expected off, low, medium or high | Egy hosztolt nyílt súlyú modell a listán kívüli értéket kapott, például xhigh-t. Az egyenlegedből semmi nem vonódik. |
422 | invalid_request_error | Failed to deserialize the JSON body into the target type: … | A reasoning_effort nem string. |
A hitelesítési, egyenleg- és szerverhibák ugyanazok, mint minden kérésnél. Hibakezelés