ChatGPTなどのクラウド型AIでは、Web検索はほとんど意識することなく統合されています。最新情報を取得し、文脈に沿って要約してくれる体験は、すでに当たり前のものになりました。
一方で、ローカルLLMはRAGによって手元の文書を検索・参照することはできますが、外部のWeb情報にアクセスする仕組みは自前で用意する必要があります。
そこで今回は、ローカルLLMにRAGだけでなくWeb検索も組み込む方法を試してみたいと思います。
SearXNGとは
SearXNGは、複数の検索エンジンを横断して結果を取得できる、オープンソースのメタ検索エンジンです。GoogleやBingなどの検索結果を集約しつつ、利用者を追跡しない設計が採用されている点が特徴です。
今回は、このSearXNGのJSON出力機能を活用し、LLMからWeb検索を利用できる仕組みを構築します。
まずはSearXNGを実際にインストールし、ローカル環境で問題なく動作するかを確認していきます。
dockerでインストール
今回はMacで環境を構築してみます。Docker経由でのインストールがシンプルです。
Dockerをインストールしてpathを通し、コマンドラインで起動しておきます。
SearXNGはGitの公式リポジトリで配布されています。これを任意のフォルダ上にクローンし、作成されたsearxng-dockerフォルダに移動します。
git clone https://github.com/searxng/searxng-docker.git
cd searxng-docker
起動には秘密鍵の設定が必要です。docker-compose.yaml に、環境変数として渡すよう記述します(記述例の抜粋、下線部参照)。今回はお試しなので適当な文字列をセットしてとりあえず起動します。本来はopenssl等を使って安全な鍵を生成し、ファイルの直書きを避けて管理する等の必要があります。
また、デフォルトはlocalhostがホスト名ですが、BASE_URLも環境に合わせて調整するとよいでしょう。
...
searxng:
container_name: searxng
image: docker.io/searxng/searxng:latest
restart: unless-stopped
networks:
- searxng
ports:
- "127.0.0.1:8080:8080"
volumes:
- ./searxng:/etc/searxng:rw
- searxng-data:/var/cache/searxng:rw
environment:
- SEARXNG_BASE_URL=http://127.0.0.1:8080/
- SEARXNG_SECRET=secret_test_key
...
最後にDockerを起動すればOKです。
docker compose up -d
動作確認
ブラウザで http://127.0.0.1:8080 にアクセスします。下記の画面が表示されれば動いています。

任意のキーワードで検索をかけてみます。
検索結果の下に、Google、duckduckgoなどソースが表示されます。

JSON出力を加える
これでも人間が使うには十分便利ですが、LLMで利用する場合に重要なのはJSON出力です。searxng/settings.yml を開いて、下線部のようにJSONをフォーマットとして明示します。
(設定を変更した後は docker compose down / up で再起動を忘れずに)
# see https://docs.searxng.org/admin/settings/settings.html#settings-use-default-settings
use_default_settings: true
server:
# base_url is defined in the SEARXNG_BASE_URL environment variable, see .env and docker-compose.yml
secret_key: "ultrasecretkey" # change this!
limiter: false # enable this when running the instance for a public usage on the internet
image_proxy: true
redis:
url: redis://redis:6379/0
search:
formats:
- html
- json
これでHTTPのURLの末尾に&format=jsonをつければOKです。右上の「設定」から、HTTPメソッドをGETにしておくと試しやすいでしょう。

これで検索結果がJSONで出力されました。ブラウザで試すとこんな感じです。curl等で叩いてもOK。

まとめ
SearXNGを使えば、ローカル環境でもWeb検索を自前で実装できます。Docker経由で構築すればMacでも比較的簡単に起動でき、ブラウザからの検索はもちろん、JSON出力を有効にすることでLLMとの連携も可能になります。
次は、この検索結果を実際にOllamaなどのローカルLLMに渡し、どのように活用できるかを試してみます。




