Die Verwendung der Open WebUI für die Verwaltung und Integration von LLM-Modellen (Large Language Models) stellt eine effektive Möglichkeit dar, um benutzerdefinierte Funktionen zu erstellen und auszuprobieren. Die Benutzeroberfläche, die lokal unter der Adresse http://localhost:8080/auth/ erreichbar ist, bietet einen benutzerfreundlichen Einstiegspunkt für die Verwaltung von Modellen und deren Einsatz. Der Prozess beginnt mit der Registrierung eines neuen Benutzers, der es ermöglicht, lokale Anmeldeinformationen zu erstellen, die ausschließlich für den Server gültig sind. Nachdem ein Benutzerkonto erstellt wurde, gelangt man in das Administrationspanel, wo weitere Funktionen konfiguriert werden können.

In der neuesten Version von Open WebUI (0.5) ist es notwendig, zunächst eine neue Funktion hinzuzufügen, um mit einem Modell wie dem IBM Granite3-Dense LLM zu arbeiten. Dieser Vorgang wird durch die Eingabe eines Skripts, das aus einer spezifischen GitHub-Quelle geladen wird, und das Speichern in das dafür vorgesehene Textfeld erreicht. Nachdem die Funktion hinzugefügt wurde, erscheint das Modell als Option im Interface, wo es zur Bearbeitung von Benutzeranfragen verwendet werden kann.

Ein wichtiger Schritt bei der Konfiguration ist die Auswahl des Modells aus einer Liste verfügbarer LLM-Modelle. In diesem Fall wurde das Modell granite3-dense:8b verwendet, das für die Beantwortung von Anfragen genutzt werden kann. Im Beispiel wurde ein einfacher Fun Fact über das Römische Reich abgefragt, wobei das Modell eine entsprechende Antwort lieferte. Ein Vergleich mit verschiedenen Modellversionen, wie dem granite3-dense:2b, zeigt die Leistungsfähigkeit des Modells bei der Beantwortung komplexer Fragen.

Die Möglichkeit, mehrere Modelle auszuprobieren, und der Umgang mit spezifischen Endpunkten und Modellen wie ollama LLM bieten eine tiefergehende Kontrolle über die Funktionsweise des Systems. Diese Variabilität in der Auswahl und Konfiguration von Modellen eröffnet zahlreiche Anwendungsmöglichkeiten, von der einfachen Textgenerierung bis hin zur Modellintegration in komplexere Systeme.

Ab der Version 0.5 hat sich das Interface allerdings verändert. Einige Funktionen, die in früheren Versionen zugänglich waren, sind nun nicht mehr sichtbar. Dies betrifft beispielsweise das Menü für Funktionen, das bei der neuen Version nicht mehr angezeigt wird. Um dennoch an die gewünschten Funktionen zu gelangen, kann das AI-Chatfenster verwendet werden, um gezielt nach fehlenden Menüelementen zu fragen.

Ein weiteres Update, das mit Version 0.5 eingeführt wurde, ist die verbesserte Leistung des Systems, obwohl kleinere Bugs, wie das Nichtanzeigen von Ergebnissen im Firefox-Browser, weiterhin auftreten können, wenn das Fenster nicht neu geladen wird. Eine schnelle Antwortzeit ist nur dann gewährleistet, wenn GPUs zum Einsatz kommen, da die CPU-basierte Verarbeitung in einer virtuellen Linux-Maschine langsamer sein kann.

Für erweiterte Datenverarbeitungen können zusätzlich IBM Cloud Pak für Data oder IBM Cloud Services verwendet werden. Diese Tools bieten die Möglichkeit, Daten zu importieren und zu analysieren, beispielsweise durch das Hochladen von CSV-Dateien, die für die Modellbildung und Analyse von Szenarien genutzt werden können. Die Modellbildungsassistenten ermöglichen eine schnelle Zuweisung von Ressourcen und die Erstellung von Analyseparametern, was den gesamten Prozess vereinfacht und beschleunigt.

