Προσπάθεια συλλογισμού
ΝέοΈνα μοντέλο που συλλογίζεται επιστρέφει το κείμενο του συλλογισμού δίπλα στην απάντηση, σε δικό του πεδίο. Στα φιλοξενούμενα μοντέλα ανοιχτών βαρών ένα πεδίο αιτήματος ορίζει πόσο βαθιά συλλογίζεται το μοντέλο πριν απαντήσει.
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?"}
]
}' Η απάντηση φέρει το κείμενο συλλογισμού στο reasoning_content, την απάντηση στο content και τα tokens συλλογισμού στο 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}
}
} Ποια μοντέλα συλλογίζονται
| Μοντέλο | Επιστρέφει κείμενο συλλογισμού | Εφαρμόζει το πεδίο προσπάθειας |
|---|---|---|
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 | Ναι | — |
| Κάθε φιλοξενούμενο μοντέλο ανοιχτών βαρών | Ναι | Ναι |
Αυτές είναι οι σημαίες capabilities.reasoning και capabilities.reasoning_effort που αναφέρει το GET /v1/models για κάθε id. Μια απάντηση φέρει κείμενο συλλογισμού μόνο όταν το μοντέλο παρήγαγε κάποιο. Μοντέλα & τιμές
Ορισμός της προσπάθειας
Κάθε endpoint έχει τη δική του γραφή για την προσπάθεια. Όλες επιλέγουν ένα από τα ίδια τέσσερα επίπεδα.
| Πεδίο | Τύπος | Προεπιλογή | Περιγραφή | Εφαρμόζεται από |
|---|---|---|---|---|
reasoning_effort | string | high | /v1/chat/completions. Πόσο βαθιά συλλογίζεται το μοντέλο πριν απαντήσει: off, low, medium ή high. | Φιλοξενούμενα μοντέλα ανοιχτών βαρών |
reasoning | object | string | /v1/chat/completions. Η ίδια τιμή ως {"effort": "low"} ή ως απλό string. Όταν στέλνονται και τα δύο πεδία, ισχύει το reasoning_effort. | Φιλοξενούμενα μοντέλα ανοιχτών βαρών | |
reasoning.effort | string | high | /v1/responses. Γράφεται ως το αντικείμενο {"effort": "low"}. | Φιλοξενούμενα μοντέλα ανοιχτών βαρών |
thinking | object | /v1/messages. {"type": "enabled", "budget_tokens": n} ή {"type": "disabled"}. Ο προϋπολογισμός επιλέγει ένα από τα επίπεδα· δείτε τον πίνακα παρακάτω. | Φιλοξενούμενα μοντέλα ανοιχτών βαρών |
{
"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?"}]
} | Τιμή | Γίνονται δεκτά και | Αποτέλεσμα |
|---|---|---|
off | none, minimal | Χωρίς συλλογισμό. Η απάντηση δεν φέρει κείμενο συλλογισμού. |
low | Σύντομος συλλογισμός. | |
medium | default | Μέσο βάθος. |
high | max | Το βαθύτερο επίπεδο. Αυτό είναι το επίπεδο ενός αιτήματος που δεν στέλνει τιμή. |
- Οι τιμές διαβάζονται χωρίς διάκριση πεζών και κεφαλαίων.
- Η τιμή
defaultσημαίνειmedium. Αν παραλείψετε το πεδίο, σημαίνειhigh. - Τα μοντέλα Shannon (
shannon-*) ορίζουν μόνα τους το βάθος σε κάθε αίτημα· τοGET /v1/modelsαναφέρειreasoning_effort: falseγια αυτά.
Ο προϋπολογισμός thinking στο /v1/messages
Στο /v1/messages το πεδίο thinking επιλέγει το επίπεδο. Το budget_tokens διαλέγει ένα από τα παραπάνω επίπεδα· δεν είναι δικό του όριο tokens. Το adaptive διαβάζεται όπως το enabled.
| Εσείς στέλνετε | Επίπεδο |
|---|---|
{"type": "disabled"} | off |
{"type": "enabled", "budget_tokens": n} με n έως 2,048 | low |
n από 2,049 έως 8,192 | medium |
Μεγαλύτερο n, ή enabled χωρίς budget_tokens | high |
Χωρίς πεδίο thinking | high |
Πού φτάνει το κείμενο συλλογισμού
Το κείμενο συλλογισμού είναι πάντα ξεχωριστό από την απάντηση. Κάθε μορφή έχει τη δική της θέση για αυτό:
| Endpoint | Χωρίς streaming | Με streaming |
|---|---|---|
/v1/chat/completions | choices[0].message.reasoning_content: ένα string, ή null όταν το μοντέλο δεν παρήγαγε κανένα. | Chunks με choices[0].delta.reasoning_content, πριν από τα chunks με delta.content. |
/v1/responses | Ένα στοιχείο output {"type": "reasoning", "summary": [{"type": "summary_text", "text": "…"}]} πριν από το στοιχείο message. Χωρίς στοιχείο όταν δεν υπάρχει συλλογισμός. | response.output_item.added με ένα στοιχείο reasoning, έπειτα συμβάντα response.reasoning_summary_text.delta και ένα response.reasoning_summary_text.done. |
/v1/messages | Ένα πρώτο block περιεχομένου {"type": "thinking", "thinking": "…"}, και μετά το block text. Χωρίς block thinking όταν δεν υπάρχει συλλογισμός. | Ένα block περιεχομένου thinking: content_block_start, συμβάντα content_block_delta με thinking_delta, content_block_stop. Το block κειμένου ακολουθεί. |
{
"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
}
} Πού να κοιτάξετε, ανά μοντέλο:
| Μοντέλα | Πού φτάνει το κείμενο |
|---|---|
| Φιλοξενούμενα μοντέλα ανοιχτών βαρών | Σε κάθε endpoint, με ή χωρίς streaming. Ένα αίτημα με προσπάθεια off, ή με response_format / text.format, απαντάται χωρίς κείμενο συλλογισμού. |
shannon-3, shannon-3-pro, shannon-3.1, shannon-3.1-pro | Σε κάθε endpoint, με ή χωρίς streaming, όποτε το μοντέλο παρήγαγε κείμενο συλλογισμού. |
shannon-2-lite, shannon-2-pro | /v1/chat/completions, χωρίς streaming: στο message.reasoning_content. Με streaming, σε αίτημα χωρίς tools ή response_format: το stream φέρει γραμμές σχολίων : thinking όσο το μοντέλο συλλογίζεται, και μετά τα chunks της απάντησης. /v1/messages, με streaming: ένα block thinking πριν από το block κειμένου. |
shannon-1.6-pro, shannon-coder-1 | Σε απαντήσεις με streaming και σε απαντήσεις αιτημάτων που φέρουν tools, όποτε το μοντέλο παρήγαγε κείμενο συλλογισμού. |
Στο /v1/responses, μια απάντηση χωρίς streaming φέρει το στοιχείο reasoning για την οικογένεια Shannon 3 και τα φιλοξενούμενα μοντέλα ανοιχτών βαρών.
Ανάγνωση ενός stream
Σε ένα stream το κείμενο συλλογισμού έρχεται πρώτο, σε δικά του deltas, και η απάντηση ακολουθεί. Τυπώστε ή αποθηκεύστε τα δύο ξεχωριστά:
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?"}
]
}' Το πρώτο chunk ενός φιλοξενούμενου μοντέλου ανοιχτών βαρών, συλλογισμού ή απάντησης, φέρει επίσης delta.role: "assistant". Ροή
Tokens συλλογισμού και χρέωση
Στα φιλοξενούμενα μοντέλα ανοιχτών βαρών, τα tokens συλλογισμού είναι tokens εξόδου: χρεώνονται με την τιμή εξόδου του μοντέλου, και ο αριθμός εξόδου τα περιλαμβάνει ήδη. Το usage δείχνει εδώ το μερίδιο του συλλογισμού:
| Endpoint | Πεδίο | Σημείωση |
|---|---|---|
/v1/chat/completions | usage.completion_tokens_details.reasoning_tokens | Περιλαμβάνεται ήδη στο completion_tokens. |
/v1/responses | usage.output_tokens_details.reasoning_tokens | Περιλαμβάνεται ήδη στο output_tokens. |
/v1/messages | usage.output_tokens | Συλλογισμός και απάντηση μαζί. Αυτή η μορφή δεν έχει ξεχωριστό αριθμό. |
- Στα φιλοξενούμενα μοντέλα ανοιχτών βαρών το
max_tokensπεριορίζει το κείμενο της απάντησης. Τα tokens συλλογισμού δεν προσμετρώνται σε αυτό. - Επειδή ο συλλογισμός χρεώνεται ως έξοδος, το επίπεδο προσπάθειας είναι και ρύθμιση κόστους: το
offδεν παράγει tokens συλλογισμού. - Τα μοντέλα Shannon αναφέρουν
prompt_tokens,completion_tokensκαιtotal_tokens(input_tokensκαιoutput_tokensστο/v1/messages) χωρίς μερίδιο συλλογισμού, και χρεώνουν μία ενιαία τιμή ανά token. Μοντέλα & τιμές
Ο συλλογισμός στο επόμενο αίτημα
Δεν χρειάζεται να στέλνετε πίσω τον συλλογισμό. Ένα block thinking ή ένα στοιχείο reasoning στη συνομιλία που στέλνετε δεν περνά στο μοντέλο, οπότε ένας γύρος του assistant μπορεί να επιστρέψει με ή χωρίς αυτό. Ένα block thinking έχει τα δύο πεδία type και thinking· δεν έχει signature.
Σφάλματα
| Κατάσταση | Τύπος | Μήνυμα | Πότε |
|---|---|---|---|
400 | invalid_request_error | unknown reasoning effort '<value>'; expected off, low, medium or high | Ένα φιλοξενούμενο μοντέλο ανοιχτών βαρών έλαβε τιμή εκτός λίστας, για παράδειγμα xhigh. Τίποτα δεν αφαιρείται από το υπόλοιπό σας. |
422 | invalid_request_error | Failed to deserialize the JSON body into the target type: … | Το reasoning_effort δεν είναι string. |
Τα σφάλματα ταυτοποίησης, υπολοίπου και διακομιστή είναι ίδια με κάθε άλλο αίτημα. Χειρισμός σφαλμάτων