ollamaとopen webuiを用いたローカルLLMなRAG構築

dockerを使わずに、ollamaとopen webuiを使ってRAG環境を構築した覚え書きです。
dockerを使えばもっと簡単にできると思います。（使わなくても簡単ですが）

# 環境
Windows11（GPUとか全然つんでないOA用のやつ)
VSC
python == 3.11.x

# 前準備
VSCodeで以下。python3.11じゃなきゃいけないのに、python3.10しか入っていなくてあわてていれました。

python 3.11.8のWindows用ダウンローラーをインストールしてインストール。
https://www.python.org/ftp/python/3.11.8/python-3.11.8-amd64.exe

VSCでpython3.11を認識
Ctrl+Shift+PでSelect Inter preterを開き、python 3.11.8を選択
VSCを再起動……してもきりかわらなかったので強引にpython3.11でvenvをつくりました。

terminalで以下。
```
py -3.11 -m venv venv
venv\Scripts\activate
```

# ollamaをインストール
割愛。

# ollamaの動作確認
初期状態は、何も入っていないので、とりあえずgemmaをいれてみます。
cmdでWindowsのターミナル開いて、以下。5GB以上おとしてくるのでそれなりに時間がかかります。
```
>ollama pull gemma
pulling manifest
pulling ef311de6af9d... 100% ▕████████████████████████████████████████████████████████▏ 5.0 GB
pulling 097a36493f71... 100% ▕████████████████████████████████████████████████████████▏ 8.4 KB
pulling 109037bec39c... 100% ▕████████████████████████████████████████████████████████▏  136 B
pulling 65bb16cf5983... 100% ▕████████████████████████████████████████████████████████▏  109 B
pulling 0c2a5137eb3c... 100% ▕████████████████████████████████████████████████████████▏  483 B
verifying sha256 digest
writing manifest
removing any unused layers
success
```

ollamaのリストにgemmaがいることを確認
```
>ollama list
NAME            ID              SIZE    MODIFIED
gemma:latest    a72c7f4d0a15    5.0 GB  2 minutes ago
```

ためしに使ってみます。
```
>ollama run gemma
>>> こんにちわ
こんにちわ！ 何か 하고いいですか？ 😉

>>> /bye
```
初手からハングル＆絵文字とか、gemma攻めてる。
ただの挨拶ではやる気がでないということか。

もう少し凝った日本語ではなしかけてみます。先ほどとはちょっと違う声かけ。いきなりがっつりはなしかけずにさりげなく一行コマンドでの声掛けです。
```
>ollama run gemma こんにちは！今日は月がきれいですね
月がきれいですね！月を見るだけでリラックスします。何か計画がありますか？
```
まともな日本語が返ってきました。言葉にこめた敬愛の意が伝わったようです。

とりあえず、ollamaがうまく動いていることが確認できました。


# open-webuiのインストール

以下参考。ライセンスはMIT。商用利用も可能です。
https://docs.openwebui.com/getting-started/quick-start/

前準備でvenvまで終わっているのであとはpipでインストールするだけ。
```
pip install open-webui
```
特にエラーはでなかったものの、そこそこ時間がかかりました。

open webui起動
```
open-webui serve
```


http://localhost:8080/ で立ち上がります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106215/371fea87-dbea-59f1-af27-1aff7a0b42ad.png)

突然の宇宙。
Get Startをクリックすると管理者アカウント作成画面があらわれます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106215/7b9c497b-7598-1fd4-ea36-47a0ac6e9c76.png)

完成度の高いチャットUIがでてきます。ノートPCがプアすぎて重い。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106215/38247fb6-c9cc-26d9-24eb-d93114128c28.png)

# RAG構築のための、データとか準備
以下を参考にします。
https://docs.openwebui.com/tutorials/tips/rag-tutorial

open-webuiの最新版のマニュアルをダウンロードします。
 https://github.com/open-webui/docs/archive/refs/heads/main.zip

 zipファイルを解凍して、拡張子が




[ワークスペース]>[知識]をクリック
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106215/82282818-be71-503a-cf6d-ca4abfe4e9aa.png)

右端の[+]をクリックし、適当に名前をつけて[知識データ作成]をクリック
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106215/250480c1-33e0-067f-03ba-d19cc3890072.png)

さきほど解凍したフォルダ内のmdファイルをいくつか登録。ファイルをドラッグ＆ドロップで移動できます。
たぶんフォルダごととか、まとめていれることもできそう。

[ワークスペース]>[モデル]>[+]をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106215/9119fcd3-8c52-db0b-e317-e24a0360d4be.png)

以下のように設定して[保存して作成]
 - MODEL NAME:RAG_TEST_MODEL
 - ベースモデル：gemma:latest
 - 説明：RAGのtest用モデル
 - 知識:test
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106215/62341744-85c5-da71-dded-8ac7305f1490.png)

[新しいチャット]へ移動するとモデル一覧から、今作成したRAG_TEST_MODELが選べるようになっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106215/e7c39460-cbe7-650a-0809-2a22fda4f80e.png)

RAG_TEST_MODELを用いて、会話してみます。知識にアクセスしていることがわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106215/05ba0a73-7e4d-c1a6-ff96-46203bf8c8ec.png)

結果がえられると、以下のように引用文献も添えて回答してくれます。ちなみにPCがプアすぎて、応答までにものすごい時間がかかりました。構築難易度が知りたかっただけなので、特に問題はないです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106215/a4e3de69-1ae2-3484-f4af-292b69149f59.png)

# まとめ
- 自分の備忘録用に、docker使わずwindowsにopen webuiをいれてみました
- めちゃくちゃ簡単に入りました。
- ollamaとの連携でうまくうごくことも確認できました。

以上