Neben der Konfiguration von LLM-Modellen und der Nutzung von Cloud-Diensten gibt es noch andere Aspekte, die beim Arbeiten mit Open WebUI und IBM Granite-Modellen beachtet werden sollten. Es ist wichtig, dass Nutzer sich mit den grundlegenden Konzepten der Modellintegration und -anpassung vertraut machen. Das Hinzufügen von neuen Funktionen und das Verwenden der verschiedenen verfügbaren Modelle erfordert ein grundlegendes Verständnis der API-Schnittstellen und der Art und Weise, wie verschiedene Modelle miteinander interagieren können. Darüber hinaus sollten Nutzer auch die Dokumentation und Tutorials nutzen, um sich mit den spezifischen Anforderungen und der Funktionsweise der verschiedenen Versionen der Open WebUI vertraut zu machen.

Wie man eine virtuelle Maschine mit QEMU und Virt-Manager aufsetzt: Ein praktischer Leitfaden

Um eine virtuelle Maschine (VM) zu erstellen, die auf QEMU läuft und den QEMU-Guest-Agent (GA) nutzt, sind mehrere Schritte erforderlich. Zunächst muss eine Konfigurationsdatei für den QEMU GA erstellt werden. Hierbei handelt es sich um eine XML-Datei, die im Beispiel als „qemuga.xml“ benannt wird. Die Konfiguration erfolgt durch das Hinzufügen spezifischer Zeilen, die sowohl die virtuelle Maschine als auch den Agenten definieren. Zu diesen Zeilen gehören unter anderem Einstellungen zu den Bindungen und Virtio-Geräten, wie in den entsprechenden Abbildungen und der XML-Darstellung zu sehen. Der Prozess stellt sicher, dass der QEMU GA korrekt mit dem Betriebssystem kommunizieren kann und die Leistung sowie die Interaktivität der VM optimiert werden.

Nachdem die XML-Konfigurationsdatei erstellt und angepasst wurde, lässt sich durch den Befehl virt-install --osinfo list eine Liste aller verfügbaren virtuellen Betriebssysteme abrufen, die für die Installation auf der VM geeignet sind. Mit dem Befehl osinfo-query os kann zusätzlich detaillierte Information zu den OS-Daten angezeigt werden.

Im nächsten Schritt wird der QEMU GA in das Gastbetriebssystem installiert. In einem Linux-Umfeld erfolgt dies über den Befehl dnf install qemu-guest-agent. Nach der Installation des Agents muss der Dienst mit dem Befehl systemctl start qemu-guest-agent gestartet werden, um sicherzustellen, dass die Kommunikation zwischen dem Host- und dem Gastbetriebssystem funktioniert.

Für die Verwaltung der virtuellen Maschinen wird virt-manager verwendet, ein grafisches Tool zur Erstellung und Verwaltung von VMs. Zunächst muss das RedHat-ISO-Image heruntergeladen werden, welches als Installationsquelle für die VM dient. Nachdem das ISO-Image heruntergeladen ist, kann virt-manager mit dem Befehl sudo dnf install virt-manager installiert werden. Nach der Installation lässt sich virt-manager über das Kommando virt-manager starten, wodurch die Benutzeroberfläche für die VM-Verwaltung erscheint.

Mit dem virtuellen Maschinen-Manager können nun VMs erstellt werden. Der Prozess wird durch den „Create a new virtual machine“-Assistenten geführt, der den Benutzer durch die Auswahl des richtigen ISO-Images, der Festlegung von RAM und CPUs, sowie der Festlegung des Speicherplatzes und der Netzwerkkonfiguration leitet. In der Regel wird ein Netzwerkmodus namens „NAT“ verwendet, um der VM Zugang zum Netzwerk zu gewähren, ohne dass sie direkt mit dem physischen Netzwerk verbunden ist.

Nachdem die VM konfiguriert wurde, zeigt der Manager die Einstellungen in der Detailansicht an und ermöglicht es, Änderungen vorzunehmen. Nach dem Start der VM zeigt der Bildschirm das Boot-Splash-Bild und der Statusmonitor von virt-manager zeigt die CPU-Auslastung und den laufenden Status der virtuellen Maschine an. Die virtuelle Maschine kann jederzeit durch Rechtsklick auf das VM-Fenster und Auswahl der „Shutdown“-Option heruntergefahren werden.

