ADMIN

2024

11

2024-10-30T12:00:00

Cloudmanagement

PRAXIS

046

KI

Large Language Model

Mit freien Tools zum KI-Assistenten

Smarte Helfer

von Andreas Stolzenberger

Veröffentlicht in Ausgabe 11/2024 - PRAXIS

KIs sind nicht kreativ und können keine Entwickler ersetzen. Aber das umfassende Wissen eines LLM kann Entwicklern bei der Fehlersuche und der Erweiterung ihrer Programme helfen. Ein KI-Assistent mit ausschließlich freien Tools und LLMs ohne Clouddienst lässt sich in wenigen Schritten oder sogar direkt in den Code-Editor integrieren.

Ende letzten Jahres mussten wir feststellen, dass es noch keine besonders gute Idee ist, wenn sich Admins von KI-Helfern Skripte schreiben lassen (siehe Artikel "Chatbots für das Scripting" in IT-Administrator 12/2023 [1]). Allerdings kam bei unseren Tests heraus, dass ein KI-Assistent im Stil von IBMs WatsonX für Ansible (Ansible Lightspeed) durchaus bei der Entwicklung helfen kann. Leider hat IBM die kostenfreie Tech-Preview-Phase des Ansible-KI-Assistenten kurz nach dem Erscheinen unseres Artikels beendet, sodass das Tool nun nur noch zahlenden Kunden zur Verfügung steht.
Das Konzept, ein Large Language Model (LLM) in den Code-Editor (Microsoft VSCode) zu integrieren, funktioniert in der Zwischenzeit aber auch ganz gut mit frei verfügbaren Tools und KI-Modellen. Ein solcher Ansatz hat den Vorteil, dass Ihre Anfragen und zu analysierende Codefragmente an keinen Webanbieter wie Stability-AI oder Google gesendet und dort zur weiteren Analyse gespeichert werden. Für den hauseigenen KI-Assistenten benötigen Sie drei Komponenten:
- Ein passendes LLM,
Ende letzten Jahres mussten wir feststellen, dass es noch keine besonders gute Idee ist, wenn sich Admins von KI-Helfern Skripte schreiben lassen (siehe Artikel "Chatbots für das Scripting" in IT-Administrator 12/2023 [1]). Allerdings kam bei unseren Tests heraus, dass ein KI-Assistent im Stil von IBMs WatsonX für Ansible (Ansible Lightspeed) durchaus bei der Entwicklung helfen kann. Leider hat IBM die kostenfreie Tech-Preview-Phase des Ansible-KI-Assistenten kurz nach dem Erscheinen unseres Artikels beendet, sodass das Tool nun nur noch zahlenden Kunden zur Verfügung steht.
Das Konzept, ein Large Language Model (LLM) in den Code-Editor (Microsoft VSCode) zu integrieren, funktioniert in der Zwischenzeit aber auch ganz gut mit frei verfügbaren Tools und KI-Modellen. Ein solcher Ansatz hat den Vorteil, dass Ihre Anfragen und zu analysierende Codefragmente an keinen Webanbieter wie Stability-AI oder Google gesendet und dort zur weiteren Analyse gespeichert werden. Für den hauseigenen KI-Assistenten benötigen Sie drei Komponenten:
- Ein passendes LLM,
- ein Tool, das das LLM betreibt und den Zugang via Rest-API, ähnlich der von Chat-GPT, für andere Applikationen bereitstellt sowie
- ein Plug-in, das den VSCode-Editor mit dem LLM verbindet.
Zwei weitere optionale Komponenten, können den Umgang mit dem KI-Assistenten wesentlich verbessern:
- Ein passender Hardware-KI-Accelerator beschleunigt die Antworten des LLM. Auch wenn andere Anbieter nun langsam eigene Produkte vorstellen, führt aktuell kaum ein Weg am Platzhirsch Nvidia vorbei – wobei hier schon eine moderne Grafikkarte (RTX 40xx) sehr gute Ergebnisse erzielt.
- Ein LLM-Trainings-Tool kann zudem ein freies LLM mit eigenen Informationen erweitern.
Dank des Rest-API zwischen Editor und LLM laufen die Applikationen auf separaten Systemen. Sie können somit einen eigenen LLM-Server bauen, sodass die Entwicklersysteme mit den Editor-Instanzen keine eigenen KI-Acceleratoren benötigen. Simple Werkzeuge, um mit einem lokalen LLM zu chatten, gibt es viele. In der Ausgabe 12/2023 hatten wir beispielsweise Oobabooga verwendet, das auch ein OpenAI-kompatibles API bereitstellt. In der Praxis und in Verbindung mit dem VSCode-Plug-in kommen hauptsächlich zwei andere Tools zum Einsatz: LM Studio und Ollama.
LM Studio mit unklarer Lizenz
Von einer kleinen Firma namens "Element Labs Inc." aus Delaware in den USA stammt die Software "LM Studio" [2]. Die Desktopapplikation gibt es für Linux, macOS und Windows. Die UI von LM Studio zeigt Ihnen auf dem ersten Schirm, welche Modelle auf Ihrem Rechner zur Verfügung stehen. Diese lassen sich dann in den Serverdienst laden, um anderen Applikationen auf demselben PC oder anderen im Netzwerk via API auf Anfragen zu antworten. In der UI selbst gibt es zudem ein Chatfenster, in dem Sie mit Ihrem Modell reden können.
Sehr praktisch ist außerdem der Modellbrowser, der eine Suche nach Modellen erlaubt, die frei auf Huggingface zur Verfügung stehen. LM Studio listet zudem die verfügbaren Größen und Quantisierungen auf. Die Software kann Modelle auf CPUs wie auch GPUs ausführen. Der Modellbrowser zeigt bei der Auswahl der verfügbaren Modelle gleich an, ob es vollständig in den VRAM der Grafikkarte passt und sich dort nutzen lässt. Der Server läuft standardmäßig nur auf dem Localhost unter Port 1234, lässt sich aber im LAN freigeben oder auf einen anderen Port einstellen.
LM Studio ist eigentlich gerade für Einsteiger eine sehr simple und übersichtliche Software, die beim Umgang mit lokalen Modellen hilft. Leider hat das Ganze aber einen Haken: LM Studio ist nicht Open Source. Der Hersteller verweist zwar auf sein GitHub-Repository, doch dort gibt es nur eine Reihe kleiner freier Tools für den Umgang mit LM Studio und nicht den Quellcode zur Anwendung selbst. Dementsprechend findet sich auf der Homepage auch der Hinweis, dass Nutzer die Software nur für den privaten Gebrauch frei nutzen dürfen.
Wer das Tool geschäftlich verwenden möchte, soll ein Formular ausfüllen. Der Hersteller verrät dabei aber nicht, ob und wie viel Gebühr die kommerzielle Nutzung kostet. Offensichtlich hat das junge Unternehmen noch keine konkrete Lizenz und ein passendes Preismodell für seine Anwendung erstellt.
Bild 1: Die LM-Studio-UI listet verfügbare Modelle und Varianten auf und gibt die Details der Huggingface-Karte des Modells aus.
Ollama: Frei und ohne GUI
Anders sieht das beim Open-Source-Tool (MIT Lizenz) Ollama aus. Hier gibt es zwar keine Einschränkungen, was den privaten oder kommerziellen Einsatz angeht, aber auch keine hübsche GUI – zumindest nicht im Basispaket. Wie LM Studio läuft Ollama auf macOS, Linux und Windows und dort sowohl auf CPUs als auch auf GPUs. Allerdings beschränkt sich die Software auf die Kommandozeile. Dort laden Sie über Befehle wie ollama pull <model> die benötigten LLMs aus der Ollama-Bibliothek herunter und stellen sie via API mittels ollama serve auf dem Port 11434 zur Verfügung. Wer das Modell ohne API testen möchte, kann es via ollama run <modell> aufrufen und seine Fragen direkt im CLI stellen.
Ollama verwendet ein anderes Modellformat für die LLMs, als das bei LM Studio der Fall ist. Allerdings erweist sich die Bibliothek mit freien Modellen als sehr umfangreich und lässt kaum Wünsche offen. Sollten Sie dennoch ein Modell von Huggingface mit Ollama nutzen wollen, kann das Tool das quantisierte (dazu gleich mehr) GGUF-Format importieren und in das eigene Ollama-Format übertragen. Wem die CLI alleine nicht genügt, findet auf der GitHub-Seite des Projekts eine lange Liste kompatibler Tools und UIs, die mit Ollama arbeiten.
Eine simple aber ausreichend funktionale Desktop-Applikation ist dabei hollama [5]. Dieses bietet zwar nicht ganz so viele Funktionen wie die UI von LM Studio, aber für die meisten Funktionen genügt es vollauf. Sie können hier mit Ihrem KI-Modell chatten oder die Ollama-Bibliothek einsehen, um weitere Modelle in die Installation herunterzuladen. Die Chat-Funktion erweist sich bei Aufgaben als nützlich, die über simple Assistenzanfragen zu einzelnen Codeblöcken hinausgehen. In unserem Setup ließen wir unsere LLMs veraltete PHP-Skripte aus dem Admin-Alltag nach Python übersetzen – was überraschend gute Ergebnisse lieferte.
Bild 2: In der hollama-UI chatten Sie mit Ihrem in Ollama geladenen Modell und lassen sich dort Code vorschlagen oder von einer anderen Programmiersprache übersetzen.
InstructLab erweitert Sprachmodelle
Auch das Open-Source-Tool InstructLab [6] von Red Hat offeriert ein simples CLI-Interface, um mit Sprachmodellen zu chatten. Der Fokus dieser Software liegt aber nicht beim Betrieb eines Modells. Intructlab hilft Ihnen, bestehende Modelle mit eigenen Informationen (Skills) zu erweitern. Sie setzen hierbei zunächst ein simples Basismodell ein (etwa die freien IBM-LLMs Granite-7b oder Merlinite-7b) und fügen diesem dann eigene Informationen hinzu.
Dieses Wissen formatieren Sie in einer speziellen YAML-Datei namens "qna.yml" (für "Questions and Answers"). Diese enthält mehrere Blöcke an Informationen. Zu jedem Informationsblock (Context) gibt es eine Reihe Fragen (Questions) und die dazu korrekten Antworten (Answers). Mit solchen Skills lässt sich ein neues Modell trainieren und dieses dann in den Anwendungen nutzen. Wenn Entwicklungsabteilungen beispielsweise eigene Funktionsbibliotheken oder Styleguides verwenden, die reguläre "Coder"-LLMs nicht kennen, lassen sich diese Informationen in das jeweilige LLM einbauen.
Modelle ausprobieren
Welches der vielen frei verfügbaren LLMs am besten funktioniert, muss jeder Nutzer je nach Anwendung und Hardware selbst herausfinden und dazu die verfügbaren LLMs einfach ausprobieren. Denken Sie sich eine Reihe relevanter Fragen für Ihr Einsatzgebiet aus und lassen Sie diese von mehreren Modellen beantworten. Das Modell mit den besten Antworten sollte dann für Ihr Einsatzgebiet passen. Dennoch sollten Sie ein paar Grundlagen bei der Vorauswahl beachten.
Aktuell gibt es eine Art Wettstreit der KI-Hersteller, wer denn nun das größte und schnellste Modell mit den meisten Trainingsparametern hat. Wenn Sie einen KI-Assistenten für eine bestimmte Aufgabe wie die Unterstützung von Programmierern verwenden, muss das verwendete Modell aber nicht über die komplette Erdgeschichte der letzten vier Milliarden Jahre Bescheid wissen. Je größer die Modelle werden, desto mehr CPU/GPU-Ressourcen benötigen sie für ihre Antworten.
Setzen Sie eine Grafikkarte für die KI ein, muss das verwendete LLM vollständig in das VRAM der Karte passen. Grob überschlagen brauchen Sie für jede Milliarde Trainingsparameter etwas weniger als ein GByte Video-RAM. Ein "16B"-Modell mit 16 Milliarden Parametern kommt also mit rund 13 GByte VRAM aus. In unseren Testsetups konnten wir ein 30B-Modell in die 24 GByte Arbeitsspeicher unserer RTX 4090 laden. Die Performance war allerdings bescheiden und das Modell nicht besonders gut auf die Codegenerierung ausgerichtet.
Modelle, die auf regulärer PC-Hardware laufen, sind "quantisiert". Das heißt, sie setzen eine reduzierte Genauigkeit bei Fließkomma-Operationen ein, um damit Arbeitsspeicher zu sparen. Es gibt daher immer wieder Versuche, ein eigentlich zu großes Modell mithilfe einer zu großen Quantisierung (weniger als 4 Bit) doch noch in das RAM zu quetschen. Das führt meistens zu unpräzisen Antworten. Setzen Sie lieber Modelle mit weniger Trainingsparametern bei einer moderaten Quantisierung (4 bis 8 Bit) ein.
In der Praxis sollten für KI-Assistenzaufgaben Modelle mit sechs bis 16 Milliarden Trainingsparametern ausreichen. In unseren Tests verwendeten wir beispielsweise "deepseek-coder-v2:16b", das neben funktionierendem Python-Code auch eine längere Erklärung mitliefert, wie der Code funktioniert und warum das Modell ihn so generiert hat. "codellama:16b" liefert funktionierenden Code mit einer kurzen, aber passenden Dokumentation dazu. Beide Modelle sind dabei auf Chat und Codegenerierung optimiert.
Das kleine "codegemma:7b" bietet nur wenig Zusatzdokumentation, dafür aber einen ausführlicheren Code mit Kommentaren. Des Weiteren arbeitet es deutlich flotter als die 16B-Modelle. Diese freie Variante ist für die "Code-Completion" optimiert – also für den Einsatz als "Assistenz", wie wir ihn in diesem Artikel vorstellen. Im weiteren Setup kommt daher hauptsächlich das codegemma:7b-Modell in Verbindung mit ollama zum Einsatz.
Für die Übersetzung unserer alten PHP-Codes befragten wir übrigens sowohl codegemma als auch deepseek-coder. Die Endergebnisse bestanden meist aus einer Mischung beider Antworten. Codegemma lieferte den besseren Basiscode, ließ aber das ein oder andere Detail einfach weg, wie beispielsweise String-Formatierungen. Deepsek-coder auf der anderen Seite neigt zu übertrieben langen und teilweise umständlichen Codeblöcken, berücksichtigt aber Feinheiten wie "variable.encode('utf-8')". Ein Beispiel: Eines der alten PHP-Tools fragt eine MySQL-Datenbank ab und stellt die Ergebnisse in einer HTML-Tabelle dar. Codegemma gibt bei der Übersetzung nach Python (mit Flask) das Programm und das HTML-Template als getrennte Dateien zurück und verwendet dementsprechend das Kommando:
return render_template("template.html", wert1=spalte1 …
Das von deepseek-coder vorgeschlagene Programm hingegen aggregiert die Werte samt HTML-Formatierung in einer String-Variablen samt HTML-Formatierung und gibt diese am Ende via
return render_template_string(html_table)
aus. Wir zumindest bevorzugen das separate HTML-Template, da der Entwickler so die Formatierung der Ausgabe anpassen kann, ohne den aktiven Programmcode verändern zu müssen.
Bild 3: Der Entwickler markiert Teile des Codes im Editor und formuliert eine Anfrage an das LLM…
VSCode-Integration
Um nun die Assistenzfunktion von Ollama mit dem Codegemma-Modell direkt in den Editor zu bekommen, braucht es das passende VSCode-Plug-in namens Continue [7]. Die quelloffene Erweiterung baut die Funktionalität von Code erst einmal mit einem Chatfenster aus. Hier können Sie dem Modell interaktiv Fragen stellen – unabhängig vom aktuell bearbeiteten Code. Viel interessanter ist jedoch die interaktive Anfrage. Hierbei markieren Sie Teile des Codes und formulieren eine passende Frage oder Aufgabe dazu (siehe Bilder 3 und 4).
Bild 4: … und über das Continue-Plug-in landen die Antworten des KI-Modells direkt im Code, sodass der Anwender nur noch die geänderten Zeilen annehmen oder ablehnen muss.
Continue fügt die vom LLM gelieferten Änderungen direkt in den Code ein, sodass Sie jeden vorgeschlagenen Block akzeptieren oder zurückweisen können. Zudem kennt das Plug-in die Funktion "Autocomplete", also einen Vorschlag des LLM, den aktuell bearbeiteten Code fortzusetzen. Das Tool "Tab Autocomplete" befindet sich aktuell aber noch in der Beta-Phase und liefert nicht immer die gewünschten Ergebnisse.
Die Konfiguration von Continue erfolgt in einer simplen YAML-Konfigurationsdatei. Dort legen Sie fest, welche Modelle zur Verfügung stehen und wie Continue diese abfragt. In unserem Setup sieht das Setting beispielsweise so aus:
  "models": [
    {
      "title": "codegemma",
      "provider": "ollama",
      "model": "codegemma:7b"
    },
    {
      "title": "deepseek",
      "provider": "ollama",
      "model": "deepseek-coder-
       v2:16b"
    }
Dabei lassen sich auch verschiedene Modelle für Interaktionen und Autovervollständigung angeben. Verfügt das Setup über mehrere Modelle, können Sie bei der interaktiven Abfrage via Drop-down auswählen, welches nun befragt werden soll. Zudem besteht die Möglichkeit, so etwas wie "Abfragemakros" (Custom Commands) festzulegen. Für längere Anfragen richten Sie dabei einen Kurzbefehl ein im Stil von
  "customCommands": [{
      "name": "test",
      "prompt": "{{{ input }}}\n\nWrite a comprehensive set of unit tests for the selected code….
In der Praxis funktioniert der Codeassistent bereits erstaunlich gut – zumindest, solange weit verbreitete Skriptsprachen wie Bash, PHP oder Python zum Einsatz kommen. Leider haben wir noch immer kein freies Modell gefunden, das gute Ergebnisse mit aktuellen Ansible-Versionen erzielt. Das Generieren von komplett neuem Code aus einer simplen Anfrage lässt nach wie vor zu wünschen übrig. Wenn es aber darum geht, bestehenden Code zu erweitern oder zu optimieren, leisten die Modelle bereits brauchbare Arbeit.
Fazit
Es bleibt dabei: Eine zeitgemäße KI kann keinen guten Programmierer ersetzen – und wird das mit der aktuellen Transformer-Technik wohl nie schaffen. Jedoch leisten freie LLMs mit dem Editor-Plug-in gute Dienste als Codeassistenten, die dabei helfen, bestehenden Code zu erweitern, zu verbessern und von Fehlern zu befreien. Zu unserer Überraschung klappte auch die Übersetzung einfacher Programme von einer Sprache in die andere vergleichsweise gut – zumindest bei den von uns getesteten PHP-zu-Python-Aufgaben. Das Beste daran: Alle Tools, die Sie benötigen, gibt es kostenfrei als Open Source und Sie arbeiten direkt auf Ihren lokalen Systemen. Sie müssen weder bei irgendwelchen Diensten monatliche Abos abschließen noch Ihren Quellcode in eine Cloud hochladen und damit im Zweifelsfall den KI-Dienstanbietern darauf Zugriff gewähren.
(dr)
Link-Codes
[2] LM Studio: https://lmstudio.ai/
[4] Bibliothek mit freien Ollama-Modellen: https://ollama.com/library
[6] InstructLab: https://instructlab.ai/
[7] VSCode-Plug-in Continue: https://www.continue.dev/