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

Чтобы получить чистую 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 о том, что нужно захватить и включить при сообщении о проблеме.