Open WebUI + SearXNG のWeb検索が403になる問題を解決する
Open WebUI の Web検索が動かない
ローカルLLM環境で
- Open WebUI
- SearXNG
を組み合わせて Web検索を有効にしたところ,ツール呼び出しはされるのに検索結果が返らない問題に遭遇しました.
モデルはツールを呼ぼうとしており,UIにもハンマーアイコンが表示されます.しかし SearXNG のログにはアクセスが現れません.
調査してみると,Open WebUI のログに次のエラーが出ていました.
403 Client Error: Forbidden for url: /search?q=...&format=json
つまり
Open WebUI → SearXNG にはアクセスしているが,SearXNG が拒否している
という状態でした.
原因
Open WebUI は SearXNG に対して次のようなリクエストを送ります.
/search?q=検索語&format=json
SearXNG では
- HTML検索
- JSON API
が別扱いになっており,デフォルト設定では JSON API が制限されることがあります.
そのため
/search?q=test
は成功しますが
/search?q=test&format=json
は 403 になります.
確認は curl で行えます.
curl "http://192.168.10.3:7777/search?q=test" curl "http://192.168.10.3:7777/search?q=test&format=json"
後者が 403 になる場合,SearXNG の設定が原因です.
解決方法
SearXNG の設定ファイルを編集します.
/etc/searxng/settings.yml
以下の設定を追加または変更します.
search:
formats:
- html
- json
server:
limiter: false
public_instance: true
botdetection:
ip_limit:
enabled: false
編集後,コンテナを再起動します.
docker restart searxng
これで Open WebUI からの検索が正常に動作します.
Docker コンテナ内の設定ファイルを編集する方法
Docker コンテナ内のファイルはそのままでは編集しにくいため,次の方法が便利です.
コンテナからファイルを取り出す
docker cp searxng:/etc/searxng/settings.yml .
これでカレントディレクトリに settings.yml がコピーされます.
編集
nano settings.yml
コンテナに戻す
docker cp settings.yml searxng:/etc/searxng/settings.yml
再起動
docker restart searxng
Docker 起動時に設定ディレクトリをマウントする
毎回 docker cp を使うのは面倒なので,設定ディレクトリをマウントすると便利です.
まず設定用ディレクトリを作ります.
mkdir searxng-config
設定ファイルをコピーします.
docker cp searxng:/etc/searxng/settings.yml searxng-config/
その後コンテナを作り直します.
docker stop searxng docker rm searxng
起動時に volume を指定します.
docker run -d \ --name searxng \ -p 7777:8080 \ -v $(pwd)/searxng-config:/etc/searxng \ --restart unless-stopped \ searxng/searxng
これで
./searxng-config/settings.yml
を編集するだけで設定変更が可能になります.
さらに原因が
これでクエリは通ったかに見えましたが,今度はコンテキスト溢れ問題.
結論から言うと,クエリURLをこの様な形にするとうまくいきました.
http://192.168.10.3:7777/search?q=<query>
まとめ
Open WebUI と SearXNG を組み合わせたときに Web検索が動かない場合,原因は次のケースが多いです.
- JSON API が無効
- bot detection による拒否
- rate limiter
今回のように
/search?q=...&format=json
が 403 になる場合は,SearXNG の設定を見直すことで解決できます.
ローカルLLM環境で Web検索を安定して使うには,SearXNG の設定調整がほぼ必須と言えるでしょう.