AI Models
管理画面の場所: モジュールを有効にするにはSystem › Admin › License & updates(
/license)へ移動します。次にServices › AI ModelsのProviders(/ai/providers)、Models(/ai/models)、Profit(/ai/profit)、Audit(/ai/audit)を設定します。顧客はカスタマーポータルのAI › APIを使用します。
動作内容
AI Modelsは、自社パネル上のゲートウェイおよび請求レイヤーです。顧客はAPIキーを取得し、OpenAI互換またはAnthropic互換フォーマットで自社ドメイン上の1つのエンドポイントを呼び出します。提供するモデルと100万トークンあたりの料金(1 million tokens)は自由に設定可能です。NexCMPがキー、制限、ウォレットを確認し、追加済みのプロバイダーへリクエストを転送してトークン数を計測し、顧客のプリペイドウォレットから引き落とします。
モデルソースはお客様自身で用意します。 NexCMPには、プロバイダー、モデル、デフォルトアドレス、価格は一切含まれていません。モデル、APIキー、トークン、プロバイダーアカウントの提供は行いません。
モデルソースの利用規約を事前に確認してください
多くのモデルソースでは、再販や第三者へのアクセス提供を制限しています。利用および再販が許可されているソースのみを使用し、各提供元の規約および適用される法令を遵守してください。本ページの内容は法的助言を構成するものではありません。
AI ModelsはAI Chat and AI Agent(モジュールAI、AI providersを参照)とは別の機能です。これら2つのモジュールは相互に依存しません。
要件
| 項目 | 要件 |
|---|---|
| モジュール | License & updatesのModulesでAI Modelsが有効になっていること。デフォルトは無効です。 |
| プロバイダー | 再販権限を持つ1つ以上のモデルソース。それぞれOpenAI互換API (/chat/completions)、Anthropic互換API (/messages)、またはその両方を備えている必要があります。それぞれにベースURLとAPIキーが必要です。 |
| ネットワーク | パネルは各プロバイダーに公開ドメイン名のポート443経由のHTTPSで到達できる必要があります。内部ホスト、別ポート、またはプレーンHTTP上のプロバイダーは、Allowed internal hosts(設定ai_endpoint_allow)に登録されている必要があります。 |
| 顧客 | 確認済みのメールアドレスとウォレット残高を持つ顧客アカウント。 |
| ハードウェア | 不要。NexCMPはリクエストを転送するだけなので、GPUやモデルファイルは必要ありません。 |
インフラストラクチャの準備
- 使用する各モデルソースからAPIキーを取得し、そのベースURL(例:
https://api.example.com/v1)を控えておきます。 - 再販に関するモデルソースの利用規約を確認します。
- ソースがネットワーク内で稼働している場合は、そのアドレス(例:
http://10.0.0.5:8000/v1)を決定します。10.0.0.5:8000をAllowed internal hostsに登録します。
NexCMP での接続
1. モジュールを有効にする
System › Admin › License & updatesを開き、カードModuleを見つけてAI Modelsを有効にします。メニューが再読み込みされ、Services › AI Modelsが表示されます。モジュールが無効の間は、カスタマーページ、管理ページ、ゲートウェイはいずれも404 module_disabledを返し、プロバイダーへの接続は行われません。

2. プロバイダーの追加
- AI Models › Providersを開き、Add providerを選択します。
- 短いslug、name(管理者のみに表示)、type(OpenAI-compatible、Anthropic-compatible、またはBoth)、base URL、API key、およびpriority(小さい数値ほど優先的に試行)を入力します。
- 保存します。キーは暗号化されて保存され、保存後は末尾4文字のみが表示されます。キーの入力はサインインした管理者セッションからのみ可能です。
Bothは、両方のフォーマットを実際に提供するゲートウェイでのみ使用してください。NexCMPは2つのフォーマット間の変換を行いません。OpenAI互換プロバイダーが提供するモデルには/ai/v1/chat/completionsで、Anthropic互換プロバイダーが提供するモデルには/ai/v1/messagesでアクセスします。

3. 接続テスト
プロバイダーでTest connectionを選択します。NexCMPはキーを使用してGET <base URL>/modelsを読み取り、ok、または失敗の原因(auth(無効なキー)、blocked、billing、unreachable)を報告します。テストは1分間に6回までに制限されています。
4. モデルの同期
Sync modelsを選択します。NexCMPはプロバイダーのモデル一覧を読み取り、新しい各モデルをオフかつ価格未設定の状態で追加します。プロバイダーの一覧から削除されたモデルにはフラグが付けられます。モジュールがオンの間、一覧は6時間ごとに自動同期も行われます(設定ai_models_sync_hours)。
5. 価格設定とモデルの有効化
- AI Models › Modelsを開きます。
- 販売するモデルごとに、100万トークン(1 million tokens)あたりの米ドルでの販売価格を設定します: input、cached input、output。
- 任意でモデルのコストを入力できます。入力すると、Profitに日別およびモデル別のコストに対する収益が表示され、コストに最小マージン(設定
ai_min_margin_pct、デフォルトは10)を加えた額を下回る販売価格は、意図的な損失を承認しない限り拒否されます。Set price from costでは指定したマークアップが使用されます。デフォルトのマークアップはありません。 - モデルをオンにします。販売価格が設定されていないモデルはオンにできません。cached input価格を0のままにした場合は、input価格で課金されます。

6. ルートとフェイルオーバー
モデルのRoutesには、それを提供するプロバイダーが順序どおりに一覧表示されます。フォールバックとして2つ目のプロバイダーを追加し、優先順序を設定し、必要に応じてプロバイダーごとに異なるモデル名を指定できます(プロバイダーに送信される名前は公開する名前と異なっていてもかまいません)。プロバイダーがサーバーエラー、認証または請求エラー、モデル不在、またはレート制限を返した場合、NexCMPは次のルートを試行します。リクエスト送信後に読み取りがタイムアウトした場合は、二重支払いを防ぐため他のプロバイダーには送信されません。
各プロバイダーは1分あたりai_provider_rpmリクエストにペース配分されます(デフォルトは50)。プロバイダーが認証エラーや請求エラーを返し続ける場合、Telegramが設定されていれば、NexCMPはTelegram経由で管理者にアラートを送信します。
7. 販売スイッチの有効化
AI Modelsページの上部にある販売スイッチ(設定feature_ai_models)は、デフォルトでオフになっています。オフの間、お客様にはサービスがまだ開始されていない旨が表示され、公開料金表には利用不可と表示されます。少なくとも1つのモデルがオンになっており、販売価格とキー付きのルートが設定されていることを確認してから、オンに切り替えてください。
お客様が利用できる機能
カスタマーポータルの AI › API:
- Modelsには、提供モデルと価格、ベースURL、すぐに使えるサンプルコマンドが表示されます。
- API Keys:キーの作成、名前変更、ローテーション、無効化、削除が可能です。シークレットは一度だけ表示され、ハッシュのみが保存されます。キーごとの設定:許可モデル、有効期限、ソフトバジェット(警告)、ハードバジェット(
402でブロック)、1分あたりのリクエスト数、1分あたりのトークン数。 - モデル別、キー別、日別のUsage(エクスポート対応)。
- Logs: 絞り込み可能なリクエスト履歴(時刻、キー、モデル、トークン数、コスト、ステータス、レイテンシ)。プロンプトと応答は記録されません。 ログはデフォルトで90日間保持されます(
ai_log_retention_days)。 - Settings: アカウント予算と予算アラート送信用メールアドレスの設定。
- Playground: モデルとのチャット、モデル間の並行比較、対応するコードのコピー。

お客様のドメイン上のゲートウェイエンドポイント:
text
POST /ai/v1/chat/completions OpenAI-compatible
POST /ai/v1/messages Anthropic-compatible (also /ai/v1/messages/count_tokens)
GET /ai/v1/models model list
GET /ai/v1/models/pricing public price list, no key neededウォレットと請求
AIの利用料金は、他のすべてのサービスと同様に同一の前払いウォレットに請求されます。リクエストがプロバイダーへ送信される前に、NexCMPはそのリクエストで発生しうる最大コスト分の金額を確保します。残高が最低額(ai_min_balance_cents、デフォルトで20セント)を下回っているか不足している場合、リクエストは402 insufficient_balanceで拒絶され、プロバイダーは呼び出されません。利用実績はアカウントごとに集計され、毎時ウォレットの元帳エントリーに決済されます(5分ごとのスイープ処理あり)。未決済の利用分は、ゲートウェイが参照する残高からすでに差し引かれています。
リセラーは自社ドメインでAI Modelsを販売できます。リセラー独自のマージンや割引がお客様の販売価格に適用され、リセラーの卸売用ウォレットからは卸売価格が引き落とされます。デフォルトで有効になっているリセラーごとのAIスイッチにより、販売の可否を制御できます。
確認
ステップ3の後、Test connectionにokとモデル数が表示されます。
ステップ4の後、新しいモデルが無効(off)かつ価格未設定の状態で一覧表示されます。
残高のあるウォレットを持つ顧客として、キーを作成してゲートウェイを呼び出します:
bashcurl https://your-domain/ai/v1/chat/completions \ -H "Authorization: Bearer sk-ai-…" -H "Content-Type: application/json" \ -d '{"model":"model-one","messages":[{"role":"user","content":"hello"}]}'200応答にモデルの回答が含まれます。Usageにリクエストが表示され、原価を入力している場合はProfitにも表示されます。ウォレット残高がゼロの場合、同じ呼び出しは
402 insufficient_balanceを返します。
制限と注意点
- 本モジュールにはプロバイダー、モデル、価格は組み込まれておらず、プロバイダーから価格表が読み取られることもありません。
- Web検索などプロバイダー側で実行され呼び出しごとに課金されるツールは、従量測定ができないため拒否されます。リクエストパラメーターのうち転送されるのは一部の項目のみです。
- トークン使用量はプロバイダーの応答から取得されます。応答に使用量が含まれていない場合、NexCMPが見積もりを行い、レコードに見積もり済みとしてフラグを付けます。
- プロバイダーからのエラーは、顧客に届く前にサニタイズされます(名前、ホスト、アドレス、プロバイダー側のモデル名が削除されます)。顧客にどのプロバイダーがリクエストを処理したかが表示されることはありません。
- 顧客はパネルのドメイン経由でゲートウェイにアクセスするため、そのドメインのTLSが正常に動作している必要があります。
- NexCMPは本モジュールに関するSLA(サービス水準合意)、ファインチューニング、GPUホスティングを提供しません。
トラブルシューティング
| 症状 | 原因と対処法 |
|---|---|
すべてのAI Modelsページおよびゲートウェイが404 module_disabledを返す | モジュールが無効になっています。License & updatesのModulesでAI Modelsを有効にしてください。 |
プロバイダーの追加がendpoint_host_not_allowed、endpoint_must_be_https、またはinvalid_endpoint_portで失敗する | ベースURLはパブリックドメイン名、ポート443のHTTPSである必要があります。内部ホスト、別のポート、またはプレーンHTTPの場合は、host:portをAllowed internal hostsに追加してください。 |
blocked_endpoint | アドレスがIPアドレスであるか、名前がプライベートアドレスに解決されています。意図した設定である場合は、Allowed internal hostsに登録してください。 |
Test connectionにauthと表示される | キーが正しくないか、アクセス権がありません。キーを再入力してください。 |
モデルを有効化できない(no_price) | 先に販売価格を設定してください。 |
顧客側で503 ai_unavailableが発生する | 販売スイッチが無効になっているか、リセラーのAIスイッチが無効になっています。 |
顧客側で503 upstream_unavailableが発生する | 要求された形式でそのモデルを提供する、キー付きの有効なルートがありません。モデルのルートとプロバイダータイプを確認してください。 |
顧客側で402 insufficient_balanceが発生する | ウォレットの残高が最小額を下回っているか、リクエストに対して不足しています。お客様にチャージを依頼してください。 |