Ein A(I)FK Experiment

Zusammenfassung superkurz

Ich wollte wissen was geht und ob es überhaupt möglich ist! Und - es muss irgendeinen Markt dafür geben, auch wenn er sich mir nicht erschließt.

KI ist überall

Man kann entsetzt, begeistert, skeptisch, positiv oder negativ gegenüber Large Language Modellen (LLM - gemeinhin als KI oder engl. AI bezeichnet) sein. Was man fast nicht mehr kann, ist sie zu ignorieren.

Zu dominant drängen sich diese in verschiedenste Bereiche unseres Lebens, auch wenn wir das garnicht merken. Ob man für einen Assistenten bezahlt, in der Hotline mit einem Kommuniziert oder ob nur unsere allenorts gesammelten Daten darüber ausgewertet werden, praktisch jeder ist von KI betroffen.

vibe Coding

Von Berufs wegen habe ich viel mit Servern und ein wenig mit Scripting zu tun. Typischerweise recherchiere ich im Internet, schlage in einem Buch zur entsprecheden Syntax nach und kopiere und texte mir mein Script oder meine YAML Datei zusammen.

Manchmal will der Knoten in meinem Kopf nicht aufgehen. Dann wünsche ich mir einen Ansprechpartner, den ich auch um 23:00 Uhr mit meiner Frage nerfen kann. Ohne schlechtes Gewissen.

Probier’ doch mal… Mistral, Claude, Cursor… nein - ChatGPT ist ungeeigent. Hmm - Ja, Nein, vielleicht, ich schau mal.

Dann eines Abends, ich brüte gerade über einer YAML Datei, die via AWX meine Server mit ansible konfigurieren soll. Will halt irgendwie nicht so wie es soll. In meiner Notiz App sind verschiedene Schlagworte zu dem Thema abgelegt. Ich ringe mich zu Cursor durch. Herunterladen, Appimage starten, Registrieren. Ein Git Repository einrichten, jetzt kanns losgehen. Eine recht einfache Frage an den Assistenten gestellt, 2 Minuten später steht ein Gerüst aus mehereren Dateien inklusive eines Inventories und einer bunten README.md. Commiten, ins AWX pullen - läuft nicht. Schließlich kennt Cursor meine Umgebung nicht. Playbook durchlesen, Parameter richtig setzen - läuft.

Ich finde das recht witzig und lasse den Assistenten noch ein paar Test Codeblöcke erstellen, klappt alles ganz gut.

Testdaten sind nett. Ich brauche etwas um den Assistenten zu fordern. Etwas das nicht sowieso überall aus einem Repo geclont werden kann. Ich Notiere mir die Eckpunkte zu einem Projekt, die Meilensteine welche erreicht werden müssen, was nice to have und was mandatory ist.

Das Projekt

Das Projekt an sich ist Sinnfrei. Aber es lässt sich nicht einfach überlisten. Die Schnittstellen sind vorgegeben, die Ziele auch. Es soll ein Second Life Bot erstellt werden, der mithilfe eines LLM Unterhaltungen führen kann. Gibts schon, aber ich will es neu erfinden.

Eine interne Vorgabe ist, keine Zeile Code selber schreiben. Maximal Werte debuggen.

An den Start geht in der ersten Runde Cursor. Claude.ai und Mistral’s vibe sollen bei Bedarf unterstützen, insbesondere da die freien Token recht schnell aufgebraucht sind. Andere Modelle dürfen zwar testweise auch Code generieren, fallen aber super schnell raus, da der Code mir nicht brauchbar erscheint.

Der Docker Container um den Bot zu beherbergen ist Freeware und gut via API steuerbar.

Die Kommunikation soll ein Flask-Server übernehmen.

Los gehts!

Das Coden an sich

Einem Agent zu sagen, jetzt mach mal dies oder jenes in Scriptsprache soundso ist nicht schwer. Ein wenig aufwändiger ist es, den überblick zu behalten. So ein Coding Assistent ballert eine Menge Zeilen raus, blind vertrauen sollte man dem aber nicht. Auch wenn der Code auf Anhieb läuft, muss er doch vielleicht mal gewartet werden, allso immer schön mitlesen was die KI das so vor sich hin schustert.

Ein LLM von einem eingeschlagenem Pfad abzubringen ist sehr schwierig. Ein Verbessere hier und ändere da geht meisst ganz gut. Ein “mach das anders” führte nicht zum Ziel. Debuggen ist mühsam, ging aber. Der Agent baute viele Debug-audgaben ein, ich repromptete die Fehler und schritt für schritt gings zickzack voran.

Kleine Aufgaben erledigt der Agent besser als das Große ganze.

Mistral’s cli Werkzeug “vibe” kann einen Server in wenigen Sekunden in Grund und Boden konfigurieren, in dem er Webservice, Firewall und Systemd Files “verbessert”. Finger weg davon! In (s)einem Ordner auf der HDD kann vibe sich austoben, an echte Konfig-Dateien darf er nicht mehr.

Ein Coding Assistent glaubt sich immer im Recht, Fehler machen ist nicht vorgesehen.

Das Ergebnis

Variante 1

Ein python Programm, welches am Webserver lauscht, eingehende IM Nachrichten parst und den Textanteil an ein LLM weiterreicht. Die Antwort wird wieder richtig zugeordnet, ebenfalls geparst und als Antwort IM gesendet. Dem habe ich noch einen Rollenkontext, einen Charakter wenn man so will, verpasst. Das war nicht allzu schwierig, auch wenn die Performance nicht so berauschend war. Was allerdings rauschend weniger wurde waren meine Token, die verbrauchte mein Avatar ziemlich fix. Zudem wollte ich einen Bot der auch im lokalen Chat mitlauscht, was ich aber mit Variante 3 wieder verwarf.

