はじめに
Ollamaと連携してローカルLLMを動かせる強力なUIツール「Open WebUI」には、RAG(Retrieval-Augmented Generation)を活用したWeb検索機能が備わっています。
しかし、Web検索トグルを有効にして質問を投げると、内部のスクレイピング処理で例外が発生し、検索結果が取り込めないというバグに遭遇することがあります。
本記事では、この問題の原因と、簡単なワンライナーでの修正パッチ適用方法を共有します。
前提となる環境
- Docker(
docker runやdocker compose)を利用して Open WebUI を構築・運用していること - ※ソースコードから直接ローカルのPython環境にインストールしている場合は、ファイルのパスやパッチ適用コマンドが異なりますので適宜読み替えてください。
💡 バージョンに関する補足
この不具合は、Open WebUI v0.9.5 系で導入された
SSRF対策(AIOHTTP_CLIENT_ALLOW_REDIRECTS)の変更に関連して
発生している既知の問題です。
筆者確認時点では GitHub 上で修正作業が進められていましたが、
Issue番号やPR番号は変更・整理される可能性があるため、
本記事では割愛します。
発生する現象とエラーの切り分け方法
Open WebUIのチャット画面で、入力バーの下にある「Web Search」トグルをオンにしてメッセージを送信した際、検索がいつまでも終わらなかったり、Webからの情報が取り込めずに回答が生成されたりします。
これが本記事のバグに該当するかどうかを切り分けるには、ホストマシンのターミナルから以下のコマンドでDockerのサーバーログを確認します。
docker logs --tail 50 open-webui
ログの中に、以下のようなPythonの TypeError が出力されていれば、まさに本バグが原因です。
TypeError: request() got multiple values for keyword argument 'allow_redirects'
原因:SSRF対策と引数の重複指定
この問題の背景には、セキュリティ強化の歴史があります。
最近のOpen WebUIでは、サーバーサイドリクエストフォージェリ(SSRF)攻撃への対策として、外部リクエスト時のリダイレクトを制限する AIOHTTP_CLIENT_ALLOW_REDIRECTS=False という設定が導入されました。
バグ発生の流れ:
- セキュリティ強化の修正が入る
- リダイレクト制御用の定数(
AIOHTTP_CLIENT_ALLOW_REDIRECTS)が追加される -
allow_redirectsが引数として2回渡されてしまうミスが発生 - 結果としてWeb Search機能がクラッシュする
実際のコード(/app/backend/open_webui/retrieval/web/utils.py の SafeWebBaseLoader クラス)では、非同期HTTPクライアントの aiohttp セッションにリクエストを投げる箇所が以下のようになっていました。
コードのイメージ(修正前):
# allow_redirects が2回指定されてしまっている
response = await session.get(
url,
allow_redirects=AIOHTTP_CLIENT_ALLOW_REDIRECTS, # ← SSRF対策で追加された行(重複)
ssl=ssl_context,
allow_redirects=allow_redirects, # ← 元からあった行
**kwargs
)
Pythonの仕様として、同じ関数に対して同じキーワード引数(この場合は allow_redirects)を2回以上渡すと、引数の解釈に失敗して TypeError: got multiple values for keyword argument という例外が発生します。これが検索が失敗する直接の原因です。
解決策(修正パッチ)
このバグを直すには、重複している引数のうち一方(定数を渡している行)を削除するだけです。
Docker版の Open WebUI を運用している場合、コンテナ内に入って手動で書き換えるのは面倒なので、以下のコマンドをホスト側から実行することで、安全に一発で修正パッチを当てることができます。
自動パッチコマンド
⚠️ 将来のバージョンアップに関する警告
本パッチは2026年6月時点の該当コード構成を前提としています。
Open WebUIのバージョンアップ後(修正版のリリース後)は対象行が存在しない、あるいは AIOHTTP_CLIENT_ALLOW_REDIRECTS が別の用途で使われるようになっている可能性があります。
万が一正常なコードを壊してしまうことを防ぐため、実行前に必ずバックアップを取得し、自己責任での適用をお願いします。
Open WebUIのコンテナ名が open-webui の場合、ターミナルで以下のコマンドを実行してください。
# 1. 万が一に備えてコンテナ内のオリジナルファイルをバックアップ
docker exec open-webui cp /app/backend/open_webui/retrieval/web/utils.py /app/backend/open_webui/retrieval/web/utils.py.bak
# 2. コンテナ内のPythonコードから重複行を削除(表記の揺らぎを考慮してマッチング)
docker exec open-webui sed -i '/AIOHTTP_CLIENT_ALLOW_REDIRECTS/d' /app/backend/open_webui/retrieval/web/utils.py
# 3. コンテナを再起動して変更をバックエンドに反映
docker restart open-webui
🛠️ もし再起動後にコンテナが動かなくなったら?
万が一、コードのパッチ適用に失敗してコンテナが起動しなくなった場合は、以下のコマンドでバックアップから即座に元の状態へ復旧できます。
docker exec open-webui cp /app/backend/open_webui/retrieval/web/utils.py.bak /app/backend/open_webui/retrieval/web/utils.py && docker restart open-webui
💡 補足:コマンドの実行について
- もしコンテナ名が異なる場合(例:
open-webui-mainなど)は、docker execやdocker restart直後のコンテナ名を適宜変更してください。 -
sed -i '.../d'は、指定した文字列が含まれる行をピンポイントで削除するコマンドです。
修正が反映されているかの確認
パッチ適用後、コンテナ内のファイルが正しく修正されたか確認したい場合は、以下のコマンドで差分や周辺コードを出力できます。
docker exec open-webui cat /app/backend/open_webui/retrieval/web/utils.py | grep -C 3 session.get
重複していた allow_redirects=AIOHTTP_CLIENT_ALLOW_REDIRECTS, の行が消え、もう一方の変数を受ける allow_redirects=allow_redirects, だけが残っていれば成功です。
コンテナを「更新・再作成」した場合の注意点
⚠️ 修正のリセットに関する注意
今回の修正は起動中のDockerコンテナ内のファイルを直接書き換えているため、将来的に docker compose down や docker run の再実行、イメージのプル(Update)によってコンテナを再作成した場合は、修正がリセットされます。
公式側のイメージ自体が修正版にアップデートされるまでは、コンテナを再作成した際に再度このパッチを実行する必要がある点だけ留意してください。
まとめ
RAGを用いたWeb検索機能は、ローカルLLMに最新情報や外部の知識を与えられる強力な武器です。
このエラーに遭遇した場合は、上記ワンライナーでパッチを当て、快適なAI検索環境を取り戻しましょう!