NextChat を、カスタムの OpenAI 互換エンドポイントに向ける。

Updated 2026-07-29

NextChat は、サーバーデプロイでは BASE_URL という1つの環境変数で API ホストを上書きでき、クライアントでは Settings のアプリ内カスタムエンドポイントで上書きできます。@OpenAI サフィックス付きで CUSTOM_MODELS にカタログの id を追加すれば、Claude・Gemini・DeepSeek が、同じモデルピッカーの中に、キー1つのもとで現れます。

早わかり: BASE_URL、キー1つ、モデルリスト。

サーバーデプロイ(Vercel、Docker、素の Node)では、3つの環境変数で全部の仕事が済みます。BASE_URL は API リクエストの行き先を上書きします。README はこれを「override openai api request base url」と説明しており、デフォルトは https://api.openai.com、値は /v1 なしで入力します。NextChat が自身でリクエストパスを付け足すからです。OPENAI_API_KEY はゲートウェイキーを運びます。CUSTOM_MODELS はモデルピッカーを制御します。プラスでモデルを追加、マイナスで1つ隠す、-all でデフォルトリストをクリア、name=displayName でエントリの名前を変更します。 マルチベンダーの id を機能させる細部が、プロバイダーのサフィックスです。NextChat は、複数のベンダー向けに別々のクライアントコードパスを搭載しているため、CUSTOM_MODELS に生の claude の id を追加すると、それは Anthropic のパスの下に現れ、そこでは別のキーとリクエスト形式が期待されます。id に @OpenAI を付け足す(+claude-sonnet-4-6@OpenAI のように)ことで、そのモデルは OpenAI 互換のパスに固定され、どのベンダーがそのモデルを訓練したかに関わらず、標準的なチャット補完形式で、あなたの BASE_URL にリクエストが送られます。

BASE_URL=https://api.apisrouter.com        # no /v1
OPENAI_API_KEY=sk-APIsRouter-...
CUSTOM_MODELS=-all,+claude-sonnet-4-6@OpenAI,+gpt-5.5@OpenAI,+deepseek-v4-pro@OpenAI
DEFAULT_MODEL=claude-sonnet-4-6

NextChat がエンドポイントをどう解決するか。

NextChat(GitHub 上では ChatGPTNextWeb、スター数はおよそ88K)は、現存する中で最も多くデプロイされているチャットフロントエンドの1つです。ワンクリックで Vercel にデプロイできる軽量な Web アプリに加え、iOS・macOS・Android・Windows・Linux 向けのパッケージ化されたクライアントを備えています。その人気は、まさにこのページが使う仕組みそのもの、つまり「すべてが設定面であり、エンドポイントはただの1つの設定にすぎない」ということから来ています。 その面は2つあります。サーバーデプロイは、ビルド時と起動時に環境変数を読みます。BASE_URL がホストを決め、OPENAI_API_KEY が認証し、CUSTOM_MODELS がそのデプロイのすべてのユーザー向けにピッカーを形作ります。クライアントと Web UI は、さらにアプリ内の経路も公開しています。Settings、Model Provider と進み、OpenAI を選び、エンドポイントとキーのフィールドを埋め、custom model names フィールドに追加の id を列挙します。アプリ内の経路は、値をデバイスごとにローカルに保存するため、個人のクライアントに適した面である一方、環境変数は、他の人も使うデプロイに適した面です。 いずれにせよ、NextChat から出ていくリクエストは、モデル id をプレーンな文字列とした、あなたのエンドポイントに対する標準的なチャット補完です。BASE_URL の裏にマルチベンダーのゲートウェイがあれば、同じデプロイが、長い回答には Claude、素早い質問には速い Gemini の id、バイリンガルなトラフィックには DeepSeek や GLM を、すべてキー1つを通じて提供します。

フルセットアップ: サーバーデプロイかアプリ内設定か。

Vercel デプロイの場合、プロジェクトの環境設定で変数を設定し、再デプロイしてください。Vercel は環境変数の値をビルド時に焼き込むため、再デプロイなしで変数を編集しても何も変わりません。Docker の場合、同じ変数を -e フラグか env ファイルで渡します。CODE 変数は、公開デプロイであれば設定する価値があります。パスワードでアクセスをゲートし、見知らぬ人があなたのキーを使い込むのを防ぎます。 アプリ内の経路は、デプロイをまったく必要としません。Settings で OpenAI プロバイダーを選び、エンドポイントを https://api.apisrouter.com に置き換え、キーを貼り付け、環境変数と同じ構文で custom model names フィールドに id を追加します。これが、デスクトップとモバイルのクライアントがゲートウェイと連携する方法であり、サーバーデプロイに値をコミットする前に値をテストする最速の方法でもあります。 DEFAULT_MODEL は、新しいチャットが何から始まるかを決めます。これは、共有デプロイにおいて、聞こえる以上に重要です。ほとんどのユーザーはモデルを変更しないため、デフォルトの id こそが、支出の大部分が集中する場所だからです。何気ないトラフィックを担わせたいモデルに、意図的に設定してください。

