1
0
Files
nex/openspec/changes/unified-model-id/proposal.md

42 lines
3.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## Why
当前网关直接透传上游供应商的原始模型名称(如 `gpt-4``claude-3-opus`),无法在多供应商场景下唯一标识一个模型。不同供应商可能存在同名模型,客户端无法区分应路由到哪个供应商。网关作为屏蔽供应商差异的统一入口,需要定义自有的模型标识体系,让客户端通过统一的 model ID 访问任意供应商的模型,同时拦截 `/v1/models` 等模型查询接口,聚合所有供应商的模型信息返回。
## What Changes
- **BREAKING**: 引入统一模型 ID 格式 `provider_id/model_name`(如 `openai/gpt-4`所有代理接口Chat、Embeddings、Rerank`model` 字段必须使用此格式
- **BREAKING**: `models` 表主键 `id` 改为 UUID 自动生成(不再由用户提供),`model_name` 字段语义保持不变(存储上游供应商模型名称),新增 `UNIQUE(provider_id, model_name)` 联合唯一约束
- **BREAKING**: `provider_id` 限制为 `[a-zA-Z0-9_]+` 字符集,禁止特殊字符
- `GET /v1/models` 改为从数据库聚合返回所有已启用模型,不再透传到上游供应商
- `GET /v1/models/{unified_id}` 改为从数据库查询返回模型详情,不再透传到上游供应商
- 同协议透传改为 Smart Passthrough通过 `json.RawMessage` 最小化改写 model 字段,保持其余参数完全保真
- 跨协议转换路径:通过 canonical 层面 modelOverride 参数覆写响应 model 字段
- 管理 API (`/api/models`) 请求体字段适配,响应中新增 `unified_id` 字段
- 新增 `pkg/modelid` 工具包,提供统一模型 ID 的解析、格式化、校验
- ProtocolAdapter 接口新增 `ExtractUnifiedModelID``ExtractModelName``RewriteRequestModelName``RewriteResponseModelName` 方法,协议无关地处理 model 字段
## Capabilities
### New Capabilities
- `unified-model-id`: 统一模型 ID 的解析、格式化、校验工具包,以及 `provider_id` 字符集约束
### Modified Capabilities
- `model-management`: 模型表结构调整id 改 UUID 自动生成、新增联合唯一约束CRUD 接口字段变更(创建不再提供 id
- `provider-management`: provider_id 创建时增加字符集校验(`[a-zA-Z0-9_]+`
- `unified-proxy-handler`: 统一模型 ID 解析路由、Models/ModelInfo 接口改为本地聚合、同协议 Smart Passthrough、跨协议 modelOverride 覆写
- `conversion-engine`: 跨协议场景下 ConvertHttpResponse 支持 model 覆写参数
- `protocol-adapter-openai`: isModelInfoPath 适配含 `/` 路径、新增 ExtractUnifiedModelID、ExtractModelName、RewriteRequestModelName、RewriteResponseModelName
- `protocol-adapter-anthropic`: isModelInfoPath 适配含 `/` 路径、新增 ExtractUnifiedModelID、ExtractModelName、RewriteRequestModelName、RewriteResponseModelName
- `request-validation`: provider_id 字符集校验规则、模型创建校验适配
- `database-migration`: models 表 schema 变更迁移DROP + CREATE 重建)
- `usage-statistics`: 明确统计记录使用 providerID + modelName 的上游模型名
## Impact
- **数据库**: models 表 schema 变更DROP + CREATE 重建)
- **API 兼容性**: 代理接口 model 字段格式为 BREAKING CHANGE需客户端适配
- **管理 API**: `/api/models` 请求体变更(创建不再提供 id自动生成 UUID响应新增 unified_id 字段
- **代码模块**: domain、repository、service、handler、conversion、adapter 层均有改动
- **测试**: routing service、proxy handler、adapter、model handler 需要新增/更新测试
- **前端**: 本次变更不涉及前端适配,前端后续统一适配