その他

【Open WebUI】簡単に作れるRAGチャットボット環境

その他
この記事は約7分で読めます。

はじめに

みなさんこんにちは。株式会社インプルの岩崎です。

本日はちょっと賞味期限切れですが、Open webUIのお話です。

Open webUI

今回実装したOpen webUIとは、ローカル環境で動かす大規模言語モデル(LLM)を、ブラウザ上で簡単に操作できるようにする “オープンソースのチャットUI・管理ツール” です。簡単に説明すると、自分のPC上で動くchatGPTのようなものですね。

Open WebUI
Open WebUI is an extensible, self-hosted interface for AI that adapts to your workflow, all while operating entirely offline; Supported LLM runners include Olla...

今回注目したいのは 標準でRAG機能を備えている点
これにより、PDFや文章を読み込んで「その内容に基づいて回答するAIチャット」を簡単に構築できます。今回は、この機能を使って、会社の情報を返答してくれる簡単なAIツールを作ってみましょう。

実装してみる

それでは早速実装してみたいと思います。今回は、Antigraityを使って爆速で実装してみました。なので、実装時間は体感2~3分ほどでできています。(仕組みなどについては、詳しく解説します。)

今回の実装環境

今回使用した環境は非常にシンプルです:

  • macOS
  • Ollama(ローカルでLLMを実行するツール)
  • Open WebUI(UI+RAG機能。Docker上で動かす)
  • Docker(Open WebUIをコンテナで実行)

Open WebUIは Docker 内で動かし、AI モデルはホスト側のOllamaが実行する という構成です。

Dockerの準備

Open webUIは普通にインストールすることも可能ですが、依存パッケージが大量であったり、OSごとの違いが大きく、バージョン管理が複雑ということもあり、公式にDockerで動かせるコマンドを用意してくれています。
このコマンドを実行することで、正しいバージョンの環境や必要なライブラリなどがセットになった状態で Open WebUI がスタート します。

Dockerをまだ入れていない人は、下記の手順で Docker Desktop をインストールする必要があります。

  1. Docker Desktop をダウンロード
    https://www.docker.com/products/docker-desktop/
  2. アプリを Applications に移動
  3. 起動してアカウントでログイン(無料)
  4. “Docker is running” と出れば完了!

Ollamaの準備

また、今回はAIチャットボットなので、LLMが必要になります。
Open WebUI 自体は「UI(見た目)」と「RAG機能」を提供しますが、AIモデルそのものは内部で動かしていません。

そこで、実際に動かすためにOllamaというローカル環境で動くLLMを使いましょう。まだインストールしたことがない人は、3ステップで準備できますので、インストールしてください。

  1. 公式サイトからダウンロード
    https://ollama.com/download
  2. アプリを開く
  3. ターミナルでモデルを取得:
    ollama pull llama3

これだけで、AIモデルをローカルで動かせます。

DockerでOpen WebUIをセットアップ

下記のコマンドでOpen WebUIを起動します。先述の通り、公式のコマンドです!

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

コマンドのポイントとしては、下記の通りです。

--add-host
→ DockerコンテナからホストのOllamaに接続するための設定

-v open-webui:/app/backend/data
→ Open WebUI のデータ(ユーザー情報・ナレッジなど)を永続化

動作確認してみよう

コマンドを実行後は、CLI上で色々と動き続け、それが終わると実装完了です。お手軽にできますね!

動作確認

ブラウザで http://localhost:3000 を開き、Open WebUIが正常に起動することを確認してください。こんなものが起動するかと思います。

ここからはコマンドの動作をする必要はなく、ブラウザ上で簡単に操作を進めることができます。まずは管理者アカウントを作成しましょう。

管理者アカウントを作成すると、見慣れたchatGPTのような画面が出てくるかと思います。
ここまでくれば自由にチャットを展開することができます。ひとまずお疲れ様です、のフェーズです!

試しに添付ファイルとともに、動作を確認させてみましょう。議事録を投げて要約を依頼します。

すると、下記の画像のように、英語で返答してくれまいた。

日本語にしてくれと頼みましたが、まだ英語で返してきました。
Ollamaはモデルによって本当に日本語に弱く、chatGPTほど流暢ではありません。今回は英文ではしっかりと返答できていたのでよしとします笑。

Open webUIのRAG機能

Open WebUIには2種類のRAG活用方法があります。

1つ目は、その場でPDFなどのドキュメントをアップロードする方法
これは先ほどやってみせたような形で、chatGPTなどをはじめとしたLLMでは標準の仕様ですね。

  • PDFをアップロード
  • 内容に関する質問を実施
  • 適切に引用しながら回答することを確認

“とりあえずこの資料見て答えてほしい” という用途に最適です。

2つ目は、ナレッジベースの恒久的なデータ登録です。
RAGと言うと、個人的にはこちらのイメージの方が強く、Open WebUIの「Knowledge」機能では、ファイルや文章をあらかじめ登録しておけます。

今回はまさにこちらをやってみたいと考えており、

  1. 架空企業データ ( 例えば company_info.txt など)を作成
  2. 「Knowledge」タブからアップロード
  3. 「社内ヘルプデスク」という専用モデルを作り、ナレッジと紐づけ
  4. 質問するとファイル内容に基づいて回答

という手順で実装できます。FAQシステム・社内ヘルプデスク・ドキュメント検索の自動化に最適です。

RAGの構築

それでは早速本題のナレッジベースの恒久的なデータ登録をやってみましょう。これも特に難しいことはなく、ブラウザ上で簡単に動作させることができます。

さて、ここまで実装を手伝ってもらったAntigravityに、簡単なテストファイルを作ってもらいました。右側の会社概要のテキストファイルを今回はナレッジとして登録してみましょう・

左のワークスペースから、上のタブでナレッジベースを選びます。その後、右上の + Now knowledge から、新しいナレッジを作成します。

ナレッジベースを作成する画面が出ますので、入力していきましょう。
今回はシンプルに入力しましたが、なるべくAIにわかるよう、詳しく入力しておくことが大事です。

入力が完了したら、真っ白い画面になるので、ここにファイルをドロップしましょう。

すると、下記のような感じでテキストファイルが追加されたのがわかります。ファイルをクリックすると、中身も確認できます。

続いて、このナレッジを使って会話をするモデルを作ります。
モデルというのは、chatGPTで言えばGPT-4.5とか、-4oとか、-5みたいな、そのようなものです。つまり、今回は社内情報蓄積モデル、というわけですね。

右上の + New Model から、モデルを作ります。

このような画面が出ますので、必要事項を入力していきましょう!
特に大事になってくるのは、モデルの選択です。先ほど作成したモデルを選んで、RAGで情報を引っ張って来れるよう、選択してください。

全て入力が完了したら、保存して作成をクリックし、入力を完了させましょう!

作ったモデルを使ってみる

それでは早速作ったモデルを使用してみます。
TOPのチャット画面に行き、左上のモデル選択から先ほど作ったモデルを選んでみましょう。正しく反映されていれば、社内ヘルプデスク というモデルが存在していることがわかります。

これを選び、早速会社の情報を聞いてみましょう。
この会社の住所について教えてください と聞いてみます。すると、ナレッジから検索していることがわかるメッセージが!

数秒ほどで、住所について返答をしてくれました。素晴らしい!
先ほどAntigravityに作ってもらった会社情報の通り、正しく回答できていることがわかります。

おわりに

いかがだったでしょうか?

思った上に簡単にAIチャットを構築することができ、RAGの構築・モデルの作成までできたと思います。皆さんもぜひこのツールを使って、お役立ちAIツールを作ってみましょう!

ご覧いただきありがとうございました。