Hinweis
Kurz nach der Veröffentlichung meiner Einführung in Fabric wurde eine neue Version veröffentlicht, die nach Go portiert wurde. In diesem Artikel gehe ich auf diese neue Version ein, der alte Artikel wurde entfernt.
Einführung in Fabric
Die Qualität der Ergebnisse bei der Nutzung von Large Language Models (LLMs) wie Ollama oder ChatGPT hängt stark von der Qualität des verwendeten Prompts ab. Diese Erkenntnis hat zur Entstehung spezialisierter Berufe wie des Prompt Engineers geführt, dessen Aufgabe es ist, LLMs optimal zu konfigurieren, um für spezifische Anforderungen oder Kontexte die bestmöglichen Ergebnisse zu erzielen. Zudem werden Hunderte von Artikeln veröffentlicht, die mit vielversprechenden Titeln wie „Die 100 besten Prompts zur Generierung eines Bewerbungsschreibens für eine Stelle als Top-Manager“ aufwarten.
Fabric, das Tool, das hier vorgestellt wird, soll den Prozess der Erstellung eines Prompts vereinfachen und optimieren, um die besten Ergebnisse von einem LLM zu erhalten. In diesem Artikel werden die ersten Schritte erläutert, einschließlich der Installation und der grundlegenden Verwendung.
Was ist Fabric?
Das Fabric-Projekt von Daniel Miessler wurde mit dem Ziel entwickelt, Nutzern von LLMs zu ermöglichen, sich wieder auf den Inhalt zu konzentrieren, anstatt sich in der Vielzahl von Prompt-Experimenten zu verlieren. Fabric stellt eine Bibliothek von über 140 sogenannten Patterns zur Verfügung, die auf spezielle Aufgaben und Problemstellungen ausgerichtet sind. Beispiele hierfür sind „extract_wisdom“, das Erkenntnisse und Kernaussagen aus einem Text oder YouTube-Video extrahiert, sowie „create_coding_project“, das dabei helfen soll, das Grundgerüst für ein Entwicklungsprojekt zu erstellen. Die Pattern beschreiben sehr ausführlich, welche Schritte mit der Eingabe durchgeführt werden, welche Rolle das LLM einnehmen soll, worauf es besonders achten muss und wie die Ausgabe gestaltet sein sollte.
Fabric kombiniert die Eingabe, sei es ein Text oder ein Aufgaben-Kontext, mit dem gewählten Pattern und übergibt diese an ein LLM. Dies kann entweder lokal geschehen, wie bei den von Ollama bereitgestellten LLMs, oder über Cloud-Services wie OpenAI, Claude oder Google.
Stand heute, Ende August 2024, ist Fabric ein reines Kommandozeilen-Tool. In der vorherigen Version, die in Python geschrieben wurde, gab es zwar auch ein GUI und eine Server-Schnittstelle, die jedoch im Moment nicht implementiert sind. Sollte in naher Zukunft eine grafische Benutzeroberfläche oder eine Server-Schnittstelle hinzugefügt werden und sich ein Nutzen für mich ergeben, werde ich dies in weiteren Artikeln beschreiben.
Installation von Fabric
Die Installation erfolgt über das Github-Repository des Projekts. Für die Ausführung der Programme und Beispiele, sind einige Vorbereitungen zu treffen. Da die Installation und auch die spätere Verwendung im Terminal-Programm passiert, sollte etwas Erfahrung mit der Kommandozeile vorhanden sein. Offenen Fragen können gerne als Kommentare gestellt werden, ich versuche sie so schnell wie möglich zu beantworten. In diesem Artikel wird die Installation ausschließlich auf dem Mac beschrieben, für Windows und Linux kann ich wahrscheinlich wenig Hilfe anbieten.
Vorbereitung für die Installation
Zunächst muss ggf. go
, git
und ffmpeg
installiert werden. Ich nutze dazu den Paket-Manager Homebrew. Wenn Homebrew auf dem Mac installiert ist, können die benötigten Tools im Terminal mit dem folgenden Befehl schnell installiert werden:
brew install git go ffmpeg
Falls die Programme schon installiert waren, erfolgt keine erneute Installation. Nach meiner GO-Installation wurden die Suchpfade in der .zshrc
-Datei nicht eingetragen. Für ein mit brew
installiertes go
wird ein leicht anderer Pfad für GOROOT benötigt, als in der Anleitung auf Github beschrieben. Um diese Suchpfade zu ergänzen, wird ein Editor gestartet und die Datei ~/.zshrc
geöffnet:
# Ich verwende nano als Editor nano ~/.zsh
Dann bis zum Ende der Datei scrollen und Folgendes eintragen:
# Set Go Path export GOROOT="$(brew --prefix golang)/libexec" export GOPATH=$HOME/go export PATH=$GOPATH/bin:$GOROOT/bin:$HOME/.local/bin:$PATH:
Falls Go nicht mit Homebrew installiert wurde, kann der GOROOT anders aussehen. Dies kann ich jedoch nicht validieren:
export GOROOT=/usr/local/go
Mit ⌃x⌃y wird der Editor geschlossen und die Datei gespeichert. Nun werden mit dem Befehl
source ~/.zshrc
die Änderung dem System bekannt gemacht.
Falls eine andere Shell verwendet wird, müssen diese Pfad-Definitionen in der entsprechenden Datei und Syntax vorgenommen werden. Auf dem Mac ist allerdings standardmäßig die zsh aktiv.
Schritte zur Installation von Fabric
Zunächst wird die neuste Version von Fabric aus dem Github-Repositoryinstalliert, wozu schon das go
-Kommando verwendet wird:
go install github.com/danielmiessler/fabric@latest
Dann wird mit dem Aufruf:
fabric --setup
das Setup gestartet.
Falls beim Aufruf von fabric --setup
der Fehler erscheint, dass fabric
nicht gefunden wurde, sind entweder die Einträge in der Datei ~/.zshrc
fehlerhaft oder der source
-Befehl wurde nicht ausgeführt. Alternativ kann auch das Terminal-Fenster geschlossen und in einem neuen Fenster das Setup erneut aufgerufen werden.
Während des Setups werden zunächst die API-Keys von Groq, Gemini, Anthropic, OpenAI und Azure abgefragt. Falls keiner dieser Dienste genutzt wird, muss zumindest Ollama installiert und die Ollama-URL angegeben werden, die normalerweise http://localhost:11434
lautet. Nach der Eingabe der Informationen zu einem oder mehreren dieser Services wird eine Liste aller verfügbaren LLMs erstellt, aus der das Standard-LLM ausgewählt wird. Danach erfolgt die Abfrage des YouTube-Keys. Bei den letzten Abfragen unter dem Stichwort Patterns Loader
habe ich die vorgeschlagenen Werte übernommen.
Wenn diese Eingaben abgeschlossen sind, werden die Patterns heruntergeladen und unter $HOME/.config/fabric/patterns
installiert. In dem Verzeichnis $HOME/.config/fabric
wird auch eine Datei .env
angelegt, in der die gemachten Angaben gespeichert werden. Eine Datei namens unique_patterns.txt
enthält eine Liste aller Patterns. Im Ordner context
können Textdateien abgelegt werden, die einen zusätzlichen Kontext bei einem Aufruf von Fabric bereitstellen. So könnten allgemeine Zusatzinformationen, die je nach Zusammenhang benötigt werden, einmal definiert und bei Aufrufen verschiedener Patterns einfließen.
Der Zweck des ebenfalls angelegten Ordners sessions
erschließt sich mir noch nicht.
Erste Schritte mit Fabric
Fabric ist ein Kommandozeilen-Tool, das der Unix-Philosophie folgt, wonach kleine, spezialisierte Programme durch flexible Verkettung komplexere Workflows ermöglichen. Die Programme werden über das Pipe-Symbol |
miteinander verbunden, wobei die Ausgabe (stdout) eines Programms zur Eingabe (stdin) des nächsten wird. In einem Workflow mit Fabric kann jeder Kommandozeilen-Befehl genutzt werden, der eine Ausgabe auf stdout generiert oder stdin konsumiert. Zum Beispiel kann für die Eingabe von Text echo
verwendet werden oder cat
um eine Textdatei zu übergeben. Ein Ergebnis kann zudem mit >
in eine Datei geschrieben oder mit >>
an eine Datei angehängt werden.
Die folgende Kommandozeile demonstriert, wie man mit echo
und fabric
einen einfachen Workflow erstellt, der einen Text verarbeitet und einen Vorschlag für einen Prompt für DALL‑E oder Stable-Diffusion zur Erstellung eines Logos generiert:
echo "Zwei Papageien auf einem Hochhausdach" | fabric --stream --pattern create_logo
In diesem Beispiel gibt der Befehl echo
den Text „Zwei Papageien auf einem Hochhausdach“ aus, der anschließend über das Pipe-Symbol |
an den fabric
-Befehl weitergeleitet wird. Fabric verarbeitet diesen Text mithilfe des Patterns create_logo
, leitet das Ergebnis an das LLM weiter und das wiederum generiert einen Prompt-Vorschlag, der dann in der Kommandozeile angezeigt wird.
Das LLM, in desem Fall GPT-4o-mini, generierte folgenden Prompt:
A simple, vector graphic logo featuring two stylized parrots perched on the edge of a minimalist skyscraper rooftop. The design should emphasize elegance and simplicity, using clean lines and a limited color palette to convey a modern urban feel.
Ich habe den Befehl manuell an ChatGPT übergeben und folgendes Bild erhalten:
Das Praktische an diesem Ansatz ist, dass alles, was Text in der Standardausgabe ausgibt, als Eingabe für die Verarbeitung mit einem Fabric-Pattern dienen kann. Dadurch stehen eine Vielzahl von Tools zur Verfügung, die in einem Fabric-Workflow eingesetzt werden können.
Das folgende Beispiel zeigt, wie mit Fabric eine Zusammenfassung einer Webseite erstellt werden kann. Dabei wird die Webseite mit dem Programm wget
geladen (hier ein Artikel von meinem Blog). Die Ausgabe, der HTML-Code, wird dann an pandoc
weitergegeben, das den Text extrahiert. Anschließend wird der extrahierte Text mit fabric
und dem Pattern summarize
zusammengeführt, vom LLM verarbeitet und das Ergebnis ausgegeben. (wget und pandoc müssen ggf. mit brew
installiert werden):
wget -qO- https://ileif.de/2024/08/07/automatisierung-von-apple-kurzbefehlen-mit-shortery/ | pandoc -f html -t plain | fabric -sp summarize
Das Ergebnis der Abfrage liegt im Markdown-Format vor. In diesem Fall verwendete Fabirc die OpenAI-API mit dem LLM GPT-4o-mini:
# ONE SENTENCE SUMMARY: Shortery enhances Apple Shortcuts automation on macOS by allowing various triggers for executing workflows based on events. # MAIN POINTS: 1. Apple Shortcuts can now run on macOS since Monterey. 2. Automatic triggering of shortcuts is limited compared to iOS. 3. Only folder actions can trigger workflows on macOS. 4. Shortery app offers additional automation triggers for macOS users. 5. Users can set time-based triggers using macOS's launchd service. 6. Shortery allows actions based on application events like start and stop. 7. The app is available for download from the Mac App Store. 8. Users can customize settings for login, menu bar visibility, and sleep prevention. 9. Triggers can be created for specific applications to automate tasks. 10. A free trial is available before committing to a subscription. # TAKEAWAYS: 1. Shortery significantly expands automation capabilities for macOS users. 2. Understanding events and triggers is crucial for effective automation. 3. The app's user interface is straightforward but only available in English. 4. Users should consider their automation needs before subscribing. 5. Feedback and community engagement are encouraged for continuous improvement
Der Artikel ist zwar in Deutsch verfasst, jedoch haben die OpenAI-Modelle eine gewisse Präferenz für das Englische, weshalb die Ergebnisse der Verarbeitung meist in Englisch erscheinen. Wie man dies umgehen kann, werde ich weiter unten erläutern. An dieser Stelle ist es wichtig zu verstehen, dass alles, was Text erzeugt, als Eingabe für eine Bearbeitung in Fabric dienen kann. Außerdem kann die Ausgabe eines Fabric-Schrittes wiederum als Eingabe für einen weiteren Fabric-Schritt dienen oder von anderen Befehlen verarbeitet werden.
Um nur einen bestimmten Textteil aus einem Dokument zu bearbeiten und das Ergebnis direkt wieder in das Dokument einzufügen, eignen sich die Befehle pbpaste
und pbcopy
unter macOS. Mit diesen Befehlen wird die Zwischenablage zunächst an Fabric übergeben, die Ausgabe wird dann in die Zwischenablage kopiert und kann anschließend im Dokument direkt mit ⌘-V eingefügt werden.
pbpaste | fabric -sp improve_writing | pbcopy
Erweiterte Funktionen von Fabric
In der alten Python-Version wurden zusätzliche Tools wie yt zum Transkribieren von YouTube-Videos, ts zum Transkribieren von Audiodateien und save zum Speichern der Ausgabe in einem definierten Ordner mit installiert. Aktuell (Stand 20.08.2024) wurde nur der yt-Befehl portiert. Ob die anderen Tools noch nachgereicht werden, ist derzeit ungewiss.
Allerdings muss der yt-Befehl in dieser Version extra installiert werden:
go install github.com/danielmiessler/yt@latest
yt extrahiert den gesprochenen Text eines einer YouTube-Video, der dann von Fabric verarbeitet werden kann.
yt --transcript https://www.youtube.com/watch?v=UbDyjIIGaxQ | fabric --stream --output $HOME/Video_transscript.md --pattern extract_wisdom
In diesem Beispiel wird der Text aus dem Video „You’ve Been Using AI Wrong“ von NetworkChuck extrahiert und analysiert. Die wichtigsten Erkenntnisse werden gemäß den definierten Regeln des Patterns extract_wisdom in einer Markdown-Datei mit dem Namen Video_transcript.md in meinem Home-Verzeichnis gespeichert.
Das Video „You’ve Been Using AI Wrong“ hat mich auf Fabric aufmerksam gemacht. Es ist sehenswert, behandelt jedoch noch die alte, python-basierte Version.
Als Ersatz für den save-Befehl, der es ermöglichte, das Ergebnis an einer definierten Stelle zu speichern, verwende ich folgendes Shell-Skript. Ich speichere es unter $HOME/Applications
, das in meinem $PATH-Suchpfad eingetragen ist, unter dem Namen save und mache es mit chmod +x $HOME/Applications/save
ausführbar.
#!/bin/zsh
# Definiere das Verzeichnis, in dem die Datei gespeichert wird
TARGET_DIR="$HOME/Documents/fabric_files"
# Erstelle das Verzeichnis, falls es nicht existiert
mkdir -p "$TARGET_DIR"
# Setze das aktuelle Datum als Präfix für den Dateinamen
DATE_PREFIX=$(date +"%Y-%m-%d")
# Setze den Dateinamen Extension
BASENAME="note"
EXTENSION=".md"
# Erzeuge den Dateinamen
FILENAME="${DATE_PREFIX}-${BASENAME}${EXTENSION}"
# Überprüfe, ob die Datei existiert, wenn ja ergänze den Dateinamen mit einer laufenden Nummer
COUNTER=1
while [[ -e "${TARGET_DIR}/${FILENAME}" ]]; do
FILENAME="${DATE_PREFIX}-${BASENAME}-${COUNTER}${EXTENSION}"
COUNTER=$((COUNTER + 1))
done
# Lese den Text aus der Pipe und speichere ihn in der Datei
cat > "${TARGET_DIR}/${FILENAME}"
Nun kann das Ergebnis eines Aufrufs von Fabric einfach durch einen Befehl im Ordner Documents/fabric_files
unter dem Namen 2024–08-23-note.md gespeichert werden:
cat ~/Documents/Article_Draft.md | fabric -sp summarize | save
Falls jemand einen Tip für eien Befehl zum Transkribieren einer Audio-Datei hat, bitt gene in den Kommentaren hinterlassen.
Nützliche Befehle für Fabric
Bevor ich auf die eigentliche Magie von Fabric eingehen werde, nämlich die Pattern, noch einige wichtige Befehle:
fabric --listpatterns # listet alle Pattern auf
fabric --listmodels # listet alle LLMs auf
fabric --changeDefaultModel # ändert das Default LLM
fabric --model llama3.1:latest -sp summarize # ändert das LMM temporär für diesen Aufruf
fabric --output MeineDatei.md -sp summarize # Speichert die Ausgabe des fabric Aufrufs in MeineDatei.md ab
fabric --context blogger-support -sp summarize
Wie bereits erwähnt, können im Ordner ~/.config/fabric/context
Dateien abgelegt werden, die zusätzliche Informationen für den Aufruf von Fabric bereitstellen. In der Datei blogger-support
könnten beispielsweise weitere Regeln definiert werden, die im Kontext der Unterstützung beim Schreiben eines Blog-Artikels hilfreich sind. Diese Regeln können nicht nur bei der Verwendung eines Patterns, sondern auch mit der Option --context
bei Aufrufen verschiedener Patterns genutzt werden.
cat ~/.config/fabric/.env # Zeigt die aktuelle Konfiguration an
Weitere Optionen werden mit fabric --help
bzw. yt --help
aufgelistet und erläutert.
Die Bedeutung der Patterns in Fabric
Die Pattern sind das Herzstück von Fabric, da sie auf effiziente Weise bewährte Prompts bereitstellen, die mit eigenen Inhalten vermischt an ein LLM zur Bearbeitung gesendet werden. Diese Pattern lassen sich leicht an die eigenen Bedürfnisse anpassen, oder man kann auch eigene erprobte Prompts in Pattern überführen und mit Fabric nutzen.
Bei der Installation werden etwa 140 Pattern (und es werden immer mehr) installiert. Die Pattern sind meist in Abschnitte gegliedert. Die meisten Pattern beginnen mit dem Abschnitt „IDENTITY and PURPOSE“, der beschreibt, welche Rolle das LLM einnehmen soll und welche Aufgaben es hat. Es folgen dann Abschnitte mit Anweisungen, wie das LLM bei der Analyse des Inputs vorgehen und worauf es besonders achten soll. Danach folgt der Abschnitt „OUTPUT“, in dem das Format der Ausgabe beschrieben wird. Der letzte Bereich ist der „INPUT“, der später durch die Eingabe ergänzt wird.
Das Pattern write_essay
beinhaltet Im Bereich “IDENTITY and PURPOSE” folgende Instruktion:
# IDENTITY and PURPOSE You are an expert on writing concise, clear, and illuminating essays on the topic of the input provided.
Diese wird in den „OUTPUT INSTRUCTIONS“ mit der folgenden Instruktion ergänzt:
# OUTPUT INSTRUCTIONS - Write the essay in the style of Paul Graham, who is known for this concise, clear, and simple style of writing.
Das reicht jedoch nicht aus, da das LLM auch wissen muss, wie der Stil von Paul Graham aussieht. Daher folgen noch Textbeispiele hier von 9025 Wörtern, die den typischen Essay-Stil von Paul Graham definieren. Danach gibt es noch einige detaillierte Ausgabeinstruktionen.
Dies ist natürlich ein Pattern, das danach schreit, angepasst zu werden. Hier könnte beispielsweise statt Paul Graham auch der eigene Name stehen, die Textbeispiele könnten aus eigenen Texten stammen, und die Instruktionen könnten so angepasst werden, dass die Ausgabe statt eines Essays ein Artikel für eine Zeitschrift sein soll.
Eine weiter nützliche Anpassung ist eine Instruktion im “OUTPUT INSTRUCTIONS” Abschnitt, nämlich das der Output auf deutsch sein soll:
- Make the output in German.
Das reicht normalerweise aus; man muss also nicht das gesamte Pattern übersetzen.
Die Anpassungen sollten in einer Kopie des Pattern-Ordners vorgenommen werden, der dann einen neuen Namen wie z.B. zusammenfassung
erhält. Die Entwickler raten dazu, diese Ordner dann in einem separaten Verzeichnis abzuspeichern und jeweils eine Kopie in den Patterns-Ordner zu legen. Die Original-Patterns werden bei einem Update überschrieben, möglicherweise auch die eigenen Patterns in diesem Ordner.
Eine weitere Methode, um Ergebnisse auf Deutsch zu erhalten, sind die oben erwähnten Kontext-Dateien im Ordner ~/.config/fabric/contexts
. Erstellt man beispielsweise die Datei in diesem Ordner:
nano ~/.config/fabric/contexts/german
mit dem Inhalt:
Make the output in German
Es ist auch möglich eine einen Aufruf von Fabric mit der Option --context=german
starten und erhält dann das Ergebnis immer auf Deutsch.
Optimierung des Fabric-Aufrufs
In der alten Version von Fabric wurde eine Datei mitgeliefert, die für den Aufruf von Fabric mit einem Pattern jeweils eine Alias-Definition erstellt und diese dann durch die Initialisierung der .zshrc
zur Verfügung stellt. Da die neue Version diese Funktion nicht mehr bietet, habe ich diese Funktion als Shell-Skript nachgebaut:
#!/bin/bash # Fester Pfad zum Ordner, der gescannt werden soll input_dir="$HOME/.config/fabric/patterns" # Überprüfen, ob der Pfad ein gültiges Verzeichnis ist if [ ! -d "$input_dir" ]; then echo "Der Ordner $input_dir existiert nicht oder ist kein gültiges Verzeichnis." exit 1 fi # Dateiname für die .inc Datei output_file="$HOME/.config/fabric/fabric-bootstrap.inc" # Initialisierung der .inc Datei echo "# Automatisch generierte Aliase" > "$output_file" # Durchlaufen der Unterordner im angegebenen Verzeichnis for dir in "$input_dir"/*/; do # Überprüfen, ob es sich tatsächlich um ein Verzeichnis handelt if [ -d "$dir" ]; then # Entferne den abschließenden Schrägstrich und den Pfad, um nur den Ordnernamen zu erhalten folder_name=$(basename "$dir") # Alias in der Form erstellen: alias Ordnername="fabric -sp ordnername" echo "alias $folder_name=\"fabric -C=german -sp $folder_name\"" >> "$output_file" fi done echo "Die Datei $output_file wurde erfolgreich erstellt."
Nun muss folgender Eintrag am Ende der ~/.zshrc
hinzugefügt werden:
# Created by `Fabric Installation` on 2024-08-06 12:45:30 if [ -f "/Users/leifjp/.config/fabric/fabric-bootstrap.inc" ]; then . "/Users/leifjp/.config/fabric/fabric-bootstrap.inc"; fi
Mit source ~/.zshrc
wird die neue .zshrc
aktiviert, und nun würde ein Aufruf von:
wget -qO- https://ileif.de/2024/08/07/automatisierung-von-apple-kurzbefehlen-mit-shortery/ | pandoc -f html -t plain | summarize
statt
wget -qO- https://ileif.de/2024/08/07/automatisierung-von-apple-kurzbefehlen-mit-shortery/ | pandoc -f html -t plain | fabric -sp summarize
die Zusammenfassung auf Deutsch ausgeben. Das funktioniert dann mit jedem Pattern ohne Änderung. Es können natürlich auch gleich weitere allgemeine Anweisungen in der Kontext-Datei erfasst werden.
Zusammenfassung und Ausblick
Ich hoffe, diese kleine Einführung in Fabric erleichtert den Einstieg etwas. In einem weiteren Beitrag werde ich zeigen, wie sich der Aufruf von Fabric weiter vereinfachen lässt und wie er sich in einen Alfred-Workflow sowie in Apples Kurzbefehle integrieren lässt.
Falls Fragen, Kritik oder Ideen zu Fabric und der Installation auftreten sollten, nutzen Sie bitte die Kommentarfunktion.
Schreibe einen Kommentar