外部への接続を制限して、ローカルAIを使う
端末内のAIサーバーを使いながら、Naidanのページが接続できる先を絞りたいときは、ローカルのみ版を開きます。ページとともに届くContent Security Policy(CSP)をブラウザが適用します。
使い始める前にHosted版を選ぶ
ローカルのみ版
このURLで開くと、以下の接続制限がブラウザで働きます。通常版のアプリ内でローカルの接続先を選ぶだけでは、CSPは切り替わりません。
https://naidan-local-only.pages.devローカルのみ版を開く(外部サイト)Curated版
ローカルサーバーに加え、CSPの許可リストにある外部サービスも使う場合に選びます。現在の対象はWikipedia、Wikimedia、Hugging Faceです。許可リストは今後変わる可能性があります。
https://naidan-curated.pages.devCurated版を開く(外部サイト)通常のHosted版
モデルの取得など、外部サービスを使う機能も利用したい場合に選びます。ローカルのみ版の接続制限は適用されません。
https://naidan.pages.dev通常版を開く(外部サイト)それぞれの版はオリジンが異なるため、ブラウザに保存した会話は切り替え先に自動表示されません。以前の会話を使う場合は、ZIPの書き出しと読み込みを行います。 会話データをバックアップ・復元する
connect-srcnaidan-local-only.pages.dev開いたサイト自身も許可localhost / 127.0.0.1CSPで許可naidan-curated.pages.dev開いたサイト自身も許可localhost / 127.0.0.1CSPで許可naidan.pages.dev追加のconnect-src制限なしlocalhost / 127.0.0.1追加のconnect-src制限なしローカルのみ版とCurated版の公開時には、GitHub Actionsが版ごとのCSPを_headersファイルに書き込み、サイトとともにCloudflare Pagesへデプロイします。Cloudflare PagesはCSPをHTTPレスポンスヘッダーで返し、ブラウザが適用します。実際に届いたヘッダーは後述の手順で確認でき、設定の元となる手順も公開されています。 デプロイの設定を見る(外部サイト)
端末内で動くAIサーバーに接続する
Ollamaやllama.cpp serverなどのAIサーバーを端末内で起動し、Naidanで対応するAPIプロバイダーとローカルURLを選びます。ローカルのみ版が接続を許可する先は次のとおりです。
'self'- ローカルのみ版のページを開いたサイト自身へのリクエスト。通常版やCurated版のサイトは含みません。
http://localhost:*- この端末で指定のポートを使って動くHTTPサービス。
http://127.0.0.1:*- ループバックIPアドレスから接続する、この端末のサービス。
接続には、入力したURLでサーバーが動き、選んだAPIに対応し、CORSでこのページのオリジンを許可している必要があります。別の端末やLANのアドレスは、このCSPの許可先に含まれません。モデルを選ぶ前にNaidanで接続を確認します。 ローカルAIサーバーへの接続手順を見る
何を制限するのか
ページのCSPにあるconnect-srcは、fetchやXMLHttpRequestなどを使うブラウザからのAPI通信先を制限します。スクリプトや画像などには別のCSP指示が適用されます。Hugging Faceなどの外部サービスからモデルを直接取得する通信はローカルのみ版の許可先にないため、必要な機能は失敗する場合があります。
ローカルのみ版の初回アクセスや、未保存のアプリファイルの取得には通信が必要です。このブラウザでPWAのアプリファイルを準備済みなら、同じアドレスからNaidanの画面をオフラインでも開けます。ローカルAIサーバーは独立したプロセスで、独自の権限や通信があります。ページのCSPはそのプロセスを制御しません。Naidan内の接続先設定を変えても、ブラウザが許可する先は増えません。
ブラウザで制限と実際の通信を確認する
ページに届いたCSPを確認する
ローカルのみ版のURLを開きます。ブラウザの開発者ツールでネットワークを開いてページを再読み込みし、メインの文書のリクエストを選びます。ヘッダー内のレスポンスヘッダーにあるContent-Security-Policyのconnect-srcに、上記3種類の許可先が並んでいるか確認します。
使う機能の接続先を見る
ネットワークの記録を続けたまま、Naidanでローカルサーバーの接続を確認を選びます。リクエストURLと結果を確認します。この操作中に試した接続先が分かります。応答が成功するかはサーバーとブラウザのオリジンの規則にも左右されます。
失敗時の原因を読む
接続できない場合は、コンソールにCSP違反やCORSエラーが出ていないか確認します。CSP違反ならページのポリシーがその接続先を止めています。ローカルへの通信失敗は、サーバーの停止、API URLの誤り、CORSの設定も原因になります。
ネットワークに表示されるのは、記録中に実行した操作によるリクエストです。ページの通信を調べる手掛かりになり、別プロセスで動くローカルサーバーの通信までは監査できません。