Die Schleife bleibt gleich — es kommen nur mehr Tools dazu
"Die Schleife ist unverändert, ich habe nur etwas zum TOOLS-Array hinzugefügt." — s02_tool_use.py
Was muss man ändern, um ein neues Tool hinzuzufügen?
Der Agent aus S01 kann nur bash. Soll er auch read_file / write_file / edit_file unterstützen — was ändert man?
Viele denken zuerst: den Loop ändern. Falsch. Der Loop bleibt unangetastet. Drei Dinge sind nötig:
- Eine Python-Handler-Funktion schreiben (
run_read(path, limit)). - Sie in der
TOOL_HANDLERS-Map registrieren ("read_file": lambda **kw: run_read(...)). - Im
TOOLS-Array eine JSON-Schema-Deklaration hinzufügen (Name, Parameter).
Sieht der Loop einen tool_use-Block, schlägt er per block.name in der Dispatch Map nach, führt aus und gibt das Ergebnis als tool_result zurück. Genau derselbe Weg wie bei bash.
# Dispatch map: name → handler lambda TOOL_HANDLERS = { "bash": lambda **kw: run_bash(kw["command"]), "read_file": lambda **kw: run_read(kw["path"], kw.get("limit")), "write_file": lambda **kw: run_write(kw["path"], kw["content"]), "edit_file": lambda **kw: run_edit(kw["path"], kw["old_text"], kw["new_text"]), }
Wie Dispatch-Routing funktioniert
Das folgende Widget zeigt einen möglichen tool_use-Aufruf des Modells und wie er zur zugehörigen Python-Funktion geroutet wird. Entscheidend: block.name bestimmt den Weg.
safe_path: eine Sicherheitslinie, die nicht fehlen darf
Wenn der Agent Dateizugriff erhält, ist Pfad-Escape das häufigste Sicherheitsproblem: Das Modell soll in /home/user/project/ arbeiten, sendet aber read_file("../../etc/passwd").
s02 hat dafür eine kleine Schutzfunktion:
def safe_path(p: str) -> Path: path = (WORKDIR / p).resolve() # normalisieren, .. und Symlinks auflösen if not path.is_relative_to(WORKDIR): raise ValueError(f"Path escapes workspace: {p}") return path
Entscheidend sind .resolve() + .is_relative_to(): zuerst auf absoluten Pfad normalisieren, dann prüfen ob er noch in der Sandbox liegt. Fehlt ersteres, kommt foo/../../etc durch; fehlt letzteres, gibt es gar keine Prüfung.
Pfadsicherheit einschätzen
Fünf Pfade, die das Modell als read_file-Parameter senden könnte. Welche lässt safe_path durch, welche blockt es? Annahme: WORKDIR = /home/user/project.
Keine gefährlichen Tools in den Agent packen
Tools hinzufügen ist einfach — aber jedes neue Tool erweitert die Handlungsmöglichkeiten des Modells. s02 hat für bash eine Blacklist (rm -rf /, sudo, shutdown) und für write_file die safe_path-Beschränkung. Vor dem Hinzufügen eines Tools in die Produktion drei Fragen stellen:
- Kann dieses Tool irreversible Aktionen auslösen? (rm, E-Mail senden, git push)
- Was könnte es leaken? (env vars, .ssh, Cookies)
- Kann fehlerhafte Ausgabe als Befehl interpretiert werden? (prompt injection via tool output)
Lektion s07 fügt eine Berechtigungsschicht hinzu, die diese Entscheidungen deklarativ aus dem Code herauszieht.