Dieses Tutorial ist ein Community-Beitrag und wird vom Open WebUI-Team nicht unterstützt. Es dient lediglich als Demonstration, wie Open WebUI für Ihren spezifischen Anwendungsfall angepasst werden kann. Möchten Sie beitragen? Schauen Sie sich das Tutorial zum Beitragen an.
[!WARNING] Diese Dokumentation wurde auf Basis der aktuellen Version (0.5.16) erstellt und wird ständig aktualisiert.
Jupyter Notebook Integration
Seit v0.5.11 bietet Open-WebUI eine neue Funktion namens Jupyter Notebook Support in Code Interpreter. Diese Funktion ermöglicht die Integration von Open-WebUI mit Jupyter. In den nachfolgenden Versionen gab es bereits mehrere Verbesserungen an dieser Funktion, daher sollten Sie die Release Notes sorgfältig prüfen.
Dieses Tutorial führt Sie durch die Grundlagen der Einrichtung der Verbindung zwischen den beiden Diensten.
Was sind Jupyter Notebooks
Jupyter Notebook ist eine Open-Source-Webanwendung, die es Benutzern ermöglicht, Dokumente mit Live-Code, Gleichungen, Visualisierungen und erläuterndem Text zu erstellen und zu teilen. Sie ist besonders beliebt in den Bereichen Data Science, wissenschaftliches Rechnen und Bildung, da sie es Benutzern ermöglicht, ausführbaren Code (in Sprachen wie Python, R oder Julia) mit erklärendem Text, Bildern und interaktiven Visualisierungen in einem einzigen Dokument zu kombinieren. Jupyter Notebooks sind besonders nützlich für die Datenanalyse und -exploration, da sie es Benutzern ermöglichen, Code in kleinen, überschaubaren Abschnitten auszuführen und dabei ihre Denkprozesse und Ergebnisse zu dokumentieren. Dieses Format erleichtert das Experimentieren, das Debuggen von Code und die Erstellung umfassender, teilbarer Berichte, die sowohl den Analyseprozess als auch die Ergebnisse demonstrieren.
Weitere Informationen finden Sie auf der Website von Jupyter unter: Project Juptyer
Schritt 0: Konfigurationsübersicht
Hier ist die Zielkonfiguration, die wir im Rahmen dieses Tutorials einrichten werden.

Schritt 1: OUI und Jupyter starten
Um dies zu erreichen, habe ich docker-compose verwendet, um einen Stack zu starten, der beide Dienste zusammen mit meinen LLMs enthält. Dies sollte jedoch auch funktionieren, wenn die einzelnen Docker-Container separat ausgeführt werden.
version: "3.8"
services:
open-webui:
image: ghcr.io/open-webui/open-webui:latest
container_name: open-webui
ports:
- "3000:8080"
volumes:
- open-webui:/app/backend/data
jupyter:
image: jupyter/minimal-notebook:latest
container_name: jupyter-notebook
ports:
- "8888:8888"
volumes:
- jupyter_data:/home/jovyan/work
environment:
- JUPYTER_ENABLE_LAB=yes
- JUPYTER_TOKEN=123456
volumes:
open-webui:
jupyter_data:
Sie können den obigen Stack starten, indem Sie den folgenden Befehl im Verzeichnis ausführen, in dem die docker-compose-Datei gespeichert ist.
docker-compose up -d
Sie sollten nun über die folgenden URLs auf beide Dienste zugreifen können.
| Dienst | URL |
|---|---|
| Open-WebUI | https://:3000 |
| Jupyter | https://:8888 |
Beim Zugriff auf den Jupyter-Dienst benötigen Sie das oben definierte JUPYTER_TOKEN. Für dieses Tutorial habe ich den Dummy-Token-Wert 123456 gewählt.

Schritt 2: Codeausführung für Jupyter konfigurieren
Nachdem wir nun Open-WebUI und Jupter ausgeführt haben, müssen wir die Codeausführung von Open-WebUI konfigurieren, um Jupyter unter Admin Panel -> Einstellungen -> Codeausführung zu verwenden. Da Open-WebUI diese Funktion ständig weiterentwickelt und verbessert, empfehle ich, die möglichen Konfigurationen immer in der configs.py Datei für das Neueste und Beste zu überprüfen. Ab v0.5.16 umfasst dies Folgendes:
| Open-WebUI Env Var | Wert |
|---|---|
ENABLE_CODE_INTERPRETER | True |
CODE_EXECUTION_ENGINE | jupyter |
CODE_EXECUTION_JUPYTER_URL | http://host.docker.internal:8888 |
CODE_EXECUTION_JUPYTER_AUTH | token |
CODE_EXECUTION_JUPYTER_AUTH_TOKEN | 123456 |
CODE_EXECUTION_JUPYTER_TIMEOUT | 60 |
CODE_INTERPRETER_ENGINE | jupyter |
CODE_INTERPRETER_JUPYTER_URL | http://host.docker.internal:8888 |
CODE_INTERPRETER_JUPYTER_AUTH | token |
CODE_INTERPRETER_JUPYTER_AUTH_TOKEN | 123456 |
CODE_INTERPRETER_JUPYTER_TIMEOUT | 60 |
Schritt 3: Verbindung testen
Lassen Sie uns zunächst bestätigen, was sich in unserem Jupyter-Verzeichnis befindet. Wie Sie aus der folgenden Abbildung ersehen können, haben wir nur einen leeren work-Ordner.

Eine CSV-Datei erstellen
Führen wir unseren ersten Prompt aus. Stellen Sie sicher, dass Sie die Schaltfläche Code Execution ausgewählt haben.
Prompt: Create two CSV files using fake data. The first CSV should be created using vanilla python and the second CSV should be created using the pandas library. Name the CSVs data1.csv and data2.csv

Wir können sehen, dass die CSV-Dateien erstellt wurden und nun innerhalb von Jupyter zugänglich sind.

Eine Visualisierung erstellen
Führen wir unseren zweiten Prompt aus. Stellen Sie auch hier sicher, dass Sie die Schaltfläche Code Execution ausgewählt haben.
Prompt: Create several visualizations in python using matplotlib and seaborn and save them to jupyter

Wir können sehen, dass die Visualisierungen erstellt wurden und nun innerhalb von Jupyter zugänglich sind.

Ein Notebook erstellen
Führen wir nun gemeinsam unseren letzten Prompt aus. In diesem Prompt erstellen wir ein komplett neues Notebook nur mit einem Prompt.
Prompt: Write python code to read and write json files and save it to my notebook called notebook.ipynb

Wir können sehen, dass die Visualisierungen erstellt wurden und nun innerhalb von Jupyter zugänglich sind.

Hinweis zum Workflow
Beim Testen dieser Funktion habe ich mehrmals festgestellt, dass Open-WebUI den in Open-WebUI generierten Code oder die Ausgabe nicht automatisch in meiner Jupyter-Instanz speicherte. Um es dazu zu zwingen, die von mir erstellte Datei/das von mir erstellte Element auszugeben, habe ich oft diesen zweistufigen Workflow befolgt, der zuerst das gewünschte Code-Artefakt erstellt und dann auffordert, es in meiner Jupyter-Instanz zu speichern.

Wie nutzen Sie diese Funktion?
Nutzen Sie die Codeausführungsfunktion und/oder Jupyter? Wenn ja, melden Sie sich bitte. Ich würde gerne erfahren, wie Sie sie nutzen, damit ich weitere Beispiele für andere großartige Möglichkeiten, diese Funktion zu nutzen, in dieses Tutorial aufnehmen kann!