Der Vorteil der Nutzung von virt-manager ist, dass der Tool automatisch die erforderlichen QEMU XML-Dateien erstellt, sodass der Benutzer keine manuellen Konfigurationen vornehmen muss. Diese XML-Dateien sind entscheidend für die Virtualisierung, da sie die Konfiguration der virtuellen Hardware und der virtuellen Maschinen-Umgebung spezifizieren. Daher sollte stets überprüft werden, ob der QEMU GA erfolgreich geladen wurde. Dies kann durch den Befehl systemctl status qemu-guest-agent | grep Loaded erfolgen. Sollte der Status „enabled“ anzeigen, ist der Agent erfolgreich aktiviert.

Neben den Grundlagen der VM-Erstellung bietet virt-manager auch eine Reihe von erweiterten Optionen. Dazu gehört die Möglichkeit, virtuelle Maschinen über die Kommandozeile zu erstellen. Mit dem Befehl sudo virt-install --disk lässt sich eine neue virtuelle Maschine erstellen und konfigurieren. Die anschließende Anzeige im virt-manager zeigt alle aktiven Maschinen und deren Status an.

Schließlich wird auch die Integration von Red Hat Ansible thematisiert, das als Automatisierungstool für die Verwaltung von Systemen und VMs dient. Eine grundlegende Einführung in Ansible gibt einen Überblick über die Installation und Konfiguration der Ansible-Umgebung, einschließlich der Ansible Lightspeed-Funktionalitäten, die für fortgeschrittene Automatisierungsaufgaben verwendet werden. Über die Installation von Ansible in Verbindung mit IBM Watsonx Code Assistant wird das Management von VMs und die Automatisierung von Workflows weiter optimiert.

Es ist zu beachten, dass neben der reinen Installation und Konfiguration der virtuellen Maschinen auch die regelmäßige Wartung und Aktualisierung der eingesetzten Tools und Agenten notwendig ist. Nur so kann sichergestellt werden, dass die virtuelle Infrastruktur auf dem neuesten Stand bleibt und Sicherheitslücken vermieden werden. Dabei spielt die ständige Überwachung und der korrekte Betrieb des QEMU GA eine zentrale Rolle, da dieser für die nahtlose Kommunikation zwischen Host und Gast verantwortlich ist. Auch die Integration von Automatisierungstools wie Ansible und IBM Watsonx kann die Effizienz in großen Infrastrukturumgebungen erheblich steigern.

Wie man mit KI-unterstütztem Code-Generieren und Best Practices in Ansible arbeitet

GitHub Copilot und IBM Watsonx Code Assistant revolutionieren die Art und Weise, wie Entwickler mit Automatisierungstools wie Ansible arbeiten. Diese KI-gestützten Werkzeuge bieten nicht nur Codevorschläge, sondern auch Best Practices für die effiziente Implementierung von Aufgaben in Ansible-Playbooks. Durch den Einsatz solcher Tools können Prozesse optimiert und die Produktivität erheblich gesteigert werden.

Im ersten Schritt der Code-Generierung mit GitHub Copilot wird der Benutzer aufgefordert, die Option „Modify using Copilot“ auszuwählen. Nachdem ein einfacher Text wie „this“ oder „is this ok“ eingegeben wird, zeigt GitHub Copilot im Fenster eine vorläufige Code-Empfehlung an. Diese Vorschläge sind vollständig von der KI generiert. Der Entwickler hat nun die Möglichkeit, den Vorschlag zu akzeptieren, indem er auf „Accept“ klickt, oder ihn abzulehnen, indem er „Close“ wählt. Diese Funktion spart nicht nur Zeit, sondern stellt auch sicher, dass der Code den aktuellen Best Practices entspricht, die in der Ansible-Community anerkannt sind.

