Режим размышлений: когда модели нужно подумать

Урок 3 из 12 курса «DeepSeek на практике»: неофициальный курс AI University о DeepSeek. Этот урок бесплатный.

Когда вы задаёте DeepSeek вопрос, требующий логики, модель не обязана отвечать сразу. Она может сначала «подумать про себя» и только затем выдать финальный ответ. Это и есть режим размышлений: отдельный этап рассуждения перед ответом, который виден в поле reasoning_content. В этом уроке разберём, как этот режим включается и настраивается, какие параметры при нём работают иначе, как передавать рассуждение между ходами диалога и когда его выгоднее вовсе выключить. После урока вы сможете осознанно управлять глубиной размышления модели и не платить за то, что вам не нужно.

Неофициальный курс AI University. Тексты, примеры и задания написаны нашей командой по открытой документации DeepSeek на 03.10.2026; курс не связан с DeepSeek и не одобрен ею. Модели и цены меняются, сверяйтесь с документацией.

Что происходит внутри модели, когда она «думает»

В обычном режиме языковая модель генерирует ответ токен за токеном, опираясь только на то, что уже написала. Если задача требует нескольких шагов рассуждения, модель рискует зафиксировать ошибку на первом же шаге и дальше честно развивать её.

Режим размышлений устроен иначе. Перед тем как сформировать финальный ответ, модель пишет цепочку рассуждений: проговаривает условия задачи, перебирает варианты, проверяет промежуточные выводы. Это похоже на черновик, который человек пишет перед чистовым решением задачи по математике. Только после этого черновика модель формулирует содержательный ответ, который вы видите в поле content.

Такой подход заметно повышает точность там, где важна последовательная логика: математика, составление и отладка кода, многошаговые логические задачи, точный подсчёт объектов в тексте. Модель, которая «подумала вслух», реже путается в деталях и реже делает арифметические ошибки.

Цена за это ожидаема. Рассуждение само по себе состоит из токенов, и чем длиннее цепочка размышлений, тем больше токенов модель генерирует перед тем, как вы увидите ответ. Токены рассуждения оплачиваются как выходные, то есть по той же ставке, что и финальный текст ответа. На 03.10.2026 для deepseek-flash вывод стоит 1.2 доллара за миллион токенов в пиковые часы и 0.6 доллара вне пика, для deepseek-v4-pro 3.96 и 1.98 доллара соответственно. Длинное размышление на сложной задаче может легко занять в несколько раз больше токенов, чем сам ответ, и ощутимо увеличить и время ожидания, и счёт.

Поэтому режим размышлений не универсальный рубильник «включить ум», а инструмент, который стоит применять осознанно: там, где цена ошибки выше цены лишних токенов.

Уровни усилия: low, high, max

Размышление можно сделать короче или длиннее с помощью параметра reasoning_effort, который принимает значения low, high и max. По умолчанию, если вы вообще не трогаете этот параметр, режим размышлений включён, и эффективный уровень усилия равен high.

Разница между уровнями в объёме и глубине цепочки рассуждений: low даёт короткое размышление для несложных задач, high подходит для большинства практических случаев, max включает самое длинное и тщательное рассуждение для действительно трудных задач, где важна каждая проверка.

Полезно знать: если вы по привычке (например, из других API) передадите значение вроде medium или minimal, запрос не сломается, но DeepSeek сам сопоставит его с одним из трёх реальных уровней. Условно говоря, minimal и low сведутся к low, medium, high и xhigh сведутся к high, а max и ultra сведутся к max. То есть реальных градаций ровно три, остальные имена это просто синонимы для удобства совместимости с другими форматами.

В формате OpenAI SDK уровень задаётся так:

from openai import OpenAI
import os

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": "Докажите, что сумма углов треугольника равна 180 градусам"}],
    reasoning_effort="max",
    extra_body={"thinking": {"type": "enabled"}},
)

Обратите внимание, что reasoning_effort передаётся как обычный именованный аргумент, а параметр thinking, который включает или выключает режим целиком, нужно передавать через extra_body, потому что он не входит в стандартный набор параметров OpenAI SDK.

