1
0
Files
nex/openspec/specs/model-management/spec.md
lanyuanxiaoyao 915b004924 feat: 初始化 AI Gateway 项目
实现支持 OpenAI 和 Anthropic 双协议的统一大模型 API 网关 MVP 版本,包含:
- OpenAI 和 Anthropic 协议代理
- 供应商和模型管理
- 用量统计
- 前端配置界面
2026-04-15 16:53:28 +08:00

5.5 KiB
Raw Blame History

模型管理

Purpose

TBD - 提供模型配置的管理功能,模型关联到供应商

Requirements

Requirement: 创建模型配置

网关 SHALL 允许为供应商创建新的模型配置。

Scenario: 使用有效数据创建模型

  • WHEN/api/models 发送 POST 请求携带有效的模型数据id, provider_id, model_name
  • THEN 网关 SHALL 在数据库中创建新的模型记录
  • THEN 网关 SHALL 返回创建的模型,状态码为 201
  • THEN 模型 SHALL 默认启用

Scenario: 使用不存在的供应商创建模型

  • WHEN/api/models 发送 POST 请求,携带不存在的 provider_id
  • THEN 网关 SHALL 返回错误,状态码为 400 (Bad Request)
  • THEN 错误 SHALL 指示供应商不存在

Scenario: 使用重复 ID 创建模型

  • WHEN/api/models 发送 POST 请求,携带已存在的 ID
  • THEN 网关 SHALL 返回错误,状态码为 409 (Conflict)

Scenario: 创建模型时缺少必需字段

  • WHEN/api/models 发送 POST 请求缺少必需字段id, provider_id 或 model_name
  • THEN 网关 SHALL 返回错误,状态码为 400 (Bad Request)
  • THEN 错误 SHALL 指示缺少哪些字段

Requirement: 列出所有模型

网关 SHALL 允许获取所有模型配置。

Scenario: 成功列出模型

  • WHEN/api/models 发送 GET 请求
  • THEN 网关 SHALL 返回所有模型的列表
  • THEN 每个模型 SHALL 包含 id, provider_id, model_name, enabled, created_at

Scenario: 列出模型时为空

  • WHEN/api/models 发送 GET 请求,且不存在模型
  • THEN 网关 SHALL 返回空列表

Requirement: 按供应商列出模型

网关 SHALL 允许获取特定供应商的模型。

Scenario: 列出存在供应商的模型

  • WHEN/api/models?provider_id=<provider_id> 发送 GET 请求
  • THEN 网关 SHALL 返回指定供应商的模型列表

Scenario: 列出不存在供应商的模型

  • WHEN/api/models?provider_id=<non_existent_id> 发送 GET 请求
  • THEN 网关 SHALL 返回空列表

Requirement: 获取特定模型

网关 SHALL 允许通过 ID 获取特定模型。

Scenario: 获取存在的模型

  • WHEN/api/models/:id 发送 GET 请求,携带有效的模型 ID
  • THEN 网关 SHALL 返回模型详情

Scenario: 获取不存在的模型

  • WHEN/api/models/:id 发送 GET 请求,携带不存在的 ID
  • THEN 网关 SHALL 返回错误,状态码为 404 (Not Found)

Requirement: 更新模型配置

网关 SHALL 允许更新现有模型配置。

Scenario: 使用有效数据更新模型

  • WHEN/api/models/:id 发送 PUT 请求,携带有效的模型数据
  • THEN 网关 SHALL 更新数据库中的模型记录
  • THEN 网关 SHALL 返回更新后的模型

Scenario: 更新不存在的模型

  • WHEN/api/models/:id 发送 PUT 请求,携带不存在的 ID
  • THEN 网关 SHALL 返回错误,状态码为 404 (Not Found)

Scenario: 更新模型供应商

  • WHEN/api/models/:id 发送 PUT 请求,携带新的 provider_id
  • THEN 网关 SHALL 验证新供应商是否存在
  • THEN 网关 SHALL 更新模型的供应商关联

Scenario: 部分更新

  • WHEN/api/models/:id 发送 PUT 请求,仅包含部分字段
  • THEN 网关 SHALL 仅更新提供的字段
  • THEN 网关 SHALL 保留未更改的字段

Requirement: 删除模型配置

网关 SHALL 允许删除模型配置。

Scenario: 删除存在的模型

  • WHEN/api/models/:id 发送 DELETE 请求,携带有效的模型 ID
  • THEN 网关 SHALL 删除模型记录
  • THEN 网关 SHALL 返回状态码 204 (No Content)

Scenario: 删除不存在的模型

  • WHEN/api/models/:id 发送 DELETE 请求,携带不存在的 ID
  • THEN 网关 SHALL 返回错误,状态码为 404 (Not Found)

Requirement: 启用和禁用模型

网关 SHALL 支持启用和禁用模型。

Scenario: 禁用模型

  • WHEN 模型的 enabled 字段设置为 false
  • THEN 网关 SHALL 不向该模型路由请求
  • THEN 模型 SHALL 保留在数据库中

Scenario: 启用模型

  • WHEN 已禁用模型的 enabled 字段设置为 true
  • THEN 网关 SHALL 恢复向该模型路由请求

Requirement: 验证模型配置

网关 SHALL 验证模型配置数据。

Scenario: 验证供应商存在

  • WHEN 创建或更新模型时携带 provider_id
  • THEN 网关 SHALL 验证供应商存在于数据库中

Scenario: 验证必需字段

  • WHEN 创建或更新模型
  • THEN 网关 SHALL 验证 id, provider_id 和 model_name 存在且非空

Requirement: 支持透明的模型名称

网关 SHALL 使用模型名称透明传输,不做转换。

Scenario: 模型名称保留

  • WHEN 模型配置了 model_name
  • THEN 网关 SHALL 在路由请求时使用该确切名称
  • THEN 网关 SHALL 不修改或转换模型名称

Scenario: 不同供应商的同名模型

  • WHEN 多个供应商拥有相同 model_name 的模型
  • THEN 每个模型 SHALL 通过其唯一 ID 和 provider_id 区分
  • THEN 网关 SHALL 基于模型名称和供应商关联的组合进行路由

Requirement: 随供应商级联删除

网关 SHALL 在删除关联供应商时删除模型。

Scenario: 供应商删除级联到模型

  • WHEN 供应商被删除
  • THEN 该供应商关联的所有模型 SHALL 自动删除