Corrections de l'Appel d'Outils Qwen 3.5 pour un Usage Agentique : État du Serveur et Solutions Côté Client

✍️ OpenClawRadar📅 Publié: April 15, 2026🔗 Source
Corrections de l'Appel d'Outils Qwen 3.5 pour un Usage Agentique : État du Serveur et Solutions Côté Client
Ad

Bogues d'appel d'outils dans les configurations agentiques de Qwen 3.5

Lors de l'exécution des modèles Qwen 3.5 dans des environnements agentiques comme les agents de codage ou les boucles d'appel de fonction, quatre bogues spécifiques peuvent provoquer l'échec complet de l'appel d'outils.

Les quatre bogues principaux

  • Les appels d'outils XML fuient en texte brut : Qwen 3.5 émet les appels d'outils au format XML (par exemple, <function=bash><parameter=command>ls</parameter></function>). Lorsque les serveurs échouent à analyser cela—surtout lorsque du texte précède le XML ou que la réflexion est activée—l'appel d'outil arrive sous forme de texte brut avec finish_reason: stop, donc votre agent ne l'exécute jamais.
  • Les balises <think> fuient dans le texte et empoisonnent le contexte : llama.cpp force thinking=1 en interne, quel que soit enable_thinking: false, ce qui fait que les balises s'accumulent sur plusieurs tours et détruisent les sessions multi-tours.
  • Mauvaise finish_reason : Les serveurs envoient "stop" lorsque des appels d'outils sont présents, ce qui amène les agents à le traiter comme une réponse finale.
  • finish_reason non standard : Certains serveurs renvoient "eos_token", "", ou null, ce qui fait planter la plupart des frameworks sur la valeur inconnue avant de vérifier si des appels d'outils existent.
Ad

État des serveurs (avril 2026)

La source fournit un tableau détaillé de l'état des principaux serveurs d'inférence :

  • LM Studio 0.4.9 : Meilleure option locale pour l'analyse XML (corrigée dans la v0.4.7), gestion améliorée des fuites de réflexion, finish_reason généralement correcte.
  • vLLM 0.19.0 : Fonctionne avec le drapeau --tool-call-parser qwen3_coder, des bogues de streaming existent, fuite de réflexion corrigée, finish_reason généralement correcte.
  • Ollama 0.20.2 : Amélioré depuis la correction du bogue </think> non fermé, toujours instable sur l'analyse XML, parfois mauvaise finish_reason.
  • llama.cpp b8664 : L'analyseur existe mais échoue avec la réflexion activée, fuite de réflexion cassée, mauvaise finish_reason lorsque l'analyseur échoue.

Solutions recommandées

Utilisez les GGUFs Unsloth au lieu des modèles Jinja standard de Qwen 3.5, qui ont des problèmes connus avec le filtre |items échouant sur les arguments d'outils. Unsloth est livré avec 21 correctifs de modèles.

Ajoutez un filet de sécurité côté client avec trois petites fonctions qui attrapent ce que les serveurs manquent. La source fournit la première fonction :

import re, json, uuid

1. Analyser les appels d'outils XML de Qwen à partir du contenu texte

def parse_qwen_xml_tools(text): results = [] for m in re.finditer(r'<function=([\w.-]+)>([\s\S]?)</function>', text): args = {} for p in re.finditer(r'<parameter=([\w.-]+)>([\s\S]?)</parameter>', m.group(2)): k, v = p.group(1).strip(), p.group(2).strip() try: v = json.loads(v) except: pass args[k] = v

Cette fonction extrait les appels d'outils du contenu texte lorsque les serveurs échouent à analyser correctement le XML, fournissant un mécanisme de secours pour les flux de travail agentiques.

📖 Lire la source complète : r/LocalLLaMA

Ad

👀 See Also