---
title: AI Models
description: 通过您自己的网关销售AI模型访问权限：添加兼容OpenAI或Anthropic的提供商、同步模型、设定价格，让客户使用自己的密钥和钱包调用单一端点。
url: https://nexcmp.com/zh-cn/docs/infrastructure/ai-models/
applies_to: NexCMP 1.6.1
updated: 2026-11-02
---

# AI Models {#ai-models}

> **管理后台位置：**System › Admin › License & updates（`/license`）以启用该模块。然后前往Services › AI Models：Providers（`/ai/providers`）、Models（`/ai/models`）、Profit（`/ai/profit`）与Audit（`/ai/audit`）。客户在客户门户中使用AI › API。

## 功能说明 {#what-it-does}

AI Models是您自身面板上的网关与计费层。您的客户获取API密钥后，即可按照OpenAI兼容或Anthropic兼容格式调用**您域名下的1个端点**。您可以选择提供哪些模型以及每100万 tokens 的费用。NexCMP会检查密钥、配额限制与钱包余额，将请求转发至您添加的提供商，计量token用量并从客户的预付费钱包中扣费。

**模型来源需由您自行提供。**NexCMP本身不附带任何提供商、模型、默认地址或价格，也不提供模型、API密钥、Token或提供商账户。

::: warning 请先检查来源条款
许多模型来源限制转售或向第三方转交访问权限。请仅使用您获得授权使用和转售的来源，并遵守其条款及适用于您的法律法规。本页面不构成法律建议。
:::

