Перейти к основному содержимому

Чтобы получить чистую Markdown-версию этой страницы, добавьте .md к этому URL. Полный индекс документации см. в https://docs.nvidia.com/dynamo/llms.txt. Полное содержимое, включая справочник API и примеры SDK, см. в https://docs.nvidia.com/dynamo/llms-full.txt.

Парсинг рассуждений (Dynamo)

Некоторые модели выводят reasoning или thinking отдельно от финального ответа. Dynamo может разделить этот вывод на reasoning_content и обычное содержимое ассистента, если настроить --dyn-reasoning-parser на backend worker'е.

На этой странице описаны имена parser'ов для default-пути Dynamo-native. Если для вашей модели в Dynamo нет parser'а, см. Reasoning Parsing (Engine Fallback).

Предварительные требования

Чтобы включить reasoning parsing, запустите backend worker с:

  • --dyn-reasoning-parser: выберите reasoning parser из списка ниже
# <backend> can be sglang, trtllm, vllm, etc. based on your installation
python -m dynamo.<backend> --help

Некоторым моделям нужны одновременно reasoning parser и tool call parser. Для поддерживаемых имён tool call parser'ов см. Tool Call Parsing (Dynamo).

Поддерживаемые reasoning parser'ы

В таблице ниже перечислены reasoning parser'ы, которые сейчас поддерживаются в registry Dynamo. В столбце Upstream name показано, где имя parser'а в vLLM или SGLang отличается от имени в Dynamo. Это важно при использовании --dyn-chat-processor vllm или sglang (см. Reasoning Parsing (Engine Fallback)). Если столбец upstream пустой, одно и то же имя работает везде. Dynamo-only означает, что upstream parser для этого формата отсутствует.

Parser'ы, помеченные force-reasoning, начинают выдавать reasoning content с первого токена без явного открывающего тега (<think> и т. п.). Для всех остальных открывающий тег должен присутствовать в выводе модели.

Имя parser'аМоделиUpstream nameForce-reasoningПримечания
kimi_k25Thinking-модели, совместимые по формату с Kimi K2.5 / Kimi K2.6Только DynamoДа<think>...</think> с force-reasoning
kimiKimi K2 Instruct / Thinking с Unicode-разделителямиТолько DynamoНет◁think▷...◁/think▷
minimax_append_thinkMiniMax M2 / M2.1Только DynamoНетНеявно добавляет открывающий <think>
deepseek_v4DeepSeek V4 Pro / FlashvLLM: deepseek_v4; SGLang: deepseek-v4Нет<think>...</think>. Алиасы: deepseek-v4, deepseekv4
deepseek_r1DeepSeek R1, DeepSeek V3.1, DeepSeek V3.2ДаЯвно указывайте для V3.1/V3.2 (без alias)
qwen3Qwen3.5, QwQ-32B, Qwen3-Think, Qwen3-CoderНет<think>...</think>
glm45GLM-4.5, GLM-4.7Только DynamoНетAlias для nemotron_deci. <think>...</think>
nemotron3Nemotron-3 / MinivLLM: nemotron_v3ДаAlias для deepseek_r1. Также принимает nemotron_v3
nemotron_deciNemotron-Super / -Ultra / -Deci, Llama-NemotronТолько DynamoНет<think>...</think>
nemotron_nanoNemotron-NanoТолько DynamoДаAlias для deepseek_r1
gemma4Google Gemma 4 (thinking-модели)vLLM: gemma4Нет<|channel>thought\n...<channel|> с удалением role label thought\n. Алиасы: gemma-4
gpt_ossgpt-oss-20b / -120bТолько DynamoНетФормат reasoning для Harmony channel
mistralMagistralДа[THINK]...[/THINK]
graniteЯзыковые модели IBM Granite 3.x / Granite 3.2НетHere's my thought process: / Here's my response:
step3Step-3 / Step-3-ReasoningТолько DynamoДа<think>...</think>
basicGeneric CoT-моделиТолько DynamoНетОбычный <think>...</think>

Типовые сочетания parser'ов

Некоторым моделям нужно настроить оба parser'а одновременно. Типовые сочетания:

  • openai/gpt-oss-*: --dyn-tool-call-parser harmony --dyn-reasoning-parser gpt_oss
  • deepseek-ai/DeepSeek-V4-*: --dyn-tool-call-parser deepseek_v4 --dyn-reasoning-parser deepseek_v4
  • zai-org/GLM-4.7: --dyn-tool-call-parser glm47 --dyn-reasoning-parser glm45
  • moonshotai/Kimi-K2.5* / выводы, совместимые с форматом Kimi K2.6: --dyn-tool-call-parser kimi_k2 --dyn-reasoning-parser kimi_k25
  • google/gemma-4-* thinking-модели: --dyn-tool-call-parser gemma4 --dyn-reasoning-parser gemma4 --custom-jinja-template examples/chat_templates/gemma4_tool.jinja
  • Qwen/Qwen3.5*: --dyn-tool-call-parser qwen3_coder --dyn-reasoning-parser qwen3
  • Выводы в стиле MiniMax M2.1: --dyn-tool-call-parser minimax_m2 --dyn-reasoning-parser minimax_append_think

Взаимодействие с tool calling

Reasoning parsing выполняется до парсинга tool call. Если модель выдаёт и reasoning content, и вызовы инструментов, настройте оба parser'а, чтобы Dynamo сначала отделил reasoning-текст, а затем распарсил tool call из оставшегося вывода assistant.

Примеры

Запуск frontend и backend Dynamo

# запуск backend worker (или dynamo.vllm)
python -m dynamo.sglang --model Qwen/Qwen3.5-4B --dyn-tool-call-parser qwen3_coder --dyn-reasoning-parser qwen3

# запуск frontend worker
python -m dynamo.frontend

Пример запроса с reasoning

curl -s http://localhost:8000/v1/chat/completions \
-H 'Content-Type: application/json' \
-d '{
"model": "Qwen/Qwen3.5-4B",
"messages": [{"role": "user", "content": "If a train leaves at 3pm going 60 mph and another leaves at 4pm going 80 mph, when does the second catch up?"}]
}'

Dynamo разделяет вывод модели так, чтобы chain-of-thought попадал в reasoning_content, а пользовательский ответ оставался в content:

{
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"reasoning_content": "The first train has a 1-hour head start at 60 mph, so it is 60 miles ahead at 4pm. The second train closes the gap at 80 - 60 = 20 mph. 60 / 20 = 3 hours after 4pm.",
"content": "The second train catches up at 7pm."
},
"finish_reason": "stop"
}
]
}