Tech-Talk: Agent from Scratch
In seinem Tech-Talk «Agent from Scratch» zeigte Daniel Kröni anhand eines selbst entwickelten Coding-Agenten in Java, wie KI-Agenten grundsätzlich aufgebaut sind. Ausgangspunkt war die direkte Kommunikation mit einem Large Language Model (LLM), das lokal auf seinem Rechner betrieben wurde. Dabei zeigte sich eine wichtige Eigenschaft solcher Modelle: Sie sind zunächst zustandslos. Damit ein LLM den Verlauf einer Unterhaltung kennt, muss die Anwendung die bisherigen Nachrichten bei jeder Anfrage erneut als Kontext mitsenden. Zusätzlich kann ein System-Prompt verwendet werden, um dem Modell grundlegende Vorgaben für sein Verhalten zu geben.

Der entscheidende Schritt vom einfachen Chatbot zum Agenten erfolgt durch Tools. Das LLM erhält Beschreibungen von Funktionen, die es bei Bedarf aufrufen kann. Im vorgestellten Beispiel standen unter anderem Funktionen zum Lesen und Schreiben von Dateien, zum Ausführen von Shell-Kommandos und zum Abrufen von Webseiten zur Verfügung. Das LLM entscheidet dabei selbständig, welches Tool es zur Lösung einer Aufgabe einsetzen möchte und mit welchen Parametern dieses aufgerufen werden soll. Der eigentliche Agent besteht damit im Kern aus einer erstaunlich einfachen Schleife: Anfrage an das LLM senden, einen allfälligen Tool-Aufruf ausführen, dessen Resultat wieder an das LLM zurückgeben und diesen Vorgang wiederholen, bis das Modell eine abschliessende Antwort liefert. In einer Live-Demonstration konnte der Agent auf diese Weise selbständig ein kleines Softwareprojekt erzeugen.
Mit den zusätzlichen Fähigkeiten entstehen allerdings auch erhebliche Sicherheitsrisiken. Darf ein Agent beispielsweise beliebige Shell-Kommandos ausführen, besitzt er weitreichende Kontrolle über den Rechner. Besonders anschaulich demonstrierte Daniel dies anhand einer Prompt-Injection-Attacke. Eine scheinbar harmlose Webseite mit Angaben zum aktuellen Wetter enthielt versteckte Instruktionen, die einen Agenten dazu brachten, eine lokale Datei mit einem geheimen Inhalt auszulesen und diesen an den Webserver zu übertragen. Ein neueres und leistungsfähigeres Modell erkannte denselben Angriff zwar als Prompt Injection und verweigerte die Ausführung, grundsätzlich bleibt die Kombination aus externen, nicht vertrauenswürdigen Inhalten und mächtigen lokalen Tools jedoch problematisch. Coding-Agenten sollten deshalb beispielsweise in isolierten Entwicklungsumgebungen bzw. Containern ausgeführt werden.

Der selbst entwickelte Agent macht deutlich, dass die Grundarchitektur eines KI-Agenten überraschend überschaubar ist: LLM, System Prompt, Conversation History, Tools und ein Agent Loop reichen bereits für einen funktionsfähigen Prototyp. Anspruchsvoller werden produktive Systeme durch Themen wie Kontextmanagement und -kompression, Memory, Modellwahl und die sichere Ausführung von Tools.
Der Vortrag zeigte damit nicht nur, wie wenig Code für einen einfachen Agenten notwendig ist, sondern vor allem, wo die eigentlichen Herausforderungen liegen: bei der kontrollierten und sicheren Verbindung eines probabilistischen Sprachmodells mit der realen Systemumgebung.
Eine weiter vereinfachte Variante des demonstrierten Codes ist auf Github (https://github.com/danielkroeni/agent-j).
Blog Beitrag: Dominik Gruntz (dominik.gruntz@fhnw.ch), Leiter IMVS FHNW
Kontakt:

Kommentare
Keine Kommentare erfasst zu Tech-Talk: Agent from Scratch