SearXNG:ウェブ検索をモデルに提供する ローカル
SearXNG(AGPL-3.0ライセンスの自由ソフトウェアで、ユーザーの追跡もプロファイリングも行いません)は、セルフホスト型のメタ検索エンジンです。検索クエリを他の検索エンジンに転送し、その結果を統合します。APIキーも課金もありません。ローカルモデルと連携させる際の決め手は、settings.ymlの出力形式リストに「json」を追加し(デフォルトでは「html」のみ)、そのJSON出力をチャットインターフェースまたはエージェントに再接続することです。
オープンモデルは、この週の情報について一切把握せず、その回答に何らの警告も示しません。過去の月の話題についても、暗記した掛け算の表のように自然に語ります。ウェブ検索へのアクセスを提供することで、この問題は解決されます。SearXNGは、APIキーなし、請求なし、アカウントなしで利用可能な自前ホスティング型メタ検索エンジンであり、ローカルインストールの統合的なブロックとして最適です。
#ローカルモデルにウェブが必要な理由
モデルの知識は学習時点までに限られますが、その境界がどこにあるかをモデル自身が確実に把握しているわけではありません。解決策は2つあります。ご自身でプロンプトに事実を記載してモデルに与えるか、回答時にモデル自身が事実を探しに行ける手段を与えることです。検索は後者の一般的な形であり、質問がさまざまになると、最も拡張性の高い方法になります。
まず思い浮かぶのは商用の検索APIです。アカウントを作り、APIキーを取得し、リクエストごとに料金を支払います。SearXNGは、セルフホスティングできる代替手段です。インスタンスは自分で運用し、検索リクエストは自宅から送信されます。アカウントはなく、自分で記録すると決めない限り、ログも残りません。データを自宅にとどめることこそが目的の構成なのに、裏口からすべての質問を外部サービスに送るのでは、そこで妥協するのは妙な話です。
このプロジェクトは、ユーザーを追跡せず、プロファイリングもしないメタ検索エンジンであると明示しており、自由ソフトウェアライセンスAGPL-3.0で配布されています。これは強いコピーレフトのライセンスです。変更した版をオンラインサービスとして提供する場合を含めて再配布するなら、対応するソースコードを同じ条件で再公開する必要があります。個人利用やチーム内での利用では、この条項は発動しません。変更した版を第三者に再配布する場合にのみ関わるもので、単に自宅や社内でインスタンスを動かすことには関わりません。
#SearXNGが実際に行っていること(魔法は使われていません)
お使いのマシンで、プライベートかつ無料のChatGPTを1時間で構築 — LM Studio、Ollama、Open WebUI、ご自身のドキュメント、クラウド不要。
- 永久に利用できるオンラインスペース
- PDF + ファイル
- 30日間返金対応
SearXNGはウェブをクロールせず、独自のインデックスも持ちません。仲介役として、検索クエリを設定可能な複数の既存検索エンジンに送信し、返された検索結果の重複を除いて順位を付け直し、ひとつの一覧にまとめて返します。問い合わせ先の検索エンジンに見えるのは、利用者のIPアドレスではなく、インスタンスのIPアドレスです。
この仲介役という立場は、プロジェクト自身が掲げるプライバシー保護の約束にもつながっています。インスタンスはユーザーを追跡したり、プロファイリングしたりしません。アカウントも、広告追跡用のCookieも、個人の身元に紐づけられた検索履歴もありません。この点でSearXNGは、検索クエリやクリックを継続的にプロファイリングすることをビジネスモデルの基盤とする商用検索エンジンと明確に異なります。
- 品質は継承されます
- ご自身の具体的な用途で不要な情報ばかり返す検索エンジンは無効にしてください。どんなプロンプトの微調整よりも、モデルの回答の改善につながります。最初から不要な情報が混ざったコンテキストを、モデルが後から補うことはできないためです。
- 自動化は不正利用に見える
- 人間は1分間に数件の検索を発行しますが、エージェントのループは数十件を発行します。上流のエンジンは、キャプチャや一時的なブロックで応答し、これは空の結果として目に見える形で現れます。
検索元となる検索エンジンへの強い依存は、どのメタ検索エンジンにも共通する中心的なトレードオフです。SearXNGの品質は集約元の品質を超えることはできず、集約元の障害や変更の影響も受けます。検索エンジンがある日突然HTMLのマークアップを変更すると、SearXNG側の対応モジュールは、メンテナーが更新するまで動作しなくなります。そのため、長期間更新されていないインスタンスでは、一部の検索エンジンが明示的なエラーメッセージも出さず、いつの間にか応答しなくなることがあります。
#L'installer
- 01コンテナのデプロイ公式イメージは Docker Hub(searxng/searxng)と GHCR(ghcr.io/searxng/searxng)で公開されており、どちらもプロジェクト自身がメンテナンスしています。マシン 1 台で始めるなら、このイメージと Valkey(Redis のオープンソースのフォーク)のキャッシュサービスがあれば十分です。
- 02ローカルネットワーク内に限定するインターネットに公開されたインスタンスは数日で発見され、無料の中継として利用されます。その結果、そのインスタンスから上流の検索エンジンへのアクセスがブロックされます。インスタンスへのアクセスをローカルネットワークに限定するか、アクセス時に認証を設けてください。
- 03呼び出し元のマシンから確認するブラウザから確認するのではありません。コンテナから別のコンテナを呼び出す場合は、localhostではなく、Dockerからアクセスできるアドレスが必要です。
#誰もが見落としてしまう設定
デフォルトでは、新たにインストールされた SearXNG インスタンスは HTML だけを提供します。これは人間にとって最適ですが、プログラムにとってはまったく利用できません。公式ドキュメントでは、settings.yml の search.formats キーがデフォルトで「html」のみを含んでいることが確認されており、csv、json、rss といった形式は利用可能ですが、json を追加して再起動する必要があります。これは、SearXNG をチャットインターフェースに接続した際に発生する「動作しない」という問題のほとんどを引き起こす唯一の原因です。
#あなたのモデルに接続する
| 環境 | SearXNG の役割 |
|---|---|
| ローカルチャット用ウェブインターフェース | 統合検索機能:インスタンスのURLを指定することで、回答に情報源のリストが付加されます。 |
| エージェント用フレームワーク | エージェントが呼び出すことができる検索ツール |
| ドキュメント検索チェーン | ドキュメントのインデックスと併用する、時事的な質問に対応するための情報検索ステップ |
| 自動化ツール | JSONエンドポイントへのシンプルなHTTPリクエスト |
仕組みは常に同じです。検索が抜粋とURLを返し、コードやインターフェースがその中からいくつかを選びます。それらをプロンプトに挿入してから、モデルが質問に回答します。モデル自身がウェブを閲覧するわけではなく、渡された内容を読むのです。そのため、ここではモデルのサイズよりも、抜粋の質とコンテキストウィンドウのサイズが重要になります。
#実際に効果のある設定
新規インストール直後のインスタンスでは、多数のエンジンがデフォルトで有効になっています。一見充実しているようですが、ノイズや重複が増え、対象のエンジンのうち最も遅いものが応答するまで待つため遅延も増えて、結果の質が薄まります。最初の本格的な改善で手を入れるのは、決してモデルのプロンプトではありません。有効なエンジンの一覧と、それらが想定する用途に実際に適しているかどうかです。
- 用途に合わない検索エンジンを無効にする
- たとえば、技術ドキュメントを中心に使う場合、デフォルトで有効になっている画像検索やショッピング検索のエンジンは必要ありません。エンジンを1つ減らすごとに、ノイズの発生源が1つ減り、日々の運用で管理する上流へのリクエストも1つ減ります。
- キャッシュを有効にする
- 共有のValkeyデータベースを使うと、ループ内で同じ質問を繰り返すエージェントの呼び出しごとに、同一の検索をやり直す必要がなくなります。これにより、応答時間と、上流の検索エンジンの貴重な利用枠の両方を節約できます。
- 検索結果数の上限を設定する
- モデルが実際には3件しか読まないのに10件の結果を要求すると、具体的なメリットもないまま、コンテキストを大きく消費し、待ち時間も増えてしまいます。返される結果の数は、その後プロンプトで実際に活用する件数に合わせ、多すぎも少なすぎもしないようにしてください。
- 起動時にログを確認する
- 最近 Valkey に更新したインスタンスでは、ホスト名が依然として古いキャッシュサービスを指していると、エラーが表面化しないまま失敗することがあります。コンテナのログを確認すれば、そこにある問題を別の場所で探す手間を避けられます。
- これらの結果を利用するインターフェース、Open WebUI をインストールする
- n8nとOllamaで一連の処理を自動化する
- ツールを使うローカルエージェントのアーキテクチャ
- LiteLLM:ローカルとクラウドを統合するプロキシ
#予想される制限
- エンジンのクォータ
- 検索結果が空になる場合、ほぼ常に上流側でのブロックが原因であり、SearXNG自体の設定ミスではありません。有効にする検索エンジンを減らし、Valkeyのキャッシュを増やしてください。特に、頻度制限なしで検索を繰り返すエージェントは使わないでください。
- 短い抜粋
- 詳しい内容を得るには、リンク先のページを取得し、不要な部分を取り除く必要があります。これは専用の抽出ツールの役割です。前段ですでに要約された結果を伝えるだけの検索エンジンの役割ではありません。
- 内容を理解したうえでの順位付けはありません
- SearXNGは検索結果を統合しますが、質問の意味を理解するわけではありません。曖昧なクエリからは曖昧な文脈しか得られず、モデルはそれを律儀に要約しますが、質問の仕方が不適切だったことは一切指摘しません。
- メンテナンスは自分で行う必要があります
- アップストリームのエンジンがページを変更するため、モジュールもそれに追随する必要があります。1年間更新されずに放置されたインスタンスは、静かに劣化していきます。
- Valkeyの移行は旧インスタンスに適用されます
- 1年以上前にデプロイされたインスタンスでは、まだ古いキャッシュサービスが参照されている可能性があります。レートリミッターに設定されているホスト名を確認してください。今日実際に起動しているコンテナと一致しない場合、ロボット対策は適切に悪用をブロックするのではなく、サイレントに失敗します。
#FAQ
SearXNGは無料ですか?+
自分のインスタンスがJSONではなくHTMLを返すのはなぜですか?+
自分でインスタンスをホストする代わりに、公開インスタンスを使うことはできますか?+
GPU は必要か?+
結果がしばらく経つと空になるのはなぜですか?+
これによって、使用しているモデルの知識は最新になりますか?+
SearXNGのAGPL-3.0ライセンスが自分にどのような影響を与えますか?+
ご意見、誤りのご指摘、補足はありますか?ぜひお知らせください。皆さんにとってより良いガイドにするために役立ちます。