気軽に試せるラップトップ環境で、チャットbotを提供するオールインワンの生成AI環境構築から始め、Kubernetesを活用した本格的なGPUクラスタの構築やモデルのファインチューニングまで解説する本連載。今回は、生成AIで注目の「RAG」を試せる環境を「Open WebUI」で構築する方法など、Open WebUIを本格活用するためのポイントを解説します。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
前回は、「Open WebUI」「Ollama」「Kubernetes」を活用して生成AIと対話できる環境をローカルで構築する方法を解説しました。
今回は、生成AIに学習されていない情報を知識として利用する「RAG」(Retrieval-Augmented Generation)を活用したり、マルチモーダルモデルを活用して画像を解析したり、2025年1月末から話題になった「DeepSeek R1」を活用したりするなど、Open WebUIを本格活用するポイントを解説していきます。
なお、処理が非常に遅く感じることもあると思いますが、GPU(Apple M1/2/3/4やIntel Core11世代以上のGPU内蔵CPU/NVIDIAまたはAMDのGPU)を持っている場合は、「GPUの利用による高速化」の項目を先に読んでみてください。GPUを利用するようにセットアップしておくことで、本稿で紹介するRAGやモデルの実行処理を高速化できます。
大規模言語モデル(LLM)は、学習データに基づいて応答を生成するため、その性質上、学習されていない情報に応答できないという課題があります。RAGは、外部のデータベースやドキュメントから関連情報を取得し、その情報を基に生成AIの回答を補完する技術です。RAGにより、モデルが学習していない情報を回答させることができるようになります。
Open WebUIの機能を利用してRAGを実現する方法としては、「指定したWebサイトの知識を利用」「Web検索エンジンを利用」「ナレッジベースを利用」の3種類があります。
Open WebUIは、特定のWebサイトやドキュメントを利用し、その情報を基に回答を生成できます。ここでは、Webサイトを読み込ませ、Open WebUIに回答させてみましょう。テキストボックスで、#の後にURLを入力する(【1】)と、そのWebサイトがテキストボックスの上にポップアップするので、ポップアップしたドキュメント(【2】)をクリックします。
これにより、ドキュメントとしてURLが挿入されます。
ここでは、利用した生成AIモデル「Swallow」の開発元である東京科学大学のWikipediaのURLを入力しました。
続けて質問したい内容を入力してみます。「東京科学大学について教えてください」と入れてみます。すると、下記のように回答を得られました。
東京科学大学は2024年10月に設立されたため、生成AIモデルは新しい情報を持っていないはずです。しかし、Webサイトを指定することで、Webサイトの情報を活用した回答が可能になります。
ここでは、Webサイトを利用しましたが、PDFや「Microsoft Office」の文書、Google DriveのデータをRAGの情報源として利用することもできます。Open WebUIでPDF/Microsoft Officeの文書を利用するには、「Apache Tika」を設定する必要があります。本連載で構築した環境の場合、Apache Tikaはセットアップ済みなので、すぐ利用できます。
Webサイトを指定すると、生成モデルが持っていない情報を利用して回答させることができる一方で、チャットUI(インタフェース)で対話するたびにWebサイトを指定する必要が出てきてしまいます。
そこでOpen WebUIには、Web検索エンジン(Google、Bing、Yahoo!など)の検索結果に基づいて生成AIに回答させる機能が備わっています。Googleを活用して、生成AIに回答させてみましょう。
他の検索エンジンを設定したい場合は、Open WebUIのWeb検索エンジンの設定ページを参考に、セットアップしてください。
Open WebUIでGoogleを利用するには、Google PSE(Programmable Search Engine)を利用します。Google PSEは、Googleが提供するカスタム検索エンジンで、APIを通じて検索結果を取得でき、アプリケーションに組み込むことが可能です。検索するサイトや言語をカスタマイズすることで、欲しい情報を制限することもできます。無料で利用できますが、無料プランでは広告が入るため、回答精度が下がる場合があります。広告が入らないようにして情報の精度を上げたい場合は、有料プランを利用する必要があるので注意してください。
Google PSEの準備
Google PSEのWebサイトにアクセスします。Googleアカウントでログインし、「追加」を押します。「新しい検索エンジンを作成」という画面が表示されるので以下の手順を参考に作成します。
作成後、次の画面でカスタマイズを選択すると、検索設定の画面が表示されます。「検索エンジンID」(【1】)はOpen WebUIへの登録が必要になるためメモしておきます。この画面では、検索対象のWebサイトや言語の設定を変更できます。一番下の「プログラマティックなアクセス」の「開始する」(【2】)を選択します。
続いて、プログラム可能検索エンジン(無料版)のユーザーの「キーを取得する」を選択します。
プロジェクト作成の画面が表示されるので、プロジェクト名を入力し「Yes」を選択します。「SHOW KEY」を選択すると、APIキーが表示されるので、こちらもメモします。
検索エンジンIDおよびAPIキーの2つを取得したら、Open WebUIの検索エンジンにその情報を入力します。
Open WebUIで検索エンジンを設定する
Open WebUIのWeb画面にブラウザでアクセスし、右上のユーザーのアイコンをクリック(【1】)し、管理者パネル(【2】)を選択します。
管理画面に移動するので、画面上部の設定(【1】)からWeb検索(【2】)を選択し、下記の通り設定します。
APIキーと検索エンジンIDを取り違えないように注意してください。また検索エンジンIDは、検索エンジン名と間違えないようにしてください。
この画面で、検索時に利用する検索結果数を設定できますが、参照する検索結果数が増えると応答精度は上がる一方で、GPUがないPCなどで実行した場合、非常に時間がかかるので1にしておきます。
Web検索エンジンを有効化する
さて、Web検索エンジンを有効にして質問してみましょう。先述したWeb検索エンジンの設定をすると、チャットボックスに「Web検索」のアイコンが表示されるようになります。このアイコンを選択すると「Search the Internet」と表示され、Web検索が有効になります。
試しに、「2025年1月1日の東京の天気は」と質問してみました。その結果、Google検索を利用して、2025年1月1日の東京の天気を検索した結果について回答を得ることができました。どのWebサイトの情報を基に回答を生成しているのかが分かるように、回答の下には参照元のサイトリンクも表示されています。
ナレッジベース(知識データベース)を作成し、生成AIに利用させることもできます。ナレッジベースを利用すると、例えば、複数のドキュメントからなる社内の規約類をナレッジとして登録し、それらを情報源として利用するという使い方ができます。
ナレッジベースにドキュメントを登録する
左上のメニュー表示のアイコン(【1】)を選択し、ワークスペース(【2】)→ナレッジベース(【3】)からナレッジベース管理画面に移動し、[+]アイコンを選択(【4】)します。
ナレッジベースの概要を登録する
次に、ナレッジベースの概要として以下の情報を入力します。
ナレッジベースに追加するドキュメントを追加する
ナレッジベースに追加するドキュメントをアップロードするため、[+]アイコンを選択します。ここでは、東京科学大学の入試サイトから入試要項のPDFをダウンロードして追加してみます。
ファイルをアップロードすると、左に追加したファイルが表示されます。今回は1つのファイルのみをアップロードしましたが、複数のファイルをアップロードできます。社内の規約類や、プロジェクトの手順書類を登録するなど用途ごとにナレッジベースを作成できます。
ここで登録したナレッジは、Collection(コレクション)とも呼ばれます。
情報源としてナレッジベースを指定する
チャット画面に戻り、テキストボックスに「#」と入力すると、登録したCollectionが参照できるようになります。
この画面では、「COLLECTIONと表示されたナレッジベース全体」か「ナレッジ内の個別のファイル」を指定できます。ここでは、COLLECTIONを指定して質問してみます。
例として「2025年度の入学金の締め切りはいつですか」と質問してみました。すると、ナレッジベースに登録したPDFに基づいた回答を得ることができました。
【補足】ナレッジベースを利用する場合、追加したPDF内の画像はOCR(文字認識)を用いてテキスト抽出され、Chromaに保存された上で、RAGとして利用する形式となります。ChromaはOpen WebUIに組み込まれていますが、スケーラビリティを考慮して外のPodやサーバに切り出すこともできます。
Milvus検索時にナレッジベース内のファイルを選択することもできますが、ファイルを選択した場合、ファイル内のテキストが全て生成AIで利用され、文書が長いと応答に時間がかかります。コレクションを利用した場合、Chromaでキーワードに該当する部分が検索され、関連情報のみ利用されます。
Open WebUIは、テキスト以外にも画像や音声といったマルチモーダルな情報を扱うことができます。ここでは、画像認識に対応したマルチモーダルモデルである「Gemma 3」を利用して、画像認識を試してみます。なお、ここで利用するGemma 3は最新のOllama0.6.2以降でしか動作しません。あらかじめ本稿記載のGPUのセットアップの手順を実行し、最新のOllamaを利用するか、Open WebUIのHelmチャート5.26.0以降をご利用ください。
画面左上の[モデル選択]を選択し、「gemma3:4b」を追加します。
適当な画像をアップロードして質問をしてみます。ここでは、請求書画像を使用し、商品情報をCSV形式で出力させてみましょう。
まず、テキストボックス欄の[+]→[ファイルのアップロード]と選択し、画像ファイルをアップロードします。
画像をアップロード後、テキストボックスに質問を入力します。ここでは、「表をCSVで出力」と入力します。すると、次の画像のように商品名と価格をCSV形式で得ることができました。
今回、小さいサイズのモデルを使用したため、出力結果に若干の誤りが含まれます。より大きなモデル(gemma3:12bなど)を利用すると精度が向上するので、マシンスペックに余裕がある人は試してみてください。
またOpen WebUIは、音声認識や画像生成モデルなどもサポートしています。
Open WebUIのコミュニティーサイトでたくさんのプラグイン、プロンプトが公開されています。これらを利用することで、Open WebUIを簡単に拡張できます。なお、コミュニティーサイトを利用する場合は、ユーザー登録とサインインが必要です。
コミュニティーサイトで公開されているプラグインには、大きく分けてPrompts、Tools、Functionsの3種類のプラグインがあります。Functionsは、Filters、Pipelines、Actionsの3つに分けられます。
カテゴリー | インポート方法 | 説明 |
---|---|---|
Prompts | ワークスペース→プロンプト | LLMに特定の指示を与えるプロンプトを生成する。チャット時に"/<プロンプト名>"と入力すると使用できる |
Tools | ワークスペース→ツール | LLMの推論時に処理を拡張する。例えば、天気プラグインを利用すると、入力に地名が含まれるときに天気情報がコンテキストに追加されるようになる。管理パネル→設定→モデルから、モデルに設定できる |
Filters(Functions) | 管理パネル→Functions | LLMの入出力を加工できる |
Actions(Functions) | 管理パネル→Functions | チャットの結果にボタンやリンクを追加し、特定の処理の実行、ページへ遷移するUIを追加できる |
Pipelines(Functions) | 管理パネル→設定→パイプライン | AIを他のツールと連携させ拡張できる |
上記のカテゴリーなどを参考にプラグインの検索画面から探してみてもよいでしょう。
ここでは、「Linux Command Expert」というプラグインの導入を例に、インストール方法を解説します。プラグインのサイトにアクセスして[Get]→[Download as Json export]を選択して、プラグインをインストールします。
プラグインのインポート
Open WebUIの画面で、[ワークスペース]→[プロンプト]→[プロンプトのインポート]を順に選択し、先ほどダウンロードしたファイルをインポートします。
インポートに成功すると、プラグイン(ここではプロンプト)が追加されます。
注:本稿執筆時点では、プロンプト以外のほとんどのプラグインがインポートに失敗します。その場合、プラグインのコードをプラグインサイトからコピーし、Open WebUI上でプラグインを新規作成してコードを張り付けることにより、インポートできます。インターネットにOpen WebUIが公開されていれば、[Import to WebUI]を選択し、Open WebUIを公開しているURLを入力する方法で、インポートできます。
インポートする方法はプラグインごとに異なります。先ほど紹介した表で、それぞれのプラグインのカテゴリーごとにインポートする方法をまとめていますので、Prompts以外のプラグインを利用したい人は参考にしてみてください。
linux-command-expertプロンプトの利用方法
チャット画面で、「/」と入力すると、「/linux-command-expert」プロンプトが一覧に表示されるので、選択します。
選択すると、プロンプトがテキストボックス内に展開されるので、メッセージを送信します。
すると、チャットUIがlinux command expertモードになり、linuxコマンドに特化して回答を得られるようになります。「OSのシステムコールをトレースできるツールは何ですか?」と質問すると、「strace」とシンプルにコマンドを教えてくれます。
このように、プラグインを活用することで、簡単にOpen WebUIを拡張できます。
GPUを利用すると推論処理を高速化できますが、ここでは、GPUを利用した構成について簡単に紹介します。なお、同じサーバ上でOllamaとOpen WebUIを動作させていることを前提として紹介します。
本連載で紹介した環境のように、Kubernetesで実行している構成でGPUを利用するには、OllamaをOS上で直接実行するよう、構成を変更する必要があります。
Ollamaは、NVIDIA/AMDのGPU、AppleシリコンのGPUに標準で対応しており、OSに直接インストールするだけでGPUを利用できるようになります。サポートしているGPUの詳細は、Ollamaのサイトをご覧ください。なお、KubernetesでGPUを利用する方法として、KubernetesにデプロイしたOllamaからGPUを利用するパターンもあります。こちらについては本連載の別の回で解説する予定です。
それでは、構成変更の手順を紹介します。Open WebUI自身は、事前に前回の記事の構成でインストールされていることを前提としています。以降は、少なくとも条件を満たすKubernetesクラスタの準備をした人向けの内容です。
Windowsの場合は、お持ちのGPUのデバイスドライバをインストールします。各製品のマニュアルに従ってインストールしてください。既にインストールされている場合、バージョンをアップデートしておきます。
Mac/LinuxはGPUドライバのインストールは不要です。LinuxはOllamaインストール時にGPUドライバと必要なソフトウェアを自動的にインストールします。
Ollamaのインストールサイトからダウンロードしてインストールします。
注:IntelのCPU内臓のGPUやディスクリートGPUのArcを利用したい場合は、Intelが配布しているIntelのGPUに対応した非公式バイナリを利用します。非公式バイナリはCore Ultra、第11世代以上のCoreシリーズプロセッサの組み込みGPU、Arcに対応しています。IntelのGPUに対応したバイナリについては、Run Ollama with IPEX-LLM on Intel GPUをご覧ください。
Ollamaは既定(デフォルト)ではローカルホストからのアクセスしか受け付けません。Kubernetes上のOpen WebUIのPodからアクセスできるようにするには、他のホストからのアクセスを許可する必要があります。アクセスの許可は、OLLAMA_HOST環境変数に0.0.0.0を設定します。
Windows
「設定」を開き、検索画面で「環境」を入力します。「環境変数を編集」を開き、新しく下記の環境変数を設定します。
Mac
launchctlコマンドで環境変数を設定します。
% launchctl setenv OLLAMA_HOST "0.0.0.0"
Linux
exportコマンドで環境変数を設定します。
$ export OLLAMA_HOST="0.0.0.0"
Ollamaを実行します。既に実行している場合は一度終了し、再起動します。この操作を行わないと環境変数が反映されません。
前回利用したvalues.yamlのollamaの項目を下記のように変更して、再インストールします。完全なvalues.yamlはこちらからダウンロードしてください。
- ...
- ollama:
- enabled: false
- ollamaUrls:
- - http://host.docker.internal:11434
- ...
Rancher Desktop、kind、Docker Desktopなどでは、ホスト名にhost.docker.internalを指定することで、コンテナが動作しているホストに接続できます。Ollamaの接続先にホスト上のOllamaを指しています。他の環境の場合、お使いのPC、サーバのIPアドレスを直接指定するなどしてください。
Kubernetes上にインストールしたOpen WebUIのHelmチャートを削除してから、再度Helmチャートを使ってインストールします。
% helm delete -nopen-webui open-webui % helm upgrade --install --version 5.26.0 --create-namespace open-webui open-webui/open-webui -nopen-webui -f values.yaml
アップグレードのみで構成を変更しようとすると、Kubernetes上のOllamaへの接続設定が残ってしまい、正しく動作しないので注意してください。なお、推論はOS上のメモリを直接利用するようになるので、Rancher Desktop/WSL(Windows Subsystem for Linux)など、Kubernetesで利用するために割り当てたメモリは減らした方がよいでしょう。
Open WebUI上で適当なモデルを読み込み、動作を確認します。Open WebUIでテキストを入力しつつ、アクティビティモニタ(Mac)やタスクマネージャー(Windows)でGPUが利用されているかどうかを確認します。
高性能な生成AIモデルとして注目されているDeepSeek R1は、ユーザーがローカルで自由に利用できる点も大きく注目されています。
日本語環境で利用する場合、14B(140億パラメーター)以上のモデルだと実用的な回答を得られますが、GPUがない場合、応答速度が大幅に低下する可能性があります。7B/8B(70億/80億パラメーター)モデルはCPUのみでも動作はしますが、日本語の質問に対して中国語や英語で回答されるなど、利用するには難しい印象です。
そこで、GPUを利用する構成を前提にしますが、DeepSeek R1の14Bのモデルを量子化したモデルをローカルで実行してみます。OllamaHubでもDeepSeek R1は提供されていますが、日本語性能に考慮して量子化したモデルを著者が作成し、Hugging Faceにアップロードしたので、こちらを利用します。
下記の手順で、Open WebUI上でモデルを利用します。
準備ができたらチャットで質問してみます。ここでは、下記の質問をしてみました。
次の条件を考慮して2029年に必要となるエンジニア像を推測してください
*AIにより汎用的なプログラミングタスクはほぼ自動化される
*高度な知識が必要とされる作業もある程度事例があれば自動化される
*インターネット上に事例がないものに対しては不正確な出力となる
*汎用的なアーキテクチャ設計は自動的に実施される
*特殊条件ではAIによる自動化は正確さを欠ける
その結果、次の画面のような回答を得ることができました。
Thought(ChatGPTの推論相当)の中で英語で考えていますが、推論の結果は、正しく日本語で出力されていることが分かります。
このように、Deepseek-R1のような高度な推論を行うモデルもOpen WebUIとOllamaを組み合わせることにより利用することができます。
今回は、Open WebUIのさまざまな機能の利用方法や、生成AIを動かす環境にGPUを利用する基本的な方法などを紹介しました。今回紹介した中でもコミュニティーサイトで配布されているプラグインで簡単に拡張できるため、クラウドサービスやローカルで動かすモデルを問わず、今後もさまざまな生成AIに対応していくと考えられます。「Visual Studio Code」のような生成AIの開発環境の中心になっていくのではないかと期待しています。
Open WebUIは現在開発が盛んに行われており、どんどん新しいバージョンがリリースされています。また機会があれば、Open WebUIの新機能やプラグインなども紹介できればと思います。
Copyright © ITmedia, Inc. All Rights Reserved.
Smart & Social 記事ランキング