Perplexica:自分の LLM を使うセルフホスト型 Perplexity ローカル
Perplexityは、自然言語で質問すると、青いリンクの一覧ではなく、出典を明示した要約回答を受け取れるという使い方を広めました。Perplexicaは、それとまったく同じ仕組みを自分の環境で再現します。SearXNG経由でウェブを検索し、Ollamaで動くローカルLLMに回答を書かせる、オープンソースのウェブ検索エンジンです。このガイドでは、Dockerで構成全体を構築し、検索モード(おなじみの「focus」)を解説します。また、オリジナルと比べて得られるものと失うものを率直に示します。
#PerplexityではなくPerplexicaを選ぶ理由
Perplexityは優れた製品ですが、クラウドサービスです。クエリは相手のサーバーに送信され、無料版には制限があり、回答を生成するモデルはユーザーの管理下にありません。Perplexicaはこのロジックを逆転させます。これはオープンソースプロジェクト(MITライセンス、GitHubで入手可能)であり、ユーザー自身がホストする三つのコンポーネントをオーケストレーションします。クエリはネットワーク外に送信されず、費用はかからず、回答に使用するモデルをユーザーが選択できます。
その利点はイデオロギー的なものだけではありません。ローカルな回答エンジンであれば、クォータによる制限を受けることなくソースを照会でき、ホームラボでバックグラウンドタスクとして動作させ、そのインターフェースを通じて他のツールの検索基盤としても利用できます。その代わり、品質はローカルモデルと SearXNG インスタンスの健全性に直接依存します。このガイドでは、この2点に特に重点を置いています。
#Perplexica + SearXNG + Ollama スタック
お使いのマシンで、プライベートかつ無料のChatGPTを1時間で構築 — LM Studio、Ollama、Open WebUI、ご自身のドキュメント、クラウド不要。
- 永久に利用できるオンラインスペース
- PDF + ファイル
- 生涯アップデート
構成要素は三つあり、それぞれの役割は明確です。どの要素が何を担当するかを理解しておくと、回答が不適切な場合のトラブルシューティングがずっと簡単になります。三つのうち、どれを調べればよいか分かるからです。
- SearXNG
- Google、Bing、DuckDuckGo、Wikipediaなど数十の検索エンジンの結果を、トラッキングなしで集約する自由ソフトウェアのメタ検索エンジンです。実際にウェブ検索を行うのは、このメタ検索エンジンです。Perplexicaはこれなしでは動作しません。
- Ollama
- ローカルLLMをhttp://localhost:11434で提供するデーモンです。情報源に基づいて最終的な回答を生成するのは、このデーモンです。また、抜粋の関連性を順位付けするための埋め込みモデルも提供します。
- Perplexica
- 全体を統括するオーケストレーターであり、ウェブインターフェースでもあります。質問を言い換え、SearXNGを制御し、ページの内容を抽出し、埋め込みによる再ランキングを管理して、Ollamaに送る最終プロンプトを組み立てます。
#前提条件
特に特殊なことはありませんが、ハードウェアおよびバージョンに関する注意点はいくつかあります。
- Docker + Docker Compose
- スタック全体をコンテナでデプロイします。Docker Desktop(Windows/Mac)、またはDocker EngineとComposeプラグイン(Linux)があれば十分です。これが公式に推奨されているインストール方法です。
- Ollamaがインストールされ、起動されている
- デーモンが稼働しており、接続できる必要があります。ollama listで確認してください。Ollamaがホストマシン上で、PerplexicaがDocker内で動作している場合、使用するアドレスはlocalhostではなくhttp://host.docker.internal:11434です。
- チャットモデル
- Q4_K_Mの7〜8Bモデル(VRAM約5GB)が、実用的な最低ラインです。14Bモデル(約9GB)なら、はるかに信頼性の高い要約を作成できます。最終的な回答の質は、この選択に直接左右されます。
- 埋め込みモデル
- 軽量で高速なモデルで、例えば nomic-embed-text があります。内部での順位付けの調整にのみ使用し、文章の生成には使用しません。
- ~5GBのディスクスペースと少しのRAM
- Dockerイメージ(Perplexica + SearXNG)とキャッシュ用です。モデルは、それとは別にOllamaが管理します。
#Dockerを使って10分でインストール
公式のインストール方法では、プロジェクトの Git リポジトリを使います。そこには、Perplexica と専用の SearXNG インスタンスの両方を事前設定した docker-compose.yaml が含まれています。SearXNG を別途インストールする必要はありません。Docker Compose がその処理を行います。
- 01リポジトリをクローンするGitHub から Perplexica プロジェクトを取得し、フォルダに移動してください。以下すべてはそのフォルダ内で実行されます。
- 02設定ファイルの作成リポジトリには設定ファイルのテンプレートsample.config.tomlが用意されています。これをconfig.tomlとしてコピーしてください。Perplexicaは起動時にこのファイルを読み込み、使用するバックエンドを把握します。
- 03Compose設定を確認するdocker-compose.yamlでは、perplexica(アプリ)、searxng、必要なネットワーク関連のサービスという三つのサービスを定義しています。デフォルトでは、Webインターフェースはポート3000で公開されます。
- 04スタックを起動docker compose upを実行すると、初回起動時にイメージがビルドされ、その後すべてが起動します。初回はイメージのダウンロードとビルドに数分かかると見込んでください。
- 05インターフェースを開くhttp://localhost:3000 にアクセスしてください。チャット画面が表示されれば、作業は半分完了です。あとはモデルを接続するだけです。
#Perplexica に Ollama を接続する
モデルを設定する方法は2つあります。起動前に config.toml ファイルで設定する方法と、起動後にウェブインターフェースの設定画面で設定する方法です。初めて使う場合はインターフェースのほうが簡単で、再現可能なデプロイにはファイルが便利です。
重要なポイントは Ollama のアドレスです。Perplexica はコンテナ内で動作しており、その場合、localhost はコンテナ自体を指し、あなたのマシンを指しません。Ollama がホスト上でインストールされている場合は、Windows/Mac、およびホスト設定が正しい Linux では host.docker.internal を localhost の代わりに使用してください。
- 01設定を開くウェブインターフェースでは、設定アイコンをクリックするとモデル提供元の選択が可能です。提供元として Ollama を選択してください。
- 02OllamaのURLを入力するAPIのアドレス(Dockerの場合、host.docker.internal:11434)を入力してください。Perplexicaはその後 Ollama に問い合わせ、自動的に利用可能なモデルをリストアップします。
- 03チャットモデルの選定応答を生成するモデルを選択してください(例:qwen3.5:9b)。これは品質の鍵となる1番目の要素です。
- 04埋め込みモデルを選択抜粋の順位付けをやり直すために、nomic-embed-text(または同等のモデル)を選択してください。有効な埋め込みがないと、ソースの順位付けの精度が低下します。
- 05最初の質問をする最近の事実について質問してテストしてください。回答の下に番号付きの出典が表示されれば、一連の処理全体が機能しています。
#フォーカスモード:学術、動画、Redditなど
これはPerplexicaを代表する機能です。あらゆる場所を同じ方法で検索するのではなく、「focus mode」を選ぶことで、SearXNGの検索対象を特定の種類の情報源に絞り、文章の書き方も調整します。適切なモードを選ぶと、関連性が大きく変わります。
- All Mode
- デフォルトモード:ウェブ全体を対象とする一般的な検索。特定の分野に限定されない、答えが一つに定まらない質問に使用する。
- Academic Search
- 科学的な情報源や研究論文を中心に検索します。文献レビューや高度に専門的な技術の質問に最適です。
- Writing Assistant
- ウェブ検索を行わないモードです。PerplexicaはLLMだけを使って文章を作成したり、言い換えたりします。外部の情報源が必要ない場合に便利です。
- YouTube Search
- 動画を対象に検索します。回答は関連するYouTubeコンテンツに基づき、リンクも付いています。チュートリアルや実演を見る際に役立ちます。
- Wolfram Alpha Search
- 計算、科学、事実に関するデータについての質問には、Wolfram Alphaに基づいて回答します。
- Reddit Search
- Redditのディスカッションを検索:口コミ、実際の体験、コミュニティの議論。意見や製品に関する質問に非常に役立ちます。
#実際の回答の質
率直に言うと、小型のローカルモデルでは、Perplexity を支える最先端モデルに比べて、要約の文章は滑らかさやきめ細かさで劣ります。ただし、パイプラインもモデルと同じくらい重要です。最終的な仕上がりを左右する調整要素は 3 つあります。
- チャットモデルのサイズ
- これが最も大きな要因です。7〜8Bモデルは適切な回答を作成しますが、ときには内容が浅くなります。14Bモデルは引用に関する指示によく従い、より整った要約を作成できます。さらに大きい32Bモデル(VRAM約19GB)になると、満足できる利用体験に近づきます。
- SearXNGの稼働状態
- 検索エンジンがブロックされたり、レート制限に達したりすると、SearXNGが返す検索結果が少なくなり、回答の内容もその分乏しくなります。内容の薄い回答は、LLMではなく情報源の不足が原因であることが多くあります。
- 利用可能なコンテキスト
- Perplexicaは、複数のページからの抜粋をプロンプトに組み込みます。コンテキストの短いモデルでは、参照元の内容が途中で切り詰められ、情報が失われます。十分なコンテキスト長を持つモデルを優先してください(最低8k、可能ならそれ以上)。
#Perplexityと比較:得られるものと失うもの
Perplexica は完全なクローンではなく、そう主張するのは不誠実です。自分の状況で手間をかける価値があるかを判断できるよう、メリットとデメリットを現実的に整理します。
- 得られるメリット — 機密性
- あなたのネットワークからいかなるリクエストも送出されません。検索テーマや回答内容も第三者を経由しません。機密性の高い運用においては、これが極めて重要です。
- メリット — コストと利用制限
- 料金はかかりません。リクエストの制限もありません。ハードウェアが処理できるだけの検索を実行でき、API料金なしで他のツールと統合できます。
- 得られるメリット — 制御
- モデルと、SearXNG経由で検索する検索エンジンを選べます。また、全体をホームラボで長期的にセルフホストできます。
- 表現の洗練が失われます
- Perplexityのクラウドモデルはより大規模で、より洗練されています。性能が控えめなハードウェアでは、ローカルで作成する要約は精彩に欠け、不正確な記述も増えます。
- 失うもの — 導入するだけで得られる堅牢性
- Perplexityはインフラを代わりに管理してくれます。自分の環境でSearXNGがレート制限に引っかかったり、OllamaがVRAMを使い切ったりした場合は、自分で原因を診断して修正する必要があります。
- 一部の機能が失われます
- 洗練されたモバイルアプリはなく、複数ステップのPro Searchも同じ完成度には達しておらず、独自の連携機能もありません。Perplexicaは主要な機能をカバーしていますが、商用製品の使い勝手をすべて備えているわけではありません。
#よくある問題のトラブルシューティング
- Perplexica は Ollama を認識できません
- 原因はほぼいつも接続先アドレスです。Docker内から接続する場合は、localhost を host.docker.internal に置き換えてください(Linuxでは、extra_hosts に host-gateway を追加します)。Ollama が正常に接続を待ち受けていることを確認し、必要なら localhost 以外からの接続も受け入れるようにしてください。
- 応答にソースが含まれていません
- SearXNGが何も返しません。SearXNGの画面を直接開いて、検索を試してください。検索に失敗する場合、一部の検索エンジンがブロックされているか、レート制限にかかっています。有効な検索エンジンの数を減らすか、しばらく待ってください。
- モデルのリストは空です
- Perplexica は設定の読み込み時に Ollama に問い合わせます。リストが空の場合は、API の URL が間違っているか、Ollama にモデルがありません。ホスト側で ollama list を実行して確認してください。
- 応答が非常に遅い
- チャットモデルが VRAM に収まらないほど大きく、処理の一部が CPU に回っている可能性が高いです。より軽い量子化(Q4_K_M)か、より小さいモデルに切り替えてください。GPU が実際に使われているかも確認してください。
- エンベディングエラー
- 埋め込みモデルが選択されていないか、ダウンロードされていません。ollama pull nomic-embed-text を実行し、設定でそのモデルを明示的に選択してください。
- ポート 3000 はすでに使用されています
- 別のサービスがそのポートを使用しています。docker-composeのポートマッピングを変更し(例:3001:3000)、スタックを再読み込みしてください。
#さらに詳しく
Perplexicaの性能は、それを支えるモデルとインフラの性能を超えることはありません。これらのガイドは、Perplexicaが依存する基盤を強化します。
- Ollama とは何か、どのように機能するか
- チャットモデルと埋め込みをポート11434で提供するデーモンで、文章生成の品質全体を左右する基盤となるコンポーネントです。
- 量子化の選び方
- Q4_K_M、Q5_K_M、Q8_0:VRAMと品質のトレードオフを理解し、お使いのグラフィックカードに合った要約用モデルを選ぶ。
- AnythingLLM:ローカルで本番運用できるRAG
- ウェブ検索からさらに進み、同じOllamaバックエンドで自分の文書を使ったRAGを構築するために。
ご意見、誤りのご指摘、補足はありますか?ぜひお知らせください。皆さんにとってより良いガイドにするために役立ちます。