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

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

Парсинг tool call (Dynamo)

С помощью tool calling можно подключать Dynamo к внешним инструментам и сервисам. Если передать список доступных functions, Dynamo сможет сформировать arguments для соответствующих functions, которые затем можно выполнить, чтобы дополнить prompt релевантной внешней информацией.

Tool calling управляется через параметры запроса tool_choice и tools.

На этой странице перечислены имена parser для стандартного нативного пути Dynamo. Если Dynamo не показывает parser для вашей model, см. Tool Call Parsing (Engine Fallback).

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

Чтобы включить эту возможность, при запуске backend worker нужно задать следующий flag

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

Если стандартный chat template вашей model не поддерживает tool calling, но сама model поддерживает его, можно задать custom chat template для каждого worker с помощью python -m dynamo.<backend> --custom-jinja-template </path/to/template.jinja>.

Если ваша model также выводит reasoning content, который нужно отделять от обычного output, см. Reasoning Parsing (Dynamo) для поддерживаемых значений --dyn-reasoning-parser.

Поддерживаемые parser для tool call​

В таблице ниже перечислены текущие tool call parser, поддерживаемые в реестре Dynamo. Столбец Upstream name показывает, где имя parser в vLLM или SGLang отличается от Dynamo - это важно при использовании --dyn-chat-processor vllm или sglang (см. Tool Call Parsing (Engine Fallback)). Пустой столбец upstream означает, что одно и то же имя работает везде. Dynamo-only означает, что для этого формата upstream parser отсутствует.

Имя parserМоделиИмя upstreamПримечания
kimi_k2Kimi K2 Instruct/Thinking, Kimi K2.5Используйте вместе с --dyn-reasoning-parser kimi или kimi_k25
minimax_m2MiniMax M2 / M2.1vLLM: minimaxXML <minimax:tool_call>
deepseek_v4DeepSeek V4 Pro / FlashvLLM: deepseek_v4; SGLang: deepseekv4Теги DSML (<|DSML|tool_calls>...). Алиасы: deepseek-v4, deepseekv4
deepseek_v3DeepSeek V3, DeepSeek R1-0528+SGLang: deepseekv3Специальные Unicode markers
deepseek_v3_1DeepSeek V3.1Только DynamoРазделители JSON
deepseek_v3_2DeepSeek V3.2+Только DynamoТеги DSML (<|DSML|function_calls>...)
qwen3_coderQwen3.5, Qwen3-CoderXML <tool_call><function=...>
glm47GLM-4.5, GLM-4.7Только DynamoXML <arg_key>/<arg_value>
nemotron_deciNemotron-Super / -Ultra / -Deci, Llama-Nemotron-Ultra / -SuperТолько Dynamo<TOOLCALL> JSON
nemotron_nanoNemotron-NanoТолько DynamoАлиас для qwen3_coder
gemma4Google Gemma 4 (thinking models)vLLM: gemma4Нестандартная non-JSON grammar со строковыми delimiters <|"|> и маркерами <|tool_call>...<tool_call|>. Алиасы: gemma-4. Используйте вместе с --dyn-reasoning-parser gemma4 и --custom-jinja-template examples/chat_templates/gemma4_tool.jinja
harmonygpt-oss-20b / -120bТолько DynamoФормат Harmony channel
hermesQwen2.5-*, QwQ-32B, Qwen3-Instruct, Qwen3-Think, NousHermes-2/3vLLM: qwen2_5; SGLang: qwen25 (для моделей Qwen)<tool_call> JSON
phi4Phi-4, Phi-4-mini, Phi-4-mini-reasoningvLLM: phi4_mini_jsonfunctools[...] JSON
pythonicLlama 4 (Scout / Maverick)Синтаксис tool в виде списка Python
llama3_jsonLlama 3 / 3.1 / 3.2 / 3.3 Instruct<|python_tag|> syntax tool
mistralMistral / Mixtral / Mistral-Nemo, Magistral[TOOL_CALLS]...[/TOOL_CALLS]
jambaJamba 1.5 / 1.6 / 1.7Только Dynamo<tool_calls> JSON
default(fallback)Только DynamoПустая JSON config (без start/end tokens). Для production лучше использовать parser, привязанный к конкретной model.

Для thinking models Kimi K2.5 используйте --dyn-tool-call-parser kimi_k2 вместе с --dyn-reasoning-parser kimi_k25 из Reasoning Parsing (Dynamo), чтобы и блоки <think>, и tool calls корректно разбирались из одного и того же ответа.

Примеры​

Запуск 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

Пример запроса tool calling​

curl -s http://localhost:8000/v1/chat/completions \
-H 'Content-Type: application/json' \
-d '{
"model": "Qwen/Qwen3.5-4B",
"messages": [
{"role": "user", "content": "What is the weather in San Francisco and New York?"}
],
"tools": [{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get the current weather for a location.",
"parameters": {
"type": "object",
"properties": {"location": {"type": "string"}},
"required": ["location"]
}
}
}],
"tool_choice": "auto"
}'

Dynamo извлекает tool calls из output model и показывает их как совместимые с OpenAI tool_calls записи в response:

{
"id": "chatcmpl-b415caad-9be0-4d9e-ac6d-9d23bfe57703",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": null,
"reasoning_content": "The user is asking about the weather in two cities: San Francisco and New York. I need to call the get_weather function for each city. I'll make two separate function calls to get the weather information for both locations.\n",
"tool_calls": [
{
"id": "call-56223a95-3d14-4433-a94e-011f106c0e40",
"type": "function",
"function": {
"name": "get_weather",
"arguments": "{\"location\":\"San Francisco\"}"
}
},
{
"id": "call-d5b5772b-6b0c-4120-ad01-623278a937fe",
"type": "function",
"function": {
"name": "get_weather",
"arguments": "{\"location\":\"New York\"}"
}
}
]
},
"finish_reason": "tool_calls",
"logprobs": null
}
],
"created": 1778653281,
"model": "Qwen/Qwen3.5-4B",
...
}

Если tool call возвращается неверно, добавьте "logprobs": true в один repro request и поделитесь response. См. Troubleshooting Tool Calls о том, что нужно захватить и включить при сообщении о проблеме.