docker run -d -p 3000:3000 \
  -e BASE_URL=https://api.apisrouter.com \
  -e OPENAI_API_KEY=$APISROUTER_API_KEY \
  -e CUSTOM_MODELS="-all,+claude-sonnet-4-6@OpenAI,+claude-haiku-4-5-20251001@OpenAI,+gemini-3.5-flash@OpenAI" \
  -e DEFAULT_MODEL=claude-haiku-4-5-20251001 \
  -e CODE=your-access-password \
  yidadaa/chatgpt-next-web

ピッカー向けのモデル選び。

ピッカー全体が1つのキーで課金されるため、チューニングのループは観察に基づきます。1週間走らせ、コンソールでモデルごとの利用状況を読み、予測したものではなく、実際に人々がクリックしたものを中心に CUSTOM_MODELS を組み直してください。

  • リストは -all から始めましょう。標準のピッカーは OpenAI だけの長いメニューです。それをクリアして、4つか5つの意図的な id を追加すれば、ユーザーに、あなたが価格を把握しているものだけを選べるピッカーを提供できます。
  • デフォルトモデルが、そのデプロイを担います。DEFAULT_MODEL として claude-haiku-4-5-20251001 や gemini-3.5-flash を設定すれば、何気ないやり取りの大半を速く安価に保ちつつ、より強力な id もワンクリックで届きます。
  • 長文の作業にはフロンティア枠が値します。claude-sonnet-4-6 と gpt-5.5 は、下書きや分析が重要なときにユーザーが手を伸ばす選択肢です。
  • バイリンガルなデプロイには deepseek-v4-pro や glm-5.2 を含めるべきです。NextChat には巨大な中国語話者のインストールベースがあり、それらの id はそのトラフィックにネイティブに合います。
  • 名前の変更は無料のドキュメントです。claude-sonnet-4-6=Sonnet(執筆用)のようなエントリは、技術に詳しくないユーザーにとっても、ピッカーを一目で分かるものにします。

従量課金 · 公式価格より安い

Selected models are priced below official list prices. Exact input, output, cache, and per-request prices are shown for each model.

モデル公式価格当社価格
Claude Sonnet 4.6$3.00 / $15.00 per M$2.40 / $12.00 per M
Claude Haiku 4.5 20251001$1.00 / $5.00 per M$0.80 / $4.00 per M
GPT-5.5$5.00 / $30.00 per M$4.00 / $24.00 per M
Gemini 3.5 Flash$1.50 / $9.00 per M$1.20 / $7.20 per M
GLM-5.2$1.14 / $4.00 per M$1.10 / $4.00 per M

NextChat に特有の失敗パターン。

/v1 の間違いは、ほとんどのツールとは逆方向に発生します。NextChat は自身で BASE_URL にリクエストパスを付け足すため、値には /v1 を含めません。https://api.apisrouter.com/v1 を貼り付けると、パスが二重になって 404 が発生します。LibreChat のようなツールは /v1 を含めることを期待するため、まさにそれが原因で、人々は両方向に間違った習慣を持ち込んでしまいます。 キーやヘッダーについてエラーになる Claude の id は、@OpenAI サフィックスの欠落が原因です。それがないと、NextChat はその id をネイティブの Anthropic パスにルーティングすることがあり、それはあなたのゲートウェイの BASE_URL を一切参照せず、ベンダー形式の認証を期待します。ゲートウェイのすべての id に @OpenAI を固定すれば、リクエストはすべて互換パスを通ります。 環境変数を編集しても何も変わらないのは、再デプロイの問題です。Vercel では変数はビルド時に読まれ、Docker ではコンテナを再作成する必要があります。対照的に、アプリ内の設定はすぐに適用されますが、そのデバイスだけに限られます。これが、同じ混乱のもう半分です。 CODE と OPENAI_API_KEY は、驚くほどよく取り違えられます。CODE は、ユーザーが UI に入力するアクセスパスワードであり、キーはサーバーが消費するものです。チャットが始まる前に unauthorized ページが出たと報告があれば、それは CODE の問題であり、チャットがエンドポイントに対して失敗するなら、それはキーの問題です。

