AI 模型管理
自 v5.2.0 起新增此模块。通过 app.aiModel 访问,提供云开发环境下 AI 模型分组的配置、查询、更新与删除能力,支持接入 OpenAI 兼容网关(如 DeepSeek、混元、Moonshot 等)。
AiModelService 围绕 AI 模型分组(AIModelGroup) 进行管理,每个分组包含:
GroupName:分组名,自定义分组不允许以cloudbase为前缀BaseUrl:模型服务地址(需为 OpenAI 兼容网关)Models:分组下的模型列表(数组,更新时为全量替换)Secret:访问模型服务的密钥,支持SecretId / SecretKey或ApiKeyStatus:分组状态,1开启 /2关闭Type:分组类型,builtin(云开发内置)/custom(用户自定义)
初始化
import CloudBase from '@cloudbase/manager-node'
const app = CloudBase.init({
secretId: 'Your SecretId',
secretKey: 'Your SecretKey',
envId: 'Your envId'
})
const aiModel = app.aiModel
createAIModel
1. 接口描述
接口功能:创建一个自定义 AI 模型配置分组。
接口声明:app.aiModel.createAIModel(options): Promise<CreateAIModelResp>
groupName 不 允许以 cloudbase 为前缀,该前缀为系统保留。
云端会对 baseUrl + secret 做联通性校验,请确保填写真实可达的模型服务地址与有效密钥。
2. 输入参数
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
| groupName | 是 | String | 分组名,不允许以 cloudbase 为前缀 |
| baseUrl | 否 | String | 模型服务地址(OpenAI 兼容网关),示例 https://api.deepseek.com/v1 |
| models | 否 | AIModel[] | 模型列表,见下方 AIModel 字段说明 |
| remark | 否 | String | 分组备注 |
| status | 否 | 1 | 2 | 模型状态,1 开启,2 关闭 |
| secret | 否 | AIModelSecret | 模型密钥,见下方 AIModelSecret 字段说明 |
| envId | 否 | String | 环境 ID,不传则使用当前环境 ID |
AIModel
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
| Model | 否 | String | 模型名,示例 deepseek-chat |
| EnableMCP | 否 | Boolean | 是否开启 MCP,默认 false |
| Tags | 否 | String[] | 标签 |
AIModelSecret
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
| SecretSource | 否 | String | 密钥来源,固定 custom |
| SecretId | 否 | String | 密钥 ID,与 SecretKey 配对使用 |
| SecretKey | 否 | String | 密钥 Key,与 SecretId 配对使用 |
| ApiKey | 否 | String | API Key,与 SecretId/SecretKey 二选一 |
3. 返回结果
| 字段 | 类型 | 说明 |
|---|---|---|
| Count | Number | 创建数量 |
| RequestId | String | 请求唯一标识 |
4. 示例代码
const res = await app.aiModel.createAIModel({
groupName: 'custom-deepseek',
baseUrl: 'https://api.deepseek.com/v1',
models: [
{ Model: 'deepseek-chat', EnableMCP: false }
],
remark: 'DeepSeek 自定义分组',
status: 1,
secret: {
SecretSource: 'custom',
ApiKey: 'sk-xxxxxxxxxxxxxxxx'
}
})
console.log(res.Count, res.RequestId)
updateAIModel
1. 接口描述
接口功能:更新已有的 AI 模型配置分组。
接口声明:app.aiModel.updateAIModel(options): Promise<UpdateAIModelResp>
models 字段采用全量替换语义,如需保留原有模型,请在更新时将其一并传入。
2. 输入参数
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
| groupName | 是 | String | 待更新的分组名 |
| baseUrl | 否 | String | 模型服务地址 |
| models | 否 | AIModel[] | 模型列表,全量替换 |
| remark | 否 | String | 备注 |
| status | 否 | 1 | 2 | 模 型状态,1 开启,2 关闭 |
| secret | 否 | AIModelSecret | 模型密钥 |
| envId | 否 | String | 环境 ID,不传则使用当前环境 ID |
AIModel/AIModelSecret字段定义同createAIModel。
3. 返回结果
| 字段 | 类型 | 说明 |
|---|---|---|
| Count | Number | 更新数量 |
| RequestId | String | 请求唯一标识 |
4. 示例代码
const res = await app.aiModel.updateAIModel({
groupName: 'custom-deepseek',
models: [
{ Model: 'deepseek-chat', EnableMCP: true },
{ Model: 'deepseek-reasoner', EnableMCP: true }
],
status: 1
})
console.log(res.Count)
deleteAIModel
1. 接口描述
接口功能:批量删除 AI 模型配置分组。
接口声明:app.aiModel.deleteAIModel(options): Promise<DeleteAIModelResp>
2. 输入参数
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
| groupNames | 是 | String[] | 分组名列表,至少 1 项,元素非空字符串 |
| envId | 否 | String | 环境 ID,不传则使用当前环境 ID |
3. 返回结果
| 字段 | 类型 | 说明 |
|---|---|---|
| Count | Number | 成功删除数量 |
| RequestId | String | 请求唯一标识 |
4. 示例代码
const res = await app.aiModel.deleteAIModel({
groupNames: ['custom-deepseek', 'custom-hunyuan']
})
console.log(res.Count)
describeAIModels
1. 接口描述
接口功能:查询当前环境下已配置的 AI 模型分组列表(含内置分组与自定义分组)。
接口声明:app.aiModel.describeAIModels(options?): Promise<DescribeAIModelsResp>
2. 输入参数
| 字段 | 必 填 | 类型 | 说明 |
|---|---|---|---|
| envId | 否 | String | 环境 ID,不传则使用当前环境 ID |
3. 返回结果
| 字段 | 类型 | 说明 |
|---|---|---|
| AIModels | AIModelGroup[] | null | 模型分组列表,可能为 null |
| RequestId | String | 请求唯一标识 |
AIModelGroup
| 字段 | 类型 | 说明 |
|---|---|---|
| GroupName | String | 分组名,如 hunyuan-exp / deepseek / cloudbase / custom-xxx |
| Models | AIModel[] | null | 模型列表 |
| Type | 'builtin' | 'custom' | 分组类型 |
| OriginType | 'builtin' | 'custom' | 原始分组类型 |
| Remark | String | 备注 |
| BaseUrl | String | 模型地址 |
| Status | 1 | 2 | 模型状态,1 开启 / 2 关闭 |
| Secret | AIModelSecret | null | 模型密钥(敏感字段,返回可能脱敏或为 null) |
| CreateTime | String | 创建时间,ISO8601 格式 |
| UpdateTime | String | 更新时间,ISO8601 格式 |
4. 示例代码
const res = await app.aiModel.describeAIModels()
for (const group of res.AIModels || []) {
console.log(group.GroupName, group.Type, group.Status, group.Models?.length)
}
describeManagedAIModelList
1. 接口描述
接口功能:查询云开发平台支持的托管类型 AI 模型列表(即由云开发平台统一计费、无需用户自备密钥的模型)。
接口声明:app.aiModel.describeManagedAIModelList(options?): Promise<DescribeManagedAIModelListResp>
2. 输入参数
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
| envId | 否 | String | 环境 ID,不传则使用当前环境 ID |
3. 返回结果
| 字段 | 类型 | 说明 |
|---|---|---|
| ManagedAIModelList | ManagedAIModelGroup[] | null | 托管模型分组列表 |
| RequestId | String | 请求唯一标识 |
ManagedAIModelGroup
| 字段 | 类型 | 说明 |
|---|---|---|
| GroupName | String | 分组名,示例 cloudbase |
| Models | ManagedAIModel[] | null | 模型列表 |
| Remark | String | 备注 |
ManagedAIModel
| 字段 | 类型 | 说明 |
|---|---|---|
| Model | String | 模型名,示例 hy3 |
| EnableMCP | Boolean | 是否开启 MCP |
| ModelSpec | ManagedAIModelSpec | 模型规格(上下文长度、Token 限制) |
| ModelChargingInfo | ManagedAIModelChargingInfo[] | 计费信息(按段计费 / 固定计费) |
ManagedAIModelSpec
| 字段 | 类型 | 说明 |
|---|---|---|
| MaxInputToken | String | 最大输入 Token,示例 192k |
| MaxOutputToken | String | 最大输出 Token,示例 32k |
| ContextLength | String | 上下文长度,示例 128k |
ManagedAIModelChargingInfo
| 字段 | 类型 | 说明 |
|---|---|---|
| Type | 'Uniform' | 'Tiered' | 计费类型:固定计费 / 分段计费 |
| Name | String | 分段名称,示例 0-16k |
| InputPrice | String | 输入 Token 价格 |
| OutputPrice | String | 输出 Token 价格 |
| CachePrice | String | 命中缓存价格 |
| InputOutputUnit | String | 计费单位,示例 千tokens |
4. 示例代码
const res = await app.aiModel.describeManagedAIModelList()
for (const group of res.ManagedAIModelList || []) {
console.log(group.GroupName, group.Remark)
for (const model of group.Models || []) {
console.log(' -', model.Model, model.ModelSpec?.ContextLength)
}
}