Présentation
Lors de l’utilisation du modèle open‑weight Kimi K2.6 avec vLLM 0.28, le taux d’observance du schéma d’appel d’outil était de 92 %, soit deux appels erronés sur vingt‑cinq. Cette marge d’erreur génère du texte incohérent, pollue la fenêtre de contexte et augmente le coût d’exécution des agents multi‑tours. Le benchmark K2VV ToolCall, composé de 2000 requêtes, mesure deux indicateurs : la similarité de déclenchement et la schema accuracy, c’est‑à‑dire la proportion d’appels conformes au schéma JSON fourni.
Fonctionnement du décodage contraint
Un appel d’outil est décrit par un schéma JSON contenant type, propriétés, exigences et valeurs par défaut. Le serveur d’inférence encapsule ce schéma dans des tokens spécifiques (<|im_system|>tool_declare<|im_middle|>…<|im_end|>) avant de le transmettre au modèle. Le modèle génère ensuite une séquence de tokens qui doit respecter ce format ; sinon le parser renvoie une erreur et le contexte est corrompu. Le décodage contraint, introduit dans vLLM 0.31 via un drapeau serveur, empêche la génération de tokens qui violeraient la grammaire du schéma. Concrètement, le moteur calcule, pour chaque token suivant, la probabilité selon le modèle et exclut les tokens qui rendraient la structure JSON invalide, assurant ainsi que chaque appel respecte les contraintes de type et de champ obligatoire.
{
"type": "function",
"function": {
"name": "webfetch",
"parameters": {
"type": "object",
"properties": {
"url": {"type": "string"},
"format": {"type": "string", "enum": ["text","markdown","html"], "default": "markdown"},
"timeout": {"type": "number"}
},
"required": ["url"]
}
}
}Analyse des performances et limites
Avec le drapeau activé, les tests reproduits sur les modèles Kimi récents et DeepSeek affichent une exactitude de schéma de 100 %. Le gain provient de l’élimination des échantillonnages aléatoires qui, dans le mode libre, peuvent produire des champs inexistants (ex. search_web au lieu de web_search) ou des types incompatibles. Cette amélioration réduit la pollution du contexte, diminue le nombre de relances d’appel et optimise le coût d’inférence. Cependant, le décodage contraint ne corrige pas les erreurs de déclenchement : si le modèle ne décide pas d’appeler un outil alors que la tâche le requiert, le taux de trigger similarity reste dépendant de la formation du modèle et du prompt. De plus, la contrainte impose un surcoût de calcul marginal, car le moteur doit vérifier la validité de chaque token candidat contre le schéma.
En résumé, l’ajout du décodage contraint dans vLLM 0.31 transforme une probabilité de succès de 92 % à une certitude de conformité, tout en maintenant une charge computationnelle raisonnable. Les opérateurs d’inférence doivent toutefois surveiller la pertinence du déclenchement d’outil et la qualité des prompts pour exploiter pleinement cette fonctionnalité.