Napor razmišljanja
NovoModel, ki razmišlja, vrne besedilo razmišljanja ob odgovoru, v lastnem polju. Pri gostovanih modelih z odprtimi utežmi eno polje zahtevka določa, kako globoko model razmišlja, preden odgovori.
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?"}
]
}' Odgovor nosi besedilo razmišljanja v reasoning_content, odgovor v content in tokene razmišljanja v 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}
}
} Kateri modeli razmišljajo
| Model | Vrne besedilo razmišljanja | Upošteva polje effort |
|---|---|---|
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 | — |
| Vsak gostovani model z odprtimi utežmi | Da | Da |
To sta zastavici capabilities.reasoning in capabilities.reasoning_effort, ki ju GET /v1/models sporoča za vsak id. Odgovor vsebuje besedilo razmišljanja samo, kadar ga je model ustvaril. Modeli in cene
Nastavitev napora
Vsaka končna točka ima svoj zapis napora. Vsi izberejo eno od istih štirih ravni.
| Polje | Tip | Privzeto | Opis | Uporabljajo |
|---|---|---|---|---|
reasoning_effort | string | high | /v1/chat/completions. Kako globoko model razmišlja, preden odgovori: off, low, medium ali high. | Gostovani modeli z odprtimi utežmi |
reasoning | object | string | /v1/chat/completions. Ista vrednost kot {"effort": "low"} ali kot goli niz. Kadar sta poslani obe polji, velja reasoning_effort. | Gostovani modeli z odprtimi utežmi | |
reasoning.effort | string | high | /v1/responses. Zapisano kot objekt {"effort": "low"}. | Gostovani modeli z odprtimi utežmi |
thinking | object | /v1/messages. {"type": "enabled", "budget_tokens": n} ali {"type": "disabled"}. Proračun izbere eno od ravni; glejte tabelo nižje. | Gostovani modeli z odprtimi utežmi |
{
"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?"}]
} | Vrednost | Sprejeto tudi | Učinek |
|---|---|---|
off | none, minimal | Brez razmišljanja. Odgovor ne vsebuje besedila razmišljanja. |
low | Kratko razmišljanje. | |
medium | default | Srednja globina. |
high | max | Najgloblja raven. To je raven zahtevka, ki ne pošlje vrednosti. |
- Vrednosti se preberejo ne glede na velike ali male črke.
- Vrednost
defaultpomenimedium. Izpustitev polja pomenihigh. - Modeli Shannon (
shannon-*) globino nastavijo sami pri vsakem zahtevku;GET /v1/modelsza njih sporočareasoning_effort: false.
Proračun razmišljanja na /v1/messages
Na /v1/messages raven izbere polje thinking. budget_tokens izbere eno od zgornjih ravni; ni lastna omejitev tokenov. adaptive se bere kot enabled.
| Vi pošljete | Raven |
|---|---|
{"type": "disabled"} | off |
{"type": "enabled", "budget_tokens": n} z n do 2,048 | low |
n od 2,049 do 8,192 | medium |
Večji n ali enabled brez budget_tokens | high |
Brez polja thinking | high |
Kje prispe besedilo razmišljanja
Besedilo razmišljanja je vedno ločeno od odgovora. Vsak format ima zanj svoje mesto:
| Končna točka | Brez pretakanja | S pretakanjem |
|---|---|---|
/v1/chat/completions | choices[0].message.reasoning_content: niz ali null, kadar model ni ustvaril nič. | Kosi z choices[0].delta.reasoning_content, pred kosi z delta.content. |
/v1/responses | Element output {"type": "reasoning", "summary": [{"type": "summary_text", "text": "…"}]} pred elementom message. Brez elementa, kadar razmišljanja ni. | response.output_item.added z elementom reasoning, nato dogodki response.reasoning_summary_text.delta in en response.reasoning_summary_text.done. |
/v1/messages | Prvi blok vsebine {"type": "thinking", "thinking": "…"}, nato blok text. Brez bloka thinking, kadar razmišljanja ni. | Blok vsebine thinking: content_block_start, dogodki content_block_delta z thinking_delta, content_block_stop. Sledi blok z besedilom. |
{
"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
}
} Kje iskati, po modelih:
| Modeli | Kje besedilo prispe |
|---|---|
| Gostovani modeli z odprtimi utežmi | Na vsaki končni točki, s pretakanjem ali brez. Na zahtevek z naporom off ali z response_format / text.format se odgovori brez besedila razmišljanja. |
shannon-3, shannon-3-pro, shannon-3.1, shannon-3.1-pro | Na vsaki končni točki, s pretakanjem ali brez, kadar je model ustvaril besedilo razmišljanja. |
shannon-2-lite, shannon-2-pro | /v1/chat/completions, brez pretakanja: v message.reasoning_content. S pretakanjem, v zahtevku brez tools ali response_format: tok nosi komentarne vrstice : thinking, medtem ko model razmišlja, nato kose odgovora. /v1/messages, s pretakanjem: blok thinking pred blokom z besedilom. |
shannon-1.6-pro, shannon-coder-1 | V odgovorih s pretakanjem in v odgovorih na zahtevke, ki vsebujejo tools, kadar je model ustvaril besedilo razmišljanja. |
Na /v1/responses odgovor brez pretakanja za družino Shannon 3 in gostovane modele z odprtimi utežmi vsebuje element reasoning.
Branje toka
V toku pride besedilo razmišljanja prvo, v lastnih delta kosih, odgovor sledi. Obe izpišite ali shranite ločeno:
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?"}
]
}' Prvi kos gostovanega modela z odprtimi utežmi, razmišljanje ali odgovor, nosi tudi delta.role: "assistant". Pretakanje
Tokeni razmišljanja in obračun
Pri gostovanih modelih z odprtimi utežmi so tokeni razmišljanja izhodni tokeni: obračunajo se po izhodni ceni modela, število izhoda pa jih že vključuje. usage tukaj prikazuje delež razmišljanja:
| Končna točka | Polje | Opomba |
|---|---|---|
/v1/chat/completions | usage.completion_tokens_details.reasoning_tokens | Že vključeno v completion_tokens. |
/v1/responses | usage.output_tokens_details.reasoning_tokens | Že vključeno v output_tokens. |
/v1/messages | usage.output_tokens | Razmišljanje in odgovor skupaj. Ta format nima ločenega števila. |
- Pri gostovanih modelih z odprtimi utežmi
max_tokensomejuje besedilo odgovora. Tokeni razmišljanja se vanj ne štejejo. - Ker se razmišljanje obračuna kot izhod, je raven napora tudi nastavitev stroška:
offne ustvari tokenov razmišljanja. - Modeli Shannon sporočajo
prompt_tokens,completion_tokensintotal_tokens(input_tokensinoutput_tokensna/v1/messages) brez deleža razmišljanja ter obračunajo eno enotno ceno na token. Modeli in cene
Razmišljanje v naslednjem zahtevku
Razmišljanja vam ni treba pošiljati nazaj. Blok thinking ali element reasoning v pogovoru, ki ga pošljete, se modelu ne posreduje, zato se lahko obrat asistenta vrne z njim ali brez njega. Blok thinking ima dve polji, type in thinking; nima signature.
Napake
| Stanje | Vrsta | Sporočilo | Kdaj |
|---|---|---|---|
400 | invalid_request_error | unknown reasoning effort '<value>'; expected off, low, medium or high | Gostovani model z odprtimi utežmi je prejel vrednost zunaj seznama, na primer xhigh. Z vašega stanja se ne odšteje nič. |
422 | invalid_request_error | Failed to deserialize the JSON body into the target type: … | reasoning_effort ni niz. |
Napake pri avtentikaciji, stanju in strežniku so enake kot pri vsakem zahtevku. Obravnava napak