Параметры, которые ведут себя иначе в режиме размышлений

В режиме размышлений часть привычных параметров генерации перестаёт работать так, как вы ожидаете.

temperature, presence_penalty и frequency_penalty в этом режиме не действуют вовсе. Если вы их передадите, ошибки не будет: запрос пройдёт нормально ради совместимости со старым кодом, но на результат эти значения никак не повлияют. Это стоит помнить, если вы переносите код, написанный для обычного режима, и ожидаете от размышляющей модели той же управляемости случайностью ответа.

top_p ведёт себя иначе: в режиме размышлений он работает, но только в диапазоне от 0.95 до 1.0. Если вы укажете значение ниже 0.95, система всё равно применит 0.95. В обычном режиме без размышлений top_p вовсе фиксирован на 1.0, и переданное вами значение игнорируется.

Практический вывод: тонкая настройка случайности и разнообразия ответа, к которой вы могли привыкнуть в режиме без размышлений, здесь почти не работает. Если нужен контроль над стилем и вариативностью текста, логичнее делать это промптом или выключать размышления там, где они не требуются по существу задачи.

Куда девается рассуждение и нужно ли передавать его обратно

Цепочка рассуждений возвращается в ответе API отдельным полем reasoning_content, на том же уровне, что и обычное поле content в объекте message. Это значит, что у вас есть доступ и к рассуждению, и к финальному ответу по отдельности, и вы решаете сами, показывать ли рассуждение пользователю, логировать его для отладки или просто отбрасывать.

Главный практический вопрос: нужно ли при следующем ходе диалога передавать reasoning_content обратно в API вместе с историей сообщений. Ответ зависит от того, используете ли вы инструменты (tools) в этом запросе.

Если запрос не содержит параметра tools, то есть это обычный диалог без вызова функций, передавать reasoning_content обратно не нужно. Даже если вы по ошибке передадите его, API просто проигнорирует это поле и не включит рассуждение прошлого хода в контекст. Каждый ход диалога размышляет заново, опираясь только на видимый текст предыдущих сообщений.

Если же запрос содержит параметр tools, ситуация прямо противоположная: reasoning_content всех предыдущих ходов обязательно нужно передавать обратно в API, причём для всех ходов, даже тех, где модель не делала вызов инструмента. Это нужно, чтобы модель могла продолжать уже начатую цепочку рассуждений между несколькими вызовами инструментов в рамках одной задачи. Если не передать reasoning_content в таком сценарии, API вернёт ошибку 400. Подробнее работа с инструментами и правильная передача сообщений разбирается в уроке про tool calls, здесь важно просто запомнить это правило.

Удобный приём для обычного многоходового диалога без инструментов: можно добавлять в список сообщений не вручную собранный словарь, а напрямую весь объект response.choices[0].message, как он пришёл от API. Там уже есть все нужные поля, включая content и reasoning_content, и в сценарии без инструментов лишнее поле просто не помешает, а в сценарии с инструментами окажется кстати.

Когда размышления стоит выключать

Режим размышлений хорош не всегда, и для части задач его стоит сознательно отключать параметром extra_body={"thinking": {"type": "disabled"}}.

Классификация текста, разметка тональности, извлечение сущностей по готовому шаблону обычно не требуют многошаговой логики, модель справляется с ними и без размышления, а размышление только добавляет задержку и токены.

Короткие фактические ответы и справочные вопросы, где не нужно ничего доказывать или вычислять, тоже не выигрывают от размышления.

Режим FIM, дополнение текста по контексту слева и справа, вообще не работает вместе с режимом размышлений: это два взаимоисключающих способа генерации. Подробности о самом FIM стоит смотреть в документации DeepSeek, но уже сейчас стоит запомнить, что совмещать его с размышлением нельзя.

Массовые дешёвые задачи, когда один и тот же простой запрос нужно прогнать через тысячи записей, это как раз случай, где экономия на токенах размышления напрямую переходит в экономию денег и времени. Если задача по сути одна и та же и не требует индивидуального анализа, выключение размышления может в разы сократить и стоимость, и время обработки всего массива.

