vLLM Tool Calling: Parser je Modellfamilie, tool_choice und Strict-Modus in vLLM 0.32
Eurokommerz, Wien, seit 2006: Private AI/ML · IT Managed Services · Enterprise Training · KI-Hardware & Software
- vLLM wandelt Tool-Aufrufe eines Modells nur dann in
tool_callsim OpenAI-Format um, wenn der Server mit--enable-auto-tool-choiceund dem--tool-call-parserder Modellfamilie läuft, etwaopenaifür gpt-oss undhermesfür Qwen2.5 und Qwen3 - Mit einem benannten Tool oder
tool_schränkt vLLM die Dekodierung ein, und die Dokumentation verspricht „a validly-parsable function call - not a high-quality one“choice: "required" - Im Modus
auto, den Agenten nutzen, wendet vLLM 0.32.0 keine Grammatik an, außer ein Tool setztstrict: trueoder der Server setzt--tool-strict-levelauffunctionoderparameter - Reasoning-Modelle brauchen zusätzlich einen
--reasoning-parser; vLLM liest Tool-Aufrufe nur aus dem Antwortinhalt, nicht aus dem Reasoning - Ein Parser-Fehler kann eine Sicherheitslücke sein: Advisory GHSA-79j6-g2m3-jgfw (CVE-2025-9141) betraf Codeausführung über den Parser
qwen3_coderund wurde in vLLM 0.10.1.1 behoben
Geliefert von Eurokommerz: KI-Server, auf Bestellung gebaut Konfiguration anfragen →
Was vLLM für Tool-Aufrufe braucht
Ein Modell gibt einen Tool-Aufruf als Text in seinem eigenen Format aus: JSON in Tags bei Modellen im Hermes-Stil, Python-ähnliche Aufrufe bei Llama 4, das Harmony-Format bei gpt-oss. Der OpenAI-kompatible Server von vLLM überträgt diesen Text nur dann in das Feld tool_calls der Antwort, wenn Sie ihn mit --enable-auto-tool-choice und dem passenden --tool-call-parser der Modellfamilie starten. Ohne den richtigen Parser landet der Aufruf als Text in content, und das Agenten-Framework sieht keinen Tool-Aufruf.
Parsebare Aufrufe erzwingt vLLM nur mit einem benannten Tool, mit tool_ oder im Strict-Modus; im Standardmodus auto wird der Text des Modells so gelesen, wie er kommt.
Alles Folgende stammt aus der Tool-Calling-Dokumentation von vLLM für Release 0.32.0 (Seite vom 8. Oktober 2026) und aus der Entwicklungsdokumentation vom 23. Oktober 2026, gelesen am 24. Oktober 2026, sofern keine andere Quelle genannt ist. vLLM veröffentlicht etwa alle zwei Wochen ein Release, und Parsernamen und Standards ändern sich mit ihnen; prüfen Sie daher die Seite des Releases, das Sie festlegen.
Drei Server-Flags steuern das Verhalten. --enable-auto-tool-choice lässt das Modell selbst entscheiden, wann es ein Tool aufruft; --tool-call-parser nennt den Parser; --chat-template ist optional und verweist auf ein Template, das „handles tool-role messages and assistant-role messages“ mit Tool-Aufrufen, für Checkpoints, deren eigenes Template das nicht tut. Der Schnellstart der Dokumentation betreibt meta-llama/Llama-3.1-8B-Instruct mit --tool-call-parser llama3_json und dem Template tool_ aus den Beispielen von vLLM. Ein viertes Flag, --tool-parser-plugin, registriert einen selbst geschriebenen Parser.
Welcher Parser für welche Modellfamilie
Der Parser richtet sich nach der Modellfamilie, nicht nach der Größe. Die Dokumentation von vLLM nennt etwa dreißig Parser; die Tabelle zeigt die Familien, die Unternehmen am häufigsten auf unseren Servern betreiben, mit den Hinweisen der Dokumentation.
| MODELLFAMILIE | PARSER | HINWEISE |
|---|---|---|
| gpt-oss-20b, gpt-oss-120b | openai | Harmony-Format |
| Qwen2.5, QwQ-32B | hermes | in der vLLM-Doku |
| Qwen3 | hermes | laut Function-Calling-Leitfaden von Qwen |
| Qwen3-Coder 480B und 30B | qwen3_xml | seit 0.32.0 Alias von qwen3_coder |
| Llama 3.1, 3.2 | llama3_json | keine parallelen Aufrufe; Template nötig |
| Llama 4 | llama4_pythonic | parallele Aufrufe möglich |
| Mistral 7B Instruct v0.3 | mistral | schwach bei parallelen Aufrufen |
| DeepSeek-V3, R1 | deepseek_v3 | Template je Checkpoint |
| DeepSeek-V3.1 | deepseek_v31 | deepseekv31.jinja |
| DeepSeek-V4-Flash | deepseek_v4 | aus dem Rezept von vLLM |
| Kimi K2 Instruct | kimi_k2 | |
| GLM-4.5, 4.6 | glm45 | |
| GLM-4.7, GLM-5.3 | glm47 | GLM-5.3 aus dem Rezept von vLLM |
| Gemma 4 | gemma4 | aus dem Rezept von vLLM |
| IBM Granite 4.0 | granite4 | parallele Aufrufe möglich |
Tool-Calling-Dokumentation von vLLM, Release 0.32.0 (8. Oktober 2026) und Entwicklungsversion (23. Oktober 2026), gelesen am 24. Oktober 2026. Qwen3 aus dem Function-Calling-Leitfaden von Qwen; DeepSeek-V4-Flash, GLM-5.3 und Gemma 4 aus den Rezepten von vLLM sowie qwen3_coder aus der Karte von Qwen3-Coder-Next, wie in unserem Leitfaden zur Wahl eines offenen LLM für einen Unternehmensassistenten und auf unserer Seite zu Servern für Coding-Agenten zitiert.
Drei Einträge brauchen eine Erläuterung. Bei gpt-oss liest der Parser openai das Harmony-Format, auf das die Modelle trainiert sind. Für Qwen3-Coder nennt die Dokumentation qwen3_xml, während die Modellkarten, auch die von Qwen3-Coder-Next, vLLM mit qwen3_coder starten; laut Release Notes von 0.32.0 ist qwen3_xml ein Alias von qwen3_coder (Pull Request 60136), ab diesem Release wählen also beide Namen denselben Parser. Für Llama 3.1 und 3.2 warnt die Dokumentation, „Parallel tool calls are not supported for Llama 3“, und das Modell könne Arrays als Strings serialisieren; ein als Liste typisiertes Argument kommt dann als "[1, 2]" an. Sie warnt außerdem, „Llama's smaller models frequently fail to emit tool calls in the correct format“ mit dem Parser pythonic.
Release 0.32.0 hat einen Parser hf eingeführt, der das Antwort-Template aus der tokenizer_ des Checkpoints liest. Laut Entwicklungsdokumentation „cannot be combined with other reasoning or tool call parsers“ er und lehnt Strict-Tools, erzwungene oder benannte Tool-Wahl und parallel_ ab; er taugt eher für einen schnellen Test als für einen Agenten im Betrieb.
Wir bauen GPU-Server und richten offene Modelle mit vLLM darauf ein; senden Sie uns die geplante Modellfamilie und die Tools, die Ihre Agenten aufrufen sollen, und unser Team antwortet mit einer Konfiguration und den Einstellungen für Parser und Template als Ausgangspunkt.
tool_choice: auto, required, benannt und none
Das Feld tool_choice der Anfrage legt fest, ob das Modell ein Tool aufrufen darf, muss oder nicht darf, und damit auch, ob vLLM die Ausgabe einschränkt.
| TOOL_CHOICE | WAS DAS MODELL TUT | EINGESCHRÄNKT |
|---|---|---|
auto | entscheidet selbst | nur mit Strict-Einstellungen |
required | ein oder mehrere Aufrufe | ja, Structured Outputs |
| benannte Funktion | ruft diese Funktion auf | ja, Structured Outputs |
none | antwortet nur mit Text | nein |
Tool-Calling-Dokumentation von vLLM, Release 0.32.0, gelesen am 24. Oktober 2026; required ab vLLM 0.8.3.
Bei einer benannten Funktion „vLLM will use structured outputs to ensure the response matches the tool parameter object“, und die Dokumentation warnt vor „several seconds of latency (or more)“ beim ersten Aufruf, während die Grammatik kompiliert. Mit required muss das Modell einen oder mehrere Tool-Aufrufe erzeugen, wie viele, hängt von der Anfrage ab. Beides schränkt nur die Syntax ein: Die Dokumentation sagt ausdrücklich, Sie erhalten „a validly-parsable function call - not a high-quality one“. Das Modell kann weiterhin die falsche Funktion wählen oder einen Argumentwert erfinden.
auto ist das, was Agenten-Frameworks senden, und dort liegt die Schwachstelle. In Release 0.32.0 gilt: „the model generates tool calls without any grammar and malformed markup can leak into the response“, sofern keine Strict-Einstellungen greifen. Mit none gehen die Tool-Definitionen standardmäßig trotzdem in den Prompt; --exclude-tools-when-tool-choice-none entfernt sie und spart Prompt-Token bei Aufrufen, die keine Tools brauchen.
Strict-Modus: strict: true und --tool-strict-level
Der Strict-Modus bringt eingeschränkte Dekodierung in den Modus auto. Es gibt zwei Schalter, einen je Tool in der Anfrage und einen für den ganzen Server.
Je Tool. Eine Tool-Definition mit strict: true legt das Argumentschema dieses Tools fest; die Dokumentation betont, „a tool that omits strict keeps its arguments unconstrained“, auch wenn ein anderes Tool derselben Anfrage strikt ist. Sie empfiehlt den Strict-Schema-Stil von OpenAI: additionalProperties: false, jedes Feld als erforderlich gelistet, optionale Felder als nullable typisiert. Dieselbe Seite vermerkt: „Most OpenAI-compatible clients and agent frameworks never set strict on their tools“; prüfen Sie also, was Ihr Framework sendet, bevor Sie sich darauf verlassen.
Je Server. --tool-strict-level kennt drei Werte. auto, der Server-Standard in 0.32.0, folgt der Tool-Wahl der Anfrage und dem strict-Flag jedes Tools. function soll „Constrain the tool-call envelope (markup and the function name) for every request with tools“. parameter soll „Additionally pin argument schemas for every tool, as if every tool had strict: true.“ Die Umgebungsvariable VLLM_ steht standardmäßig auf true; auf false gesetzt, schaltet sie diese Einschränkungen unabhängig von strict ab.
Die Entwicklungsdokumentation vom 23. Oktober 2026 ergänzt Standards je Parser: Ist die Option nicht gesetzt, „the tool parser's default level applies: function for glm47, auto for the other parsers“, und --tool-strict-level auto hebt das auf. Die Seite zu 0.32.0 nennt keinen solchen Parser-Standard; rechnen Sie also mit einem späteren Release und prüfen Sie die Dokumentation der Version, die Sie betreiben.
Welche Stufe passt, hängt von den Tools ab. function verhindert fehlerhaftes Markup und erfundene Funktionsnamen, ohne das Modell stark einzuschränken. parameter zwingt zusätzlich jedes Argument in sein Schema und passt zu internen APIs mit festen Schemata. Testen Sie beide Stufen an einer Stichprobe echter Agentenaufgaben und zählen Sie falsche Tool-Wahl, falsche Argumente und als Text gelieferte Aufrufe.
Reasoning-Modelle und Tool-Aufrufe
Modelle, die vor der Antwort nachdenken, etwa Qwen3 im Thinking-Modus oder DeepSeek-R1, brauchen neben dem Tool-Parser einen Reasoning-Parser, gesetzt mit --reasoning-parser. Die Reasoning-Dokumentation von vLLM für 0.32.0 (vom 1. Oktober 2026) nennt Namen wie deepseek_r1, qwen3, glm45, gemma4 und step3p5 und hält fest: „tool calling only parses functions from the content field, not from the reasoning“. Einen Aufruf, den das Modell noch während des Nachdenkens schreibt, führt vLLM also nicht als Tool-Aufruf aus. Die Entwicklungsdokumentation zeigt ein kombiniertes Beispiel für MiMo-Modelle: --tool-call-parser mimo, --reasoning-parser mimo und --enable-auto-tool-choice mit dem Chat-Template des Checkpoints.
Eingeschränkte Dekodierung und Reasoning beeinflussen sich. Laut Reasoning-Seite prüft die Structured-Output-Engine über das Token am Ende des Reasonings, ob Reasoning vorliegt, und die Seite zu Structured Outputs warnt, dass bei Qwen3 Coder mit Reasoning „structured outputs might become disabled if the reasoning content does not get parsed“; Abhilfe ist die Option enable_ von --structured-outputs-config. Scheitern strikte Aufrufe nur bei eingeschaltetem Thinking, prüfen Sie zuerst den Reasoning-Parser.
Structured Outputs ohne Tools
Viele „Tool“-Anwendungen sind Extraktionsaufgaben: ein Ticket hinein, ein JSON-Objekt mit Kategorie und Priorität heraus. Dafür braucht es keinen Tool-Parser. Die Structured Outputs von vLLM, mit den Backends xgrammar oder guidance, die je Anfrage automatisch gewählt werden, schränken eine Antwort auf ein JSON-Schema ein, über response_format mit json_schema oder über das Feld structured_ mit json, regex, choice, grammar oder structural_tag. Die älteren Felder guided_json wurden in vLLM 0.12.0 entfernt. Für ein festes Ausgabeformat ist das einfacher und verlässlicher als ein auto-Aufruf mit einem einzigen Tool, und es funktioniert mit jedem Modell, auch einem ohne Tool-Parser.
Wenn Tool-Aufrufe als Text ankommen
Aus der Dokumentation ergeben sich fünf Ursachen, und jede lässt sich am Server prüfen.
- Keine automatische Tool-Wahl. Ohne
--enable-auto-tool-choicekönnenauto-Anfragen keine Tool-Aufrufe liefern. Prüfen Sie die Kommandozeile oder die Container-Definition, mit der der Server gestartet wurde. - Falscher Parser. Ein Parser
hermesan einem Modell, das Aufrufe im Python-Stil schreibt, findet nichts zum Parsen, und der Aufruf bleibt incontent. Wählen Sie den Parser nach der Familie in der Tabelle oben oder nach der Modellkarte; Release 0.32.0 prüft außerdem beim Start, ob der Tool-Parser passt (Pull Request 59749), lesen Sie also das Start-Log. - Falsches oder fehlendes Chat-Template. Llama 3.1 und einige andere Familien brauchen das in der Dokumentation von vLLM genannte Template, das Nachrichten mit den Rollen tool und assistant für das Modell formatiert. Mistral-Checkpoints über das Transformers-Backend brauchen das mitgelieferte Template, weil der Standard „requires 9-digit tool call IDs“.
- Reasoning nicht getrennt. Ein Modell im Thinking-Modus ohne
--reasoning-parsermischt Reasoning und Aufrufe incontent, und der Tool-Parser kann an dieser Mischung scheitern. - Uneingeschränktes
auto. Fehlerhafte Argumente im Modusautosind ohne Strict-Einstellungen erwartetes Verhalten. Setzen Siestrict: truean den Tools oder erhöhen Sie--tool-strict-level.
Tool-Aufrufe kosten auch Kapazität. Jeder Agentenschritt sendet die Tool-Definitionen mit dem Gesprächsverlauf erneut, eine lange Tool-Liste verlängert also jeden Prompt; unsere Leitfäden zur GPU-Dimensionierung für KI-Agenten und zu Servern für LLM-Agenten mit langem Kontext übersetzen das in GPU-Speicher und Prefill-Zeit. Für ein Workflow-Tool an vLLM behandelt unser Artikel zu KI-Agenten mit n8n und privatem LLM die Client-Seite und unser Artikel zur Sicherheit von MCP die Tool-Server dahinter.
Parser, Versionen und Sicherheit
Ein Tool-Parser liest Text, den das Modell erzeugt hat, und ein Modell lässt sich über seine Eingabe lenken. Advisory GHSA-79j6-g2m3-jgfw (CVE-2025-9141, eingestuft als High, 8,8, veröffentlicht am 20. August 2025) beschrieb Remote Code Execution im Parser qwen3_coder: Bei Parametern ohne oder mit unbekanntem Typ rief der Parser Pythons eval() auf das Argument auf, sodass ein angemeldeter Nutzer, der das Modell Code als Argument übergeben ließ, diesen auf dem Server ausführen konnte. Betroffen war vLLM ab 0.10.0 bis vor 0.10.1.1, das den Fehler behob, und nur Server mit --enable-auto-tool-choice und diesem Parser. Unsere Seite zu Sicherheitslücken in vLLM und der richtigen Version ordnet die Advisories von 2026 danach, wie ein Endpunkt erreichbar ist.
Die Tool-Aufrufe selbst sind ein zweites Risiko. vLLM formatiert den Aufruf nur; Ihre Anwendung führt ihn aus, mit allen Rechten, die sie hat. Geben Sie Agenten nach Möglichkeit nur lesende Tools, prüfen Sie Argumente vor der Ausführung erneut und lassen Sie Aufrufe, die Daten ändern, von einer Person freigeben, wie unser Artikel zu Prompt Injection erklärt. Unser Service Private AI/ML mit Engineering durch unseren Partner Vixen.UNO richtet offene Modelle mit vLLM ein und verbindet sie mit Unternehmenssystemen; beschreiben Sie den Ablauf, den Ihre Agenten übernehmen sollen, und wir schlagen Modell, Parser-Einstellungen und Server vor.
FAQ
Wie aktiviere ich Tool Calling in vLLM?
--enable-auto-tool-choice und dem --tool-call-parser Ihrer Modellfamilie, etwa openai für gpt-oss oder hermes für Qwen3, und ergänzen Sie --chat-template, wenn das Template des Checkpoints keine Tool-Nachrichten verarbeitet. Clients senden Tools dann im OpenAI-Format und erhalten tool_calls in der Antwort.Welchen Tool-Call-Parser nutze ich für Qwen3 in vLLM?
hermes, den Parser, den die Dokumentation von vLLM für Qwen2.5 und QwQ-32B nennt. Qwen3-Coder ist anders: Die Dokumentation von vLLM nennt qwen3_xml, die Modellkarten starten vLLM mit qwen3_coder; seit 0.32.0 ist der erste Name ein Alias des zweiten. Ergänzen Sie im Thinking-Modus einen Reasoning-Parser wie qwen3.Liefert vLLM bei Function Calling immer gültiges JSON?
tool_choice: "required" nutzt vLLM Structured Outputs und verspricht „a validly-parsable function call - not a high-quality one“. Im Modus auto wendet Release 0.32.0 eine Grammatik nur auf Tools mit strict: true an oder wenn --tool-strict-level auf function oder parameter steht.Was bewirkt tool_choice required in vLLM?
Warum liefert vLLM den Tool-Aufruf als Text in content?
--enable-auto-tool-choice, der Parser passt nicht zur Modellfamilie, das Chat-Template ist falsch oder ein Reasoning-Modell läuft ohne --reasoning-parser. vLLM liest Tool-Aufrufe nur aus dem Antwortinhalt, nicht aus dem Reasoning; ein Aufruf, der während des Nachdenkens entsteht, wird also nicht als Tool-Aufruf zurückgegeben.Welche offenen Modelle unterstützen Funktionsaufrufe in vLLM?
openai für gpt-oss, hermes für Qwen, llama3_json und llama4_pythonic für Llama, mistral, deepseek_v3 und deepseek_v31, kimi_k2, glm45 und glm47 sowie granite4. Die Rezepte von vLLM ergänzen Parser für neuere Modelle wie deepseek_v4 und gemma4.Wir liefern GPU-Server für Agenten und richten offene Modelle mit vLLM ein, mit Tool-Parsern und Strict-Einstellungen, getestet an Ihren Tools. Beschreiben Sie Ihre Aufgabe in wenigen Sätzen, unser Team hilft Ihnen weiter. Wir antworten innerhalb eines Werktages. Das erste Gespräch ist kostenlos.
Mit einem Experten sprechenWir antworten innerhalb eines Werktages