Ein Agent, der vorher fragt
- Matt
Nach der Build habe ich mir den Teil vorgenommen, der mich wirklich betrifft: Wie sieht ein Agent aus, der vor einer schreibenden Aktion fragt?
Das Problem
Ein Werkzeug, das nur liest, ist unkritisch. Eines, das schreibt, löscht oder etwas anstößt, hängt davon ab, dass ein Sprachmodell die Absicht des Nutzers richtig verstanden hat. Bei „räum die alten Testcontainer weg” ist die Frage, was alt bedeutet und was Testcontainer sind, und beides beantwortet das Modell aus dem Zusammenhang.
Das ist keine Kritik am Modell. Es ist der Grund, warum die Entscheidung nicht dort liegen sollte.
Die einfache Umsetzung
Man braucht dafür keinen neuen Rahmen. Ein Werkzeug kann selbst zweistufig sein:
[Description("Bereitet das Entfernen gestoppter Container vor und liefert die Liste zur Bestätigung.")]
static async Task<string> ContainerAufraeumenVorschau()
{
var kandidaten = await Docker.Run("ps", "-a", "--filter", "status=exited", "--format", "{{.Names}}");
_vorgemerkt = kandidaten.Split('\n', StringSplitOptions.RemoveEmptyEntries);
return $"Zum Entfernen vorgemerkt: {string.Join(", ", _vorgemerkt)}. " +
"Bestaetigung durch den Benutzer erforderlich.";
}
[Description("Fuehrt das zuvor vorbereitete Entfernen aus. Nur nach ausdruecklicher Bestaetigung des Benutzers aufrufen.")]
static async Task<string> ContainerAufraeumenAusfuehren(
[Description("Muss exakt 'JA' lauten, vom Benutzer bestaetigt.")] string bestaetigung)
{
if (bestaetigung != "JA") return "Abgebrochen, keine Bestaetigung.";
...
}
Das funktioniert, hat aber einen Haken, den man kennen muss: Die Bestätigung geht durch das Modell hindurch. Es kann selbst „JA” einsetzen, wenn es glaubt, der Nutzer habe zugestimmt. Der Schutz ist damit eine Konvention, keine Sperre.
Der Unterschied
Genau hier setzt der Harness an. Wenn die Freigabe außerhalb des Modellkontexts stattfindet, also im Client und mit einer echten Nutzerinteraktion, ist sie nicht mehr Teil dessen, was das Modell erzeugen kann.
Das ist der Unterschied zwischen einer Absprache und einer Absicherung, und er ist größer, als er beim Lesen wirkt.
Wo ich stehe
Mein Homelab-Server bleibt vorerst lesend. Die zweistufige Variante habe ich gebaut und wieder ausgebaut, weil sie Sicherheit vortäuscht, wo keine ist. Sobald die Freigabe im Client erzwungen wird, sieht die Rechnung anders aus.
Bis dahin gilt für mich die einfachste Regel: Alles, was ich nicht ohne Nachdenken rückgängig machen kann, gehört nicht in die Werkzeugliste.