Qwen-Code-Dateisystemtools
Qwen Code bietet eine umfassende Sammlung von Tools zum Arbeiten mit dem lokalen Dateisystem. Mit diesen Tools kann das Modell Dateien und Verzeichnisse lesen, schreiben, auflisten, durchsuchen und ändern – stets unter Ihrer Kontrolle und in der Regel mit einer Bestätigung für sensible Operationen.
Hinweis: Alle Dateisystemtools arbeiten innerhalb eines rootDirectory (üblicherweise das aktuelle Arbeitsverzeichnis, aus dem Sie die CLI gestartet haben) aus Sicherheitsgründen. Die Pfade, die Sie diesen Tools übergeben, sollten im Allgemeinen absolut sein oder werden relativ zu diesem Stammverzeichnis aufgelöst.
1. list_directory (ListFiles)
list_directory listet die Namen von Dateien und Unterverzeichnissen auf, die sich direkt im angegebenen Verzeichnispfad befinden. Optional können Einträge ignoriert werden, die bestimmten Glob-Mustern entsprechen.
- Werkzeugname:
list_directory - Anzeigename: ListFiles
- Datei:
ls.ts - Parameter:
path(Zeichenkette, erforderlich): Der absolute Pfad zum Verzeichnis, dessen Inhalte aufgelistet werden sollen.ignore(Array von Zeichenketten, optional): Eine Liste von Glob-Mustern, die bei der Auflistung ausgeschlossen werden sollen (z. B.["*.log", ".git"]).respect_git_ignore(boolesch, optional): Gibt an, ob beim Auflisten von Dateien Muster aus.gitignoreberücksichtigt werden sollen. Standardwert isttrue.
- Verhalten:
- Gibt eine Liste mit Datei- und Verzeichnisnamen zurück.
- Kennzeichnet, ob jeder Eintrag ein Verzeichnis ist.
- Sortiert die Einträge so, dass Verzeichnisse zuerst erscheinen, danach alphabetisch.
- Ausgabe (
llmContent): Eine Zeichenkette wie z. B.:Verzeichnisinhalt für /pfad/zu/ihrem/ordner:\n[DIR] unterordner1\ndatei1.txt\ndatei2.png - Bestätigung: Nein
2. read_file (Datei lesen)
read_file liest den Inhalt einer angegebenen Datei und gibt ihn zurück. Dieses Tool verarbeitet Textdateien sowie Mediendateien (Bilder, PDFs, Audio-, Videodateien), deren Modus vom aktuellen Modell unterstützt wird. Bei Textdateien kann es bestimmte Zeilenbereiche lesen. Mediendateien, deren Modus vom aktuellen Modell nicht unterstützt wird, werden mit einer hilfreichen Fehlermeldung abgelehnt. Andere binäre Dateitypen werden im Allgemeinen übersprungen.
- Werkzeugname:
read_file - Anzeigename: Datei lesen
- Datei:
read-file.ts - Parameter:
path(Zeichenkette, erforderlich): Der absolute Pfad zur zu lesenden Datei.offset(Zahl, optional): Bei Textdateien die nullbasierte Zeilennummer, ab der gelesen werden soll. Erfordert, dasslimitfestgelegt ist.limit(Zahl, optional): Bei Textdateien die maximale Anzahl an Zeilen, die gelesen werden sollen. Wirdlimitweggelassen, wird eine standardmäßige Höchstanzahl (z. B. 2000 Zeilen) oder – falls machbar – die gesamte Datei gelesen.
- Verhalten:
- Bei Textdateien: Gibt den Inhalt zurück. Werden
offsetundlimitverwendet, wird nur dieser Zeilenabschnitt zurückgegeben. Gibt an, ob der Inhalt aufgrund von Zeilenbegrenzungen oder Zeilenlängenbegrenzungen gekürzt wurde. - Bei Mediendateien (Bilder, PDFs, Audio-, Videodateien): Falls der aktuelle Modellmodus das Dateiformat unterstützt, wird der Dateiinhalt als base64-kodiertes
inlineData-Objekt zurückgegeben. Falls der Modus nicht unterstützt wird, wird eine Fehlermeldung mit Hilfestellung zurückgegeben (z. B. Vorschläge für Skills oder externe Tools). - Bei anderen binären Dateitypen: Versucht, diese zu identifizieren und zu überspringen, und gibt eine Nachricht aus, die darauf hinweist, dass es sich um eine generische Binärdatei handelt.
- Bei Textdateien: Gibt den Inhalt zurück. Werden
- Ausgabe: (
llmContent):- Bei Textdateien: Der Dateiinhalt, ggf. mit einer Kürzungsmeldung am Anfang (z. B.
[Dateiinhalt gekürzt: Zeilen 1–100 von insgesamt 500 Zeilen angezeigt…]\nTatsächlicher Dateiinhalt…). - Bei unterstützten Mediendateien: Ein Objekt mit
inlineData, dasmimeTypeund base64-kodiertesdataenthält (z. B.{ inlineData: { mimeType: 'image/png', data: 'base64codierterstring' } }). - Bei nicht unterstützten Mediendateien: Eine Fehlermeldungszeichenkette, die erklärt, dass der aktuelle Modellmodus diesen Typ nicht unterstützt, inklusive Vorschlägen für Alternativen.
- Bei anderen binären Dateien: Eine Meldung wie
Inhalt der Binärdatei kann nicht angezeigt werden: /pfad/zur/data.bin.
- Bei Textdateien: Der Dateiinhalt, ggf. mit einer Kürzungsmeldung am Anfang (z. B.
- Bestätigung: Nein.
3. write_file (Datei schreiben)
Mit write_file wird Inhalt in eine angegebene Datei geschrieben. Falls die Datei bereits existiert, wird sie überschrieben. Falls die Datei nicht existiert, wird sie (sowie alle erforderlichen übergeordneten Verzeichnisse) erstellt.
- Werkzeugname:
write_file - Anzeigename: Datei schreiben
- Datei:
write-file.ts - Parameter:
file_path(Zeichenkette, erforderlich): Der absolute Pfad zur Datei, in die geschrieben werden soll.content(Zeichenkette, erforderlich): Der Inhalt, der in die Datei geschrieben werden soll.
- Verhalten:
- Schreibt den angegebenen
contentin die Datei unterfile_path. - Erstellt übergeordnete Verzeichnisse, falls diese nicht existieren.
- Schreibt den angegebenen
- Ausgabe (
llmContent): Eine Erfolgsmeldung, z. B.Datei erfolgreich überschrieben: /pfad/zur/ihren/datei.txtoderNeue Datei erfolgreich erstellt und beschrieben: /pfad/zur/neuen/datei.txt. - Bestätigung: Ja. Zeigt einen Diff der Änderungen an und fordert vor dem Schreiben die Zustimmung des Benutzers an.
4. glob (Glob)
Mit glob werden Dateien gefunden, die bestimmten Glob-Mustern entsprechen (z. B. src/**/*.ts, *.md). Die zurückgegebenen absoluten Pfade sind nach dem Änderungszeitpunkt sortiert (neueste zuerst).
- Werkzeugname:
glob - Anzeigename: Glob
- Datei:
glob.ts - Parameter:
pattern(Zeichenkette, erforderlich): Das abzugleichende Glob-Muster (z. B."*.py","src/**/*.js").path(Zeichenkette, optional): Das Verzeichnis, in dem gesucht werden soll. Falls nicht angegeben, wird das aktuelle Arbeitsverzeichnis verwendet.
- Verhalten:
- Durchsucht das angegebene Verzeichnis nach Dateien, die dem Glob-Muster entsprechen.
- Gibt eine Liste absoluter Pfade zurück, sortiert nach dem Änderungszeitpunkt (neueste Dateien zuerst).
- Berücksichtigt standardmäßig Muster aus
.gitignoreund.qwenignore. - Beschränkt die Ergebnisse auf 100 Dateien, um einen Überlauf des Kontexts zu vermeiden.
- Ausgabe (
llmContent): Eine Nachricht wie:Gefunden: 5 Datei(en), die "*.ts" im Verzeichnis /pfad/zum/suchverzeichnis entsprechen, sortiert nach Änderungszeit (neueste zuerst):\n---\n/pfad/zur/datei1.ts\n/pfad/zum/unterverzeichnis/datei2.ts\n---\n[95 Dateien gekürzt] ... - Bestätigung erforderlich: Nein.
5. grep_search (Grep)
Mit grep_search wird nach einem regulären Ausdrucksmuster innerhalb des Inhalts von Dateien in einem angegebenen Verzeichnis gesucht. Es ist möglich, Dateien anhand eines Glob-Musters zu filtern. Die zurückgegebenen Ergebnisse umfassen die Zeilen mit Übereinstimmungen sowie deren Dateipfade und Zeilennummern.
-
Werkzeugname:
grep_search -
Anzeigename: Grep
-
Datei:
grep.ts(mitripGrep.tsals Fallback) -
Parameter:
pattern(Zeichenkette, erforderlich): Das reguläre Ausdrucksmuster, nach dem im Dateiinhalt gesucht werden soll (z. B."function\\s+myFunction","log.*Error").path(Zeichenkette, optional): Datei oder Verzeichnis, in dem gesucht werden soll. Standardwert ist das aktuelle Arbeitsverzeichnis.glob(Zeichenkette, optional): Glob-Muster zum Filtern von Dateien (z. B."*.js","src/**/*.{ts,tsx}").limit(Zahl, optional): Begrenzt die Ausgabe auf die ersten N übereinstimmenden Zeilen. Optional – bei Nichtangabe werden alle Übereinstimmungen angezeigt.
-
Verhalten:
- Verwendet ripgrep für eine schnelle Suche, falls verfügbar; andernfalls erfolgt ein Fallback auf eine JavaScript-basierte Suchimplementierung.
- Gibt übereinstimmende Zeilen zusammen mit ihren Dateipfaden und Zeilennummern zurück.
- Die Suche erfolgt standardmäßig nicht unterscheidend zwischen Groß- und Kleinschreibung.
- Berücksichtigt Muster aus
.gitignoreund.qwenignore. - Begrenzt die Ausgabe, um einen Überlauf des Kontexts zu vermeiden.
-
Ausgabe (
llmContent): Eine formatierte Zeichenkette mit den Übereinstimmungen, z. B.:Gefunden: 3 Übereinstimmungen für Muster „myFunction“ im Pfad „.“ (Filter: „*.ts“): --- src/utils.ts:15:export function myFunction() { src/utils.ts:22: myFunction.call(); src/index.ts:5:import { myFunction } from './utils'; --- [0 Zeilen gekürzt] ... -
Bestätigung: Nein.
Beispiele für grep_search
Nach einem Muster mit der standardmäßigen Begrenzung der Ergebnisse suchen:
grep_search(pattern="function\\s+myFunction", path="src")Nach einem Muster mit einer benutzerdefinierten Begrenzung der Ergebnisse suchen:
grep_search(pattern="function", path="src", limit=50)Nach einem Muster mit Dateifilterung und einer benutzerdefinierten Begrenzung der Ergebnisse suchen:
grep_search(pattern="function", glob="*.js", limit=10)6. edit (Bearbeiten)
Mit edit wird Text innerhalb einer Datei ersetzt. Standardmäßig muss old_string an genau einer eindeutigen Stelle übereinstimmen; legen Sie replace_all auf true fest, wenn Sie bewusst alle Vorkommen ändern möchten. Dieses Tool ist für präzise, gezielte Änderungen konzipiert und erfordert einen umfangreichen Kontext um den old_string, um sicherzustellen, dass die richtige Stelle geändert wird.
-
Tool-Name:
edit -
Anzeigename: Bearbeiten
-
Datei:
edit.ts -
Parameter:
-
file_path(Zeichenkette, erforderlich): Der absolute Pfad zur zu ändernden Datei. -
old_string(Zeichenkette, erforderlich): Der exakte, wörtliche Text, der ersetzt werden soll.KRITISCH: Diese Zeichenkette muss die einzige zu ändernde Instanz eindeutig identifizieren. Sie sollte ausreichend Kontext um den Zieltext enthalten und Whitespace sowie Einrückung exakt wiedergeben. Ist
old_stringleer, versucht das Tool, eine neue Datei unterfile_pathmitnew_stringals Inhalt anzulegen. -
new_string(Zeichenkette, erforderlich): Der exakte, wörtliche Text, mit demold_stringersetzt werden soll. -
replace_all(boolesch, optional): Ersetzt alle Vorkommen vonold_string. Standardwert istfalse.
-
-
Verhalten:
- Ist
old_stringleer und existiertfile_pathnicht, wird eine neue Datei mitnew_stringals Inhalt erstellt. - Ist
old_stringangegeben, liest das Tool die Datei unterfile_pathund versucht, genau eine Übereinstimmung zu finden – es sei denn,replace_allisttrue. - Ist die Übereinstimmung eindeutig (oder
replace_allisttrue), wird der Text durchnew_stringersetzt. - Erhöhte Zuverlässigkeit (mehrstufige Edit-Korrektur): Um die Erfolgsrate von Änderungen signifikant zu verbessern – insbesondere dann, wenn der vom Modell bereitgestellte
old_stringmöglicherweise nicht vollständig präzise ist – enthält das Tool einen mehrstufigen Korrekturmechanismus für Edit-Vorgänge.- Falls der anfängliche
old_stringnicht gefunden wird oder an mehreren Stellen übereinstimmt, kann das Tool das Qwen-Modell nutzen, umold_string(und ggf. auchnew_string) iterativ zu verfeinern. - Dieser Selbstkorrekturprozess versucht, das eindeutige Segment zu identifizieren, das das Modell tatsächlich ändern wollte, wodurch der
edit-Vorgang auch bei leicht ungenauem Ausgangskontext robuster wird.
- Falls der anfängliche
- Ist
-
Fehlerbedingungen: Trotz des Korrekturmechanismus schlägt das Tool fehl, wenn:
file_pathkein absoluter Pfad ist oder sich außerhalb des Stammverzeichnisses befindet.old_stringnicht leer ist, aber die Datei unterfile_pathnicht existiert.old_stringleer ist, aber die Datei unterfile_pathbereits existiert.old_stringnach allen Versuchen zur Korrektur nicht in der Datei gefunden wird.old_stringmehrfach in der Datei vorkommt,replace_allfalseist und der Selbstkorrekturmechanismus keine eindeutige, eindeutig identifizierbare Übereinstimmung herstellen kann.
-
Ausgabe (
llmContent):- Bei Erfolg:
Erfolgreich geänderte Datei: /pfad/zur/datei.txt (1 Ersetzung).oderNeue Datei erstellt: /pfad/zur/neuen_datei.txt mit bereitgestelltem Inhalt. - Bei Fehlschlag: Eine Fehlermeldung, die den Grund erklärt (z. B.
Fehler beim Bearbeiten: 0 Vorkommen gefunden…,Fehler beim Bearbeiten: Der Text kommt an mehreren Stellen vor…).
- Bei Erfolg:
-
Bestätigung: Ja. Zeigt einen Diff der vorgeschlagenen Änderungen an und fragt vor dem Schreiben in die Datei nach der Zustimmung des Benutzers.
Diese Dateisystem-Tools bilden die Grundlage dafür, dass Qwen Code Ihren lokalen Projektkontext verstehen und damit interagieren kann.