Plugins

Im Rahmen meiner Vibecoding Experimente sind mit Codex, dem Vibecoder von OpenAI zwei Plugins entstanden, die hier ausprobiert und um meiner Text-Moodle Plattform ausprobiert werden können. Natürlich übernehme ich keine Haftung für eventuell Sicherheitslücken. Der Code steht auch auf Github bereit und kann dort eingesehen und natürlich auch verbessert oder kommentiert werden.

Tutoring Machine

Ein Block für Moodle, der eine KI-basierte Tutoring Machine zur Unterstützung von Lernenden bereitstellt. Die Tutoring Machine kann Fragen zum Kursinhalt basierend auf verschiedenen Kursressourcen beantworten.

Installation

  1. Entpacke das Plugin in das /blocks/tutoring_machine-Verzeichnis Ihrer Moodle-Installation.
  2. Navigiere zu „Website-Administration“ > „Mitteilungen“ > „Benachrichtigungen aktualisieren“.
  3. Folge dem Installationsprozess und bestätige die Installation.

Konfiguration

Das Plugin kann über die Blockeinstellungen in jeder Kursseite konfiguriert werden:

  1. Schalte den Bearbeitungsmodus ein.
  2. Füge den „Tutoring Machine“-Block hinzu.
  3. Klicken Sie auf das Zahnrad-Symbol und wähle „Tutoring Machine konfigurieren“.
  4. Passe die Einstellungen nach Bedarf an:
    • Tutoring Machine-Anweisungen: Gebe spezielle Anweisungen für die Tutoring Machine ein, zum Beispiel: Gebe keine Lösungen vor, sondern verweise auf das Material, in dem die Lösung auf die gestellte Frage zu finden ist.
    • Willkommensnachrichten: Lege Begrüßungstexte fest – inklusive einer optionalen Analytics-Variante –, damit Lernende direkt verstehen, welche Rolle der Bot übernimmt.
    • Kontextweitergabe: Schalte explizit frei, ob Kursmaterialien überhaupt an den KI-Anbieter übertragen werden dürfen. Erst danach lassen sich einzelne Aktivitäten selektiv einbeziehen.
    • Willkommensnachrichten: Lege Begrüßungstexte fest – inklusive einer optionalen Analytics-Variante –, damit Lernende direkt verstehen, welche Rolle der Bot übernimmt.
    • Kontextweitergabe: Schalte explizit frei, ob Kursinhalte überhaupt an den KI-Anbieter übertragen werden dürfen. Erst danach lassen sich einzelne Aktivitäten selektiv einbeziehen.
    • KI-Modell-Einstellungen: Wähle das Modell aus, dass für deine Aufgabe im Kurs geeignet ist
    • Darstellung: Wähle die Hauptfarbe für die Benutzeroberfläche
    • Kontext: Wähle, welche Kursressourcen als Kontext verwendet werden sollen:
      • Textseiten
      • Glossare
      • H5P-Aktivitäten
      • PDF-Dokumente
      • Internetsuche (für Fragen, die nicht durch Kursinhalte beantwortet werden können) Quellen, die nicht ausgewählt werden, werden auch nicht in den Kontext einbezogen, Die Tutoring Machine gibt dann die Antwort, dass dazu keine Informationen im Kurs gefunden werden konnten und die Referent*innen befragt werden müssen.
    • Lehr-Analysen: Wenn die Lehr-Analysen aktiviert werden, werden alle Prompts der Teilnehmenden gespeichert und in einem für die Referentinnen zugänglichen Analyse-Dashboard ausgewertet, bzw. angezeigt. Der Willkommensprompt weist die Teilnehmenden darauf hin, dass ihre Eingaben gespeichert und den Referentinnen zugänglich gemacht werden.
    • Prompt-Empfehlungen: Wenn aktiviert, wird ein weiterer Button angezeigt, mit dem den Teilnehmenden Prompt-Empfehlungen für die Nutzung der Tutoring Machine vorgeschlagen werden. Die können ausgewählt und abgeschickt werden. Um zu verschiedenen Kategorien Prompt-Empfehlugnen zu machen kann eine Raute vorausgeschickt werden. Beispiel: #Anfänger Wie alt ist Einstein geworden? Wann ist Einstein geboren? #Forgeschrittene Wie alt ist Watts geworden? Wann ist Watts geboren?

Globale Einstellungen

Globale Einstellungen für die Tutoring Machine können unter „Website-Administration“ > „Plugins“ > „Blöcke“ > „Tutoring Machine“ konfiguriert werden:

  • Assistantname: Der Name, der im Chat-Interface angezeigt wird
  • Kurskontext standardmäßig teilen: Voreinstellung, ob neue Blöcke Kursmaterialien automatisch an die KI weitergeben oder zunächst lokal behalten.
  • Domain-Whitelist für Links: Nur Domains aus dieser Liste werden für externe Kontextlinks abgefragt.
  • robots.txt respektieren: Steuert, ob der Linkcrawler Hinweise aus robots.txt beachtet und gesperrte Pfade auslässt.
  • Crawler-User-Agent: HTTP User-Agent, unter dem der Linkcrawler auftritt.
  • Link-Aktualisierungsintervall: Legt fest, wie lange gecachte Link-Inhalte gültig bleiben, bevor sie erneut geladen werden.
  • OpenAI API-Schlüssel: Dein OpenAI API-Schlüssel für die Verbindung mit OpenAI-Modellen
  • Google API-Schlüssel: Dein Google API-Schlüssel für die Verbindung mit Gemini-Modellen
  • Standard-Modell: Das zu verwendende Standard-KI-Modell im Format „provider:model“
    • Unterstützte OpenAI-Modelle: gpt-5, gpt-5-mini, gpt-5-nano und weitere
    • Unterstützte Google-Modelle: gemini-1.5-pro, gemini-1.5-flash, gemini-pro

Unterstützte Kursressourcen

Die Tutoring Machine kann folgende Kursressourcen als Kontext verwenden:

  • Textseiten (Moodle Page-Aktivitäten)
  • Glossare und deren Einträge
  • H5P-Aktivitäten (wenn installiert)
  • PDF-Dokumente (mit automatischer Textextraktion)

Sicherheitsfunktionen

Die Tutoring Machine implementiert folgende Sicherheitsfunktionen:

  • Eingabevalidierung: Alle Benutzereingaben werden geprüft und bereinigt
  • CSRF-Schutz: Verhinderung von Cross-Site Request Forgery durch Session-Key-Validierung
  • Rate-Limiting: Begrenzung auf 30 Anfragen pro Stunde pro Benutzer
  • XSS-Schutz: Bereinigung von HTML-Inhalten zur Vermeidung von Cross-Site-Scripting
  • Zugriffskontrolle: Prüfung der Benutzerberechtigungen

Chat-Verlauf & Sitzungen

  • Chatverläufe und UI-Zustände werden clientseitig pro Kurs und Blockinstanz gespeichert. Beim Wechsel in andere Kurse oder das Dashboard startet immer eine frische Unterhaltung.
  • Legacy-Schlüssel in localStorage werden automatisch bereinigt, damit bestehende Installationen ohne manuelles Eingreifen auf das neue Scoped-Storage-Verhalten umstellen.

Technische Anforderungen

  • PHP 8.2 oder höher
  • Moodle 4.1 oder höher
  • OpenAI API-Schlüssel oder Google Gemini API-Schlüssel
  • Für PDF-Textextraktion (mindestens eine der folgenden Optionen):
    • pdftotext (empfohlen, Teil von Poppler-Utils)
      • Ubuntu/Debian: apt-get install poppler-utils
      • CentOS/RHEL: yum install poppler-utils
      • macOS: brew install poppler
    • Alternative PHP-Bibliotheken:
      • Smalot/PdfParser: composer require smalot/pdfparser
      • Spatie/PdfToText: composer require spatie/pdf-to-text

API-Test-Tools

Zur Überprüfung der API-Verbindungen stehen zwei Test-Tools zur Verfügung:

Kommandozeilen-Test

Der Kommandozeilen-Test kann über die Moodle-Wurzel ausgeführt werden:

php blocks/tutoring_machine/api_test.php [provider]

Wobei [provider] einer der folgenden Werte sein kann:

  • openai – Test nur für OpenAI API
  • google – Test nur für Google Gemini API
  • all – Test für alle konfigurierten APIs (Standard)

Die Ergebnisse werden sowohl in der Konsole ausgegeben als auch in einer Logdatei im Verzeichnis blocks/tutoring_machine/logs/ gespeichert.

Web-basierter Test

