サブスクはもう不要:プライベートなAI検索環境をPerplexicaでセルフホストする

AI tutorial - IT technology blog
AI tutorial - IT technology blog

なぜ私が検索に月額20ドル払うのをやめたのか

この1年で、私はPerplexity Proのサブスクリプションに240ドル以上を費やしてきました。ツール自体は素晴らしいものですが、機密性の高いプロジェクトのアイデアや独自のコードスニペットを含む検索履歴のすべてがサードパーティのサーバーに保存されることに、次第に不安を感じるようになりました。プライバシーを犠牲にすることなく、検索拡張生成(RAG)のパワーを手に入れたい。その答えがPerplexicaでした。

Perplexicaは、Perplexityのワークフローを再現した強力なオープンソースの代替ツールです。SearXNGを使用してライブウェブをクロールし、そのデータをClaude 3.5 SonnetやローカルのLlama 3インスタンスなどのLLMに渡して、引用付きの回答を生成します。この構成により、静的なLLMとリアルタイムのインターネットデータとのギャップを埋めつつ、データのフットプリントを完全にコントロールすることが可能になります。

クイックスタート:5分以内に立ち上げる

DockerとDocker Composeが準備できていれば、すぐに機能的なインスタンスをデプロイできます。まずはデフォルト設定から始めることをお勧めします。これにより、ローカルLLMの統合を試す前に、ネットワークが検索プロバイダーに到達できることを確認できます。

1. リポジトリのクローン

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

2. 環境設定

Perplexicaのバックエンドロジックはsample.config.tomlファイルに依存しています。これをコピーして、アクティブな設定ファイルを作成します:

cp sample.config.toml config.toml

まだ大幅な編集を行う必要はありません。ただし、デフォルトのPORTSEARCH_ENGINEの設定が環境と一致しているか、軽く確認しておくと良いでしょう。

3. Docker Composeで起動

以下のコマンドを実行して、必要なイメージをプルし、コンテナを起動します:

docker compose up -d

プロセスが完了すると、UIはhttp://localhost:3000でアクセス可能になり、バックエンドはhttp://localhost:3001でリクエストを処理します。検索バーが表示されれば、準備完了です。

仕組みを理解する:アーキテクチャ

Perplexicaを特定のワークフローに合わせて最適化するには、Next.jsフロントエンド、Node.jsバックエンド、そしてSearXNGエンジンの3つの柱からなる構造を理解する必要があります。

SearXNGの役割

SearXNGは、プライバシーに配慮したメタ検索エンジンとして機能します。Googleを直接クエリする代わりに、PerplexicaはSearXNGにリクエストを送信し、SearXNGがGoogle、Bing、DuckDuckGoの結果を集約します。検索結果が空で返ってくる場合、主な原因はポートの競合か、SearXNGコンテナ内でのIPブロックです。

LLMプロバイダーの選択

config.tomlはシステムの「脳」として機能します。検索データの処理には、主に2つのパスがあります:

  • クラウドAPI: 1秒未満のレスポンスを求めるならGroq、高度な推論タスクにはAnthropicのClaude 3.5 Sonnetを使用します。
  • ローカルホスティング: データの主権を100%維持することを優先する場合は、Ollamaが最適です。

圧倒的な速度と寛大な無料枠があるGroqを選択する場合(私のおすすめです)、設定は以下のようになります:

[API_KEYS]
GROQ = "ここにGroqのAPIキーを入力"

[GENERAL]
LLM_PROVIDER = "groq"
DYNAMIC_LLM_MODEL = "llama3-70b-8192"

ローカル環境の構築:Ollamaとの接続

セルフホストの真の醍醐味は、スタック全体を自前のハードウェア上で動かすことにあります。ホストマシンでOllamaを実行している場合、Dockerコンテナがそれと通信できるように設定する必要があります。ここで多くのユーザーが壁にぶつかります。

ステップ1:ネットワークバインディング

Ollamaはデフォルトで127.0.0.1に設定されていることが多く、これはDockerコンテナからは見えません。WindowsまたはMacの場合は、環境変数OLLAMA_HOST=0.0.0.0を設定してください。Linuxユーザーは、インターフェースをまたいだ通信を許可するためにsystemdサービスファイルを編集する必要があります。

ステップ2:config.tomlの更新

APIのURLを、localhostではなくマシンのDockerブリッジIPに向けるように設定します:

[GENERAL]
LLM_PROVIDER = "ollama"
OLLAMA_BASE_URL = "http://host.docker.internal:11434"
DYNAMIC_LLM_MODEL = "llama3"

注意:host.docker.internalはDocker Desktop用のショートカットです。ネイティブのLinuxサーバーを使用している場合は、通常172.17.0.1であるdocker0インターフェースのIPを使用してください。

ステップ3:検索フォーカスの調整

Perplexicaには、ソース資料を絞り込むための「フォーカスモード」があります。「Academic(学術)」モードに切り替えると、技術ドキュメントの調査時にS/N比(情報の精度)が大幅に向上します。SEO対策済みのブログをバイパスし、ホワイトペーパーや公式マニュアルを優先して検索します。

パフォーマンスとトラブルシューティング

このスタックを自宅のラボで数ヶ月運用してみて、最適化のための重要なポイントがいくつか見つかりました。

ポート競合の管理

スタックはデフォルトでポート3000と3001を使用します。PortainerのダッシュボードやNextcloudインスタンスをすでに実行している場合、Perplexicaは起動時にクラッシュします。その場合は、docker-compose.yamlでポートをマッピングし直すだけです:

services:
  perplexica-frontend:
    ports:
      - "8080:3000" # ローカルのポート8080をコンテナにマッピング

ハードウェア要件

ローカルの8Bパラメータモデルとフルスタックを並行して実行し、快適な体験を得るには、少なくとも16GBのRAMが必要です。8GBしかない場合は、UIとSearXNGはローカルでホストし、LLMの処理はGroqやOpenAIのAPIにオフロードすることをお勧めします。

エンジンを最新の状態に保つ

Perplexicaの開発スピードは非常に速いです。環境を壊さずに最新の状態を保つには、以下の手順を実行してください:

git pull
docker compose build
docker compose up -d

検索エンジンのセルフホストは、単なるプライバシーへのこだわりではありません。サブスクリプションの階層による制限や、企業のフィルターによる調整を受けないツールを構築することなのです。一度プライベートで引用付きの検索を体験してしまうと、標準的な商用オプションに戻るのは非常に難しくなるでしょう。

Share: