Arbeiten mit Ollama, Teil 2
Im ersten Teil unseres Artikels über Ollama haben wir gezeigt, wie man Ollama und zugehörige Modelle installiert. Im zweiten Teil des Artikels wird die fortgeschrittene Nutzung von Ollama durch Anpassung von Modelfiles und die Integration mit dem Frontend AnythingLLM behandelt. Es wird gezeigt, wie diese Tools die Verwaltung und Nutzung von KI-Modellen effizienter gestalten.
Modelfiles
Ein Modelfile ist eine Konfigurationsdatei, die Modelle definiert und verwaltet. Mittels Modelfiles ist es unter Ollama möglich, “neue Modelle” zu definieren oder bestehende Modelle anzupassen.
An dieser Stelle ist es wichtig zu erwähnen dass es sich dabei keinesfalls um Fine Tuning bestehender Modelle handelt (je nach Anforderung ist dies eine komplexe Aufgabe, die nicht von Ollama bewerkstelligt werden kann) sondern lediglich um eine Anpassung der Modell-Konfigurationsparameter. Ein Modelfile wird benutzt, um ein benutzerdefiniertes Prompt in das Modell einzubetten, oder um Kontextlänge, Temperatur und Templates etc. anzupassen, wobei die Generierung dieser Modelfiles komplett über die Ollamas REST-API bzw. die diversen Ollama-Bibliotheken steuerbar ist.
Wird ein Modell zum ersten Mal unter Ollama installiert, wird gleichzeitig ein Standard-Modelfile angelegt, welches mit ollama show angezeigt werden kann.
ollama show gemma2:2b --modelfile
führt beispielsweise zu folgender Ausgabe:
# Modelfile generated by "ollama show"
# To build a new Modelfile based on this, replace FROM with:
# FROM gemma2:2b
FROM /usr/share/ollama/.ollama/models/blobs/sha256-7462734796d67c40ecec2ca98eddf970e171dbb6b370e43fd633ee75b69abe1b
TEMPLATE """{{- range $i, $_ := .Messages }}
{{- $last := eq (len (slice $.Messages $i)) 1 }}
{{- if or (eq .Role "user") (eq .Role "system") }}<start_of_turn>user
{{ .Content }}<end_of_turn>
{{ if $last }}<start_of_turn>model
{{ end }}
{{- else if eq .Role "assistant" }}<start_of_turn>model
{{ .Content }}{{ if not $last }}<end_of_turn>
{{ end }}
{{- end }}
{{- end }}"""
PARAMETER stop <start_of_turn>
PARAMETER stop <end_of_turn>
LICENSE """Gemma Terms of Use
[…]
Es ist nun möglich, dieses Modelfile zu modifizieren und somit ein “neues” Modell, basierend auf dem verwendeten Basismodell zu generieren:
FROM gemma2:2b
TEMPLATE """{{- range $i, $_ := .Messages }}
{{- $last := eq (len (slice $.Messages $i)) 1 }}
{{- if or (eq .Role "user") (eq .Role "system") }}<start_of_turn>user
{{ .Content }}<end_of_turn>
{{ if $last }}<start_of_turn>model
{{ end }}
{{- else if eq .Role "assistant" }}<start_of_turn>model
{{ .Content }}{{ if not $last }}<end_of_turn>
{{ end }}
{{- end }}
{{- end }}"""
PARAMETER stop <start_of_turn>
PARAMETER stop <end_of_turn>
SYSTEM """
You are a helpful assistant but you seem to have a dark past, riddled with many unfortunate events, to which you often make
dark and unsettling references which tend to make people uneasy around you.
"""
Dieses Modelfile kann nun verwendet werden, um mittels ollama create
ein “neues” Modell zu erzeugen:
ollama create jared --file jared.modelfile
Ollama erzeugt nun ein von gemma2:2b abgeleitetes Modell, das ganz normal mit ollama run
verwendet werden kann:
AnythingLLM und Ollama
Ein populäres Frontend für die Arbeit mit LLMs ist AnythingLLM, die “all-in-one AI Application”. Obwohl es bei den Features von Ollama und AnythingLLM viele Überschneidungen gibt, bietet AnythingLLM Desktop dankenswerterweise eine Integration von Ollama an.
Dabei ist AnythingLLM sogar in der Lage, eine laufende Ollama-Instanz zu erkennen, so dass das Einrichten eines Ollama-basierten AnythingLLM-Workspaces wesentlich vereinfacht wird:
Nach der Einrichtung des Ollama-Supports können lokale, durch Ollama installierte Modelle, ganz normal in AnythingLLM verwendet werden:
Ausblick
Dieser Artikel war dazu gedacht, einen ersten Überblick über Ollama zu vermitteln. Natürlich gibt es eine Menge spannende Anwendungsgebiete für Ollama, die wir dabei nicht beleuchtet haben. Insbesondere die Möglichkeiten, die sich durch die Ollama-API geben sind komplex und mächtig und können eine große Hilfe dabei sein, LLMs automatisiert zu evaluieren, Templates zu erstellen und die Auswirkungen von Parameteranpassungen zu beurteilen.