ゲートウェイ経由で NextChat を使うのは誰か。

  • Vercel で個人のデプロイを運用する人で、ベンダーごとのサブスクリプションではなく、その裏に1つの計測されたキーを置きたい人。
  • NextChat のインスタンスを共有する小規模チームで、アクセス制御に CODE を使い、ゲートウェイキーを1つにすることで、利用ログがそのままコストレポートを兼ねるようにしたい人。
  • デスクトップとモバイルのクライアントユーザーで、アプリ内のエンドポイントをゲートウェイに向け、すべてのデバイスの1つのピッカーから Claude・Gemini・DeepSeek に届きたい人。
  • GLM や DeepSeek の id を Claude や GPT と1つのデプロイで混在させたいバイリンガルなユーザーで、ネイティブのプロバイダーごとのサイロではやりにくい人。
  • 特定ベンダーの請求手段にアクセスできない開発者。チャージ制でカード不要のアクセスなら、プロバイダーごとのサインアップという依存を取り除けます。

エンドポイントを検証し、最初のチャットをデバッグする。

デプロイする前にエンドポイントを証明してください。キーでモデルを一覧し、CUSTOM_MODELS に入れる予定のすべての id が、正確な綴りで現れるか確認します。id は文字列として転送されるため、/v1/models の出力が正しい綴りの拠り所です。 次にデプロイし、ピッカーの各モデルに1つメッセージを送ってください。すべてで 404 になる場合は、BASE_URL に /v1 を含めてしまった間違いです。401 はキーの問題で、間違っているか、ビルドが実際に使った環境に存在しないかのいずれかです。Claude の id だけエラーになる場合は、@OpenAI サフィックスの欠落です。追加した覚えのないモデルがピッカーに表示される場合、CUSTOM_MODELS の -all プレフィックスが失われたか、その変数がビルドに届いていません。 チャットが流れ始めたら、APIsRouter コンソールがリクエストごとのモデル、トークン数、支出を表示します。複数ユーザーのいるデプロイにとって、そのビューは、すべての NextChat 管理者がいずれ抱く疑問、どのモデルが静かに残高を食っているのか、に対して、推測ではなくデータで答えてくれます。

curl -s https://api.apisrouter.com/v1/models \
  -H "Authorization: Bearer $APISROUTER_API_KEY" | head -50

よくある質問

NextChat の BASE_URL に /v1 を含めるべきですか?

いいえ。NextChat は自身でリクエストパスを付け足すため、BASE_URL は /v1 なしで https://api.apisrouter.com のように設定します。含めると、パスが二重になって 404 が発生します。これは、base URL に /v1 を含めることを期待する LibreChat のようなツールとは逆の慣習です。

1つのエンドポイント経由で、NextChat に Claude や Gemini のモデルを追加するには?

CUSTOM_MODELS に、@OpenAI サフィックス付きで追加します。たとえば +claude-sonnet-4-6@OpenAI です。このサフィックスが、id を OpenAI 互換のリクエストパスに固定し、NextChat のネイティブな Anthropic や Google のクライアントパスではなく、あなたの BASE_URL に送られるようにします。

環境変数とアプリ内設定の違いは何ですか?

環境変数は、すべてのユーザー向けにサーバーデプロイを設定するものであり、変更には再デプロイが必要です。Settings のアプリ内カスタムエンドポイントは、値をデバイスごとにローカルに保存し、すぐに適用されます。これは、個人のデスクトップやモバイルのクライアントに向いています。

ピッカーからデフォルトの OpenAI モデルリストを外すには?

CUSTOM_MODELS を -all から始め、次に id を明示的に追加します。CUSTOM_MODELS=-all,+claude-sonnet-4-6@OpenAI,+gpt-5.5@OpenAI のようにです。これで、ユーザーには、あなたが意図的に列挙し価格を把握しているモデルだけが見えます。

CODE 変数は何をしますか?

デプロイ向けに、1つ以上のアクセスパスワードを設定します。訪問者はチャットの前にコードを入力しなければならず、これによって公開の Vercel URL が勝手にあなたのキーを消費するのを防ぎます。API キー自体とは無関係です。

環境変数を変更しても効果がなかったのはなぜですか?

NextChat は環境変数の値を、ビルド時かコンテナ起動時に読みます。Vercel では変数を編集して再デプロイし、Docker ではコンテナを再作成してください。再起動なしで適用されるのはアプリ内設定だけであり、それはデバイスごとに存在します。