Open WebUIの導入・更新・ここがすごい

## Open Webuiとは

[Open Webui](https://github.com/open-webui/open-webui)は、ローカル環境でも動かせるチャットボットのインターフェース。Dockerコンテナなので１コマンドでまるっと導入して即座に動かせる上、高機能だし安定して動くしでなんかもうすごい。

なんか凄すぎるので、Open Webuiの導入手順とともに、実際に使用して感じたすごいポイントを称える記事を書いておくことにする。

## 導入手順（Dockerコンテナ）

以下のコマンドを実行することで、コンテナがインストールされ、ポート3000でWeb UIが利用可能になる。
Github上の公式ガイドには何パターンかの導入コマンドが示されているが、今回はその中でも
・GPUの使用アリ
・インターフェースとしてのOpen Webuiに加えてLLMサーバのollamaも内蔵
というオールインワンタイプのコンテナを使うパターンを採用した。
```
docker run -d -p 3000:8080 --gpus=all -v ollama:/root/.ollama -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:ollama
```

あとはブラウザで`http://localhost:3000`にアクセスすれば、Open Webuiのインターフェースが利用できる。
停止/起動は単純に```docker stop open-webui```なり```docker start open-webui```を実行するだけ。


## 初回ログイン時の設定

初回ログイン時には、（ローカルでしか使わないとしても）適当なユーザー名とパスワードを設定する必要がある。

## LLMモデルの追加手順

Open WebUIでは、必要に応じてLLMモデルを追加できる。以下に手順を示す。

1. **モデルの選択**
   - [Ollamaのモデル一覧](https://ollama.com/search)から、使用したいモデルを選択し、ダウンロード用のコマンドを入手する。

2. **モデルのダウンロード**
   - Open WebUIの右上にある「LLM一覧」から、先ほど選択したモデルのタグ名を入力し、「Pull」を実行
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179750/29a3b500-5b6e-4578-69c7-5e792b8da3ea.png)

   - なお、huggingfaceからダウンロードすることもできる。ggufモデルに限られるが、以下のように「Use this model」のプルダウンからOllamaを選択すると、ollamaにモデルをダウンロードするためのコマンドを入手できる。
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179750/e835fde3-706d-cbd0-0a50-5d4104c59fef.png)


3. **モデルの選択**
   - ダウンロードが完了したら、チャット画面で新しく追加したモデルを選択し、会話を開始できる


## 更新手順

公式ガイドに沿って以下のコマンドを実行するだけでよい。
（Open WebUIは起動したまま実行してしまってよい。勝手に再起動されるので）
```
docker run --rm --volume /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower --run-once open-webui
```

実行時は以下のような感じになり、数分程度かかる。
```
$ docker run --rm --volume /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower --run-once open-webui
time="2024-11-23T14:51:04Z" level=info msg="Watchtower 1.7.1"
time="2024-11-23T14:51:04Z" level=info msg="Using no notifications"
time="2024-11-23T14:51:04Z" level=info msg="Only checking containers which name matches \"open-webui\""
time="2024-11-23T14:51:04Z" level=info msg="Running a one time update."
time="2024-11-23T14:52:43Z" level=info msg="Found new ghcr.io/open-webui/open-webui:ollama image (7728f4065cbb)"
time="2024-11-23T14:52:43Z" level=info msg="Stopping /open-webui (90dc6d698d7f) with SIGTERM"
time="2024-11-23T14:52:46Z" level=info msg="Creating /open-webui"
time="2024-11-23T14:52:47Z" level=info msg="Session done" Failed=0 Scanned=1 Updated=1 notify=no
time="2024-11-23T14:52:47Z" level=info msg="Waiting for the notification goroutine to finish" notify=no
```

このコマンドにより、コンテナ内のソフトウェアが最新バージョンにアップデートされる。
何も考えずに更新コマンドひとつ叩きさえすれば更新できる、というのは非常にありがたい。

## Open Webuiの特にすごいところ

### 1. **UIがほぼChatGPTそのもの**
Open WebuiのUIデザインは、非常に直感的で使いやすい。
特にChatGPTを普段から利用しているユーザーであれば、ほぼ同じ感覚で操作が可能なので、余計な学習コストが要らない（適当に設定項目とか見てみればなんとなく使い方はわかる）ので非常にとっつきやすい。

### 2. **安定したモデル挙動**
モデルの安定性が高いように思う。
かつてtext generate webuiの時代には、以下のようなトラブルが多発していた印象がある。
- 日本語での会話が非常に不安定。
- 会話が普通に進行することもあれば、同じ言葉をぐるぐると繰り返す場合もあった。
- 日本語対応モデルのはずなのに、日本語で応答しないことが頻発。
- プロンプトフォーマットの設定やプリセットの選択が手間。

これらの課題に比べ、Open Webuiは極めて安定しており、日本語の会話も違和感なく行える。また、特別な設定をしなくても、そのままスムーズに使える点が非常に素晴らしい。

### ３. **しかもOPEN AI互換APIとしても動く**
標準の機能としてOPEN AI互換APIさーとして利用することができる。[ガイド](https://docs.openwebui.com/getting-started/advanced-topics/api-endpoints)
なおデフォルトではランダムなAPIキーが生成されているので、利用時はOllamaとは違ってAPIキーもきちんと入力した上で使う必要あり。