PerplexicaとDockerでプライベートなAI検索エンジンを構築する

Artificial Intelligence tutorial - IT technology blog
Artificial Intelligence tutorial - IT technology blog

なぜPerplexityをやめてPerplexicaに乗り換えたのか?

先週の午前2時、スクレイピングボットのデバッグ中にPerplexityから「Daily limit reached(一日の制限に達しました)」という通知を受け取りました。その時の絶望感といったらありません。月額20ドルも払っているのに制限があるプラットフォームに依存することに嫌気がさし、セルフホスト(self-hosted)の道を模索することにしました。

いくつかのツールを試した結果、私はPerplexicaを選びました。これはPerplexity AIの仕組みを再現したオープンソースプロジェクトです。SearxNGを使ってインターネットをスキャンし、そのデータをClaude、GPT-4、あるいはOllama経由でローカル実行されるLlama 3などの大規模言語モデル(LLM)に渡して回答を生成します。データの管理権は完全に自分にあり、モデルの学習に利用される心配もありません。そして何より、完全に無料です。

Perplexicaのインストール:迅速、簡潔、そしてクリーン

Node.jsやPythonを使って手動でインストールすることも可能ですが、依存関係の泥沼に足を踏み入れるのは賢明ではありません。環境をクリーンに保つには、Docker Composeが最もスマートな選択肢です。

1. 環境の準備

サーバー(VPS)またはPCにDockerがインストールされている必要があります。私はUbuntu 22.04(8GB RAM)のVPSでこのシステムを運用しています。Ollama経由でローカルLLMを動かす場合は、レスポンス速度が亀のように遅くならないよう、GPU搭載のマシンを優先してください。

2. ソースコードの取得と設定

まず、GitHubからリポジトリをクローンします:

git clone https://github.com/ItSOSS/perplexica.git
cd perplexica

次に、用意されているサンプルファイルから設定ファイルを作成します:

cp sample.config.toml config.toml

3. Docker Composeで起動

付属の docker-compose.yaml ファイルには、フロントエンド、バックエンド、SearxNGがすべて含まれています。以下のコマンドを実行するだけです:

docker compose up -d

システムが必要なイメージをダウンロードします。SearxNGのイメージは比較的重い(約1GB)ため、ネットワークが遅い場合は、しばらく待つか、GoogleやCloudflareのDNSに変更してダウンロード速度を上げてください。

システムの「脳」を設定する

コンテナが起動しただけでは、まだ使用できません。Perplexicaにどのモデルを使って思考させるかを指定する必要があります。

APIまたはローカル経由でLLMを接続する

config.toml を開き、providerセクションに注目します。私は以下の2つのパターンをテストしました:

  • Groqを使用(速度優先): GroqはLlama 3をサポートしており、秒間250〜300トークンという驚異的な速度で応答します。Enterキーを押した瞬間に結果が返ってくる感覚です。
  • Ollamaを使用(プライバシー優先): データが一切外部に出ないようにしたい場合に最適です。

多くの人がハマる共通のミスは、Dockerの接続エラーです。同じマシン上でOllamaを実行している場合、localhost を使用せず、以下のように修正してください:

[EVNIRONMENTS]
# バックエンドコンテナがホストを認識するためのアドレス
OLLAMA_URL = "http://host.docker.internal:11434"

SearxNG(検索の目)の最適化

SearxNGは非常に優れた匿名検索エンジンですが、GoogleからIPブロックを受けやすいのが難点です。私の経験では、searxng/settings.yml でDuckDuckGoやBrave Searchなどのエンジンを追加で有効にすることをお勧めします。検索ソースを多様化することで、特定のエンジンにトラブルが発生してもシステムが安定して動作します。

運用とトラブルシューティング

config.toml ファイルを変更するたびに、バックエンドを再起動して設定を適用する必要があります:

docker compose restart backend

それでは、ブラウザで http://localhost:3000 にアクセスしてみましょう。非常にミニマルでモダンなインターフェースが表示されます。検索時に「Internal Server Error」が発生しても、慌てずにログを確認してください:

docker compose logs -f backend

通常、このエラーはAPIキーの誤りやSearxNGのレートリミットが原因です。VPSを使用している場合は、検索エンジンからブラックリストに登録されないよう、シンプルなプロキシの導入を検討してください。

高度な検索モード

Perplexicaは単なる一般的な検索だけではありません。以下のような非常に価値のあるモードを備えています:

  • Academic Search: 学術論文のみを検索します。研究者や学生にとって極めて有用です。
  • YouTube Search: ビデオの書き起こし(transcript)をスキャンして回答します。長い動画を何時間も見る手間を省けます。

Academic Searchを使用すると、結果には常に正確な引用(citation)が添えられます。その品質は、高価な有料ツールに決して引けを取りません。

実機パフォーマンスの評価

CPUのみで実行する場合、Llama-3-8B のようなモデルは回答に10〜15秒ほどかかります。一方で、GPU(RTX 3060以上など)があれば、速度はほぼ瞬時です。AI検索エンジンを自前で構築することは、単に月20ドルを節約するだけではありません。現在のAI大手の基盤技術であるRAG(Retrieval-Augmented Generation)を深く理解する絶好の機会でもあります。

Share: