これは、なにをしたくて書いたもの?
OllamaをWeb UIで操作できないかなと探していたら、Open WebUIというものを見つけたので試してみることにしました。
Open WebUI
Open WebUIのオフィシャルサイトはこちら。
GitHub - open-webui/open-webui: User-friendly AI Interface (Supports Ollama, OpenAI API, ...)
ドキュメントはこちら。
Open WebUIは、オフラインかつセルフホスティングできるAIプラットフォームだそうです。OllamaやOpenAI互換のAPIを
LLMランナーとしてサポートし、RAG用のエンジンをビルトインしていたり強力なAIデプロイメントソリューションでも
あるとされています。
Open WebUI is an extensible, feature-rich, and user-friendly self-hosted AI platform designed to operate entirely offline. It supports various LLM runners like Ollama and OpenAI-compatible APIs, with built-in inference engine for RAG, making it a powerful AI deployment solution.
主な機能はこちら。
- 簡単なセットアップ
- OpenAI APIとのインテグレーション
- ユーザーおよび権限管理
- レスポンシブデザイン
- PWA
- MarkdownおよびLaTeXのサポート
- モデルビルダー(Ollamaのカスタムモデルの作成)
- ローカルおよびリモートとのRAGインテグレーション
- 画像生成とのインテグレーション
- RBAC(ロールベースの権限制御)
- 多言語サポート
- 継続的なアップデート
その他にもたくさんの機能があるようで、一覧では書けないですね…。
Features / And many more remarkable features including...
インストール方法はDocker、Pythonパッケージなどがあります。
ひとまず使ってみましょうか。
環境
今回の環境はこちら。
$ bin/ollama --version Warning: could not connect to a running Ollama instance Warning: client version is 0.5.11 $ python3 --version Python 3.12.3 $ uv --version uv 0.6.2
Ollamaは起動しておきます。
$ bin/ollama serve
ローカルにモデルはこれだけあります。
$ bin/ollama list NAME ID SIZE MODIFIED schroneko/gemma-2-2b-jpn-it:q8_0 fcfc848fe62a 2.8 GB 5 days ago hf.co/elyza/Llama-3-ELYZA-JP-8B-GGUF:latest 12b66520839d 4.9 GB 5 days ago gemma2:2b 8ccf136fdd52 1.6 GB 5 days ago gemma2:9b ff02c3702f32 5.4 GB 5 days ago llama3.2:3b a80c4f17acd5 2.0 GB 6 days ago
Open WebUIをインストールする
Open WebUIをインストールするにはDockerイメージという選択肢がありますが、今回はPythonパッケージとしてインストール
することにします。
Open WebUI / Manual Installation
uvを使ってインストールすることにしましょう。
プロジェクトの作成。
$ uv init --vcs none open-webui-server $ cd open-webui-server $ rm main.py
インストール。
$ uv add open-webui
まあまあの数のパッケージが入るようです…。
インストールされたパッケージの一覧。
$ uv pip list Package Version -------------------------------------- ----------- aiocache 0.12.3 aiofiles 24.1.0 aiohappyeyeballs 2.4.6 aiohttp 3.11.11 aiosignal 1.3.2 alembic 1.14.0 annotated-types 0.7.0 anthropic 0.46.0 anyio 4.8.0 appdirs 1.4.4 apscheduler 3.10.4 argon2-cffi 23.1.0 argon2-cffi-bindings 21.2.0 asgiref 3.8.1 async-timeout 5.0.1 attrs 25.1.0 authlib 1.4.1 av 14.1.0 azure-core 1.32.0 azure-identity 1.20.0 azure-storage-blob 12.24.1 backoff 2.2.1 bcrypt 4.2.0 beautifulsoup4 4.13.3 bidict 0.23.1 bitarray 3.1.0 black 24.8.0 blinker 1.9.0 boto3 1.35.53 botocore 1.35.99 build 1.2.2.post1 cachetools 5.5.2 certifi 2025.1.31 cffi 1.17.1 chardet 5.2.0 charset-normalizer 3.4.1 chroma-hnswlib 0.7.6 chromadb 0.6.2 click 8.1.8 colbert-ai 0.2.21 colorclass 2.2.2 coloredlogs 15.0.1 compressed-rtf 1.0.6 cryptography 44.0.1 ctranslate2 4.5.0 dataclasses-json 0.6.7 datasets 3.3.2 defusedxml 0.7.1 deprecated 1.2.18 dill 0.3.8 distro 1.9.0 dnspython 2.7.0 docker 7.1.0 docx2txt 0.8 duckduckgo-search 7.3.2 durationpy 0.9 easygui 0.98.3 ebcdic 1.1.1 ecdsa 0.19.0 einops 0.8.0 emoji 2.14.1 et-xmlfile 2.0.0 eval-type-backport 0.2.2 events 0.5 extract-msg 0.53.1 fake-useragent 1.5.1 fastapi 0.115.7 faster-whisper 1.1.1 filelock 3.17.0 filetype 1.2.0 firecrawl-py 1.12.0 flask 3.1.0 flatbuffers 25.2.10 fonttools 4.56.0 fpdf2 2.8.2 frozenlist 1.5.0 fs 2.4.16 fsspec 2024.12.0 ftfy 6.2.3 gcp-storage-emulator 2024.8.3 git-python 1.0.3 gitdb 4.0.12 gitpython 3.1.44 google-ai-generativelanguage 0.6.6 google-api-core 2.24.1 google-api-python-client 2.161.0 google-auth 2.38.0 google-auth-httplib2 0.2.0 google-auth-oauthlib 1.2.1 google-cloud-core 2.4.2 google-cloud-storage 2.19.0 google-crc32c 1.6.0 google-generativeai 0.7.2 google-resumable-media 2.7.2 googleapis-common-protos 1.63.2 greenlet 3.1.1 grpcio 1.67.1 grpcio-status 1.62.3 grpcio-tools 1.62.3 h11 0.14.0 h2 4.2.0 hpack 4.1.0 html5lib 1.1 httpcore 1.0.7 httplib2 0.22.0 httptools 0.6.4 httpx 0.28.1 httpx-sse 0.4.0 huggingface-hub 0.29.1 humanfriendly 10.0 hyperframe 6.1.0 idna 3.10 importlib-metadata 8.5.0 importlib-resources 6.5.2 iniconfig 2.0.0 isodate 0.7.2 itsdangerous 2.2.0 jinja2 3.1.5 jiter 0.8.2 jmespath 1.0.1 joblib 1.4.2 jsonpatch 1.33 jsonpointer 3.0.0 kubernetes 32.0.1 langchain 0.3.7 langchain-community 0.3.7 langchain-core 0.3.37 langchain-text-splitters 0.3.6 langdetect 1.0.9 langfuse 2.44.0 langsmith 0.1.147 lark 1.1.9 ldap3 2.9.1 lxml 5.3.1 mako 1.3.9 markdown 3.7 markdown-it-py 3.0.0 markupsafe 3.0.2 marshmallow 3.26.1 mdurl 0.1.2 milvus-lite 2.4.11 mmh3 5.1.0 monotonic 1.6 moto 5.0.28 mpmath 1.3.0 msal 1.31.1 msal-extensions 1.2.0 msoffcrypto-tool 5.4.2 multidict 6.1.0 multiprocess 0.70.16 mypy-extensions 1.0.0 nest-asyncio 1.6.0 networkx 3.4.2 ninja 1.11.1.3 nltk 3.9.1 numpy 1.26.4 nvidia-cublas-cu12 12.1.3.1 nvidia-cuda-cupti-cu12 12.1.105 nvidia-cuda-nvrtc-cu12 12.1.105 nvidia-cuda-runtime-cu12 12.1.105 nvidia-cudnn-cu12 9.1.0.70 nvidia-cufft-cu12 11.0.2.54 nvidia-curand-cu12 10.3.2.106 nvidia-cusolver-cu12 11.4.5.107 nvidia-cusparse-cu12 12.1.0.106 nvidia-nccl-cu12 2.20.5 nvidia-nvjitlink-cu12 12.8.61 nvidia-nvtx-cu12 12.1.105 oauthlib 3.2.2 olefile 0.47 oletools 0.60.2 onnxruntime 1.20.1 open-webui 0.5.16 openai 1.63.2 opencv-python 4.11.0.86 opencv-python-headless 4.11.0.86 openpyxl 3.1.5 opensearch-py 2.8.0 opentelemetry-api 1.30.0 opentelemetry-exporter-otlp-proto-grpc 1.15.0 opentelemetry-instrumentation 0.51b0 opentelemetry-instrumentation-asgi 0.51b0 opentelemetry-instrumentation-fastapi 0.51b0 opentelemetry-proto 1.15.0 opentelemetry-sdk 1.30.0 opentelemetry-semantic-conventions 0.51b0 opentelemetry-util-http 0.51b0 orjson 3.10.15 overrides 7.7.0 packaging 23.2 pandas 2.2.3 passlib 1.7.4 pathspec 0.12.1 pcodedmp 1.2.6 peewee 3.17.8 peewee-migrate 1.12.2 pgvector 0.3.5 pillow 11.1.0 platformdirs 4.3.6 playwright 1.49.1 pluggy 1.5.0 portalocker 2.10.1 posthog 3.15.0 primp 0.13.0 propcache 0.3.0 proto-plus 1.26.0 protobuf 4.25.6 psutil 7.0.0 psycopg2-binary 2.9.9 py-partiql-parser 0.6.1 pyarrow 19.0.1 pyasn1 0.4.8 pyasn1-modules 0.4.1 pyclipper 1.3.0.post6 pycparser 2.22 pydantic 2.10.6 pydantic-core 2.27.2 pydantic-settings 2.8.0 pydub 0.25.1 pyee 12.0.0 pygments 2.19.1 pyjwt 2.10.1 pymdown-extensions 10.14.2 pymilvus 2.5.0 pymongo 4.11.1 pymysql 1.1.1 pypandoc 1.13 pyparsing 3.2.1 pypdf 4.3.1 pypika 0.48.9 pyproject-hooks 1.2.0 pytest 8.3.4 pytest-docker 3.1.2 python-dateutil 2.9.0.post0 python-dotenv 1.0.1 python-engineio 4.11.2 python-iso639 2025.2.18 python-jose 3.4.0 python-magic 0.4.27 python-multipart 0.0.18 python-oxmsg 0.0.2 python-pptx 1.0.0 python-socketio 5.11.3 pytube 15.0.0 pytz 2025.1 pyxlsb 1.0.10 pyyaml 6.0.2 qdrant-client 1.12.2 rank-bm25 0.2.2 rapidfuzz 3.12.1 rapidocr-onnxruntime 1.3.24 red-black-tree-mod 1.22 redis 5.2.1 regex 2024.11.6 requests 2.32.3 requests-oauthlib 2.0.0 requests-toolbelt 1.0.0 responses 0.25.6 restrictedpython 8.0 rich 13.9.4 rsa 4.9 rtfde 0.1.2 s3transfer 0.10.4 safetensors 0.5.2 scikit-learn 1.6.1 scipy 1.15.2 sentence-transformers 3.3.1 sentencepiece 0.2.0 setuptools 75.8.0 shapely 2.0.7 shellingham 1.5.4 simple-websocket 1.1.0 six 1.17.0 smmap 5.0.2 sniffio 1.3.1 soundfile 0.13.1 soupsieve 2.6 sqlalchemy 2.0.32 starlette 0.45.3 sympy 1.13.3 tenacity 9.0.0 threadpoolctl 3.5.0 tiktoken 0.9.0 tokenizers 0.21.0 torch 2.4.1 tqdm 4.67.1 transformers 4.49.0 triton 3.0.0 typer 0.15.1 typing-extensions 4.12.2 typing-inspect 0.9.0 tzdata 2025.1 tzlocal 5.3 ujson 5.10.0 unstructured 0.16.17 unstructured-client 0.30.3 uritemplate 4.1.1 urllib3 2.3.0 uvicorn 0.30.6 uvloop 0.21.0 validators 0.34.0 watchfiles 1.0.4 wcwidth 0.2.13 webencodings 0.5.1 websocket-client 1.8.0 websockets 15.0 werkzeug 3.1.3 wrapt 1.17.2 wsproto 1.2.0 xlrd 2.0.1 xlsxwriter 3.2.2 xmltodict 0.14.2 xxhash 3.5.0 yarl 1.18.3 youtube-transcript-api 0.6.3 zipp 3.21.0
起動。
$ uv run open-webui serve
初回はそこそこ時間がかかります。どうもHugging Faceからモデルをダウンロードしてくるようです。
2回目以降は速くなりますが。
INFO [open_webui.env] Embedding model set: sentence-transformers/all-MiniLM-L6-v2 WARNI [langchain_community.utils.user_agent] USER_AGENT environment variable not set, consider setting it to identify your requests. ██████╗ ██████╗ ███████╗███╗ ██╗ ██╗ ██╗███████╗██████╗ ██╗ ██╗██╗ ██╔═══██╗██╔══██╗██╔════╝████╗ ██║ ██║ ██║██╔════╝██╔══██╗██║ ██║██║ ██║ ██║██████╔╝█████╗ ██╔██╗ ██║ ██║ █╗ ██║█████╗ ██████╔╝██║ ██║██║ ██║ ██║██╔═══╝ ██╔══╝ ██║╚██╗██║ ██║███╗██║██╔══╝ ██╔══██╗██║ ██║██║ ╚██████╔╝██║ ███████╗██║ ╚████║ ╚███╔███╔╝███████╗██████╔╝╚██████╔╝██║ ╚═════╝ ╚═╝ ╚══════╝╚═╝ ╚═══╝ ╚══╝╚══╝ ╚══════╝╚═════╝ ╚═════╝ ╚═╝ v0.5.16 - building the best open-source AI user interface. https://github.com/open-webui/open-webui Fetching 30 files: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 30/30 [00:00<00:00, 11999.73it/s] INFO: Started server process [42561] INFO: Waiting for application startup. INFO: Application startup complete. INFO: Uvicorn running on http://0.0.0.0:8080 (Press CTRL+C to quit) INFO: ('127.0.0.1', 52232) - "WebSocket /ws/socket.io/?EIO=4&transport=websocket" [accepted] INFO: connection open
8080ポートでリッスンしているようなので、http://localhost:8080
にアクセスして見てみましょう。
こんなページが表示されました。
「Get started」というリンクを押すとアカウントを作成することを求められるので、作ってみます。
ログインすると、すでにモデル名が表示されています。
どうやら、ローカルのOllamaにすでに接続しているようです。モデルの一覧も見れますしね。
Gemma2を使って、会話してみます。
するとチャット用のページに切り替わり、会話ができます。
チャットの履歴も扱えるようです。
いいですね。
このデータはデフォルトで./data
ディレクトリーに保存されるようなのですが…。
Environment Variable Configuration / App/Backend / Directories
実際に見てみると、けっこうすごいところにありました…。
$ tree .venv/lib/python3.12/site-packages/open_webui/data .venv/lib/python3.12/site-packages/open_webui/data ├── cache │ ├── audio │ │ └── speech │ └── image │ └── generations ├── readme.txt ├── uploads ├── vector_db │ └── chroma.sqlite3 └── webui.db 8 directories, 3 files
最初の案内に習って、DATA_DIR
環境変数を使って明示的に指定した方が良さそうです。
$ DATA_DIR=data uv run open-webui serve
あとはQuick Startを見たり、機能ごとのドキュメントを見て慣れていく感じでしょうか。
Ollamaへの接続設定は、ユーザーの「管理者パネル」 → 「設定」 → 「接続」で確認できるようです。
🦙 Starting With Ollama | Open WebUI
Ollamaのモデルのダウンロードもできるようなので便利ですね。
おわりに
Open WebUIを使って、OllamaをWeb UIから操作してみました。
かなり良い感じにできあがっていてビックリしました。機能もいろいろあるようなので、ちょっと試したい時などに
使ってみようかなと思います。