Outils du système de fichiers Qwen Code
Qwen Code fournit une suite complète d’outils pour interagir avec le système de fichiers local. Ces outils permettent au modèle de lire, écrire, lister, rechercher et modifier des fichiers et des répertoires, le tout sous votre contrôle et généralement avec confirmation pour les opérations sensibles.
Remarque : Tous les outils du système de fichiers fonctionnent dans un rootDirectory (généralement le répertoire de travail actuel où vous avez lancé la CLI) pour des raisons de sécurité. Les chemins que vous fournissez à ces outils sont généralement attendus en absolu ou sont résolus par rapport à ce répertoire racine.
1. list_directory (ListFiles)
list_directory liste les noms des fichiers et sous-répertoires directement présents dans un chemin de répertoire spécifié. Il peut éventuellement ignorer les entrées correspondant à des motifs glob fournis.
- Nom de l’outil :
list_directory - Nom d’affichage : ListFiles
- Fichier :
ls.ts - Paramètres :
path(string, requis) : Le chemin absolu du répertoire à lister.ignore(tableau de strings, optionnel) : Une liste de motifs glob à exclure de la liste (ex. :["*.log", ".git"]).respect_git_ignore(boolean, optionnel) : Indique s’il faut respecter les motifs définis dans.gitignorelors du listage des fichiers. Valeur par défaut :true.
- Comportement :
- Retourne une liste contenant les noms des fichiers et répertoires.
- Indique pour chaque entrée s’il s’agit d’un répertoire.
- Trie les entrées en plaçant d’abord les répertoires, puis alphabétiquement.
- Sortie (
llmContent) : Une chaîne comme :Directory listing for /path/to/your/folder:\n[DIR] subfolder1\nfile1.txt\nfile2.png - Confirmation : Non.
2. read_file (ReadFile)
read_file lit et retourne le contenu d’un fichier spécifié. Cet outil gère les fichiers texte, images (PNG, JPG, GIF, WEBP, SVG, BMP) et PDF. Pour les fichiers texte, il peut lire des plages de lignes spécifiques. Les autres types de fichiers binaires sont généralement ignorés.
- Nom de l’outil :
read_file - Nom affiché : ReadFile
- Fichier :
read-file.ts - Paramètres :
path(string, requis) : Le chemin absolu du fichier à lire.offset(number, optionnel) : Pour les fichiers texte, le numéro de ligne (commençant à 0) à partir duquel commencer la lecture. Nécessite quelimitsoit défini.limit(number, optionnel) : Pour les fichiers texte, le nombre maximal de lignes à lire. S’il est omis, une limite par défaut est utilisée (par exemple, 2000 lignes) ou le fichier entier est lu si possible.
- Comportement :
- Pour les fichiers texte : Retourne le contenu. Si
offsetetlimitsont utilisés, seul cet extrait de lignes est retourné. Indique si le contenu a été tronqué en raison des limites de lignes ou de longueur de ligne. - Pour les fichiers image et PDF : Retourne le contenu du fichier sous forme d’une structure encodée en base64 adaptée à la consommation par un modèle.
- Pour les autres fichiers binaires : Tente de les identifier et les ignore, en retournant un message indiquant qu’il s’agit d’un fichier binaire générique.
- Pour les fichiers texte : Retourne le contenu. Si
- Sortie : (
llmContent) :- Pour les fichiers texte : Le contenu du fichier, éventuellement précédé d’un message de troncature (ex. :
[File content truncated: showing lines 1-100 of 500 total lines...]\nActual file content...). - Pour les fichiers image/PDF : Un objet contenant
inlineDataavecmimeTypeet les données encodées en base64 (ex. :{ inlineData: { mimeType: 'image/png', data: 'base64encodedstring' } }). - Pour les autres fichiers binaires : Un message tel que
Cannot display content of binary file: /path/to/data.bin.
- Pour les fichiers texte : Le contenu du fichier, éventuellement précédé d’un message de troncature (ex. :
- Confirmation : Non.
3. write_file (WriteFile)
write_file écrit du contenu dans un fichier spécifié. Si le fichier existe, il sera écrasé. Si le fichier n’existe pas, il (ainsi que les répertoires parents nécessaires) sera créé.
- Nom de l’outil :
write_file - Nom d’affichage : WriteFile
- Fichier :
write-file.ts - Paramètres :
file_path(string, requis) : Le chemin absolu vers le fichier à écrire.content(string, requis) : Le contenu à écrire dans le fichier.
- Comportement :
- Écrit le
contentfourni dans lefile_path. - Crée les répertoires parents s’ils n’existent pas.
- Écrit le
- Sortie (
llmContent) : Un message de succès, par exemple :Successfully overwrote file: /path/to/your/file.txtouSuccessfully created and wrote to new file: /path/to/new/file.txt. - Confirmation : Oui. Affiche un diff des changements et demande l’approbation de l’utilisateur avant d’écrire.
4. glob (Glob)
glob trouve les fichiers correspondant à des motifs glob spécifiques (par exemple, src/**/*.ts, *.md) et retourne leurs chemins absolus triés par date de modification (les plus récents en premier).
- Nom de l’outil :
glob - Nom d’affichage : Glob
- Fichier :
glob.ts - Paramètres :
pattern(string, requis) : Le motif glob à utiliser pour la recherche (ex."*.py","src/**/*.js").path(string, optionnel) : Le répertoire dans lequel effectuer la recherche. Si non spécifié, le répertoire courant est utilisé.
- Comportement :
- Recherche les fichiers correspondant au motif glob dans le répertoire indiqué.
- Retourne une liste de chemins absolus, triée avec les fichiers modifiés le plus récemment en premier.
- Respecte les motifs définis dans
.gitignoreet.qwenignorepar défaut. - Limite les résultats à 100 fichiers afin d’éviter un dépassement du contexte.
- Sortie (
llmContent) : Un message tel que :Found 5 file(s) matching "*.ts" within /path/to/search/dir, sorted by modification time (newest first):\n---\n/path/to/file1.ts\n/path/to/subdir/file2.ts\n---\n[95 files truncated] ... - Confirmation : Non.
5. grep_search (Grep)
grep_search recherche un motif d’expression régulière dans le contenu des fichiers d’un répertoire spécifié. Peut filtrer les fichiers via un motif glob. Retourne les lignes contenant des correspondances, ainsi que leurs chemins de fichier et numéros de ligne.
-
Nom de l’outil :
grep_search -
Nom d’affichage : Grep
-
Fichier :
ripGrep.ts(avecgrep.tscomme solution de repli) -
Paramètres :
pattern(string, requis) : Le motif d’expression régulière à rechercher dans le contenu des fichiers (ex. :"function\\s+myFunction","log.*Error").path(string, optionnel) : Fichier ou répertoire dans lequel effectuer la recherche. Par défaut, il s’agit du répertoire de travail courant.glob(string, optionnel) : Motif glob pour filtrer les fichiers (ex. :"*.js","src/**/*.{ts,tsx}").limit(number, optionnel) : Limite la sortie aux N premières lignes correspondantes. Optionnel – affiche toutes les correspondances si non spécifié.
-
Comportement :
- Utilise ripgrep pour une recherche rapide lorsque disponible ; sinon utilise une implémentation basée sur JavaScript.
- Retourne les lignes correspondantes avec leurs chemins de fichier et numéros de ligne.
- Insensible à la casse par défaut.
- Respecte les motifs définis dans .gitignore et .qwenignore.
- Limite la sortie pour éviter un dépassement de contexte.
-
Sortie (
llmContent) : Une chaîne formatée des correspondances, par exemple :Found 3 matches for pattern "myFunction" in path "." (filter: "*.ts"): --- src/utils.ts:15:export function myFunction() { src/utils.ts:22: myFunction.call(); src/index.ts:5:import { myFunction } from './utils'; --- [0 lines truncated] ... -
Confirmation : Non.
Exemples grep_search
Rechercher un motif avec limitation des résultats par défaut :
grep_search(pattern="function\\s+myFunction", path="src")Rechercher un motif avec limitation personnalisée des résultats :
grep_search(pattern="function", path="src", limit=50)Rechercher un motif avec filtrage des fichiers et limitation personnalisée des résultats :
grep_search(pattern="function", glob="*.js", limit=10)6. edit (Modifier)
L’outil edit remplace du texte dans un fichier. Par défaut, il nécessite que old_string corresponde à un seul emplacement unique ; définissez replace_all sur true si vous souhaitez intentionnellement modifier toutes les occurrences. Cet outil est conçu pour apporter des modifications précises et ciblées, et requiert un contexte important autour de old_string afin de garantir qu’il modifie le bon endroit.
-
Nom de l’outil :
edit -
Nom affiché : Modifier
-
Fichier :
edit.ts -
Paramètres :
-
file_path(string, requis) : Le chemin absolu vers le fichier à modifier. -
old_string(string, requis) : Le texte littéral exact à remplacer.IMPORTANT : Cette chaîne doit identifier de manière unique l’instance à modifier. Elle doit inclure au moins 3 lignes de contexte avant et après le texte cible, en respectant précisément les espaces et l’indentation. Si
old_stringest vide, l’outil tente de créer un nouveau fichier àfile_pathavecnew_stringcomme contenu. -
new_string(string, requis) : Le texte littéral exact qui remplaceraold_string. -
replace_all(boolean, optionnel) : Remplacer toutes les occurrences deold_string. Valeur par défaut :false.
-
-
Comportement :
- Si
old_stringest vide et quefile_pathn’existe pas, crée un nouveau fichier avecnew_stringcomme contenu. - Si
old_stringest fourni, lit le fichier àfile_pathet tente de trouver une seule occurrence, sauf sireplace_allvauttrue. - Si la correspondance est unique (ou si
replace_allest vrai), remplace le texte parnew_string. - Fiabilité améliorée (Correction d’édition multi-étapes) : Pour améliorer significativement le taux de réussite des éditions, notamment lorsque
old_stringfournie par le modèle n’est pas parfaitement précise, l’outil intègre un mécanisme de correction multi-étapes.- Si
old_stringinitialement n’est pas trouvé ou correspond à plusieurs endroits, l’outil peut utiliser le modèle Qwen pour raffiner progressivementold_string(et potentiellementnew_string). - Ce processus d’auto-correction tente d’identifier le segment unique que le modèle souhaitait modifier, rendant ainsi l’opération
editplus robuste même avec un contexte initial légèrement imparfait.
- Si
- Si
-
Conditions d’échec : Malgré le mécanisme de correction, l’outil échouera si :
file_pathn’est pas absolu ou se trouve en dehors du répertoire racine.old_stringn’est pas vide maisfile_pathn’existe pas.old_stringest vide maisfile_pathexiste déjà.old_stringn’est pas trouvé dans le fichier après tentative de correction.old_stringapparaît plusieurs fois,replace_allest faux, et le mécanisme d’auto-correction ne parvient pas à résoudre cela en une seule correspondance non ambiguë.
-
Sortie (
llmContent) :- En cas de succès :
Successfully modified file: /path/to/file.txt (1 replacements).ouCreated new file: /path/to/new_file.txt with provided content. - En cas d’échec : Un message d’erreur expliquant la raison (ex. :
Failed to edit, 0 occurrences found...,Failed to edit because the text matches multiple locations...).
- En cas de succès :
-
Confirmation : Oui. Affiche un diff des changements proposés et demande l’approbation de l’utilisateur avant d’écrire dans le fichier.
Ces outils du système de fichiers constituent une base permettant à Qwen Code de comprendre et d’interagir avec le contexte de votre projet local.