AI Models是与**AI Chat and AI Agent**（**AI**模块，参见[AI providers](https://nexcmp.com/zh-cn/docs/ai/ai-providers/)）相互独立的产品。这两个模块互不依赖。

## 前提条件 {#requirements}

| 项目 | 要求 |
|---|---|
| 模块 | 在License & updates、Modules下启用**AI Models**。默认处于关闭状态。 |
| 提供商 | 一个或多个您有权转售的模型源，每个模型源均具备兼容OpenAI的API（`/chat/completions`）、兼容Anthropic的API（`/messages`）或两者兼备。每个模型源都需要base URL和API密钥。 |
| 网络 | 控制面板必须能够通过公网域名经由**443端口上的HTTPS**访问各提供商。位于内网主机、其他端口或使用明文HTTP的提供商必须列在**Allowed internal hosts**（设置项`ai_endpoint_allow`）中。 |
| 客户 | 拥有已验证邮箱地址且钱包有余额的客户账户。 |
| 硬件 | 无。NexCMP仅转发请求：无需GPU，也无需模型文件。 |

## 准备基础设施 {#prepare-the-infrastructure}

1. 从您将使用的各个模型来源获取API密钥，并记下其基础URL（例如`https://api.example.com/v1`）。
2. 检查来源关于转售的相关条款。
3. 如果某个来源运行在您的内部网络中，请确定其地址，例如`http://10.0.0.5:8000/v1`。您需要将`10.0.0.5:8000`列入**Allowed internal hosts**中。

## 在NexCMP中连接 {#connect-in-nexcmp}

### 1. 开启模块 {#_1-turn-the-module-on}

打开**System › Admin › License & updates**，找到**Module**卡片，并开启**AI Models**。菜单重新加载后将显示**Services › AI Models**。在此模块关闭期间，客户页面、管理页面和网关均返回`404 module_disabled`，且不会连接任何提供商。

![开启了AI Models开关的Module卡片](https://nexcmp.com/zh-cn/docs/images/infrastructure/ai-models-01-modules.webp)

### 2. 添加提供商 {#_2-add-a-provider}

1. 打开**AI Models › Providers**并选择**Add provider**。
2. 输入简短的**slug**、**name**（仅您可见）、**type**（OpenAI-compatible、Anthropic-compatible或Both）、**base URL**和**API key**，以及**priority**（数值越小越优先尝试）。
3. 保存。密钥以加密方式存储，后续仅显示其最后4个字符。仅可在已登录的管理员会话中输入密钥。

仅当网关确实同时支持这两种格式时才使用**Both**。NexCMP**不会**在两种格式之间进行转换：由兼容OpenAI的提供商所提供的模型通过`/ai/v1/chat/completions`访问，而由兼容Anthropic的提供商所提供的模型则通过`/ai/v1/messages`访问。

![显示三个示例提供商及其类型、优先级和状态的Providers页面](https://nexcmp.com/zh-cn/docs/images/infrastructure/ai-models-02-providers.webp)

### 3. 测试连接 {#_3-test-the-connection}

在提供商上选择**Test connection**。NexCMP会使用该密钥读取`GET <base URL>/models`并报告**ok**，或说明失败原因：**auth**（密钥错误）、**blocked**、**billing**或**unreachable**。测试频率限制为每分钟6次。

### 4. 同步模型 {#_4-sync-the-models}

选择**Sync models**。NexCMP会读取提供商的模型列表，添加每个新模型并**默认关闭且未定价**。提供商不再列出的模型会被标记。在该模块开启期间，系统还会每6小时自动同步一次列表（设置项`ai_models_sync_hours`）。

### 5. 设置价格并启用模型 {#_5-set-prices-and-switch-models-on}

1. 打开**AI Models › Models**。
2. 针对您要销售的每个模型，按每1 million tokens设置美元**售价**：**input**、**cached input**与**output**。
3. 可选输入该模型的**成本**。随后**Profit**将按天和按模型显示收入与成本的对比；若售价低于成本与最低利润率之和（设置项`ai_min_margin_pct`，默认为10），系统将拒绝设置，除非您确认自愿亏本。**Set price from cost**使用您自选的加价率；不存在默认加价率。
4. 开启该模型。未设置售价的模型无法开启。若缓存输入价格保留为零，则按输入价格计费。

![包含输入、缓存输入和输出售价以及启闭开关的Models页面](https://nexcmp.com/zh-cn/docs/images/infrastructure/ai-models-03-models.webp)

### 6. 路由与故障转移 {#_6-routes-and-failover}

在模型中，**Routes**按顺序列出了为其提供服务的提供商。添加备用提供商作为后备，设置优先级顺序，并可选择为每个提供商指定不同的模型名称（发送给提供商的名称可以与您公开展示的名称不同）。当某个提供商返回服务器错误、鉴权或计费错误、模型不存在或触发速率限制时，NexCMP会尝试下一条路由。如果在请求发送后发生读取超时，该请求**不会**被发送到其他提供商，以免产生二次扣费。

每个提供商的速率限制为每分钟`ai_provider_rpm`次请求（默认为50）。若某个提供商持续返回鉴权或计费错误，在配置了Telegram的情况下，NexCMP会通过Telegram向管理员发送告警。

### 7. 开启销售开关 {#_7-open-the-sale-switch}

在AI Models页面顶部，**销售开关**（设置项`feature_ai_models`）默认处于关闭状态。关闭期间，客户会看到服务尚未开放，公开价格表也会显示其不可用。请确认至少有一个模型已开启、已设置售价并配置了包含密钥的路由，然后将其开启。

### 客户可用功能 {#what-customers-can-do}

在客户门户中，**AI › API**：

- **Models**显示您的模型与价格、base URL以及现成的示例命令。
- **API Keys**：创建、重命名、轮换、禁用和删除密钥。Secret仅显示一次，系统仅存储其哈希值。单个密钥可配置：允许的模型、到期时间、软预算（告警）与硬预算（通过`402`拦截）、每分钟请求数及每分钟tokens数。
- 按模型、密钥和日期查看**Usage**，支持导出。
- **Logs**：支持筛选的请求记录（时间、密钥、模型、tokens、成本、状态、延迟）。**不记录提示词与响应内容。**日志默认保留90天（`ai_log_retention_days`）。
- **Settings**：账户预算以及接收预算告警的邮箱地址。
- **Playground**：与模型对话、并排对比不同模型，并复制对应的代码。

![包含两种API格式base URL的客户API Keys页面](https://nexcmp.com/zh-cn/docs/images/infrastructure/ai-models-04-keys.webp)

位于您域名下的网关端点：

```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
```

### 钱包与计费 {#wallet-and-billing}

AI用量与所有其他服务一样从同一个预付费钱包中扣除。在请求发送给提供商之前，NexCMP会预冻结该请求可能产生的最高费用；如果余额低于最低限额（`ai_min_balance_cents`，默认为20美分）或余额不足，请求将被拒绝并返回`402 insufficient_balance`，且**不会调用任何提供商**。用量按账户汇总并在每小时后结算为钱包账本明细，每5分钟进行一次汇总扫描；尚未结算的用量已在网关可见的余额中预先扣除。

分销商可以在自己的独立域名上销售AI Models：其加价或折扣基于您的销售价格生效，且系统将从其批发钱包中扣除批发价。每个分销商独立的AI开关（默认开启）可控制谁有权销售。

## 验证 {#verify}

1. 完成第3步后，**Test connection**将显示**ok**及模型数量。
2. 完成第4步后，新模型将列出，处于关闭状态且未定价。
3. 以钱包有余额的客户身份创建一个密钥并调用网关：

   ```bash
   curl 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**也会显示。
4. 当钱包余额为零时，相同的调用会返回`402 insufficient_balance`。

## 限制与注意事项 {#limits-and-notes}

- 该模块未内置任何提供商、模型或价格，也不会从提供商处读取任何价格表。
- 在提供商端运行且按次计费的工具（如网络搜索）会被拒绝，因为它们无法计量。仅会传递一小部分请求参数。
- Token用量取自提供商的回复；如果回复中没有，NexCMP会进行估算并将该记录标记为估算值。
- 来自提供商的错误在到达客户之前会被清理（移除名称、主机、地址以及提供商的模型名称）。客户绝不会看到是哪个提供商处理了请求。
- 客户通过管理面板的域名访问网关，因此该域名的TLS必须正常工作。
- NexCMP不为此模块提供服务等级协议、微调或GPU托管服务。

## 故障排查 {#troubleshooting}

| 症状 | 原因与解决方法 |
|---|---|
| 所有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` | 钱包余额低于最低限额或不足以支付请求。请要求客户充值。 |
