Режим рассуждений (thinking mode) в DeepSeek API
Модели DeepSeek умеют работать в двух режимах: с цепочкой рассуждений и без неё. Thinking включён по умолчанию, поэтому самый первый запрос может вернуть не только ответ, но и ход решения — в отдельном поле reasoning_content.
Как устроен thinking mode
В режиме рассуждений модель сначала строит цепочку шагов и только затем формулирует ответ для пользователя. Это не отдельная модель и не отдельный эндпоинт: режим переключается параметрами того же запроса POST /chat/completions, а доступен он обеим моделям — deepseek-flash и deepseek-v4-pro.
Ключевой момент для интеграции: рассуждение приходит в поле reasoning_content, которое лежит на одном уровне с content. То есть текст ответа и ход решения не смешиваются, и его можно не показывать пользователю, а логировать или отбрасывать.
Thinking включён: по умолчанию действует {"thinking": {"type": "enabled"}}, а уровень усилия reasoning_effort равен high. Явно указывать эти параметры не обязательно — поведение будет тем же.
Параметры управления режимом
В OpenAI-совместимом формате режим задаётся объектом thinking со значением enabled или disabled, а глубина рассуждений — параметром reasoning_effort со значениями none, low, high, max. Значение none выключает thinking.
| Интерфейс | Что передаётся |
|---|---|
| Chat Completions |
{"thinking": {"type": "enabled"}} или {"thinking": {"type": "disabled"}}усилие — reasoning_effort: none | low | high | max |
| Anthropic-совместимый |
усилие — {"reasoning": {"effort": "none | low | high | max"}} |
| Responses API |
усилие — reasoning.effort |
В OpenAI SDK объект thinking не входит в число типизированных аргументов метода, поэтому его передают через extra_body — так он попадает в тело запроса как есть.
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["DEEPSEEK_API_KEY"],
base_url="https://api.deepseek.com",
)
response = client.chat.completions.create(
model="deepseek-flash",
messages=[{"role": "user", "content": "Разложи 2026 на простые множители."}],
# thinking и reasoning_effort уходят в тело запроса через extra_body
extra_body={"thinking": {"type": "enabled"}, "reasoning_effort": "high"},
)
message = response.choices[0].message
print("Ход решения:", message.reasoning_content)
print("Ответ:", message.content)
print(
"Токенов на рассуждение:",
response.usage.completion_tokens_details.reasoning_tokens,
)
Чтобы выключить рассуждения, достаточно отправить disabled (или reasoning_effort: "none"). Такой режим называют non-thinking:
response = client.chat.completions.create(
model="deepseek-flash",
messages=[{"role": "user", "content": "Одним словом: столица Португалии?"}],
extra_body={"thinking": {"type": "disabled"}, "reasoning_effort": "none"},
)
print(response.choices[0].message.content)
# Поля reasoning_content в ответе не будет: рассуждений нет.
Тот же режим из командной строки, без SDK:
curl https://api.deepseek.com/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $DEEPSEEK_API_KEY" \
-d '{
"model": "deepseek-flash",
"messages": [
{"role": "user", "content": "Сколько будет 17 * 23? Поясни ход решения."}
],
"thinking": {"type": "enabled"},
"reasoning_effort": "high",
"stream": false
}'
Нужен API-ключ сегодня
Регистрация по email или Telegram занимает пару минут, оплата идёт в рублях, VPN не нужен. Один ключ работает и с DeepSeek, и с другими моделями.
Длина ответа и max_tokens
Рассуждения расходуют токены вывода, поэтому режим влияет на размер ответа по умолчанию. Если max_tokens не задан, применяются такие значения:
| Режим | max_tokens по умолчанию |
|---|---|
| Non-thinking | 8K |
| Thinking | 64K |
Thinking при reasoning_effort: "max" |
128K |
Если задавать max_tokens вручную, допустимый диапазон — от 1 до 393 216 (максимум 384K токенов вывода). Контекст обеих моделей — 1M токенов (1 048 576).
Ограничения thinking mode
Режим рассуждений меняет поведение части параметров. Часть из них просто не даёт эффекта, часть — приводит к ошибке.
В thinking mode не действуют temperature, presence_penalty и frequency_penalty. Ошибки при этом не возникает — параметры принимаются и игнорируются. top_p, наоборот, работает только в thinking mode, и его эффективный диапазон — 0.95–1.0: значение ниже 0.95 трактуется как 0.95. В non-thinking top_p фиксирован на 1.0 и игнорируется.
tool_choice: "required" и выбор конкретной функции в thinking mode дают HTTP 400. Если инструменты нужны в режиме рассуждений, оставляйте tool_choice в значении auto или none либо выключайте thinking.
Если в запросе есть tools, поле reasoning_content обязательно передавать назад во всех последующих запросах диалога — иначе ответ придёт с HTTP 400. Если tools в запросе нет, возвращать reasoning_content не нужно: поле игнорируется.
temperature(≤ 2, по умолчанию 1) — в thinking mode не действует.presence_penaltyиfrequency_penalty— устарели и не дают эффекта.top_p(≤ 1, по умолчанию 1) — только thinking, эффективно 0.95–1.0.tool_choice—requiredи конкретная функция недоступны: HTTP 400.reasoning_content— обязателен в истории диалога, пока в запросе присутствуютtools.
Многоходовой диалог
Официальный паттерн для диалога — возвращать в историю сообщение ассистента целиком. Тогда reasoning_content сохраняется автоматически, и при использовании инструментов не возникнет ошибки формата.
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["DEEPSEEK_API_KEY"],
base_url="https://api.deepseek.com",
)
messages = [{"role": "user", "content": "Какая гора самая высокая в мире?"}]
response = client.chat.completions.create(
model="deepseek-flash",
messages=messages,
)
# Сообщение возвращается в историю целиком — вместе с reasoning_content
messages.append(response.choices[0].message)
messages.append({"role": "user", "content": "А вторая по высоте?"})
second = client.chat.completions.create(model="deepseek-flash", messages=messages)
print(second.choices[0].message.content)
Расход токенов и стоимость
Токены рассуждения тарифицируются как токены вывода: их количество приходит в usage.completion_tokens_details.reasoning_tokens. Для задач, где решение не требуется — классификация, извлечение полей, короткие ответы по шаблону, — thinking имеет смысл выключать: ответ станет дешевле и быстрее. Для арифметики, анализа кода и многошаговых задач режим рассуждений, наоборот, обычно улучшает результат.
Нужен API-ключ сегодня
Регистрация по email или Telegram занимает пару минут, оплата идёт в рублях, VPN не нужен. Один ключ работает и с DeepSeek, и с другими моделями.
Читайте также
-
JSON и инструменты
Вызов функций, разбор
tool_callsи обязательный возвратreasoning_contentв цикле. -
Модели и параметры
Какие модели принимает API, чем отличаются
deepseek-flashиdeepseek-v4-pro, где доступен vision. -
Стриминг и токены
Как читать поток SSE и считать стоимость запроса по полям
usage. - Примеры на Python Готовые скрипты с OpenAI SDK: чат, стриминг, инструменты.