Langsung ke konten
Reasoning effort

Reasoning effort

Baru

Model yang bernalar mengembalikan teks penalarannya di samping jawaban, dalam field tersendiri. Pada model open-weight hosted, satu field permintaan menentukan seberapa dalam model bernalar sebelum menjawab.

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)

Balasan membawa teks penalaran di reasoning_content, jawaban di content, dan token penalaran di usage:

200 JSON
{
  "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}
  }
}

Model mana yang bernalar

Model Mengembalikan teks penalaran Menerapkan field 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 Ya —
Setiap model open-weight hosted Ya Ya

Ini adalah flag capabilities.reasoning dan capabilities.reasoning_effort yang dilaporkan GET /v1/models untuk setiap id. Balasan membawa teks penalaran hanya jika model menghasilkannya. Model & harga

Menyetel effort

Setiap endpoint memiliki ejaan effort sendiri. Semuanya memilih salah satu dari empat level yang sama.

Field Tipe Default Deskripsi Diterapkan oleh
reasoning_effort string high /v1/chat/completions. Seberapa dalam model bernalar sebelum menjawab: off, low, medium, atau high. Model open-weight hosted
reasoning object | string /v1/chat/completions. Nilai yang sama seperti {"effort": "low"} atau sebagai string saja. Jika kedua field dikirim, reasoning_effort yang dipakai. Model open-weight hosted
reasoning.effort string high /v1/responses. Ditulis sebagai objek {"effort": "low"}. Model open-weight hosted
thinking object /v1/messages. {"type": "enabled", "budget_tokens": n} atau {"type": "disabled"}. Budget memilih salah satu level; lihat tabel di bawah. Model open-weight hosted
{
  "model": "Kimi-K3-3BIT-REAP",
  "reasoning_effort": "low",
  "messages": [{"role": "user", "content": "Is 221 a prime number?"}]
}
Nilai Juga diterima Efek
off none, minimal Tanpa penalaran. Balasan tidak membawa teks penalaran.
low Penalaran singkat.
medium default Kedalaman menengah.
high max Level terdalam. Ini adalah level permintaan yang tidak mengirim nilai.
  • Nilai dibaca tanpa memperhatikan huruf besar atau kecil.
  • Nilai default berarti medium. Jika field dihilangkan, artinya high.
  • Model Shannon (shannon-*) menentukan kedalamannya sendiri pada setiap permintaan; GET /v1/models melaporkan reasoning_effort: false untuk model tersebut.

Budget thinking pada /v1/messages

Pada /v1/messages, field thinking memilih level. budget_tokens memilih salah satu level di atas; ia bukan batas token tersendiri. adaptive dibaca seperti enabled.

Yang Anda kirim Level
{"type": "disabled"} off
{"type": "enabled", "budget_tokens": n} dengan n hingga 2,048 low
n dari 2,049 sampai 8,192 medium
n yang lebih besar, atau enabled tanpa budget_tokens high
Tanpa field thinking high

Di mana teks penalaran muncul

Teks penalaran selalu terpisah dari jawaban. Setiap format memiliki tempatnya sendiri:

Endpoint Tanpa stream Dengan stream
/v1/chat/completions choices[0].message.reasoning_content: string, atau null jika model tidak menghasilkannya. Chunk dengan choices[0].delta.reasoning_content, sebelum chunk dengan delta.content.
/v1/responses Item output {"type": "reasoning", "summary": [{"type": "summary_text", "text": "…"}]} sebelum item message. Tidak ada item jika tidak ada penalaran. response.output_item.added dengan item reasoning, lalu event response.reasoning_summary_text.delta dan satu response.reasoning_summary_text.done.
/v1/messages Blok konten pertama {"type": "thinking", "thinking": "…"}, lalu blok text. Tidak ada blok thinking jika tidak ada penalaran. Blok konten thinking: content_block_start, event content_block_delta dengan thinking_delta, content_block_stop. Blok teks menyusul.
{
  "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}
  }
}

Di mana harus melihat, per model:

Model Di mana teks muncul
Model open-weight hosted Pada setiap endpoint, dengan stream maupun tidak. Permintaan dengan effort off, atau dengan response_format / text.format, dijawab tanpa teks penalaran.
shannon-3, shannon-3-pro, shannon-3.1, shannon-3.1-pro Pada setiap endpoint, dengan stream maupun tidak, kapan pun model menghasilkan teks penalaran.
shannon-2-lite, shannon-2-pro /v1/chat/completions, tanpa stream: di message.reasoning_content. Dengan stream, pada permintaan tanpa tools atau response_format: stream membawa baris komentar : thinking selama model bernalar, lalu chunk jawaban. /v1/messages, dengan stream: blok thinking sebelum blok teks.
shannon-1.6-pro, shannon-coder-1 Pada balasan stream dan pada balasan untuk permintaan yang membawa tools, kapan pun model menghasilkan teks penalaran.

Pada /v1/responses, balasan tanpa stream membawa item reasoning untuk keluarga Shannon 3 dan model open-weight hosted.

Membaca stream

Dalam stream, teks penalaran datang lebih dulu, dalam delta tersendiri, lalu jawaban menyusul. Cetak atau simpan keduanya secara terpisah:

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

Chunk pertama dari model open-weight hosted, penalaran atau jawaban, juga membawa delta.role: "assistant". Streaming

Token penalaran dan penagihan

Pada model open-weight hosted, token penalaran adalah token output: ditagih dengan harga output model, dan jumlah output sudah mencakupnya. usage menunjukkan bagian penalaran di sini:

Endpoint Field Catatan
/v1/chat/completions usage.completion_tokens_details.reasoning_tokens Sudah termasuk dalam completion_tokens.
/v1/responses usage.output_tokens_details.reasoning_tokens Sudah termasuk dalam output_tokens.
/v1/messages usage.output_tokens Penalaran dan jawaban digabung. Format ini tidak memiliki hitungan terpisah.
  • Pada model open-weight hosted, max_tokens membatasi teks jawaban. Token penalaran tidak dihitung terhadapnya.
  • Karena penalaran ditagih sebagai output, level effort juga merupakan pengaturan biaya: off tidak menghasilkan token penalaran.
  • Model Shannon melaporkan prompt_tokens, completion_tokens, dan total_tokens (input_tokens dan output_tokens pada /v1/messages) tanpa bagian penalaran, dan menagih satu harga tetap per token. Model & harga

Penalaran pada permintaan berikutnya

Anda tidak perlu mengirim balik penalaran. Blok thinking atau item reasoning dalam percakapan yang Anda kirim tidak diteruskan ke model, sehingga giliran assistant boleh dikirim kembali dengan atau tanpanya. Blok thinking memiliki dua field type dan thinking; tidak ada signature.

Error

Status Tipe Pesan Kapan
400 invalid_request_error unknown reasoning effort '<value>'; expected off, low, medium or high Model open-weight hosted menerima nilai di luar daftar, misalnya xhigh. Tidak ada yang diambil dari saldo Anda.
422 invalid_request_error Failed to deserialize the JSON body into the target type: … reasoning_effort bukan string.

Error autentikasi, saldo, dan server sama seperti pada setiap permintaan. Penanganan kesalahan