ローカル環境で対話型AIに追加学習させる(Docker, Ollama, Open WebUI, RAG)
はじめに
対話型AIにはChatGPTやCopilotなどがありますが、何れもクラウド型です。クラウド型は常に新しめの情報にアップデートされるので通常はクラウド型で十分なのですが、
・ネットワークに繋がっていない環境で対話型AIを使う
・クラウド型の対話型AIで回答をもらえなさそうな質問に回答してもらいたい(極めて限られた範囲での分野の情報や公になっていない情報)
などにはクラウド型の対話型AIでは対応できません。
そこで、ここではローカルで対話型AIの環境構築を行い、「極めて限られた範囲での分野の情報」については、追加学習を行い独自の対話型AIを作る方法を記載します。
以下の環境でインストールを行いました。
OS | Windows 11 Home |
GPU | nVIDIA Geforce RTX3060 12GB |
メモリ | 64GB |
インストールの順番
以下の順番にインストール・設定を行います。
・Docker Desktopのインストール
・Ollama、Open WebUIのコンテナ構築
・LLM(大規模言語モデル)の取得(ここではgemma3(Googleが開発した言語モデル)を取得)
・Open WebUIの起動
・Open WebUI上でRAG(検索拡張生成)の設定
Docker Desktopのインストール
Docker Desktopのインストールは以下に記載しています。(Windows 11用)
Ollama、Open WebUIのコンテナ構築
d:\open-webui というディレクトリを作成し、ディレクトリの下に「docker-compose.yaml」ファイルを作成します。「docker-compose.yaml」ファイルの内容は以下です。
version: '3.8'
services:
ollama:
image: ollama/ollama:0.9.0
container_name: ollama
ports:
- "11434:11434"
volumes:
- ollama_data:/root/.ollama
restart: unless-stopped
# GPUを使用する場合。使用しない場合は以下5行の頭に[#]を追加する(コメント)
deploy:
resources:
reservations:
devices:
- capabilities: [gpu]
open-webui:
image: ghcr.io/open-webui/open-webui:main
container_name: open-webui
ports:
- "3000:8080"
volumes:
- open_webui_data:/app/backend/data
extra_hosts:
- "host.docker.internal:host-gateway"
depends_on:
- ollama
restart: always
volumes:
ollama_data:
open_webui_data:
d:\open-webuiディレクトリ内で次のコマンドを実行し、Dockerコンテナを起動します。
docker-compose up
LLM(大規模言語モデル)の取得
利用する大規模言語モデルを指定し、Ollama上でpull(取得)します。gemma3は1b,4b,12b等がありますが、12b(12 billion=120億パラメータ)をダウンロードしました。
docker exec -it ollama ollama pull gemma3:12b
<参考>
DockerでOllamaを起動した状態で、Ollamaのコマンドを実行することができます。以下が主な使い方です。(コマンドプロンプト上で実行します。)
LLMをダウンロードする
docker exec -it ollama ollama pull <LLMのモデル名>
ダウンロード済のLLMを一覧表示する
docker exec -it ollama ollama list
LLMの情報を表示する
docker exec -it ollama ollama show <LLMのモデル名>
LLMを削除する
docker exec -it ollama ollama rm <LLMのモデル名>
LLM(大規模言語モデル)は以下から探すことができます。
Open WebUIの起動
Docker Desktopを起動し、「Open WebUI」と「Ollama」が起動されていることを確認します。
「Action」の項目が「▶」となっている場合は、「▶」をクリックしてコンテナを起動します。
http://localhost:3000にアクセスすると、次のようなOpenWebUIが起動します。
初回起動はユーザー名とパスワードを設定します。2回目以降はユーザー名とパスワードを入力すると、以下の画面が表示されます。(ChatGPTやCopilotのような画面)
Open WebUI上でRAG(検索拡張生成)の設定
左上のメニュー(横棒三本線)をクリックし、「ワークスペース」を選択します。
「ナレッジベース」を選択し、画面右側の「+」を選択します。
追加するデータとして、実在しない漫画喫茶のお店「ブックラウンジ」の利用料をテキストファイル(漫画喫茶料金体系.txt)で作成しました。(このファイルはCopilotで作成しています。)
漫画喫茶「ブックラウンジ」の料金体系は以下です。
### 基本料金プラン
1. **時間制プラン**
- 30分:¥300
- 1時間:¥500
- 3時間:¥1,200
- 6時間:¥2,000
- 12時間:¥3,500
- 24時間:¥5,500(シャワー付き)
2. **パック料金**
- モーニングパック(6:00~12:00):¥800(ドリンク付き)
- ナイトパック(22:00~翌6:00):¥1,500(仮眠スペース利用可)
### 特別プラン
1. **フリータイムプラン**
- 平日限定:¥2,500(10:00~20:00)
- 週末限定:¥3,000(10:00~22:00)
2. **会員制度**
- 月額会員:¥5,000(毎日3時間利用可、ドリンク無料)
- VIP会員:¥10,000(毎日6時間利用可、シャワー&軽食付き)
### オプションサービス
- ドリンクバー:¥300(時間無制限)
- シャワー利用:¥500(タオル&アメニティ付き)
- PC高速回線利用:¥200/時間
- フードメニュー:¥500~(軽食やランチセット)
「What are you working on?」に「漫画喫茶料金体系」と入力し、「What are you trying to achieve?」に必要事項を入力して、「ナレッジベース作成」をクリックします。
Collectionの検索の右側にある「+」をクリックしたあとに「アップロードファイル」をクリックし、先ほど作成した「漫画喫茶料金体系.txt」をアップロードします。
アップロードがされた後は以下のように表示されます。
次にナレッジベースを取り込んだ新しいLLMを作成します。
「モデル」を選択し、画面右側の「+」を選択します。
「モデル名」をテキストで入力し、基本モデルの選択の右側にある「v」をクリックし、ベースとなるLLMモデルを選択します。(ここではgemma3:12bを選択します。)
画面中央付近の「ナレッジベースの選択」をクリックし、先ほど作成した「漫画喫茶料金体系.txt」を選択します。
最後に画面下の「保存して作成」をクリックし、新しく定義したLLMモデルを保存します。
AIによる実行
試しに「漫画喫茶「ブックラウンジ」で3時間利用した時の利用料金は?」と聞いてみました。
「gemma3:12b」の場合、情報がないので回答できていません。
「gemma3:12b_漫画喫茶料金体系」の場合、正しく回答できています。(ただし少し質問内容を変えると正確に答えられない場合がありました。)
以上、RAG(検索拡張生成)の設定により、「極めて限られた範囲での分野の情報」でもAIによる回答ができました。
Discussion