Ein weiteres Beispiel für den Einsatz von KI-unterstütztem Code-Generieren wird durch IBM Watsonx Code Assistant demonstriert. Dieser bietet die Möglichkeit, mehrere Aufgaben zu kombinieren und in einer einzigen natürlichen Spracheingabe zu verarbeiten. Durch das Kombinieren von Aufgaben in einer Zeile, getrennt durch das „&“-Zeichen, kann IBM Watsonx Code Assistant die Aufgabe in einzelne Teile zerlegen und einen vollständigen Codevorschlag für die Anforderungen eines DevOps-Prozesses liefern. Eine solche Funktion ermöglicht eine viel effizientere Arbeitsweise, da mehrere Aufgaben gleichzeitig definiert und verarbeitet werden können.

In einem konkreten Beispiel wird der Code zum Kopieren einer Konfigurationsdatei (cockpit.conf.j2) auf den Zielhost mit IBM Watsonx Code Assistant generiert. Der Codevorschlag umfasst nicht nur die grundlegende Anweisung zum Kopieren der Datei, sondern auch zusätzliche Parameter wie die Setzung von Berechtigungen (z.B. mode: 0644), die für die Sicherheit und Integrität der Datei auf dem Zielsystem wichtig sind. Diese zusätzlichen Empfehlungen stellen sicher, dass der Code den Sicherheitsstandards und Best Practices entspricht, ohne dass der Entwickler diese manuell hinzufügen muss.

Die Unterstützung durch KI in der Code-Generierung ist besonders nützlich für komplexere Aufgaben, die mehrere Schritte erfordern. Ein Beispiel dafür ist die Erstellung eines Ansible-Playbooks, das mehrere Aufgaben umfasst, wie die Installation von Cockpit, das Kopieren der Konfigurationsdatei und das Starten und Aktivieren des Services. IBM Watsonx Code Assistant ermöglicht es, diese Aufgaben zu kombinieren und den gesamten Ablauf in einem einzigen Schritt zu generieren. Die KI sorgt dabei für die korrekte Reihenfolge der Aufgaben und stellt sicher, dass alle notwendigen Parameter wie enabled: true und state: started korrekt gesetzt sind.

Interessanterweise unterscheidet sich der Prozess der Code-Generierung für mehrere Aufgaben von der für eine einzelne Aufgabe. Während für eine einzelne Aufgabe nur eine einfache Eingabe erforderlich ist, müssen bei der Kombination von Aufgaben spezielle Formatierungen beachtet werden. Die Eingabe muss mit dem Zeichen „#“ beginnen, um von IBM Watsonx als mehrteilige Aufgabe erkannt zu werden. Der Entwickler muss dann jeden einzelnen Schritt durch Drücken der „Enter“-Taste und „Accept [TAB]“ bestätigen, um den Vorschlag zu übernehmen.

Ein weiterer wichtiger Aspekt, der beachtet werden muss, ist die Performance und das Source Matching beim Generieren von Code. IBM Watsonx Code Assistant bietet hier fortschrittliche Funktionen, die eine genauere Zuordnung von Codequellen ermöglichen, sodass die generierten Vorschläge in verschiedenen Umgebungen – wie Entwicklungs-, Test- und Produktionssystemen – problemlos angewendet werden können. Dies ist besonders wichtig, um sicherzustellen, dass der Code auf verschiedenen Systemen und unter verschiedenen Bedingungen fehlerfrei funktioniert.

Im Zusammenhang mit der Code-Generierung spielt die Einhaltung von Best Practices eine zentrale Rolle. Das bedeutet nicht nur, dass der Code funktional ist, sondern auch, dass er den Standards der jeweiligen Plattform entspricht und Sicherheitsvorkehrungen berücksichtigt. Die Verwendung von Red Hat Ansible und IBM Watsonx Code Assistant stellt sicher, dass der generierte Code diese Standards einhält und so eine fehlerfreie Implementierung ermöglicht.

Zuletzt sollte man sich bewusst sein, dass die KI-unterstützte Code-Generierung in der Praxis nicht nur eine Frage der Automatisierung ist. Vielmehr ist es ein Werkzeug, das Entwicklern hilft, effizienter zu arbeiten und gleichzeitig die Qualität des Codes zu verbessern. Es geht nicht nur darum, Zeit zu sparen, sondern auch darum, sicherzustellen, dass der Code den besten Standards entspricht und die Anforderungen der jeweiligen Infrastruktur erfüllt.