de

Arbeiten mit Ollama, Teil 1

Im ersten Teil unseres Zweiteilers “Arbeiten mit Ollama” geben wir eine Einführung in die quelloffene Multi-Plattform-Lösung Ollama, die die Nutzung und Verwaltung von KI-Modellen vereinfacht.

Warum Ollama?

Beim Entwickeln KI-basierter Anwendungen stehen wir regelmäßig vor der Aufgabe, neue oder spezialisierte LLMs (Large Language Models) zu evaluieren und/oder die Machbarkeit eines Projektes mit Integration eines LLMs auf einem definierten Hardware-Set zu beurteilen.

Diese Aufgaben können schnell zeitaufwändig und komplex werden, insbesondere wenn es darum geht, Modelle lokal zu verwenden und/oder in bestehende Systeme zu integrieren.

Ollama ist eine quelloffene Multi-Plattform-Lösung, die sich anbietet, diese Prozesse zu unterstützen und zu vereinfachen, indem es eine definierte und entwicklerfreundliche Umgebung bereit stellt, die sowohl die Verwaltung als auch die Nutzung von KI-Modellen erleichtert.

In diesem zweiteiligen Artikel werden wir die Installation von Ollama und die Kombination mit bestehenden Frontend-Lösungen wie AnythingLLM näher betrachten. Im ersten Teil konzentrieren wir uns dabei auf die Installation und grundlegende Nutzung von Ollama.

Installation

Die Installation von Ollama könnte einfacher nicht sein. Für macOS und Windows stehen dedizierte Installer bereit (unter macOS sogar korrekt signiert und ohne weitere Tricks lauffähig!), und für Linux stellt das Ollama-Team einen Einzeiler zur Verfügung, der auf allen gängigen Distributionen problemlos funktionieren sollte.

Da der Großteil unserer Entwicklung auf Linux-Rechnern stattfindet, wollen wir uns an dieser Stelle auf die Installation und Nutzung unter Linux konzentrieren.

Bereits erwähnter Einzeiler lädt ein Install-Skript und führt es aus:

curl -fsSL https://ollama.com/install.sh | sh

Verantwortungsbewussten Linux-Benutzern wird an dieser Stelle oft etwas mau, insbesondere wenn das Skript gleich mal nach dem Passwort fragt. Aber wir können Entwarnung geben: Das sehr umfangreiche Skript, das auch zum Update einer bestehenden Ollama-Installation benutzt werden kann, stellt die Archtektur fest, lädt die zugehörigen Binaries, legt einen User für Ollama an, lädt eventuell benötigte Treiber und Pakete nach (unter anderem cuda für Nvidia-CPUs und erfreulicherweise auch ROCm für solche von AMD) und erledigt die Konfiguration von Ollama als systemd service.

Arbeiten mit Modellen

Nachdem Ollama installiert wurde, kann ein Modell, das sich im durchsuchbaren Ollama-Repository befindet, direkt geladen und ausgeführt werden, und zwar mit (beispielsweise)

ollama run gemma2:2b

Ist ein auf diese Weise refernziertes Modell noch nicht lokal vorhanden, wird es von Ollama nun automatisch geladen und installiert. Das Modell kann nun beispielsweise sehr einfach von der Kommandozeile aus aufgerufen und ausgetestet werden:

example1.png

LLMs über die Kommandozeile anzusteuern ist für Testzwecke schön und gut, aber natürlich kann Ollama wesentlich mehr – nämlich, den Zugriff auf Modelle über eine gut strukturierte RESTful API zur Verfügung zu stellen.

Ein Beispiel für eine solche Interaktion könnte so aussehen:

curl http://localhost:11434/api/generate -d '{
    "model": "gemma2:2b",
    "prompt":"How do tortoises get through winter?"
}'

…und das Ergebnis:

{"model":"gemma2:2b","created_at":"2025-01-23T11:22:34.883151191Z","response":"Tor","done":false}
{"model":"gemma2:2b","created_at":"2025-01-23T11:22:34.890568853Z","response":"to","done":false}
{"model":"gemma2:2b","created_at":"2025-01-23T11:22:34.899045495Z","response":"ises","done":false}
{"model":"gemma2:2b","created_at":"2025-01-23T11:22:34.909842313Z","response":" have","done":false}
{"model":"gemma2:2b","created_at":"2025-01-23T11:22:34.917914788Z","response":" some","done":false}
{"model":"gemma2:2b","created_at":"2025-01-23T11:22:34.928657502Z","response":" clever","done":false}
{"model":"gemma2:2b","created_at":"2025-01-23T11:22:34.939221939Z","response":" adaptations","done":false}
{"model":"gemma2:2b","created_at":"2025-01-23T11:22:34.947483663Z","response":" to","done":false}
{"model":"gemma2:2b","created_at":"2025-01-23T11:22:34.958544652Z","response":" survive","done":false}
{"model":"gemma2:2b","created_at":"2025-01-23T11:22:34.966899373Z","response":" the","done":false}
[…]

Da der “generate”-Endpoint das Ergebnis als Stream zurück liefert, obliegt es dem Client in diesem Fall, die Antwort zusammenzusetzen (wenn “done” auf true steht).

Die gute Nachricht für Entwickler: Es gibt von Ollama offizielle Bibliotheken für Python und Javascript, die die Kommunikation mit der REST-Schnittstelle vereinfachen (sowie inoffizielle Bibliotheken für so ziemlich jede andere Programmiersprache – ja, sogar LISP ist dabei: https://github.com/veer66/cl-ollama)

Mit der Python-Library (https://github.com/ollama/ollama-python) wird aus unserem obigen Beispiel:

from ollama import generate
from ollama import GenerateResponse

g_response: GenerateResponse = generate(model='gemma2:2b', prompt='How do tortoises get through winter?')

print(g_response.response)

Die Python-Library kümmert sich in diesem Fall um das Zusammensetzen des Ergebnisses, es ist aber selbstverständlich auch möglich, unter Zuhilfename das Parameters stream=True die einzelnen Chunks des Streams direkt bei ihrem Eintreffen zu verarbeiten.

Im zweiten Teil dieses Artikels werden wir weitere spannende Aspekte von Ollama erkunden, darunter die Verwendung von Modelfiles und die Integration mit AnythingLLM. Bleiben Sie dran!