# vLLM reasoning parser: как отделить рассуждение от ответа

Источник: https://modelium.tech/zhurnal/vllm-reasoning-parser/

Если приложение показывает внутреннее рассуждение модели вместо ответа, reasoning parser vLLM помогает разделить эти части. Для DeepSeek-R1-Distill-Qwen-1.5B в документации указан `deepseek_r1`: после запуска проверяйте `choices[0].message.reasoning` и `choices[0].message.content` отдельно. Старое имя `reasoning_content` уже заменено на `reasoning`; этот инженерный пример не проверен запуском Modelium.

**Уровень: инженерный, не домашний рецепт.** Ниже путь для Linux с совместимой NVIDIA CUDA-видеокартой и установленным `uv`. Команды сверены с документацией vLLM на Git-ревизии `a5105db` и карточкой весов DeepSeek на ревизии `ad9f0ae`; Modelium не устанавливал пакет, не загружал веса и не запускал модель. Скачивание пакета и весов требует сети; локальный запрос после подготовки идёт на `127.0.0.1`, но это само по себе не доказательство полной офлайн-изоляции. [s1](#src-s1) [s2](#src-s2) [s5](#src-s5)

## Что получится и зачем нужен парсер?

Представьте локального помощника: ему дали заметку «Встреча в пятницу; Анна принесёт черновик» и попросили назвать поручение. Приложение должно показать короткий ответ пользователю, а не промежуточные размышления модели. **Reasoning parser** — функция сервера vLLM, которая разбирает специальный формат вывода поддерживаемой модели на два поля: `reasoning` для промежуточных шагов и `content` для финального ответа. Это разбор текста модели, а не проверка истинности её выводов. [s1](#src-s1)

В старых примерах встречается `reasoning_content`. В документации на указанной ревизии оно **переименовано в **`**reasoning**`. Если клиент по привычке читает старое имя, он может показать пустое поле, хотя модель вернула рассуждение. Исправить нужно и код клиента, а не только сервер. [s1](#src-s1)

## Что нужно подготовить?

Нужен Linux, Python 3.10–3.13 и NVIDIA GPU с CUDA compute capability не ниже 7.5; отдельно проверьте совместимость драйвера с выбранными колёсами PyTorch/CUDA. Установите `uv` по его официальной инструкции, если ещё не установлен. Пример использует конкретный репозиторий `deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B`, а не любую модель с названием DeepSeek. Авторы публикуют эти веса с MIT-лицензией и отдельно отмечают происхождение от Qwen2.5; условия исходной модели тоже следует читать перед повторным распространением. [s2](#src-s2) [s3](#src-s3) [s4](#src-s4) [s5](#src-s5)

Документация этой пары **не даёт универсального минимального объёма RAM, VRAM и свободного диска**: он зависит от сборки, формата весов, длины контекста и других расходов памяти. Не выводите объём видеопамяти из «1.5B» или размера файла. Сначала убедитесь, что базовый сервер vLLM для вашего GPU стартует; при нехватке памяти этот гайд не обещает исправления одной опцией. Windows без Linux/WSL и Mac здесь не рассматриваются. [s2](#src-s2) [s3](#src-s3) [s4](#src-s4)

## Как запустить один проверяемый путь?

- В терминале Linux установите `uv` по его документации, затем в отдельной рабочей папке выполните `uv venv --python 3.12 --seed`, `source .venv/bin/activate` и `uv pip install vllm --torch-backend=auto`. Дождитесь завершения установки без ошибок; `uv` должен подобрать совместимый вариант PyTorch по CUDA-драйверу. Это установка пакетов, а **не** проверка запуска модели. [s2](#src-s2) [s4](#src-s4)

- В этом окружении запустите `vllm serve deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B --reasoning-parser deepseek_r1 --host 127.0.0.1`. Именно эту пару модели и имени парсера даёт vLLM. Дождитесь сообщения о готовности сервера; первый запуск может загрузить веса через сеть. Адрес `127.0.0.1` ограничивает прослушивание текущим компьютером, но локальная программа с доступом к порту всё равно может обращаться к API. Не вставляйте сюда `qwen3` или `gemma4` только потому, что они встречаются в списке поддерживаемых парсеров. [s1](#src-s1) [s2](#src-s2)

- Во втором терминале на **том же компьютере** откройте `http://127.0.0.1:8000/v1/models` в браузере: в ответе JSON должна появиться загруженная модель. Если страницы нет, вернитесь к логу сервера; пока API не отвечает, разбор рассуждения тестировать рано. Список моделей подтверждает готовность API, но не генерацию ответа. [s2](#src-s2)

- Для учебного запроса выполните `curl -sS http://127.0.0.1:8000/v1/chat/completions -H 'Content-Type: application/json' -d '{"model":"deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B","messages":[{"role":"user","content":"Заметка: Встреча в пятницу; Анна принесёт черновик. Назови поручение и срок, не придумывай дату."}],"stream":false}'`. В полученном JSON проверьте отдельно `choices[0].message.content` (ожидается поручение Анны принести черновик к пятнице без выдуманной даты) и `choices[0].message.reasoning` (может содержать промежуточный текст). Ожидаемое содержание — **критерий сверки**, а не якобы фактический ответ модели у Modelium. Если вывод обрывается до окончания рассуждения, повторите тест с достаточным бюджетом генерации и проверьте `finish_reason`; пустое поле не всегда означает неверный парсер. [s1](#src-s1) [s2](#src-s2)

## Если два поля не появились

Проверьте точное имя репозитория, успешную загрузку весов, лог сервера и соответствие `--reasoning-parser deepseek_r1` модели. Затем посмотрите сырой JSON: не читайте `reasoning_content` из старого примера. Рассуждение доступно для поддерживаемых моделей в chat endpoint; произвольная модель или выключенный ею режим рассуждения не обязаны давать непустой `reasoning`. Если `content` сомнителен, сверьте поручение и срок с исходной заметкой — парсер не исправляет фактические ошибки. [s1](#src-s1) [s2](#src-s2)

Не публикуйте сырые промежуточные рассуждения в пользовательском интерфейсе без отдельного решения о приватности. Для первого запуска и проверки доступности сервера откройте [базовый гайд vLLM](/zhurnal/vllm/); разделение рассуждения — следующий шаг для уже работающего локального API. [s1](#src-s1)

## Источники

1. [vLLM Reasoning Outputs — поля, поддерживаемые парсеры и пример DeepSeek](https://raw.githubusercontent.com/vllm-project/vllm/a5105dba05616d74dde5d40267fc500a4422b3db/docs/features/reasoning_outputs.md) — получено 2026-10-07
2. [vLLM Quickstart — установка uv, запуск и локальный chat API](https://raw.githubusercontent.com/vllm-project/vllm/a5105dba05616d74dde5d40267fc500a4422b3db/docs/getting_started/quickstart.md) — получено 2026-10-07
3. [vLLM GPU installation — ОС и версия Python](https://raw.githubusercontent.com/vllm-project/vllm/a5105dba05616d74dde5d40267fc500a4422b3db/docs/getting_started/installation/gpu.md) — получено 2026-10-07
4. [vLLM NVIDIA CUDA — требования GPU и отдельное окружение](https://raw.githubusercontent.com/vllm-project/vllm/a5105dba05616d74dde5d40267fc500a4422b3db/docs/getting_started/installation/gpu.cuda.inc.md) — получено 2026-10-07
5. [DeepSeek-R1-Distill-Qwen-1.5B — карточка автора](https://huggingface.co/deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B/blob/ad9f0ae0864d7fbcd1cd905e3c6c5b069cc8b562/README.md) — получено 2026-10-07
