【前編】SearXNGでローカルAIからWeb検索する|Open WebUIとLM Studioで使ってみた

ローカル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公式ページ

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分

コメント

タイトルとURLをコピーしました