個人的な日本語ローカルLLM関連のメモ用Wikiです。一般の方は編集できません。

×


このページは編集途中です
ページの内容が古かったり誤った情報が載っているかもなので気をつけて下さい。

このページのコンテンツは筆者の外部Blogに記載していた物を再編集した物です。

編集予定:
RAGの項目(ハイブリット検索の修正待ち)、ノート機能、MCPなど

編集履歴:
250713:docker-compose.ymlを修正(OllamaのFlashAttentionを有効化するように)



はじめに

LLM(大規模言語モデル)をローカルで動かす際は量子化と言う手法で言語モデルを軽量(推論の高速化)に変換したものを動かすのが一般的です。
そのためのライブラリ(種類)としてllama.cpp(GGUF)、AutoGPTQ(GPTQ)、AutoAWQ(AWQ)などがあります。
Ollamaはllama.cppをバックエンドとして扱いやすくしたフレームワークでOpenAI互換APIの提供や言語モデルのダウンロード機能などをサポートしています。

ただ、OllamaはCLIしかサポートしていないので、フロントエンドとしてOllamaと共によく使われるOpen WebUIと一緒にインストールして利用してみます。
→OllamaもGUIを持つように進化しました。

Open WebUIはLLM用のフロントエンドです。
OpenAI互換APIをサポートしており、クラウドなLLMサービスのOpenAI APIにも接続できますがOllamaと共にローカルLLMのフロントエンドとしてよく使われているようです。
RAG機能を標準で搭載しており、YouTubeの字幕データを読み込んで動画の内容を要約させたり、Web検索エンジンと連携して明日の天気を検索して教えてもらう事も可能です。
もちろん、手持ちの.pdfファイルやテキストファイルを読み込ませる事も可能です。

類似ソフトウェアとしてAnything LLMやLM Studioなどもあります。
※Windowsに入れるならLM Studioの方が良いかも?

”Text generation web UI”との比較

"Text generation web UI"は主要な量子化ライブラリを含んでおり、GGUF以外の量子化モデルも推論できます。
量子化モデルを読み込む際の細かなパラメータやテンプレートも比較的簡単に設定できます。

一方、Ollama & Open WebUIの場合はGGUF以外の量子化モデルを動かせません。(Ollamaがllama.cppをバックエンドとしているため)
また、Ollamaで推論させる際は言語モデル(GGUFファイル)以外にModel fileというchat templateなどを記載したファイルが必要です。

