ローカルAIを使っていると、どうしても欲しくなるのがWeb検索機能です。
ローカルで動かしているLLMは、基本的に学習済みの知識を使って回答するため、最新の情報を調べることができません。
Open WebUIでSearXNGを利用してWeb検索できる環境を作り、その後、LM Studioも便利で使うようになり、
「LM StudioからもSearXNGを使ってWeb検索できないかな?」
と思って調べてみたところ、SearXNG MCPを利用することでLM StudioからもSearXNGを使ったWeb検索ができることが分かりました。
そこで今回は、すでに構築していたSearXNGを利用して、Open WebUIとLM Studioの両方からWeb検索できるようにした方法を紹介します。
さらに、SearXNGについて調べていると「これって安全なの?」という疑問も出てきたので、後半ではSearXNGの安全性についても紹介します。
今回作る環境
今回の環境では、SearXNGをWindows上のDockerコンテナとして動かしています。そこにOpen WebUIとLM Studioをそれぞれ接続しています。構成は以下のようになっています。
Open WebUIから利用する場合
Open WebUI
↓
SearXNG
↓
複数の検索エンジン
↓
Web検索
LM Studioから利用する場合
LM Studio
↓
SearXNG MCP
↓
SearXNG
↓
複数の検索エンジン
↓
Web検索
今回使用している主な環境は以下です。
- Docker Desktop
- LM Studio
- Open WebUI
- SearXNG
- SearXNG MCP
以前はOpen WebUIを中心に使っていましたが、現在はLM Studioを使うことも多くなったため、同じSearXNGをLM Studioからも利用できるようにしました。
SearXNGとは?
SearXNGは、複数の検索エンジンを利用して検索結果をまとめて取得できる、オープンソースのメタ検索エンジンです。
例えばGoogleなどの検索サービスを直接利用する場合は、
自分のPC
↓
Googleなど
となります。SearXNGを利用すると、
自分のPC
↓
SearXNG
↓
複数の検索エンジン
という形になります。SearXNGを自分のPC上で動かせば、自分専用の検索中継サーバーとして利用できます。
また、Googleなどの検索サービスのAPIを直接利用する方法とは違い、SearXNG自体を利用するための有料API契約などは必要ありません。
ただし、SearXNGが検索に利用する各検索エンジン側には、それぞれアクセス制限やレート制限などがあります。
そのため、「完全に無制限で検索できる」という意味ではありません。今回は、このSearXNGをローカルAIのWeb検索機能として利用します。
まずはSearXNGをDockerで動かす
1. Docker Desktopを用意する
今回はSearXNGをDockerコンテナとして動かします。
Docker Desktopがインストールされていない場合は、Dockerの公式ページから自分のOSに合ったDocker Desktopをダウンロードしてインストールします。
Docker Desktopをインストールしたら起動しておきます。
2. SearXNG用のフォルダを作る
SearXNGの設定ファイルをWindows側に保存するためのフォルダを作ります。私は今回、以下の場所に作っています。
C:\MyTools\searxng
さらに、この中にSearXNGの設定ファイルを保存するフォルダを作ります。
C:\MyTools\searxng\searxng
最終的なフォルダ構成は以下のようになります。
C:\MyTools\searxng
│
├─ compose.yaml
│
└─ searxng
└─ settings.yml
3. settings.ymlを作成する
SearXNGの設定ファイルである settings.yml を作成します。今回使用している設定は以下です。
use_default_settings: true
server:
secret_key: "自分で生成したランダムな文字列"
image_proxy: true
search:
formats:
- html
- json
outgoing:
request_timeout: 10.0
secret_keyを設定する
secret_key には、固定の文字列ではなくランダムな文字列を設定します。PowerShellなら、例えば以下のコマンドでランダムな文字列を生成できます。
[Convert]::ToBase64String((1..32 | ForEach-Object { Get-Random -Maximum 256 }))
生成された文字列を、
server:
secret_key: "ここに生成した文字列"
のように設定します。このキーは公開しないようにしてください。
JSON形式を有効にする
今回の環境では、SearXNG MCPから検索結果を取得するため、JSON形式を有効にしています。
search:
formats:
- html
- json
作成した settings.yml は、
C:\MyTools\searxng\searxng
に保存します。
4. Docker ComposeでSearXNGを起動する
SearXNGでは公式のDockerイメージを利用します。
searxng/searxng:latest
私の環境では、SearXNGをDocker Composeで管理しています。compose.yaml は以下のようになっています。
name: open-webui-with-ollama
services:
open-webui:
container_name: open-webui
image: ghcr.io/open-webui/open-webui:ollama
restart: unless-stopped
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities:
- gpu
network_mode: host
volumes:
- open-webui:/app/backend/data
environment:
- ENABLE_WEB_SEARCH=true
- WEB_SEARCH_ENGINE=searxng
- SEARXNG_QUERY_URL=http://127.0.0.1:8888/search?q=<query>
searxng:
container_name: searxng
image: searxng/searxng:latest
ports:
- "8081:8080"
volumes:
- ./searxng:/etc/searxng:rw
restart: unless-stopped
cap_drop:
- ALL
cap_add:
- CHOWN
- SETGID
- SETUID
- DAC_OVERRIDE
logging:
driver: "json-file"
options:
max-size: "1m"
max-file: "1"
volumes:
open-webui:
external: true
name: open-webui
このComposeファイルでは、SearXNGだけでなくOpen WebUIも定義しています。ただし、Open WebUIは必ずしも常時起動している必要はありません。私自身、現在はLM Studioを使うことが多いため、Open WebUIを停止していることもあります。一方、SearXNGはLM Studioから利用するため、Dockerコンテナとして起動しておきます。
5. SearXNGを起動する
PowerShellを開き、SearXNGのフォルダに移動します。
cd C:\MyTools\searxng
その後、以下を実行します。
docker compose up -d
起動したコンテナを確認するには、
docker ps
を実行します。SearXNGが起動していれば、以下のように表示されます。
CONTAINER ID IMAGE STATUS
xxxxx searxng/searxng:latest Up
6. ブラウザからSearXNGを確認する
今回の設定では、Dockerコンテナ内部の8080番ポートを、Windows側の8081番ポートに割り当てています。
Windows
localhost:8081
↓
Docker
8080
↓
SearXNG
そのため、ブラウザで以下を開きます。
http://localhost:8081
SearXNGの検索画面が表示されれば、導入完了です。ここまででSearXNG自体は動作しています。
ここまででSearXNG単体の準備は完了
ここまでの作業では、まだAIから検索しているわけではありません。まずは、
Windows
↓
Docker
↓
SearXNG
↓
Web検索
という検索環境を作りました。
実際にブラウザからSearXNGを開いて検索できることを確認しておくと、その後のAI連携で問題が起きたときにも、SearXNG側の問題なのか、AI側の設定なのかを切り分けやすくなります。
次は、このSearXNGをOpen WebUIから利用する方法、そして今回新しく試したLM Studio+SearXNG MCPでWeb検索する方法を紹介します。
長くなったので、今回はここまで。次回は、今回構築したSearXNGを使って、ローカルLLMから実際にWeb検索する方法を紹介します。Open WebUIでの検索に加えて、LM StudioからSearXNG MCPを利用する方法も試していきます。
今回の副業活動時間
ブログ記事執筆:40分
AIとのやり取り(サムネ作成含む):60分
合計:100分


コメント