Variante 2

Diesem Hunger an Token wollte ich entgegnwirken, insbesondere im lokalen Channel. Der Bot sollte auch nicht zu allem seinen Senf hinzufügen. Ich entschied mich für ein paar Grußformeln und den Namen des Bots, welche eine Interaktion triggern sollten. Darauf reagierte er auch brav. Nur ist es nicht immer passend und manchmal recht störend immer den Namen des Bots hinzuzufügen, außerdem war der tokenverbrauch immer noch zu hoch.

Die Lösung sollte ein Parser sein, der gängige Phrasen erkennt und beantwortet ohne das LLM zu kontaktieren. Dies fügte ich auch für IM’s hinzu. Inspiriert war das von Joseph Weizenbaums KI ELIZA aus den 60er Jahren. Das war zwar aufwändiger als gedacht, klappte aber erstaunlich gut.

Variante 3

Die Phrasen und die Antworten von ELIZA lies ich von verschiedenen LLM Modellen an meine beiden Charaktertypen anpassen, was bei einem besser, beim anderen schlechter funktionierte. Ich hatte die Idee, Fallbackantworten kontinuierlich durch ein LLM in die Pattern Liste einarbeiten zu lassen, was ich auch immer noch mache. Das führte zu einer deutlichen Häufung von unpassenden kommentaren im lokalen Chat, worauf ich diese Funktion wieder entfernte. Nach einigen experimenten entschied ich mich, den “öffentlichen” Bot ausschließlich mit Patternmatching, den “privaten” weiterhin mit LLM zu betreiben.

Schwachstellen

Eine klare Schwachstelle des Pattermatching sind Schreibfehler, Slangausdrücke und Lautsprache die sich schwer vorhersagen lassen. Ich habe bereits verschiedene Fuzzylogic Methoden versucht, um das abzuschwächen, bisher allerdings nur mit geringem Erfolg. Also ganz klar: Input Schwachsinn?, Output Schwachsinn!

Der Bot hat ca. 4 Antworten je Matching, wobei ähnliche Pattern zum selben Matching füheren. Spätestens wenn man 5 mal “Hallo” sagt, kommt eine wiederholte Antwort. Hallo, Hi, Hey, Huhu und Hola hätten den gleichen Effekt.

Mehrere Matchings in einem Satz kann der Bot nur einmal zuordnen. “Ich liebe Pizza” würde könnte also zu einer leidenschaftlichen oder einer hungrigen Antwort führen…

Ausführlich

Warum kommt man auf eine solche Idee?

Grund 1

Wenn sich einer mit meinen Bots vergnügt, geht er mir nicht auf den Geist. Kommt dir das bekannt vor:

UserXY: Hi | Hey | Hallo
Ich: Hallo
UserXY: { Willst Du mit mir diese Posebälle ausprobieren? |  Möchtest Du etwas Spaß mit mir haben | WANNA HAVE SEX (sic!)}
Ich: nö
UserXY: { Egal, alles was jetzt kommt interessiert mich nicht mehr }
Ich: mein Teleport läuft schon... 

Aber irgendwie müssen diese Typen ab und zu Erfolg haben, sonst würden sie es nicht immer und immer wieder versuchen. Ich stelle mir das so vor, als würde ein Typ von Disco zu Disco latschen und einfach jedes weibliche Wesen mit “Haste Bock?” begrüßen - und jedes 100000. mal klappts. Wäre doch möglich oder?

Grund 2

Ich habe mir schön länger überlegt ein LLM (landläufig KI genannt) mit einem Avatar zu koppeln. Ein SL Partner, der immer Zeit hat, immer gute Laune uswusf. Das hat auch sehr gut funktioniert. Meine (teuren) Token wollte ich aber nicht an - nennen wir sie hochfokusierte - verbraten. Ausserdem wollte ich nicht immer 2 SL Viewer geöffnet haben, das ist ja wie selbstgespräche führen. Also habe ich mir den Code für ELIZA auf github angesehen. ELIZA ist eine 1964 - 1967 von Joseph Weizenbaum entwickelte KI, die einen Psychotherapeuten verkörpert. Das Prinzip war einfach, erkennt der Bot wortphrasen gibt er die passende Antwort, sonst dreht er das ganze einfach zur Frage um, oder fordert auf das Thema zu wechseln.

Ich habe das ein wenig angepasst und vor allem die Wortpattern und die Antworten dorch verschiedene LLM’s bearbeiten lassen. Das mache ich auch immer noch um die Ausgabe und die Erkennung zu verbessern.

Grund 3

Ist das jetzt ein Extra Grund, oder ist das nur 2a - egal. SL headless. Meine Bots leben in Docker-Containern. Meine Bots haben ein Dashboard, welches mir anzeigt, ob es ihnen gut geht, ob sie arbeiten und ob sie Geld verdienen. Arbeiten sie nicht, werden sie geparkt und ich bekomme eine Nachricht.

Grund 4

Lernen KI unterstützt zu coden, konfigurieren, auswerten usw. Die Erfahrungen hier waren sehr gemischt. Die unterschiedlich fokusierten LLM’s waren ebenso unterschiedlich hilfreich. Gelernt habe ich aber eine Menge über vibe-coding, vibe-debugging und auch ein paar ganz neue Schimpfwörter, die mir aber ganz ohne Unterstützung eingefallen sind.

Fazit

Cool wie schnell man mit LLM Unterstützung eine Codebasis hat, frustrierend wie wenig die KI sich selbst verbessern kann, wenn sie einmal auf dem Irrweg ist. Dann besser ganz neu anfangen oder von Hand machen.

This article was updated on Februar 7, 2026