Qwen Code Dateisystem-Tools
Qwen Code bietet eine umfassende Sammlung von Tools zur Interaktion mit dem lokalen Dateisystem. Diese Tools ermöglichen es dem Modell, Dateien und Verzeichnisse zu lesen, zu schreiben, aufzulisten, zu durchsuchen und zu ändern – alles unter deiner Kontrolle und in der Regel mit Bestätigungsabfrage bei sensiblen Operationen.
Hinweis: Alle Dateisystem-Tools arbeiten innerhalb eines rootDirectory (normalerweise das aktuelle Arbeitsverzeichnis, in dem du die CLI gestartet hast) aus Sicherheitsgründen. Die Pfade, die du diesen Tools übergibst, sollten entweder absolut sein oder werden relativ zu diesem Root-Verzeichnis aufgelöst.
1. list_directory (ListFiles)
list_directory listet die Namen von Dateien und Unterverzeichnissen direkt innerhalb eines angegebenen Verzeichnispfads auf. Es kann optional Einträge ignorieren, die bestimmten Glob-Mustern entsprechen.
- Tool-Name:
list_directory - Anzeigename: ListFiles
- Datei:
ls.ts - Parameter:
path(string, erforderlich): Der absolute Pfad zum aufzulistenden Verzeichnis.ignore(Array aus Strings, optional): Eine Liste von Glob-Mustern, die vom Listing ausgeschlossen werden sollen (z.B.["*.log", ".git"]).respect_git_ignore(boolean, optional): Ob.gitignore-Muster beim Auflisten berücksichtigt werden sollen. Standardmäßigtrue.
- Verhalten:
- Gibt eine Liste mit Datei- und Verzeichnisnamen zurück.
- Zeigt für jeden Eintrag an, ob es sich um ein Verzeichnis handelt.
- Sortiert die Einträge so, dass Verzeichnisse zuerst kommen, danach alphabetisch.
- Ausgabe (
llmContent): Ein String wie:Directory listing for /path/to/your/folder:\n[DIR] subfolder1\nfile1.txt\nfile2.png - Bestätigung: Nein.
2. read_file (ReadFile)
read_file liest und gibt den Inhalt einer angegebenen Datei zurück. Dieses Tool unterstützt Text-, Bild- (PNG, JPG, GIF, WEBP, SVG, BMP) und PDF-Dateien. Für Textdateien kann es bestimmte Zeilenbereiche lesen. Andere binäre Dateitypen werden in der Regel übersprungen.
- Toolname:
read_file - Anzeigename: ReadFile
- Datei:
read-file.ts - Parameter:
path(string, erforderlich): Der absolute Pfad zur zu lesenden Datei.offset(number, optional): Bei Textdateien die nullbasierte Zeilennummer, ab der das Lesen beginnt. Erfordert, dasslimitgesetzt ist.limit(number, optional): Bei Textdateien die maximale Anzahl an Zeilen, die gelesen werden sollen. Falls weggelassen, wird ein Standardmaximum (z. B. 2000 Zeilen) gelesen oder, wenn möglich, die gesamte Datei.
- Verhalten:
- Für Textdateien: Gibt den Inhalt zurück. Wenn
offsetundlimitverwendet werden, wird nur dieser Abschnitt der Zeilen zurückgegeben. Zeigt an, ob der Inhalt aufgrund von Zeilen- oder Zeilenlängenbeschränkungen gekürzt wurde. - Für Bild- und PDF-Dateien: Gibt den Dateiinhalt als base64-kodierte Datenstruktur zurück, die für die Verarbeitung durch das Modell geeignet ist.
- Für andere binäre Dateien: Versucht, sie zu erkennen und zu überspringen, und gibt eine Meldung zurück, dass es sich um eine generische Binärdatei handelt.
- Für Textdateien: Gibt den Inhalt zurück. Wenn
- Ausgabe: (
llmContent):- Für Textdateien: Der Dateiinhalt, ggf. mit einer Kürzungsmeldung am Anfang (z. B.
[File content truncated: showing lines 1-100 of 500 total lines...]\nTatsächlicher Dateiinhalt...). - Für Bild-/PDF-Dateien: Ein Objekt mit
inlineData, dasmimeTypeund base64-kodiertedataenthält (z. B.{ inlineData: { mimeType: 'image/png', data: 'base64encodedstring' } }). - Für andere binäre Dateien: Eine Meldung wie
Cannot display content of binary file: /path/to/data.bin.
- Für Textdateien: Der Dateiinhalt, ggf. mit einer Kürzungsmeldung am Anfang (z. B.
- Bestätigung: Nein.
3. write_file (WriteFile)
write_file schreibt Inhalte in eine angegebene Datei. Wenn die Datei bereits existiert, wird sie überschrieben. Falls die Datei nicht existiert, wird sie (samt notwendiger übergeordneter Verzeichnisse) erstellt.
- Tool-Name:
write_file - Anzeigename: WriteFile
- Datei:
write-file.ts - Parameter:
file_path(string, erforderlich): Der absolute Pfad zur Datei, in die geschrieben werden soll.content(string, erforderlich): Der Inhalt, der in die Datei geschrieben werden soll.
- Verhalten:
- Schreibt den übergebenen
contentin die angegebenefile_path. - Erstellt übergeordnete Verzeichnisse, falls diese nicht existieren.
- Schreibt den übergebenen
- Ausgabe (
llmContent): Eine Erfolgsmeldung, z. B.Successfully overwrote file: /path/to/your/file.txtoderSuccessfully created and wrote to new file: /path/to/new/file.txt. - Bestätigung: Ja. Zeigt einen Diff der Änderungen an und fordert die Zustimmung des Benutzers vor dem Schreiben an.
4. glob (Glob)
glob findet Dateien, die bestimmten Glob-Patterns entsprechen (z. B. src/**/*.ts, *.md), und gibt absolute Pfade zurück, sortiert nach Änderungszeit (neueste zuerst).
- Tool-Name:
glob - Anzeigename: Glob
- Datei:
glob.ts - Parameter:
pattern(string, erforderlich): Das Glob-Pattern, gegen das gematcht wird (z. B."*.py","src/**/*.js").path(string, optional): Das Verzeichnis, in dem gesucht wird. Falls nicht angegeben, wird das aktuelle Arbeitsverzeichnis verwendet.
- Verhalten:
- Sucht nach Dateien, die dem Glob-Pattern innerhalb des angegebenen Verzeichnisses entsprechen.
- Gibt eine Liste von absoluten Pfaden zurück, sortiert nach der letzten Änderungszeit (neueste zuerst).
- Berücksichtigt standardmäßig
.gitignore- und.qwenignore-Patterns. - Begrenzt die Ergebnisse auf 100 Dateien, um einen Kontextüberlauf zu vermeiden.
- Ausgabe (
llmContent): Eine Nachricht wie: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] ... - Bestätigung: Nein.
5. grep_search (Grep)
grep_search sucht nach einem regulären Ausdruck innerhalb des Inhalts von Dateien in einem angegebenen Verzeichnis. Kann Dateien mithilfe eines Glob-Musters filtern. Gibt die Zeilen mit Übereinstimmungen sowie deren Dateipfade und Zeilennummern zurück.
-
Tool-Name:
grep_search -
Anzeigename: Grep
-
Datei:
ripGrep.ts(mitgrep.tsals Fallback) -
Parameter:
pattern(string, erforderlich): Das reguläre Ausdrucksmuster, nach dem im Dateiinhalt gesucht werden soll (z. B."function\\s+myFunction","log.*Error").path(string, optional): Die Datei oder das Verzeichnis, in dem gesucht werden soll. Standardmäßig das aktuelle Arbeitsverzeichnis.glob(string, optional): Ein Glob-Muster zum Filtern von Dateien (z. B."*.js","src/**/*.{ts,tsx}").limit(number, optional): Begrenzt die Ausgabe auf die ersten N übereinstimmenden Zeilen. Optional – zeigt alle Übereinstimmungen an, wenn nicht angegeben.
-
Verhalten:
- Verwendet ripgrep für eine schnelle Suche, falls verfügbar; greift andernfalls auf eine JavaScript-basierte Suchimplementierung zurück.
- Gibt übereinstimmende Zeilen mit Dateipfaden und Zeilennummern zurück.
- Standardmäßig Groß-/Kleinschreibung ignorieren.
- Berücksichtigt
.gitignore- und.qwenignore-Muster. - Begrenzt die Ausgabe, um einen Kontextüberlauf zu verhindern.
-
Ausgabe (
llmContent): Ein formatierter String der Übereinstimmungen, z. B.: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] ... -
Bestätigung: Nein.
grep_search Beispiele
Suche nach einem Muster mit standardmäßigem Ergebnis-Limit:
grep_search(pattern="function\\s+myFunction", path="src")Suche nach einem Muster mit benutzerdefiniertem Ergebnis-Limit:
grep_search(pattern="function", path="src", limit=50)Suche nach einem Muster mit Dateifilter und benutzerdefiniertem Ergebnis-Limit:
grep_search(pattern="function", glob="*.js", limit=10)6. edit (Bearbeiten)
Das Tool edit ersetzt Text innerhalb einer Datei. Standardmäßig muss der übergebene old_string eine eindeutige Position im Text identifizieren. Setze replace_all auf true, wenn du absichtlich alle Vorkommen ersetzen möchtest. Dieses Tool ist für präzise und gezielte Änderungen konzipiert und benötigt daher ausreichend Kontext um den old_string, um sicherzustellen, dass die korrekte Stelle verändert wird.
-
Toolname:
edit -
Anzeigename: Bearbeiten
-
Datei:
edit.ts -
Parameter:
-
file_path(string, erforderlich): Der absolute Pfad zur zu ändernden Datei. -
old_string(string, erforderlich): Der exakte Text, der ersetzt werden soll.WICHTIG: Dieser String muss die zu ändernde Stelle eindeutig identifizieren. Er sollte mindestens 3 Zeilen Kontext vor und nach dem Zieltext enthalten und dabei Leerzeichen sowie Einrückung exakt wiedergeben. Wenn
old_stringleer ist, versucht das Tool, eine neue Datei unterfile_pathmitnew_stringals Inhalt zu erstellen. -
new_string(string, erforderlich): Der exakte Text, durch denold_stringersetzt wird. -
replace_all(boolean, optional): Alle Vorkommen vonold_stringersetzen. Standardwert istfalse.
-
-
Verhalten:
- Wenn
old_stringleer ist undfile_pathnicht existiert, wird eine neue Datei mitnew_stringals Inhalt erstellt. - Wenn
old_stringangegeben ist, liest das Tool die Datei unterfile_pathund sucht nach genau einem Treffer – es sei denn,replace_allist aktiviert. - Bei einem eindeutigen Treffer (oder wenn
replace_allaktiv ist) wird der entsprechende Text durchnew_stringersetzt. - Erweiterte Zuverlässigkeit (Mehrstufige Korrektur bei Editieroperationen): Um die Erfolgsrate von Änderungen deutlich zu erhöhen – insbesondere wenn der vom Modell gelieferte
old_stringnicht perfekt präzise ist – verwendet das Tool einen mehrstufigen Korrekturmechanismus.- Falls der initiale
old_stringnicht gefunden wird oder mehrere Treffer liefert, kann das Tool das Qwen-Modell nutzen, umold_string(und ggf. auchnew_string) iterativ zu verfeinern. - Dieser Selbstkorrekturprozess versucht, das Segment zu finden, das das Modell tatsächlich bearbeiten wollte, wodurch die
edit-Operation robuster gegenüber kleinen Ungenauigkeiten im Ausgangskontext wird.
- Falls der initiale
- Wenn
-
Fehlerbedingungen: Trotz des Korrekturmechanismus schlägt das Tool fehl, wenn:
file_pathkein absoluter Pfad ist oder außerhalb des Root-Verzeichnisses liegt.old_stringnicht leer ist, aber die Datei unterfile_pathnicht existiert.old_stringleer ist, aber die Datei unterfile_pathbereits existiert.old_stringnach allen Korrekturversuchen nicht in der Datei gefunden wird.old_stringmehrfach vorkommt,replace_alldeaktiviert ist und der Selbstkorrekturmechanismus keine eindeutige Übereinstimmung ermitteln kann.
-
Ausgabe (
llmContent):- Bei Erfolg:
Successfully modified file: /path/to/file.txt (1 replacements).oderCreated new file: /path/to/new_file.txt with provided content. - Bei Fehler: Eine Fehlermeldung mit Erklärung des Grundes (z. B.
Failed to edit, 0 occurrences found...,Failed to edit because the text matches multiple locations...).
- Bei Erfolg:
-
Bestätigung: Ja. Zeigt einen Diff der vorgeschlagenen Änderungen an und fordert eine Benutzerbestätigung vor dem Schreiben in die Datei an.
Diese Filesystem-Tools bilden die Grundlage dafür, dass Qwen Code dein lokales Projektverzeichnis verstehen und damit interagieren kann.