Peno de reasoning
NovaModelo, kiu rezonas, redonas sian raciuman tekston apud la respondo, en propra kampo. Ĉe la gastigitaj malfermpezaj modeloj unu kampo de peto fiksas kiom profunde la modelo rezonas antaŭ ol respondi.
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?"}
]
}' La respondo portas la raciuman tekston en reasoning_content, la respondon en content, kaj la raciumajn tokenojn en 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}
}
} Kiuj modeloj rezonas
| Modelo | Redonas raciuman tekston | Aplikas la kampon 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 | Jes | — |
| Ĉiu gastigita malfermpeza modelo | Jes | Jes |
Ĉi tiuj estas la flagoj capabilities.reasoning kaj capabilities.reasoning_effort, kiujn GET /v1/models raportas por ĉiu id. Respondo portas raciuman tekston nur kiam la modelo produktis iun. Modeloj kaj prezoj
Agordo de la peno
Ĉiu endpoint havas sian propran literumon de la peno. Ĉiuj elektas unu el la samaj kvar niveloj.
| Kampo | Tipo | Defaŭlto | Priskribo | Aplikata de |
|---|---|---|---|---|
reasoning_effort | string | high | /v1/chat/completions. Kiom profunde la modelo rezonas antaŭ ol respondi: off, low, medium aŭ high. | Gastigitaj malfermpezaj modeloj |
reasoning | object | string | /v1/chat/completions. La sama valoro kiel {"effort": "low"} aŭ kiel nuda ĉeno. Kiam ambaŭ kampoj estas senditaj, reasoning_effort validas. | Gastigitaj malfermpezaj modeloj | |
reasoning.effort | string | high | /v1/responses. Skribita kiel la objekto {"effort": "low"}. | Gastigitaj malfermpezaj modeloj |
thinking | object | /v1/messages. {"type": "enabled", "budget_tokens": n} aŭ {"type": "disabled"}. La buĝeto elektas unu el la niveloj; vidu la tabelon pli sube. | Gastigitaj malfermpezaj modeloj |
{
"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?"}]
} | Valoro | Akceptitaj ankaŭ | Efiko |
|---|---|---|
off | none, minimal | Neniu rezonado. La respondo portas neniun raciuman tekston. |
low | Mallonga rezonado. | |
medium | default | Meza profundo. |
high | max | La plej profunda nivelo. Tio estas la nivelo de peto, kiu sendas neniun valoron. |
- Valoroj estas legataj sen konsidero de majuskloj aŭ minuskloj.
- La valoro
defaultsignifasmedium. Lasi la kampon ekster signifashigh. - La Shannon-modeloj (
shannon-*) fiksas sian propran profundon en ĉiu peto;GET /v1/modelsraportasreasoning_effort: falsepor ili.
La buĝeto de pensado ĉe /v1/messages
Ĉe /v1/messages la kampo thinking elektas la nivelon. budget_tokens elektas unu el la supraj niveloj; ĝi ne estas propra limo de tokenoj. adaptive estas legata kiel enabled.
| Vi sendas | Nivelo |
|---|---|
{"type": "disabled"} | off |
{"type": "enabled", "budget_tokens": n} kun n ĝis 2,048 | low |
n de 2,049 ĝis 8,192 | medium |
Pli granda n, aŭ enabled sen budget_tokens | high |
Neniu kampo thinking | high |
Kie la raciuma teksto alvenas
Raciuma teksto estas ĉiam aparta de la respondo. Ĉiu formato havas sian propran lokon por ĝi:
| Endpoint | Ne fluata | Fluata |
|---|---|---|
/v1/chat/completions | choices[0].message.reasoning_content: ĉeno, aŭ null kiam la modelo produktis nenion. | Pecoj kun choices[0].delta.reasoning_content, antaŭ la pecoj kun delta.content. |
/v1/responses | Ero de output {"type": "reasoning", "summary": [{"type": "summary_text", "text": "…"}]} antaŭ la ero message. Neniu ero kiam ne ekzistas rezonado. | response.output_item.added kun ero reasoning, poste eventoj response.reasoning_summary_text.delta kaj unu response.reasoning_summary_text.done. |
/v1/messages | Unua enhavbloko {"type": "thinking", "thinking": "…"}, poste la bloko text. Neniu bloko thinking kiam ne ekzistas rezonado. | Enhavbloko thinking: content_block_start, eventoj content_block_delta kun thinking_delta, content_block_stop. La tekstbloko sekvas. |
{
"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
}
} Kie serĉi, laŭ modelo:
| Modeloj | Kie la teksto alvenas |
|---|---|
| Gastigitaj malfermpezaj modeloj | Ĉe ĉiu endpoint, fluata aŭ ne. Peto kun peno off, aŭ kun response_format / text.format, estas respondata sen raciuma teksto. |
shannon-3, shannon-3-pro, shannon-3.1, shannon-3.1-pro | Ĉe ĉiu endpoint, fluata aŭ ne, kiam ajn la modelo produktis raciuman tekston. |
shannon-2-lite, shannon-2-pro | /v1/chat/completions, ne fluata: en message.reasoning_content. Fluata, en peto sen tools aŭ response_format: la fluo portas komentliniojn : thinking dum la modelo rezonas, poste la pecojn de la respondo. /v1/messages, fluata: bloko thinking antaŭ la tekstbloko. |
shannon-1.6-pro, shannon-coder-1 | En fluataj respondoj kaj en respondoj al petoj kun tools, kiam ajn la modelo produktis raciuman tekston. |
Ĉe /v1/responses, ne fluata respondo portas la eron reasoning por la familio Shannon 3 kaj la gastigitaj malfermpezaj modeloj.
Legado de fluo
En fluo la raciuma teksto venas unue, en propraj deltoj, kaj la respondo sekvas. Presu aŭ konservu la du aparte:
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?"}
]
}' La unua peco de gastigita malfermpeza modelo, rezonado aŭ respondo, portas ankaŭ delta.role: "assistant". Fluigo
Raciumaj tokenoj kaj fakturado
Ĉe la gastigitaj malfermpezaj modeloj, raciumaj tokenoj estas eligaj tokenoj: ili estas kalkulataj laŭ la elig-prezo de la modelo, kaj la eliga nombro jam inkluzivas ilin. usage montras la raciuman parton ĉi tie:
| Endpoint | Kampo | Noto |
|---|---|---|
/v1/chat/completions | usage.completion_tokens_details.reasoning_tokens | Jam inkluzivita en completion_tokens. |
/v1/responses | usage.output_tokens_details.reasoning_tokens | Jam inkluzivita en output_tokens. |
/v1/messages | usage.output_tokens | Rezonado kaj respondo kune. Ĉi tiu formato ne havas apartan nombron. |
- Ĉe la gastigitaj malfermpezaj modeloj
max_tokenslimigas la tekston de la respondo. Raciumaj tokenoj ne kalkuliĝas kontraŭ ĝi. - Ĉar rezonado estas kalkulata kiel eligo, la nivelo de peno estas ankaŭ agordo de kosto:
offproduktas neniujn raciumajn tokenojn. - La Shannon-modeloj raportas
prompt_tokens,completion_tokenskajtotal_tokens(input_tokenskajoutput_tokensĉe/v1/messages) sen raciuma parto, kaj kalkulas unu ebenan prezon por tokeno. Modeloj kaj prezoj
Rezonado en la sekva peto
Vi ne devas resendi rezonadon. Bloko thinking aŭ ero reasoning en la konversacio, kiun vi sendas, ne estas transdonata al la modelo, do vico de la asistanto povas reiri kun aŭ sen ĝi. Bloko thinking havas la du kampojn type kaj thinking; ĝi ne havas signature.
Eraroj
| Stato | Tipo | Mesaĝo | Kiam |
|---|---|---|---|
400 | invalid_request_error | unknown reasoning effort '<value>'; expected off, low, medium or high | Gastigita malfermpeza modelo ricevis valoron ekster la listo, ekzemple xhigh. Nenio estas prenita el via saldo. |
422 | invalid_request_error | Failed to deserialize the JSON body into the target type: … | reasoning_effort ne estas ĉeno. |
Aŭtentigo, saldo kaj servilaj eraroj estas samaj kiel ĉe ĉiu peto. Erarotraktado