Dank der Flut von Generative-AI-Diensten, die sich in den vergangenen Monaten etabliert haben, sind Chatbots beziehungsweise Webseiten auf Basis von großen Sprachmodellen (Large Language Models; LLMs) fast schon allgegenwärtig. Softwareentwickler ziehen es allerdings vor, selbst zu Werke zu schreiten, um zum gewünschten Ziel zu kommen. Neben der Befriedigung, die sich einstellt, wenn eine Anwendung läuft wie sie soll, bietet die direkte Programmierarbeit schließlich auch die Möglichkeit, Design und Funktionsweise der Applikation je nach Gusto zu optimieren.
In diesem Tutorial bringen wir Ihnen sechs Python-Coding-Projekte näher, die Entwicklern den Einstieg in die generative künstliche Intelligenz (KI) erleichtern.
1. Chatbot erstellen mit Llama 2, Streamlit und Replicate
Falls Sie einen Chatbot betreiben möchten, ohne dabei auf OpenAIs GPT 3.5 oder 4 zu setzen, bietet die Kombination aus Metas Llama-2-Sprachmodell und dem Streamlit-Webframework eine einfache Möglichkeit, das zu tun. Wie das im Detail geht, zeigt Chanin Nantasenamat, Senior Developer Advocate bei Streamlit, in einem GitHub-Repository, einem YouTube-Video und einem Blogbeitrag.
Um dieses Projekt umzusetzen, benötigen Sie einen Account bei Replicate (Login mit GitHub-Konto ist möglich) sowie einen API-Token. Vorausgesetzt, Sie wollen Replicate nur gelegentlich für kleinere Tasks nutzen, reicht dazu auch das kostenlose Angebot. Wenn größere Modelle oder viele Abfragen ins Spiel kommen, sieht das anders aus. Ihr Gratis-Replicate-Konto sollte mit einem Standard-API-Token ausgestattet sein. Falls nicht, können Sie einen neuen generieren.
Projekt einrichten
Zunächst laden Sie den Code mit Git lokal herunter. Das funktioniert mit dem Befehl:
git clone https://github.com/dataprofessor/llama2.git
Sollten Sie Git nicht verwenden, können Sie auch über GitHub ein Zip-Archiv mit den Daten herunterladen und diese auf Ihrem lokalen Recher entpacken. Nachdem Sie Ihr Arbeitsverzeichnis auf den Projektordner ausgerichtet haben, können Sie mit venv
eine virtuelle Python-Umgebung erstellen (dafür können Sie ein beliebiges Tool verwenden):
python -m venv env
Anschließend aktivieren Sie diese Umgebung mit dem Befehl:
source env/bin/activate
(Mac) oderenv\Scripts\activate
(Windows).
Im nächsten Schritt gilt es dann, die benötigten Packages zu installieren. Dazu nutzen Sie:
pip install -r requirements.txt
Um eine Streamlit-Datei lokal mit API-Schlüsseln auszuführen, empfiehlt die Dokumentation, diese in einer secrets.toml
-Datei in einem .streamlit-Verzeichnis unterhalb Ihres Hauptprojektverzeichnisses zu speichern. Wenn Sie git
verwenden, müssen Sie die Datei .streamlit/secrets.toml
zu Ihrem .gitignore
-File hinzufügen. Dabei sollte secrets.toml
ein Format wie das folgende aufweisen:
REPLICATE_API_TOKEN = "your_replicate_token"
Das funktioniert, wenn die Benutzer Ihr Token verwenden, um Anfragen zu stellen. Sie können auch versuchen, die Anwendung lokal auszuführen. So sehen Sie, was passiert, wenn die Benutzer ihren eigenen Schlüssel eingeben müssen. Auf unserem Mac läuft die Anwendung nicht ohne secrets.toml
. Das lässt sich beheben, indem Sie keinen Wert für REPLICATE_API_TOKEN
setzen und secrets.toml
um einen kleinen Zusatz erweitern:
FAKE_TOKEN = "some fake token"
So sollten Sie nun in der Lage sein, die Streamlit-App lokal mit folgendem Terminal-Befehl auszuführen:
streamlit run streamlit_app_v2.py
Wenn Sie Ihre Applikation im Netz bereitstellen möchten, ist ein kostenloses Konto bei der Streamlit Community Cloud eine der einfachsten Optionen, um das zu bewerkstelligen. Es ermöglicht, Anwendungen direkt über Ihren GitHub-Account bereitzustellen. Für Setup und Deployment stehen jeweils ausführliche Anleitungen zur Verfügung. Um dabei eklatante Kosten für die Replicate-API zu vermeiden, sollten Sie unbedingt darauf achten, Ihr GitHub-Repository auf "Private" zu stellen - oder die User dazu auffordern, ihre eigenen API Keys zu nutzen.
Eine weitere simple Option, um Streamlit-Anwendungen gemeinsam zu nutzen, besteht darin, sie über Hugging Face Streamlit Spaces bereitzustellen. Falls Sie Docker-User sind, empfiehlt sich dazu das Dockerize-Tool, das von Brian Hess (Field CTO bei Snowflake und Analytics-Spezialist bei Amazon Web Services) entwickelt wurde.
2. Daten visualisieren mit Matplotlib, Streamlit und OpenAI
Das folgende Tutorial führt Sie zu einer Anwendung, mit der Sie .csv-Dateien uploaden und Fragen dazu stellen können. Im Gegenzug erhalten Sie als Antwort ein Matplotlib-generiertes Diagramm. Um die App umzusetzen, ist ein OpenAI-API-Schlüssel erforderlich - ein Klick auf den nachfolgenden Button führt Sie zur Account-Erstellung:
Projekt einrichten
Ist das erledigt, erstellen Sie einen Git-Clone des Repository mit dem Befehl:
git clone https://github.com/michaelweiss/chat-with-your-data.git
Anschließend wechseln Sie ins Projektverzeichnis und erstellen und aktivieren eine virtuelle Python-Umgebung (siehe vorheriges Projekt). Wenn Sie die Anwendung lokal ausführen, setzen Sie Ihren OpenAI-Key mit dem Befehl:
export OPENAI_API_KEY="your_open_ai_key"
Als nächstes installieren Sie die benötigten Packages:
pip install openai pandas streamlit matplotlib
Schließlich führen Sie die Anwendung aus mit:
streamlit run chat_data.py
Damit das Large Language Model aus Ihrer Anfrage brauchbaren Python-Code erzeugen kann, sollte der Ouput ein Diagramm wie im obenstehenden Screenshot beinhalten. Wie bei allen LLM-gesteuerten Anwendungen müssen Sie Ihren Prompt möglicherweise optimieren, damit der Code richtig funktioniert.
Weil Projektautor Michael Weiss sein Repository unter der MIT-Open-Source-Lizenz veröffentlicht hat, können Sie es für jeden Zweck verwenden oder verändern.
3. Dokumente abfragen mit OpenAI, LangChain und Chainlit
Mit diesem Python-Projekt können Sie eine simple App erstellen, um ein Textdokument hochzuladen und Fragen zu dessen Inhalt zu stellen. Diese Anwendung eignet sich zum Beispiel, um möglichst schnell eine einmalige Zusammenfassung eines neu erhaltenen Dokuments anzufertigen. Oder diese Möglichkeit anderen zur Verfügung zu stellen.
Das Projekt verwendet das relativ neue Framework Chainlit, das speziell für LLM-gestützte Chat-Anwendungen entwickelt wurde. Jedes Mal, wenn Sie ein Dokument in die App hochladen, wird dieses von einem großen Sprachmodell verarbeitet. Das transformiert das Dokument in Zahlen, die seine Semantik darstellen. Sollten Sie Ihr Dokument in Zukunft mehrfach abfragen wollen (zum Beispiel zur Softwaredokumentation) wäre diese Anwendung nicht effizient. Für dieses Szenario empfiehlt sich das nächste Projekt, das den Input zur späteren Verwendung speichert.
Projekt einrichten
Auch für diese Anwendung brauchen Sie eine (aktivierte) virtuelle Python-Umgebung. Insofern Sie den Quellcode nicht ändern, um ein anderes LLM zu verwenden, benötigen Sie zudem einen OpenAI API-Key. Sind die Voraussetzungen erfüllt, installieren Sie die benötigten Packages:
pip install python-dotenv langchain chromadb tiktoken chainlit openai
Kopieren Sie im nächsten Schritt den Beispielcode von Chainlit, den Sie mit einem Klick auf den nachfolgenden Button abrufen.
Dann tragen Sie Ihren OpenAI-Key ein - oder aktualisieren den Code mit einer anderen, sichereren Methode, um Ihren Key zu laden. Zum Beispiel mit der python-dotenv
-Bibliothek und einer .env
-Datei.
Chainlit bringt einige spezielle Funktionen mit: Die Standard-Webanwendung zeigt die Schritte an, die das LLM unternimmt, um die Benutzerfrage zu beantworten, sowie die endgültige Antwort. Darüber hinaus verfügt das Framework auch über Dekoratoren mit Chatbot-Fokus:
@cl.on_message
spezifiziert alles, was ausgeführt werden soll, wenn ein Benutzer eine Frage eingibt,@cl.on_chat_start
ist zuständig für jeden Code, der ausgeführt werden soll, wenn die App startet.
Folgender Terminalbefehl startet die Anwendung (die auf einem Browser auf localhost geöffnet werden sollte):
chainlit run -w qa.py
Mit dem Argument -w
wird die App jedes Mal automatisch neu geladen, wenn die zugrundeliegende Datei app.py
aktualisiert und gespeichert wird.
Wenn Sie die Anwendung ausführen, erzeugt Chainlit eine neue chainlit.md
-Datei in Ihrem Projektverzeichnis, insofern noch keine vorhanden ist. Diese Datei wird in der Readme-Registerkarte Ihrer Anwendung angezeigt und lässt sich nach Belieben bearbeiten. Darüber hinaus beinhaltet der Output der Applikation auch Links zu den relevanten Quelldokumenten. So lässt sich direkt überprüfen, ob die Antwort korrekt ist.
Wenn Sie mit LangChain vertraut sind, können Sie den Code der Anwendung auch aktualisieren, um weitere Dateityp-Optionen hinzuzufügen. Dazu empfehlen sich einige zusätzliche LangChain Document Loader, zum Beispiel für .pdf-Dateien.
Da Chainlit noch relativ neu ist, ist es nicht für Produktionsanwendungen zu empfehlen. Wenn Sie allerdings nur eine schnelle Möglichkeit suchen, um eine simples, generatives Chat-Interface zu programmieren, ist das Framework einen Blick wert. Im Chainlit Cookbook Repository finden Sie noch ein paar Dutzend anderer Applikationen zum Testen.
Um Chainlit-Anwendungen gemeinsam zu nutzen, soll demnächst ein Cloud-Service verfügbar sein. Im Moment beschränken sich die Empfehlungen in Sachen Deployment auf eine Handvoll Tutorials - zum Beispiel dieses YouTube-Video.