Общее правило простое: включайте размышление, когда в задаче есть логическая цепочка, которую легко сломать поспешным ответом, и выключайте там, где ответ очевиден сразу или где важна скорость и минимальная цена при большом объёме запросов.

Пример кода: читаем рассуждение отдельно от ответа

Ниже пример, который делает запрос в режиме размышлений, печатает рассуждение и ответ по отдельности, а затем продолжает диалог вторым вопросом без передачи 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": "Что больше: 9.11 или 9.8? Объясните кратко."}]

response = client.chat.completions.create(
    model="deepseek-flash",
    messages=messages,
    reasoning_effort="high",
    extra_body={"thinking": {"type": "enabled"}},
)

reasoning = response.choices[0].message.reasoning_content
answer = response.choices[0].message.content

print("Рассуждение модели:")
print(reasoning)
print("\nФинальный ответ:")
print(answer)

# Сколько токенов ушло на весь ответ, включая рассуждение
print("\nИспользование токенов:")
print(response.usage)

# Второй ход: без tools, поэтому reasoning_content передавать обратно не нужно
messages.append(response.choices[0].message)
messages.append({"role": "user", "content": "Расположите числа 0.3, 1/3 и 0.33 по возрастанию и объясните почему."})

response2 = client.chat.completions.create(
    model="deepseek-flash",
    messages=messages,
    reasoning_effort="high",
    extra_body={"thinking": {"type": "enabled"}},
)

print("\nОтвет на второй вопрос:")
print(response2.choices[0].message.content)

Если нужно полностью выключить размышление, скажем, для быстрой классификации, запрос выглядит так:

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": "Определите тональность отзыва: 'Доставили вовремя, но коробка помялась.'"}],
    extra_body={"thinking": {"type": "disabled"}},
)

print(response.choices[0].message.content)

Обратите внимание, что при отключённом размышлении поле reasoning_content в ответе либо отсутствует, либо пустое, а параметр reasoning_effort в этом случае не имеет смысла передавать.

Попробуйте сами

  1. Возьмите одну и ту же нетривиальную логическую задачу (например, задачу на многошаговую арифметику или сравнение нескольких чисел с разным числом знаков) и отправьте её дважды: с reasoning_effort="low" и с reasoning_effort="max". Сравните содержимое reasoning_content по объёму и содержание финальных ответов. Критерий результата: вы видите заметную разницу в длине рассуждения и можете сказать, изменился ли сам ответ.

  2. Выведите на печать объект response.usage целиком для обоих запросов из первого задания и найдите в нём числа, относящиеся к количеству токенов, потраченных на рассуждение и на весь ответ в целом. Критерий результата: вы можете назвать, во сколько раз запрос с max дороже запроса с low по количеству выходных токенов.

  3. Попробуйте один и тот же простой классификационный запрос (например, определение тональности короткого текста) один раз с включённым размышлением на уровне high и один раз с thinking отключённым. Сравните время ответа и финальный текст. Критерий результата: вы убедились, что для такой задачи отключение размышления не ухудшает качество ответа, но ускоряет его.

Итоги

  • Режим размышлений заставляет модель сначала написать цепочку рассуждений в reasoning_content и только потом финальный ответ в content, что повышает точность на логических и вычислительных задачах, но увеличивает время и стоимость.
  • Глубина размышления задаётся параметром reasoning_effort с тремя реальными уровнями low, high и max, а по умолчанию действует high; другие присылаемые значения автоматически сопоставляются с этими тремя.
  • В режиме размышлений не действуют temperature, presence_penalty и frequency_penalty, а top_p работает только в диапазоне от 0.95 до 1.0.
  • Передавать reasoning_content обратно в API нужно только при наличии параметра tools в запросе; в обычном диалоге без инструментов это поле игнорируется API, даже если вы его отправите.
  • Размышление стоит отключать для классификации, коротких фактических ответов, режима FIM и массовых дешёвых задач, где логическая глубина не нужна, а важны скорость и экономия токенов.
  • Включение и выключение режима управляется параметром thinking внутри extra_body, а не стандартными аргументами OpenAI SDK.

Документация DeepSeek

Полезные гиды