Ultimate AI Connector for WebLLM
Ultimate AI Connector for WebLLM を使用すると、WordPress のマルチサイトネットワークにブラウザネイティブの AI 推論機能が追加されます。この機能は、WebLLM と MLC エンジンを使用して、大規模言語モデル(LLM)をブラウザ内で完全に実行します。そのため、API キーの管理、外部への呼び出し、ユーザーのデバイス外へのデータ送信は一切ありません。
主な機能
- ブラウザ側での推論: LLM が WebLLM/MLC を介して訪問者のブラウザ内でローカル実行されます。サーバー側の GPU は不要です。
- フローティングチャットウィジェット: ログインユーザーは、フロントエンドからブラウザ側の LLM に直接プロンプトを送信できます。
- 管理バーのステータスインジケーター: WebLLM エンジンのリアルタイムステータスが WordPress の管理バーに表示されます。
- SharedWorker ランタイム: 複数のブラウザタブが、GPU リソースを奪い合うのではなく、単一の GPU セッションを共有します。
- apiFetch ミドルウェア: AI Client SDK のパターンに一致する WordPress REST リクエストは、ローカルの WebLLM ブローカーに透過的にルーティングされます。ループバックの HTTP ラウンドトリップは発生しません。
- ウィジェット設定 UI: チャットウィジェットのオン/オフ切り替えや、自動プロンプトの動作を設定できるコネクタパネルの設定が用意されています。
- IndexedDB キャッシュ: モデルの重みダウンロードが、デフォルトの Cache API パスを壊す CDN リダイレクトを経ても維持されます。
- wpai フィルター統合:
wpai_preferred_text_modelsフィルターにフックすることで、AI Experiments 機能が設定された場合にブラウザエンジンを利用するようにルーティングされます。
要件
- WordPress 5.3 以降
- PHP 7.4 以降
- Ultimate Multisite プラグイン(有効化)
- WebGPU サポートを備えたブラウザ(Chrome 113+、Edge 113+、または WebGPU が有効化された Firefox Nightly)
インストール
- アドオンファイルを
/wp-content/plugins/ディレクトリにアップロードします。 - WordPress の「プラグイン」メニューからプラグインを有効化します。
- Ultimate Multisite → AI Connector に移動してアドオンを設定します。
フローティングチャットウィジェット
フローティングチャットウィジェットを使用すると、ログインしているユーザーであれば、ページを離れることなく、フロントエンドからブラウザ側の LLM と直接対話できます。
機能概要
有効にすると、ログインユーザーのすべてのフロントエンドページ隅にチャットアイコンが表示されます。このアイコンをクリックするとチャットパネルが開き、ユーザーはプロンプトを入力し、ローカルで実行されている WebLLM モデルから応答を受け取ることができます。モデルが完全にブラウザ内で動作するため、応答はプライベートであり、サーバー側の処理は一切行われません。
管理バーのステータスインジケーター
WordPress の管理バーには、WebLLM エンジンの現在の状態を示すステータスインジケーターが組み込まれています。
| ステータス | 意味 |
|---|---|
| Loading | MLC エンジンが初期化中、またはモデルの重みをダウンロード中です |
| Ready | モデルがロードされ、推論に使用できる状態です |
| Idle | エンジンはロードされていますが、SharedWorker タブがアクティブではありません |
| Error | エンジンの初期化に失敗しました。詳細はブラウザのコンソールを確認してください |
このインジケーターは、ページを再読み込みすることなくリアルタイムで更新されます。
ウィジェットの有効化/無効化方法
- ネットワーク管理画面の Ultimate Multisite → AI Connector に移動します。
- Connector パネルを探します。
- Enable floating chat widget をオンまたはオフに切り替えます。
- 設定を保存します。
ネットワーク管理者がその権限を付与している場合、サイトごとの管理画面からもウィジェットの有効化/無効化が可能です。
ウィジェット設定
Ultimate Multisite → AI Connector のコネクタパネルには、フローティングチャットウィジェットに関する以下の設定が含まれています。
フローティングチャットウィジェットの有効化
ネットワーク全体でチャットウィジェットをオン/オフします。無効にすると、ユーザーの役割に関わらず、どのフロントエンドページにもウィジェットは表示されません。
デフォルト: オフ
自動プロンプトの動作
ユーザーがウィジェットを開いたときに、自動的にプロンプトが送信されるかどうかを制御します。
| オプション | 動作 |
|---|---|
| Disabled | ウィジェットは空のチャット画面で開きます。ユーザーが独自のプロンプトを入力します。 |
| Page context | 現在のページのタイトルとコンテンツに基づいて、プロンプトが事前入力された状態でウィジェットが開きます。 |
| Custom prompt | 下のフィールドで定義したカスタムプロンプトが事前入力された状態でウィジェットが開きます。 |
Custom prompt に設定した場合、デフォルトのプロンプトテキストを入力できる追加のテキストフィールドが表示されます。基本的なテンプレート変数がサポートされています。
{site_name}— 現在のサイト名{page_title}— 現在のページタイトル{user_display_name}— ログインしているユーザーの表示名
デフォルト: 無効
SharedWorker ランタイム
バージョン 1.1.0 では、MLC エンジン向けに SharedWorker ランタイムが導入されました。以前は、WebLLM を使用するブラウザタブごとにモデルのインスタンスがロードされ、GPU メモリを競合させ、VRAM が限られたデバイスでパフォーマンスの問題を引き起こしていました。
SharedWorker ランタイムを使用すると、1つのタブがエンジンホストとして機能します。他のすべてのタブは、ワーカーのメッセージチャネルを介してこの単一のインスタンスと通信します。その結果:
- 開いているすべてのタブで共有される 単一の GPU セッション
- モデルがロードされた後の応答が高速化(初期化の繰り返しが不要)
- デバイスのピークメモリ使用量が低減
SharedWorker はユーザーからは透過的です。管理バーのステータスインジケーターは、個々のタブの状態ではなく、共有されたエンジンの状態を常に反映します。
apiFetch ミドルウェア
このアドオンは、AI Client SDK のパターンに一致する WordPress REST API リクエストをインターセプトする apiFetch ミドルウェアをインストールします。これらのリクエストは、サーバーへのループバック HTTP リクエストを行う代わりに、SharedWorker で実行されているローカルの WebLLM ブローカーに直接ルーティングされます。
これは、AI エンドポイントを呼び出すために標準の WordPress apiFetch API を使用するプラグインやテーマが、コードの変更なしに、利用可能な場合はブラウザ側のモデルから自動的に恩恵を受けることを意味します。
フックとフィルター
フィルター
wpai_preferred_text_models— WebLLM ブラウザエンジンを優先テキストモデルとして登録します。アドオンは、エンジンが設定され利用可能になったときに、このフィルターに自動的にフックします。ultimate_webllm_widget_enabled— 特定のユーザーまたはコンテキストに対してウィジェットの有効状態を上書きします。trueまたはfalseを返します。ultimate_webllm_auto_prompt— ウィジェットに送信される前に自動プロンプトテキストを変更します。プロンプト文字列と現在のWP_Postオブジェクトを受け取ります。
トラブルシューティング
チャットウィジェットが表示されない
- ユーザーがログインしているか確認してください。ウィジェットは認証されたユーザーにのみ表示されます。
- コネクタパネルで Enable floating chat widget がオンになっているか確認してください。
- ユーザーのブラウザが WebGPU をサポートしているか確認してください(上記の要件を参照)。
管理バーのインジケーターが「Error」を示す
ブラウザの開発者コンソール(F12)を開き、WebLLM に関連するエラーがないか確認してください。一般的な原因:
- ブラウザが WebGPU をサポートしていない。
- モデルの重みダウンロードに失敗した。ブラウザの開発者ツール(Application → IndexedDB)で IndexedDB キャッシュをクリアして、ネットワーク接続を確認してください。
- ブラウザ拡張機能が SharedWorker をブロックしている。
モデルの重みが毎回ダウンロードされる
アドオンは、モデルの重みが CDN リダイレクトを経ても維持されるように IndexedDB をキャッシュバックエンドとして使用します。重みが訪問のたびに再ダウンロードされる場合は、ブラウザのプライバシー設定や拡張機能によって IndexedDB がクリアされていないか確認してください。
変更履歴
完全なバージョン履歴については、Changelog をご覧ください。