Local Chatシステム (Open WebUI)

生成AIサービスのほとんどが、クラウド上で提供されています。

主要なチャットサービスではユーザの入力が無条件にLLMの学習に使われてしまうことはないようです。それでも、ファイルをアップロードする場合など、社内情報の利用にはリスクが残ります。大きな組織であれば、GoogleやAWSのVPCを使ってセキュアな環境を用意することもできるかもしれません。

本記事ではオープンソースを利用して、ローカルPC で動作する生成AIのチャットアプリを試してみます。

目次

Open WebUIのインストール

今回使ったソフトウエアは以下の3つです。

  1. Ollama:オープンソースのLLMを動作させるツール
  2. Docker Desktop:様々なオープンソースアプリの実行環境を構築するためのツール
  3. OpenWeb UI : ChatGPT風のUIを持つチャットアプリ

今回の環境は、2022年に購入したMac Book Air(M2)です。メモリは16GBです。動作はしましたが、使用するモデルによっては実用的な速度とは言い難かったです。実務で使うのであれば、できるだけスペックの高い機材を用意された方が良いかと思います。

Ollama

Ollamaは、Llama 3やMistralといったオープンソースの大規模言語モデル(LLM)を、PC(ローカル環境)で手軽に実行するためのツールです。通常は複雑な環境構築が必要なLLMのセットアップを、簡単なコマンド一つで完了させることができます。ダウンロードしたモデルはオフラインでも利用できるため、プライバシーやセキュリティを重視するデータの扱いに適しています。開発者向けにAPIも提供されており、自作のアプリケーションにAI機能を組み込む際にも便利です。

公式サイトから、アプリケーションをダウンロードしてインストールします。

アプリケーションを起動したのち、ターミナルから、コマンドを打つことでLLMが利用可能になります。例えば、以下のようにコマンドを打つとコマンドラインでphi4が利用可能になります。

% ollama run phi4
>>> こんにちは
こんにちは!今日はどのようにお手伝いできるか教えてください。何か質問があれば、気軽に
聞いてくださいね。

>>> Send a message (/? for help)

基本的なOllamaコマンド

  • ollama serve: Ollamaをローカルで起動します。APIエンドポイントとして機能し、他のアプリケーションと統合する際に便利です。
  • ollama show <model>: 特定のモデルの詳細情報(設定やリリース日など)を表示します。
  • ollama run <model>: 指定したモデルを実行し、対話が可能な状態にします。
  • ollama pull <model>: 指定したモデルをローカルにダウンロードします。
  • ollama list: ダウンロード済みのすべてのモデルをリスト表示します。
  • ollama ps: 現在実行中のモデルを表示します。
  • ollama stop <model>: 指定したモデルの実行を停止します。
  • ollama rm <model>: 指定したモデルをシステムから削除します。
  • ollama help: 任意のコマンドに関するヘルプを表示します。

主要モデル

よく使われる日本語対応のモデルは、以下のとおりです。バージョンやモデルのサイズが選択できます。

  • llama : Meta社のオープンモデル
  • gemma : Google社のオープンモデル
  • phi : Microsoft社のオープンモデル
  • mistral : Mistral AI社(フランス)のオープンモデル

その他、利用可能なモデルは、公式から確認・検索できます。

利用するモデルをいくつかローカルPCにダウンロードしておきます。

Docker Desktop

Docker Desktopは、WindowsやmacOS上でコンテナ型仮想化技術「Docker」を簡単に利用できるようにするための公式アプリケーションです。アプリケーションとその依存関係を「コンテナ」と呼ばれる独立した環境にパッケージ化することで、「自分のPCでは動いたのに、他の環境では動かない」といった問題を解消します。開発者は、OSやミドルウェアの違いを意識することなく、アプリケーションの開発、共有、実行が可能です。グラフィカルなインターフェース(GUI)を提供し、コンテナの起動や停止、イメージの管理などを直感的に操作できます。

今回は、後述のOpenWebUIを実行させるために使います。

開発者向けのツールではありますが、オープンソースのソフトウエアをインストールする際には大変便利なツールです。以下の公式サイトから、使用するPC用のソフトをダウンロードして下さい。



Open WebUI

Open WebUIは、Ollamaなどでローカル実行している大規模言語モデル(LLM)を、ChatGPTのような使いやすいチャットインターフェースで操作できるようにするオープンソースのツールです。(旧称: Ollama WebUI) 複数のLLMモデルを簡単に切り替えたり、よく使う指示(プロンプト)を保存したりできます。また、手持ちのドキュメントを読み込ませ、その内容に関する質問に答えさせるRAG(Retrieval-Augmented Generation)機能も搭載しており、ローカル環境だけで高機能なAIチャットアシスタントを構築できます。

Docker Desktopアプリを起動したのち、ターミナルソフトを開いて以下のコマンド打ちます。

docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main

このコマンドは以下のことを行います:

docker run:

  • Dockerコンテナを起動するための基本コマンドです。

-d:

  • コンテナをデタッチモード(バックグラウンド)で実行します。これにより、コンテナはターミナルを占有せずに実行されます。

-p 3000:8080:

  • ホストのポート3000をコンテナのポート8080にマッピングします。これにより、ホストの3000番ポートにアクセスすると、コンテナ内の8080番ポートで動作しているサービスに接続できます。

--add-host=host.docker.internal:host-gateway:

  • コンテナ内からホストマシンにアクセスするための設定です。host.docker.internalというホスト名をhost-gatewayに解決させることで、コンテナからホストのサービスにアクセスできるようになります。

-v open-webui:/app/backend/data:

  • ボリュームマウントを設定します。ホストのopen-webuiというボリュームをコンテナ内の/app/backend/dataにマウントします。これにより、コンテナが停止してもデータが保持されます。

--name open-webui:

  • コンテナにopen-webuiという名前を付けます。これにより、後でコンテナを管理しやすくなります。

--restart always:

  • コンテナが停止した場合、自動的に再起動するように設定します。これにより、コンテナが何らかの理由で停止しても、常に実行され続けます。

ghcr.io/open-webui/open-webui:main:

  • 使用するDockerイメージの指定です。この場合、GitHub Container Registryからopen-webuimainタグのイメージを使用します。

完了したら、以下のURLにアクセスすると、Webアプリが立ち上がります。

http://localhost:3000/

OpenWebUIの画面は以下のようになります。例では、phi4-mini:latestのモデルを使ってテトリスのプログラムコードを書いてもらっています。

少し時間はかかりましたが、gemma3:4bを使って、画像の認識もできました。

各モデルごとに、Contextサイズ(入力可能な情報量)が異なります。全体的に最新のLLM(gpt-4, gemini, claudeなど)に比べて、オープンソースのモデルはContextサイズが小さいので、入力するファイルのサイズには注意が必要です。

まとめ

今回は、ローカルPCにインストールしましたが、社内のローカルサーバにインストールしても良いかと思います。OpenWebUIには、ユーザ管理機能もありますので、複数の利用者からの利用も可能です。

目次