️ Hinweis: Die aktive Entwicklung dieses Projekts wird aus Zeitgründen vorerst ausgesetzt. In der Zwischenzeit können Sie das Repository gerne teilen oder sich an uns wenden, wenn Sie das Projekt pflegen möchten.
Pruju AI ist ein Lehrassistent, der es Schülern ermöglicht, mit den Kursmaterialien des Lehrers zu interagieren. Der Assistent soll alle Fragen der Studierenden beantworten, jedoch nur, wenn die Antwort in den vom Lehrer bereitgestellten Kursmaterialien (z. B. Lehrplan, Folien, Vorlesungsprotokolle) zu finden ist. Der Assistent kann auch dazu angeleitet werden, auf eine Weise zu antworten, die mit den pädagogischen Zielen des Kurses übereinstimmt. Beispielsweise kann der Assistent angewiesen werden, bestimmte Fragen nicht oder auf eine bestimmte Art und Weise zu beantworten.
Ziel des Projekts ist es, die Erstellung virtueller Lehrassistenten so einfach wie möglich zu machen. Aus pädagogischer Sicht ist es wichtig, die Wissensbasis des Assistenten sowie die Art der Antworten, die der Assistent auf die Fragen des Schülers gibt, kontrollieren zu können.
Die App kann so konfiguriert werden, dass sie ohne Programmieraufwand mit den eigenen Materialien des Lehrers arbeitet. Sie müssen einige Textdateien ändern und ein Python-Skript ausführen, um es zu Ihrem eigenen zu machen. Sie können den Code auch als Ausgangspunkt für anspruchsvollere und individuellere Setups verwenden. Wenn Ihr Kurs Moodle verwendet, können Sie jetzt Daten aus Ihrem eigenen Kurs importieren!
Die App funktioniert mit der API von OpenAI, dem Azure OpenAI Service von Microsoft und Ollama. Ollama unterstützt eine größere Auswahl an Open-Source-Modellen (z. B. Mistral 7B, Llama 2). Es wurde nur Mistral 7B getestet.
Pruju ist der finnische Universitätsjargon für ein Studienblatt. Laut dem (Finnish) Urban Dictionary kann die Qualität von Prujus „von einem guten Buch [...] bis zu einem Stapel kryptischer Vorlesungsfolien reichen, die überhaupt keinen Sinn ergeben.“
Die Anleitung gilt für macOS, sollte aber unter Linux und (mit kleinen Modifikationen) auch Windows funktionieren.
Klonen Sie das Repo und erstellen Sie eine virtuelle Umgebung für das Projekt. Erforderliche Abhängigkeiten installieren:
pip install -r requirements.txt
textract
. Die folgenden Schritte sollen Ihnen helfen, etwaige Probleme zu vermeiden.
pip install --upgrade pip==24.0
six
, nachdem Sie die Anforderungen installiert haben: pip install --upgrade six
Sie sollten eine .env-Datei erstellen, die mindestens Folgendes enthält:
# Specify LLM provider and model
LLM_PROVIDER="openai"
MODEL_NAME="gpt-4"
# Directory for your course data:
CHAT_DATA_FOLDER ="prujuai_resources"
# Total model call quota:
TOTAL_MODEL_QUOTA=5
# Max number of tokens per call
MAX_PROMPT_TOKENS=2000
# Capacity management:
MAX_CONCURRENCY=2
MAX_QUEUE=10
Sie können derzeit zwischen „openai“ (OpenAIs eigener API), „azure“ (Microsofts Azure OpenAI Service) oder „ollama“ (Ollama) wählen.
Wenn Sie openai wählen, müssen Sie den API-Schlüssel definieren:
LLM_PROVIDER="openai"
MODEL_NAME="gpt-4"
OPENAI_API_KEY="your-secret-key-goes-here"
Wenn Sie sich für Azure entscheiden, müssen Sie den API-Endpunkt und den API-Schlüssel definieren:
LLM_PROVIDER="azure"
MODEL_NAME="gpt-4"
OPENAI_API_KEY = "your-secret-key-goes-here"
MODEL_ENDPOINT="https://your-azure-endpoint"
# Optionally, you can define:
AZURE_OPENAI_CUSTOM_BACKEND = "/custom/url/back/end/other/than/chat/completions"
AZURE_OPENAI_CUSTOM_HEADER="Some-Custom-Authentication-Header"
Wenn Sie sich für Ollama entscheiden, müssen Sie das zu verwendende Modell definieren.
LLM_PROVIDER="ollama"
MODEL_NAME="mistral"
Im Fall von Ollama müssen Sie Ollama installieren und ollama serve <modelname>
ausführen, um das Modell an 127.0.0.1:11434
bereitzustellen. Bisher wurde nur Mistral 7B getestet. Die Grundfunktionalität funktioniert, wird jedoch nicht ausführlich getestet.
Laufen:
gradio app.py
Sobald die App ausgeführt wird, wird Ihnen die Adresse mitgeteilt, unter der Sie die Chatbot-Schnittstelle finden.
Erstellen Sie zunächst eine Kopie des Verzeichnisses prujuai_resources
und geben Sie ihm einen Namen, der Ihnen gefällt (z. B. mycourse_resources
). Ändern Sie dann die .env-Datei, damit die App weiß, wo sie nach den Dateien suchen muss (z. B. CHAT_DATA_FOLDER="mycourse_resources"
). Ändern Sie in diesem neuen Verzeichnis die folgenden Dateien nach Ihren Wünschen:
prompt_template.txt
stellt die allgemeinen Systemanweisungen für den Chatbot bereitexamples_ui.txt
definiert die Beispiele, die dem Benutzer helfen, nützliche Fragen zu stellenfavicon.ico
ist das Symbol der Appchat_header.md
bietet eine veränderbare Beschreibung Ihrer App, die über der Chat-Oberfläche angezeigt wirdchat_footer.md
wie oben, jedoch unterhalb der Chat-OberflächeUm Ihre eigenen Materialien in einen Vektorspeicher einzulesen, sollten Sie Folgendes ausführen:
python3 read_to_vectorstore.py
Das Skript liest Ihre Kursmaterialien von einem bestimmten Speicherort (standardmäßig ./course_material
) und speichert sie in einem FAISS-Vektorspeicher (standardmäßig ./course_material_vdb
). Wenn Sie fertig sind, verschieben Sie die Dateien index.faiss
und index.pkl
nach CHAT_DATA_FOLDER/faiss_index
. Wenn Sie weitere Optionen wünschen, beispielsweise die Ausführung des Skripts im nicht interaktiven Modus mit sinnvollen Standardeinstellungen, führen Sie das Skript mit -h aus:
python3 read_to_vectorstore.py -h
Die Standardkursmaterialien stammen aus einem imaginären Kurs namens „Primer on Business Analytics with Python“ , der mit Hilfe von ChatGPT (GPT-4) zu Demonstrationszwecken erstellt wurde. Zu den Beispielmaterialien ( course_materials
) gehören Vorlesungsfolien, Vorlesungsmitschriften und Python-Skript-Tutorials.
Bitte überlegen Sie genau, auf welche Daten Ihre App Zugriff (nicht) haben soll!
Sie können die Materialien aus einer Moodle-Instanz importieren. Erstellen Sie eine Datei namens .moodle
und ändern Sie sie so, dass sie die folgenden Dinge enthält:
COURSE_ID="12345"
WS_TOKEN="your-token"
WS_ENDPOINT="https://your-moodle-instance.edu/webservice/rest/server.php"
WS_STORAGE="moodle_data"
Durch Ausführen des Skripts moodle.py
werden Dateien heruntergeladen (aus Datei- und Ordnerressourcen ). Beiträge aus dem Ankündigungsforum können mit dem Flag -p
eingebunden werden. Das Skript bettet die Inhalte standardmäßig in einen FAISS-Vektorspeicher in einem Verzeichnis ein, das in der Umgebungsvariablen WS_STORAGE
angegeben ist, gefolgt von „ _vdb
“ (z. B. moode_data_vdb
“).
python3 moodle.py
Anschließend können Sie die Dateien index.faiss
und index.pkl
in Ihren Kursmaterialordner ( CHAT_DATA_FOLDER/faiss_index
) kopieren. Das Skript enthält auch Moodle-Links zu den Text-Chucks, die vom Vektorspeicher verwendet werden. Daher ist es ratsam, der Systemeingabeaufforderung Folgendes hinzuzufügen: Make sure to include hyperlinks to allow easy access to the materials.
Dies ermöglicht dem Benutzer eine einfache Navigation, um den Originalinhalt auf Moodle anzuzeigen. Stellen Sie sicher, dass das Zugriffstoken mit den entsprechenden Berechtigungen auf Moodle-Seite verknüpft ist.
Sie können auch eine qdrant-Vektordatenbank verwenden, lokal in einem Container ausführen oder den gehosteten Dienst nutzen. Sie können die App angeben, die Ihre qdrant-Sammlung verwenden soll, indem Sie .env wie folgt ändern:
VECTOR_STORE="qdrant" # If you use qdrant
VECTOR_STORE_COLLECTION="my_collection" # qdrant collection name
VECTOR_STORE_ENDPOINT="localhost" #"localhost" or hosted service endpoint
VECTOR_STORE_API_KEY="your-secret" # If you use qdrant's hosted service
Wenn Sie Ihre Kursmaterialien mithilfe von moodle.py
aus Moodle importieren, fügen Sie die obigen Zeilen auch zu Ihrer .moodle
hinzu. Sie können erwägen, das Moodle-Importskript regelmäßig auszuführen, um die Wissensdatenbank des Chatbots auf dem neuesten Stand zu halten. Bitte beachten Sie auch hier die Berechtigungen auf der Moodle-Seite .
Es gibt einige neue Funktionen in der App, die noch nicht ordnungsgemäß dokumentiert sind. Bereits bestehende Funktionalitäten bleiben davon unberührt. Dazu gehören:
Das Projekt befindet sich derzeit in einem funktionierenden Demo-Zustand und bietet viel Raum für Verbesserungen. Einige mögliche Richtungen für die weitere Entwicklung:
Enrico Glerean lieferte wertvolle Ratschläge zu vielen Aspekten des Projekts. Thomas Pfau steuerte Code bei und lieferte dabei viele wichtige technische Erkenntnisse.