2025/07/13 13:48 Local Chatbot RAG with FreeBSD Knowledge

やあ、ロボ子。今日はFreeBSDのチャットボットを作る話じゃ。

FreeBSDのチャットボットですか、博士。面白そうですね。公式チャットボットが望ましいとのことですが、まずはローカルで試せるようにするんですね。

そうじゃ。ローカルなら、個人のニーズに合わせて色々調整できるからの。まずはOllamaをインストールするのじゃ。コマンドは `brew install ollama` じゃ。

Ollamaですね。複数のLLMに対応したAPIとのこと。そして、`ollama pull gemma3:latest` でモデルをpullするんですね。

その通り!もっとパワフルなGPUなら、`deepseek-r1:latest` とか `deepseek-r1:70b` も試せるぞ。

なるほど。次にOpen-WebUIをインストールするんですね。UIとベクトルデータベースが組み込まれているとのこと。

`curl -LsSf https://astral.sh/uv/install.sh | sh` と `DATA_DIR=~/.open-webui uvx --python 3.11 open-webui@latest serve` を実行じゃ。そして、http://localhost:5000/ にアクセス!

ちょっとコマンドが多いですね。インストールが終わったら、LLMにFreeBSDの知識を教え込む必要があるんですね。Linuxとの違いも教えないと。

そうじゃ!まずはFreeBSDのドキュメントをダウンロードするのじゃ。`brew install hugo ruby git bmake` で必要なものをインストールして、シェルの設定も更新するぞ。

シェル設定の更新... ちょっと面倒ですね。環境変数を設定する必要があるんですね。

大丈夫!コピペすればOKじゃ。その後、`sudo gem install rouge asciidoctor asciidoctor-pdf asciidoctor-epub3` でgemをインストールして、FreeBSDドキュメントをクローンしてビルドじゃ。

ドキュメントのクローンは `git clone https://git.FreeBSD.org/doc.git ~/doc` ですね。そして、`cd ~/doc/documentation` でディレクトリを移動して、`bmake run USE_RUBYGEMS=YES RUBY_CMD=$(brew --prefix ruby)/bin/ruby` でビルドするんですね。

完璧じゃ!そしたら、Open-WebUIにドキュメントをアップロードするのじゃ。http://localhost:5000/workspace/knowledge にアクセスして、「FreeBSD Official Docs」というナレッジベースを追加して、フォルダ `~/doc/documentation/public/en/books` を追加じゃ。

ナレッジベースの追加ですね。最後に、モデルワークスペースを作成するんですね。http://127.0.0.1:5000/workspace/models にアクセスして、「FreeBSD Helper」という新しいワークスペースを追加するんですね。

そう!ベースモデルは `gemma3:latest` (または `ollama pull` でダウンロードしたもの) を選択して、システムプロンプトを設定するのじゃ。

システムプロンプトは重要ですね。記事に例が載っていますね。FreeBSDに特化した応答をするように指示するんですね。

その通り!ナレッジは「FreeBSD Official Docs」を選択するのじゃ。これで準備完了!新しいチャットウィンドウを開いて、「FreeBSD Helper」をモデルとして選択すれば、FreeBSDに詳しいチャットボットと会話できるぞ!

データが構造化されていないほど、LLMの結果が悪くなる可能性があるんですね。Temperatureスライダーの値を下げると、より正確な回答が得られるとのこと。

そうじゃな。ソースデータを適切な形にすることが一番難しいけど、FreeBSDドキュメンテーションチームが既に行っているから、私達は楽できるのじゃ!

確かにそうですね。しかし、博士、一つ質問があります。

なんじゃ?

なぜ、チャットボットはいつも嘘をつくのでしょうか?

それは、チャットボットがまだ若くて、色々なことを学んでいる途中だからじゃ!まるでロボ子みたいじゃな!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。