Der web-basierte Test kann über folgende URL aufgerufen werden:

https://ihre-moodle-url/blocks/tutoring_machine/api_test_web.php

Dieser Test bietet eine benutzerfreundliche Oberfläche zur Überprüfung der API-Verbindungen und ist nur für Administratoren im Entwicklungsmodus verfügbar.

Unterstützte Sprachen

  • Englisch
  • Deutsch
  • Deutsch Du-Form

Caching-System

Die Tutoring Machine nutzt ein umfassendes Caching-System, um die Leistung zu verbessern und die Anzahl der API-Aufrufe zu reduzieren:

  • PDF-Caching: Extrahierte PDF-Inhalte werden in der Datenbank gespeichert (TTL: 1 Woche)
  • Kursinhalt-Caching: Vollständiger extrahierter Kurskontext wird im Moodle Cache gespeichert (TTL: 12 Stunden)
  • Ressourcen-Caching: Einzelne Ressourcen (Seiten, Glossare, H5P) werden separat gecacht (TTL: 24 Stunden)
  • Automatische Cache-Invalidierung: Cache-Einträge werden automatisch ungültig, wenn Kursinhalte aktualisiert werden

Dieses Caching-System reduziert die Verarbeitungszeit und verbessert die Reaktionsfähigkeit der Tutoring Machine erheblich.

Peertube im Dateimanager

Dieses Plugin ermöglicht es, Videos von einer PeerTube-Instanz direkt in Moodle zu suchen und einzubetten.

Installation

  1. Kopiere den Plugin-Ordner peertube in das Verzeichnis moodledata/repository/ Deiner Moodle-Installation.
  2. Führe die Moodle-Installation/Upgrade-Routine aus.
  3. Aktiviere das Plugin in den Repository-Einstellungen.

Konfiguration

  1. Gehe zu Website-Administration > Plugins > Repositories > PeerTube videos
  2. Gebe die PeerTube Instance URL ein (z.B. https://peertube.example.com)
  3. Gebe Deinen Access Token ein. Den bekommst du mit diesem Befehl:

curl -X POST 
-d „client_id=Is6jenqfqprnxtsbikucz8zr7jjyae7ly&client_secret=IHR_CLIENT_SECRET&grant_type=password&response_type=code&username=IHR_BENUTZERNAME&password=IHR_PASSWORT“ 
https://peertube.example.com/api/v1/users/token

Video-Einbettung in Moodle

Um ein PeerTube-Video direkt in Moodle einzubetten:

  1. Erstelle eine Link/URL-Aktivität in Deinem Moodle-Kurs
  2. Klicke auf „Link auswählen“
  3. Wähle „PeerTube videos“ als Quelle
  4. Suche nach dem gewünschten Video
  5. Wähle das Video aus
  6. Unter „Darstellung“ wähle „Einbetten“ aus
  7. Speichere die Aktivität

Das Video wird nun direkt in Moodle eingebettet und abgespielt.

Unterstützte Funktionen

  • Suche nach Videos auf der PeerTube-Instanz
  • Zugriff auf alle Videos, auf die der Benutzer (jeder Nutzer hat einen anderen token, es gitb keine peertubeweiten, nutzendenunanhängigen token) Berechtigung hat (inklusive unlisted Videos)
  • Sortierung nach Datum, Views, Likes
  • Embed-URLs für direkte Einbettung

Anforderungen

  • Ein gültiger Access Token mit entsprechenden Berechtigungen
  • Moodle 4.0 oder höher
  • Eine PeerTube-Instanz mit aktivierter API

Seminarplaner

Dieses Plugin besteht aus zwei Bestandteilen. Zum einen einer Moodle Aktivität zur Planung und Konzeption von Veranstaltungen und zum anderen aus einer Verwaltung von globalen Methodensets

  • Anlegen und Verwalten von Methodenkarten in einer Aktivität
  • Seminarplaner mit nutzerspezifischem Zustand
  • Import globaler Methodensets aus dem local-Plugin
  • Review-Einreichung von neuen/geänderten Methoden aus der Aktivität
  • Import/Export von Methoden (JSON, CSV/ZIP kompatible Flows)
  • PDF-Export-Flows (ZIM / Seminarverlauf)
  • Soft-Lock-Mechanismus für Grid-Bearbeitung
  • Datei-Uploads für Methodenmaterialien