Mąstymo pastangos
NaujaModelis, kuris mąsto, grąžina mąstymo tekstą šalia atsakymo, atskirame lauke. Talpinamuose atvirų svorių modeliuose vienas užklausos laukas nustato, kaip giliai modelis mąsto prieš atsakydamas.
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?"}
]
}' Atsakyme mąstymo tekstas yra reasoning_content, atsakymas – content, o mąstymo tokenai – usage:
{
"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}
}
} Kurie modeliai mąsto
| Modelis | Grąžina mąstymo tekstą | Taiko pastangų lauką |
|---|---|---|
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 | Taip | — |
| Kiekvienas talpinamas atvirų svorių modelis | Taip | Taip |
Tai požymiai capabilities.reasoning ir capabilities.reasoning_effort, kuriuos GET /v1/models nurodo kiekvienam id. Atsakyme mąstymo teksto yra tik tada, kai modelis jį sukūrė. Modeliai ir kainos
Pastangų nustatymas
Kiekvienas galinis taškas turi savo pastangų užrašymo būdą. Visi jie parenka vieną iš tų pačių keturių lygių.
| Laukas | Tipas | Numatytoji | Aprašymas | Taiko |
|---|---|---|---|---|
reasoning_effort | string | high | /v1/chat/completions. Kaip giliai modelis mąsto prieš atsakydamas: off, low, medium arba high. | Talpinami atvirų svorių modeliai |
reasoning | object | string | /v1/chat/completions. Ta pati reikšmė kaip {"effort": "low"} arba kaip paprasta eilutė. Kai siunčiami abu laukai, galioja reasoning_effort. | Talpinami atvirų svorių modeliai | |
reasoning.effort | string | high | /v1/responses. Rašoma kaip objektas {"effort": "low"}. | Talpinami atvirų svorių modeliai |
thinking | object | /v1/messages. {"type": "enabled", "budget_tokens": n} arba {"type": "disabled"}. Biudžetas parenka vieną iš lygių; žr. lentelę žemiau. | Talpinami atvirų svorių modeliai |
{
"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?"}]
} | Reikšmė | Priimama ir | Poveikis |
|---|---|---|
off | none, minimal | Be mąstymo. Atsakyme mąstymo teksto nėra. |
low | Trumpas mąstymas. | |
medium | default | Vidutinis gylis. |
high | max | Giliausias lygis. Toks lygis taikomas užklausai, kuri nesiunčia reikšmės. |
- Reikšmės skaitomos neatsižvelgiant į didžiąsias ir mažąsias raides.
- Reikšmė
defaultreiškiamedium. Jei lauko nenurodoma, tai reiškiahigh. - Shannon modeliai (
shannon-*) gylį nustato patys kiekvienoje užklausoje;GET /v1/modelsjiems nurodoreasoning_effort: false.
Mąstymo biudžetas kelyje /v1/messages
Kelyje /v1/messages lygį parenka laukas thinking. budget_tokens parenka vieną iš aukščiau esančių lygių; tai nėra atskira tokenų riba. adaptive skaitomas kaip enabled.
| Jūs siunčiate | Lygis |
|---|---|
{"type": "disabled"} | off |
{"type": "enabled", "budget_tokens": n}, kai n iki 2,048 | low |
n nuo 2,049 iki 8,192 | medium |
Didesnis n arba enabled be budget_tokens | high |
Lauko thinking nėra | high |
Kur ateina mąstymo tekstas
Mąstymo tekstas visada atskiras nuo atsakymo. Kiekvienas formatas turi savo vietą jam:
| Galinis taškas | Ne srautu | Srautu |
|---|---|---|
/v1/chat/completions | choices[0].message.reasoning_content: eilutė arba null, jei modelis nieko nesukūrė. | Gabalai su choices[0].delta.reasoning_content, prieš gabalus su delta.content. |
/v1/responses | output elementas {"type": "reasoning", "summary": [{"type": "summary_text", "text": "…"}]} prieš message elementą. Kai mąstymo nėra, elemento nėra. | response.output_item.added su reasoning elementu, tada response.reasoning_summary_text.delta įvykiai ir vienas response.reasoning_summary_text.done. |
/v1/messages | Pirmasis turinio blokas {"type": "thinking", "thinking": "…"}, tada text blokas. Kai mąstymo nėra, thinking bloko nėra. | thinking turinio blokas: content_block_start, content_block_delta įvykiai su thinking_delta, content_block_stop. Toliau eina teksto blokas. |
{
"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
}
} Kur žiūrėti, pagal modelį:
| Modeliai | Kur ateina tekstas |
|---|---|
| Talpinami atvirų svorių modeliai | Kiekviename galiniame taške, srautu ar ne. Į užklausą su pastangomis off arba su response_format / text.format atsakoma be mąstymo teksto. |
shannon-3, shannon-3-pro, shannon-3.1, shannon-3.1-pro | Kiekviename galiniame taške, srautu ar ne, kai tik modelis sukūrė mąstymo tekstą. |
shannon-2-lite, shannon-2-pro | /v1/chat/completions, ne srautu: message.reasoning_content. Srautu, užklausoje be tools ar response_format: kol modelis mąsto, sraute eina komentarų eilutės : thinking, tada atsakymo gabalai. /v1/messages, srautu: thinking blokas prieš teksto bloką. |
shannon-1.6-pro, shannon-coder-1 | Srautiniuose atsakymuose ir atsakymuose į užklausas su tools, kai tik modelis sukūrė mąstymo tekstą. |
Kelyje /v1/responses ne srautinis atsakymas Shannon 3 šeimai ir talpinamiems atvirų svorių modeliams turi reasoning elementą.
Srauto skaitymas
Sraute pirmiausia ateina mąstymo tekstas savo delta, o paskui atsakymas. Spausdinkite arba saugokite abu atskirai:
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?"}
]
}' Pirmasis talpinamo atvirų svorių modelio gabalas, mąstymo ar atsakymo, taip pat turi delta.role: "assistant". Srautinė transliacija
Mąstymo tokenai ir apmokestinimas
Talpinamuose atvirų svorių modeliuose mąstymo tokenai yra išvesties tokenai: jie apmokestinami pagal modelio išvesties kainą, o išvesties skaičius juos jau apima. Čia mąstymo dalį rodo usage:
| Galinis taškas | Laukas | Pastaba |
|---|---|---|
/v1/chat/completions | usage.completion_tokens_details.reasoning_tokens | Jau įskaičiuota į completion_tokens. |
/v1/responses | usage.output_tokens_details.reasoning_tokens | Jau įskaičiuota į output_tokens. |
/v1/messages | usage.output_tokens | Mąstymas ir atsakymas kartu. Šis formatas atskiro skaičiaus neturi. |
- Talpinamuose atvirų svorių modeliuose
max_tokensriboja atsakymo tekstą. Mąstymo tokenai į jį neįskaičiuojami. - Kadangi mąstymas apmokestinamas kaip išvestis, pastangų lygis yra ir kainos nustatymas:
offmąstymo tokenų nesukuria. - Shannon modeliai nurodo
prompt_tokens,completion_tokensirtotal_tokens(input_tokensiroutput_tokenskelyje/v1/messages) be mąstymo dalies ir apmokestina viena vienoda kaina už tokeną. Modeliai ir kainos
Mąstymas kitoje užklausoje
Mąstymo grąžinti nereikia. thinking blokas arba reasoning elementas jūsų siunčiamame pokalbyje modeliui neperduodamas, todėl asistento ėjimą galima grąžinti su juo arba be jo. thinking blokas turi du laukus, type ir thinking; signature jis neturi.
Klaidos
| Būsena | Tipas | Pranešimas | Kada |
|---|---|---|---|
400 | invalid_request_error | unknown reasoning effort '<value>'; expected off, low, medium or high | Talpinamas atvirų svorių modelis gavo reikšmę, kurios nėra sąraše, pavyzdžiui, xhigh. Iš jūsų balanso nieko nenuskaičiuojama. |
422 | invalid_request_error | Failed to deserialize the JSON body into the target type: … | reasoning_effort nėra eilutė. |
Autentifikavimo, balanso ir serverio klaidos tokios pačios kaip ir kiekvienai užklausai. Klaidų tvarkymas