Generative AI Coding-Tutorial
6 Python-Projekte, um mit GenAI durchzustarten
4. Dokumente abfragen mit LangChain, OpenAI und Gradio
Die Chatbot-Anwendung, um die es in diesem Abschnitt geht, ermöglicht es, mehrere Dokumente zu verarbeiten und zu speichern. Im Anschluss beantwortet ein LLM die Benutzerfragen ausschließlich auf Grundlage dieses Inputs. Diese Methode wird auch als Retrieval Augmented Generation (RAG) bezeichnet.
Der Code für die Anwendung entstammt dem GitHub-Repository von LangChain-Erfinder Harrison Chase und enthält standardmäßig eine Textdatei, die eine "State of the Union"-Rede der US-Regierung aus dem Jahr 2022 beinhaltet. Um loszulegen, klonen Sie den Code (oder laden ihn mit Klick auf den nachfolgenden Button herunter:
Projekt einrichten
Im Anschluss richten Sie wie bei den vorherigen Projekten Ihre virtuelle Python-Umgebung ein - und folgen dann den Schritten 0, 1 und 2 der README-Datei zum Projekt. Nun sollten Sie die Gradio-Webanwendung lokal mit dem Standardtext über folgenden Befehl starten können:
python app.py
Bei Gradio handelt es sich um ein Web-Framework, das für Data-Science-Zwecke entwickelt wurde und integrierte Funktionen für Streaming-Chatbots enthält. Gradio realisiert eine gute Balance zwischen Benutzerfreundlichkeit und Anpassbarkeit - und seine Dokumentation ist nicht nur umfangreich, sondern auch leicht zu verstehen. Neben der Gradio-UI verfügt die App auch über eine Befehlszeilenanwendung, um Dokumente abzufragen:
python cli_app.py
Sobald die Standardanwendung gestartet ist, können Sie sie mit den Dokumenten Ihrer Wahl anpassen. Eine Möglichkeit, das umzusetzen, führt über die folgenden fünf Schritte:
1. Löschen Sie die Dateien vectorstore.pkl
und state_of_the_union.txt
.
2. Erstellen Sie einen docs-Ordner und legen Sie dort eines oder mehrere der Dokumente ab, die Sie abfragen möchten. Wir haben dazu die PDF-Dateien "8 Things to know about Large Language Models" von Samuel Bowman und "A Beginner´s Guide to Large Language Models" von Nvidia genutzt.
3. Ändern Sie innerhalb der Datei ingest_data_.py
die folgenden Zeilen (9 und 10, direkt nach print("Loading data....")
):
loader = UnstructuredFileLoader("state_of_the_union.txt")
raw_documents = loader.load()
zu
raw_documents = []
for file in os.listdir('docs'):
if file.endswith('.pdf'):
pdf_path = './docs/' + file
loader = PyPDFLoader(pdf_path)
raw_documents.extend(loader.load())
elif file.endswith('.docx') or file.endswith('.doc'):
doc_path = './docs/' + file
loader = Docx2txtLoader(doc_path)
raw_documents.extend(loader.load())
elif file.endswith('.txt'):
doc_path = './docs/' + file
loader = TextLoader(doc_path)
raw_documents.extend(loader.load())
Fügen Sie außerdem am Anfang der Datei hinzu:
import os
from langchain.document_loaders import PyPDFLoader, Docx2txtLoader
from langchain.document_loaders import TextLoader
4. Ändern Sie in query_data.py
jede der Phrasen "the most recent state of the union address" oder "the most recent state of the union" entsprechend in das Thema ab, das Ihre Dokumente behandeln.
5. Der Titel in app.py
(Zeile 57) muss ebenfalls geändert werden. Der ursprüngliche Code:
"<h3><center>Chat-Your-Data (State-of-the-Union)</center></h3>"
Auch hier tragen Sie das Thema ein, um das es gehen soll. Ändern Sie zudem auch den Platzhaltertext in Zeile 71 und die Beispiele ab Zeile 78. Wenn Sie auch PDF-Dateien verwenden, müssen Sie zusätzlich die pypdf
-Bibliothek installieren. Das funktioniert mit dem Befehl:
pip install pypdf
Führen Sie nun erneut python ingest_data.py
aus und starten Sie dann die Anwendung mit python app.py
.
Es ist simpel, eine Gradio-Anwendung auf Hugging Face Spaces bereitzustellen. Dabei sollten Sie davon absehen, eine Anwendung mit Ihrem API-Schlüssel auf einer öffentlichen Seite zugänglich zu machen. Eine Option: Fügen Sie einen einfachen Passwortschutz hinzu. Das bewerkstelligen Sie, indem Sie folgenden Code bearbeiten:
gr.ChatInterface(predict).queue().launch()
Wird zu:
gr.ChatInterface(predict).queue().launch(auth=("theUserName", "thePassword"))
Darüber hinaus gibt es auch andere Deployment-Optionen als Hugging Face, zum Beispiel über einen Cloud Service oder als Docker Container.
5. LLM-basierte Web-Recherche mit LangChain, OpenAI und FastAPI
Das Projekt GPT Researcher stammt von von Assaf Elovic, Leiter der Forschungs- und Entwicklungsabteilung beim israelischen Webhoster Wix. Die resultierende Anwendung verwendet die Suchmaschine Tavily, die speziell für LLM-Projekte entwickelt wurde. Sie ist derzeit kostenlos, allerdings wird der Input laut den Verantwortlichen dazu genutzt, die Modelle und Algorithmen zu optimieren.
Projekt einrichten
Dafür gibt es eine hochwertige Schritt-für-Schritt-Installationsanleitung in Form der offiziellen README-Datei. Außerdem steht auch ein Tutorial in Videoform zur Verfügung. Wichtig: Damit dieses Projekt läuft, brauchen Sie mindestens Python-Version 3.11. Sollten Sie auch andere Python-Distributionen nutzen, stellen Sie sicher, dass Sie Ihre virtuelle Umgebung mit der richtigen Version erstellen und diese aktivieren.
Dann installieren Sie die benötigten Packages:
pip install -r requirements.txt
Erstellen Sie dann eine .env
-Datei und fügen Sie Ihren OpenAI-API-Schlüssel wie folgt hinzu:
OPENAI_API_KEY="your-key-here"
Dann starten Sie die Anwendung mit:
uvicorn main:app -reload
Über einen Browser (http://localhost:8000) sollten Sie nun den Startbildschirm sehen und mit einem Klick auf den "Get Started"-Button loslegen können. Sobald Sie eine Anfrage eingeben, sucht ein Agent nach mehreren Quellen und erstellt dann einen Report. Letzteren zu kompilieren, nimmt einige Zeit in Anspruch. Dafür bietet die App den Vorteil, dass der Report auch Quellenlinks enthält.
Aufgrund aktueller Vorkommnisse haben wir unseren LLM-Chatbot gefragt, wie man einen Specht davon abhalten kann, seinen Instinkten nachzugehen.
Das Ergebnis der Anfrage war eine ausführliche Abhandlung zum Thema, inklusive Gliederung, Einleitung, mehreren Themenabschnitten (etwa "nicht-tödliche Vergrämungsmethoden" und "proaktive Anti-Picking-Maßnahmen") sowie Fazit und Referenzen. Zusätzlich zu einem Report, der die Frage beantwortet, ist es auch möglich, einen Quellenbericht anzufordern, der diverse Details zu den wichtigsten Ressourcen liefert.
Darüber hinaus können Sie auch das LLM ändern, das GPT Researcher verwendet - was allerdings nicht empfohlen wird, da OpenAIs Modelle für diesen Task als am besten geeignet gelten. Neben der Möglichkeit, GPT Researcher lokal auszuführen, gibt es auch eine Anleitung, um es in einem Docker-Container auszuführen.