Ollama公式サイト(https://ollama.com/)にアップされているモデルをダウンロード、利用する際は(Model fileが同封されているため)気にする必要はありませんがHugging Faceなどから言語モデルをダウンロード、利用する場合は自分でModel fileを書かないといけません。
※Modelfileの書き方についてはOllamaのGitHubのページ(https://github.com/ollama/ollama/blob/main/docs/mo...)をご覧下さい。

→ Ollamaの最新版ではHugging Faceで公開されているGGUFをそのまま利用できるようになったみたいです。
参考:Ollama で Hugging Face Hub の GGUF をそのまま使ってみる

操作感やUIに関してはOllama + Open WebUIの方がシンプルでフレンドリーです。
RAGや画像認識対応言語モデルへの画像読み込み機能に関してもOllama + Open WebUIの方が簡単です。(”Text generation web UI”でも拡張機能などで利用できるが標準機能ではない)

インストール(Docker)

DockerやDocker Compose、GPUのドライバなどはインストール済みとして進めます。

下記のようなdocker-compose.ymlを書きました。
docker-compose.yml
services:
# ollamaとAPI機能
  ollama:
    image: ollama/ollama:latest
    container_name: ollama
# API Portを変更する際はここを変更
    ports:
      - "11434:11434"
    volumes:
      - ./ollama:/root/.ollama
# Flash Attentionの有効化(VRAM消費量の削減と高速化)
# 一部の言語モデルで不具合が出る事があるので注意
    environment:
      - "OLLAMA_FLASH_ATTENTION=1"
# nvidia製GPUによる推論のサポート(nvidia製GPUを載せていない場合やCPUで推論する場合はコメントアウトする)
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              capabilities:
                - gpu
    restart: unless-stopped
# open-webui
  open-webui:
    image: ghcr.io/open-webui/open-webui:main
    container_name: open-webui
    volumes:
      - open-webui:/app/backend/data
# WebUIのPortを変更しています,各自環境にあわせて調整してください
    ports:
      - "3080:8080"
    environment:
# 上のollamaのAPI Portを変更した場合はここのPortもあわせて変えること
      - "OLLAMA_API_BASE_URL=http://host.docker.internal:11434"
# ユーザ認証の無効化(自分しか使わないので)
      - "WEBUI_AUTH=False"
# UIの言語設定を"jp"へ変更
      - "DEFAULT_LOCALE=jp"
    restart: unless-stopped
volumes:
  open-webui: {}

あとはコンテナのビルド、立ち上げです。
docker compose build && docker compose up -d

下記のURLにアクセスしてWebUIが表示されればOKです。
http://localhost:3080

簡単な使い方

Ollama.comから言語モデルのダウンロード


WebUI左上のモデルを選択をクリックして検索欄にモデル名を入力、Ollama.comから"{モデル名}"をプルを選択すればOKです。


例えば、https://ollama.com/library/gemma3:12b なら下記のように入力後、[Enter]で言語モデルのダウンロードが始まります。(12B、Q4_k_mの場合)
ollama run gemma3:12b
Ollama.comに登録されているモデルなどはhttps://ollama.com/search から検索できます。

管理者設定/接続から言語モデルの管理(ここからもダウンロードできるし、ダウンロードしたモデルの削除などもできる)が行えます。
huggingface.coから言語モデルのダウンロード
huggingface.coで公開されているGGUFの言語モデルのダウンロードをダウンロードする際は下記のようにモデルを選択の検索欄に入力します。
ollama run hf.co/{ユーザー名}/{リポジトリ}:{量子化タイプ}
例えば下記のGGUFモデルをダウンロードする場合は以下のようになります。(Q4_K_Mの場合)
https://huggingface.co/lmstudio-community/Mistral-...
ollama run hf.co/lmstudio-community/Mistral-Small-3.1-24B-Instruct-2503-GGUF:Q4_K_M

チャットコントロール / Contextウインドウサイズを拡張


WebUIの右上にあるアイコンをクリックするとチャットコントロールウインドウが表示されます。
ここでシステムプロンプト(あなたは有能なアシスタントです。...など)や、言語モデルのパラメータを設定できます。
管理者設定/モデルからも設定できます。


Ollamaはどの言語モデルであってもコンテキストウインドウのデフォルト値が"4096"なのでこれを修正します。
ここでは取り敢えず、"16,384"に設定しておきます。

※言語モデルがサポートしている以上の値にしても意味はありませんし、サポートする範囲であってもこの値が大きいと必要なVRAM(orメインメモリ)も増えますのでご注意下さい。

チャットする

  • [Shift]+[Enter]でチャット入力欄内で改行できます。
  • #(半角シャープ)の後にWebサイトのURLを入力、[Enter]を押すとスクレイピングした結果が処理されて言語モデルへ渡されます。合わせてプロンプトで要約させたり、解説させたりできます。

例:
#https://www3.nhk.or.jp/news/
contextから最新のニュースを教えて
  • 後述する、どの言語の字幕をダウンロードするかの設定(日本語なら"ja")後、#(半角シャープ)の後にYouTubeのURLを入力するとYouTubeの字幕データを取得し、プロンプトで要約させたりできます。
※投稿者の方が特に設定していない限り、自動生成字幕があるはずですが、字幕が無い(OFF)動画では機能しません。

[NHKスペシャル] もしも南海トラフ巨大地震が発生したら?シミュレーションCGとドラマで解説 | MEGAQUAKE | NHK

例:
#https://www.youtube.com/watch?v=V9e5yuZ1CxA
contextはYouTubeの自動生成字幕です。内容を要約してください。
  • #{URL}の入力後にURLの"ドキュメント"をクリックすると取得したテキストがわかります。
  • 後述する設定を行えばウェブ検索と連携もできます。(別途、設定とGoogleなどの検索エンジンの場合はAPIキーが必要)

例.1:
明日の東京都の天気を検索して
例.2:
GeForce RTXシリーズでVRAMが8GB以上のモデルを検索して教えて

管理パネル


WebUI右上のユーザーアイコンをクリックして設定を選択するか、[Ctrl]+[.]でユーザーの管理パネル画面を開けます。
ここではユーザーアカウントごとの設定が行えます。

管理者設定


ここで設定を変更できます。
一般

Ver確認などが行えます。
接続

OpenAIのAPI(または互換API)や、OllamaのAPIなどを指定します。
インストール(Docker)のdocker-compose.ymlを使っているならOllamaのAPI URLを手動で設定する必要はありません。


Ollama APIの右の方にある、↓(管理)アイコンをクリックする事でOllama.com(またはhf.co)からモデルをダウンロードしたり削除したりできます。
モデル

利用可能なモデルの確認、設定、削除などが行えます。


言語モデルの右にあるペンのアイコンをクリックして高度なパラメータを表示させてコンテキストの長さ (Ollama)を手動で設定しないとデフォルト値の"2048"になってしまいます。ご注意下さい。
Evaluations
ツール
ドキュメント
  • Content Extraction Engine(コンテンツ抽出エンジン)
スキャンされた画像などに含まれるテキストなどを抽出するエンジンの選択です。
  • PDF 画像抽出 (OCR)
PDF内の画像に含まれるテキストの抽出をするかどうかです。デフォルトOFF
  • Bypass Embedding and Retrieval (埋め込みと取得をバイパスする)
厳密な取得フィルターを適用せずに完全なコンテンツが直接送信されます。
  • Text Splitter
RAGにおいてテキストをチャンク化する際の方法です。デフォルトのCharacterは文字数に基づいてテキストを分割します。
Tokenではトークン数に基づいてテキストを分割します。
後者の方が良いとされています。(参考:https://medium.com/@hautel.alex2000/open-webui-tut...
  • チャンクサイズ
チャンクのサイズです。(デフォルト1000)
  • チャンクオーバーラップ
チャンクのオーバーラップのサイズです。(デフォルト100)
  • 埋め込みモデルエンジン
埋め込みモデルのエンジンを選択できます。(デフォルトSentenceTransformer)
SentenceTransformer、Ollama、OpenAIから選べます。
  • 埋め込みモデル
埋め込みモデルです。(デフォルト sentence-transformers/all-MiniLM-L6-v2)
※埋め込みモデルを更新または変更した場合は、すべてのドキュメントを再インポートする必要があります。
  • Full Context Mode
ドキュメントのテキストをRAGを利用せずにそのまま言語モデルのContextへ渡すオプションです。
  • ブリッジ検索 (デフォルトOFF)
rerankerモデルを使用して再ランク付けをするかどうかです。
RAGを使用する際はこのオプションを有効にしてrerankerモデルを利用する方が良いらしいです。
  • モデルの再ランキング (ブリッジ検索有効時のみ)
rerankerモデルの指定です。
  • トップK (デフォルト3)
取得する初期候補の数,値が3なら類似度が上位3つの結果がLLMへ送られます。値が大きいければ良いという物でもないようです。
  • Top K Reranker (ブリッジ検索有効時のみ、デフォルト3)
リランキング後の候補数,
  • Relevance Threshold (関連性のしきい値)(ブリッジ検索有効時のみ)
値が小さいほど、より多くの(関連性が低い可能性のある)コンテンツが取得され、値が大きいほど選択性が高まります。ほとんどのユースケースでは、再現率と適合率のバランスが取れた0.1〜0.2のしきい値が適切らしいです。
※値を設定した場合、RAGは最小スコア以上のスコアを持つドキュメントのみを返します。
  • RAG テンプレート
デフォルトのテンプレートを下記に記載しておきます。

デフォルトのテンプレート


筆者は上記のテンプレートをGoogle翻訳にかけた下記のテンプレートを使用しています。

Google翻訳にかけたテンプレート


  • アップロードディレクトリをリセット
  • ベクターストレージとナレッジベースをリセット
  • Reindex Knowledge Base Vectors(ナレッジベースベクトルの再インデックス)
※埋め込みモデル/モデルの再ランキング(rerankerモデル)の変更を行った際に上記の3つのオプションからリセット/再インデックスしないとRAGを正常に利用できない事がありました。
ウェブ検索
  • ウェブ検索
ウェブ検索機能を有効にするかどうかです。(デフォルトOFF)
  • ウェブ検索エンジン
どのウェブ検索エンジンを使うかの選択です。Googleなどの検索エンジンを利用する際はAPIキーが必要です。詳しくは公式ドキュメントをご覧下さい。
DuckDuckGoを利用する際はAPIキーなどが必要ないので簡単に使いたい方はDuckDuckGoで良いかと思います。
※DuckDuckGoはUAによるレート制限を行っているらしく、短時間に何度も検索を繰り返すとOpenWebUI上でAn error occurred while searching the webと表示されて一時的に検索できなくなります。ご注意下さい。
  • Bypass Embedding and Retrieval(埋め込みと取得をバイパスする)
検索結果などのテキストデータをRAG(検索拡張生成)で処理するか、RAGを利用せずに言語モデルのコンテキストへそのまま渡すかの設定です。(デフォルトOFF)
体感として、この機能をONにしてRAGを通さずにコンテキストへ全部渡した方が応答の品質は高い気がします。(RAG周りの微調整不足かも?)
言語モデルの設定したコンテクストウインドウサイズを超えるような膨大なデータ量ならこの機能はOFFにしてRAGで処理した方が良いかと。
  • Web Loader Engine
Webサイトのスクレイピングエンジンの選択です。
通常はデフォルトで問題ないと思いますが、Firecrawlなどより高機能なエンジンもサポートしています。(※Firecrawlは無料のセルフホスト版と有料版があり、有料版は要APIキー)
  • Youtube Language
YouTubeの字幕を取得する際の言語設定です。
デフォルトは"en"ですが、日本語にする際は"ja"に設定します。
Code Execution
インターフェース
オーディオ
画像
パイプライン
データベース

設定をJSONファイルでインポート/エクスポートしたりチャット履歴のダウンロードなどが行えます。

ワークスペース

モデル

ナレッジベース

プロンプト


よく使うプロンプトを登録しておく事ができます。
/(半角スラッシュ)+{コマンド}で選択、入力できます。

タイトルに登録するプロンプトのタイトルを、コマンドに/(半角スラッシュ)の後に入力するコマンド、プロンプトの内容に実際に入力されるプロンプトを入力して保存して作成で保存します。

例えば、タイトルにYouTubeの要約、コマンドに/youtube、プロンプトの内容に"ContextはYouTubeの自動生成字幕です。Contextから動画の内容を要約して解説してください。"として作成すると、チャット入力欄に"/y"と入力すると"/youtube"が候補に出てくるのでそれを選択するとチャット入力欄に"ContextはYouTubeの自動生成字幕です。Contextから動画の内容を要約して解説してください。"とプロンプトが入力されます。

ツール

目的ごとの設定とか

RAGの為のチューニング(embedding/rerankerモデルとか)など

管理者設定/ドキュメントで主な設定を行います。
この項目では主に(電子)テキストファイルを想定しています。(.txt .mdなど...)
紙媒体をスキャンした画像などのOCR処理もOpen WebUIから別途、設定とエンジンのセットアップをすればできるようですがこの項目では扱いません。

RAG(検索拡張生成)では単語や文章を埋め込みベクトルに変換、検索するembedding(埋め込み)モデル、検索時に結果を再評価するreranker(リランキング,再ランク付けモデルとも)モデルの両方を設定、デフォルトから変更したほうが良いみたいです。
※RAGやembedding/rerankerモデルの詳しい説明については下記の外部サイトをご覧下さい。
RAGの解説: LLMとベクトルデータベースを活用したアプローチのまとめ
RAGにも使うエンべディング(Embedding)とは?なぜエンべディングが必要なのか解説
リランキングモデルによる RAG の日本語検索精度の向上
RAGにおけるRerankモデルの役割と最新の動向

この項目は編集途中です。

dengcao/Qwen3-Embedding-4B:Q4_K_M
dengcao/Qwen3-Reranker-4B:Q4_K_M

cl-nagoya/ruri-v3-reranker-310m

embeddinggemma

Troubleshooting RAG (Retrieval-Augmented Generation)

Multi-Source RAG with Hybrid Search and Re-ranking in OpenWebUI

ウェブ検索エンジンをSearXNGにする

SearXNGは、さまざまな検索サービスやデータベースからの結果を集約する無料のインターネットメタ検索エンジンです。
管理者設定/ウェブ検索でDuckDuckGoを選ぶよりその他の検索エンジンの結果も含むので検索精度の向上が期待できます。

SearXNGをDockerでインストールしてOpen WebUIと接続して利用してみます。
下記の docker-compose.yml を使います。
services:
  searxng:
    image: searxng/searxng:latest
    container_name: searxng
    ports:
      - "5147:8080"
    volumes:
      - "./searxng:/etc/searxng"
    environment:
      - "BASE_URL=http://0.0.0.0:5147/"
      - "INSTANCE_NAME=SEARXNG"
    restart: unless-stopped
    logging:
      driver: "json-file"
      options:
        max-size: "1m"
        max-file: "1"

Dockerコンテナのビルド、立ち上げです。
docker compose build && docker compose up -d

searxng/settings.ymlformats:jsonを追加します。
nano searxng/settings.yml
  formats:
    - html
    - json


管理者設定/ウェブ検索からウェブ検索エンジンをsearxngに変更します。
Searxng クエリ URLに下記のとおりに入力、設定を保存します。
http://host.docker.internal:5147/search?lang=ja&q=<query>


あとはチャット画面でウェブ検索を有効にしてプロンプトを入力すると検索結果に基づいた応答が帰ってきます。

Web Loader Engineをセルフホスト版Firecrawlにする

Web Loader Engine(Webスクレイピングエンジン)をデフォルトではなく、セルフホスト版Firecrawlにする際の方法です。

FirecrawlはWebサイトのスクレイピングサービス/エンジンで単にWebサイトのテキストデータを抽出するだけでなく、LLMと相性の良いMarkdown形式に変換したりできます。
サービスとして提供されているFirecrawlには無料プランや有料プラン、エンタープライズプランなどがありますが今回はOSSで公開されているセルフホスト版FirecrawlをDockerで立ち上げてOpen WebUIと接続、利用してみます。

流れとしてはGitHubのREADMEの通りです。
git、Docker、Docker Composeをインストール済みとして進めます。

gitコマンドでリポジトリをクローン、クローンしたディレクトリに移動します。
git clone https://github.com/mendableai/firecrawl && cd firecrawl
.envファイルをサンプルからコピーします。
cp ./apps/api/.env.example ./.env

.envファイルをnanoで編集します。
USE_DB_AUTHENTICATIONfalseに変更します。
nano .env
#変更前
USE_DB_AUTHENTICATION=true

#変更後
USE_DB_AUTHENTICATION=false

Dockerコンテナのビルド、立ち上げです。
docker compose build && docker compose up -d

下記のURLにアクセスしてWebUIが表示されればOKです。
http://localhost:3002/admin/@/queues


管理者設定/ウェブ検索からWeb Loader EngineをFirecrawlに変更し、Firecrawl API Key Base URLに下記のとおりに入力、API Keyは何も入力しないと設定を保存できないので適当に"key"とでも入力し設定を保存します。
http://host.docker.internal:3002
※Dockerではなく、直接インストールした場合や他のマシンにインストールした場合はURLを適切に変えて下さい。


筆者のBlogページをスクレイピングして比較した例です。
左の画像がデフォルトのWeb Loader Engine、右の画像がローカル版Firecrawlでスクレイピングした物です。
デフォルトのWeb Loader Engineと比べ、無駄な改行などが無くなっています。

ウェブ検索機能と相性が悪いみたいでWeb Loader EngineをFirecrawlにしているとウェブ検索が機能しないようです。

画像生成AIとの連携

A1111(or reforge)や、ComfyUIといったローカルの画像生成AIの他、OpenAI、Geminiと連携できます。
この項目ではローカル画像生成(ComfyUI)と連携してみます。
管理者設定/画像から設定します。

この項目は編集途中です。

管理人/副管理人のみ編集できます

広告募集中