Corriger les appels d'outils XML bruts des modèles Ollama dans OpenCode
Quand vous voyez du texte brut comme <function=explore> ou des balises XML affichées dans OpenCode, le modèle produit du texte simple au lieu de retourner un appel d'outil JSON structuré.
Cela arrive avec Ollama et les modèles Qwen parce qu'Ollama utilise par défaut une fenêtre de contexte de 2 048 ou 4 096 jetons (num_ctx). OpenCode envoie de grandes invites système et des schémas d'outils ; quand la fenêtre de contexte se remplit, Ollama tronque silencieusement l'invite. Résultat : Qwen perd les instructions système sur le format des outils et se rabat sur l'affichage du texte de fonction brut.
L'étape 1 : créer une variante de modèle avec un contexte étendu
Créez une variante de modèle personnalisée dans Ollama qui étend la longueur du contexte à 16 384 ou 32 768 jetons.
- Créez un fichier nommé
Modelfiledans votre terminal :
FROM qwen3-coder
PARAMETER num_ctx 32768
PARAMETER temperature 0.2
Remplacez qwen3-coder par le nom exact de votre modèle de base s'il est différent, comme qwen2.5-coder:7b. Pour une vue d'ensemble plus large sur la configuration des modèles et des Modelfiles Ollama, consultez notre guide complet d'Ollama.
- Construisez la variante de modèle mise à jour :
ollama create qwen3-coder-32k -f Modelfile
Exécutez `ollama list` pour voir vos modèles installés et utilisez le nom exact du modèle Qwen que vous avez déjà téléchargé.
L'étape 2 : activer les outils dans OpenCode
Ouvrez ou créez votre fichier de configuration OpenCode dans ~/.config/opencode/opencode.json (ou opencode.jsonc) et assurez-vous que "tools": true est explicitement déclaré pour votre nouveau modèle :
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"ollama": {
"npm": "@ai-sdk/openai-compatible",
"name": "Ollama local",
"options": {
"baseURL": "http://localhost:11434/v1"
},
"models": {
"qwen3-coder-32k": {
"name": "Qwen Coder 32K",
"tools": true
}
}
}
}
}
L'étape 3 : vider le cache OpenCode et relancer
Videz les sessions de fournisseur en cache qui pourraient conserver des invites système tronquées :
rm -rf ~/.cache/opencode
Lancez OpenCode avec Ollama :
ollama launch opencode --model qwen3-coder-32k
ou exécutez opencode directement depuis votre dossier de projet.
Alternative : forcer les instructions du prompt système
Si le modèle affiche encore des balises XML brutes après l'augmentation de la longueur du contexte, ajoutez des instructions système explicites à votre Modelfile pour forcer le respect des schémas d'outils standard :
FROM qwen3-coder
PARAMETER num_ctx 32768
PARAMETER temperature 0.2
SYSTEM """
You are an AI programming assistant.
When executing environment tools (such as explore, edit, or bash), ALWAYS use the exact tool call schema provided in the system prompt.
Do not output raw XML tags like <function=explore> or plain text function calls. Execute tool calls directly.
"""
Reconstruisez le modèle avec ollama create qwen3-coder-32k -f Modelfile et redémarrez OpenCode.
Conclusion
La cause principale est presque toujours une fenêtre de contexte tronquée. Étendre num_ctx restaure les instructions d'outils dont le modèle a besoin pour retourner du JSON structuré au lieu de texte brut.