356 lines
18 KiB
Markdown
356 lines
18 KiB
Markdown
# 渠道、模型与调度后台页面草图
|
|
|
|
这份文档是目标页面规格,不代表页面已经实现。当前只用于确认信息架构和控件职责,画布代码不在范围内。
|
|
|
|
## 页面总数
|
|
|
|
最终建议 8 个后台页面。模型发现不是独立页面,而是渠道管理页面中的主动操作。
|
|
|
|
```text
|
|
后台
|
|
|
|
|
|-- 01 渠道管理 连接、凭证、主动发现、供应商模型映射
|
|
|-- 02 模型管理 公开模型目录、分辨率、能力、上架状态
|
|
|-- 03 分组管理 模型与渠道绑定、渠道优先级、路由策略
|
|
|-- 04 渠道健康 探活、成功率、延迟、容量、熔断
|
|
|-- 05 任务中心 任务状态、每次尝试、取消、重试、结果
|
|
|-- 06 人工对账 处理供应商结果未知的任务
|
|
|-- 07 价格与套餐 价格规则、金币套餐、数量和并发权益
|
|
`-- 08 审计日志 配置变更、调度决策、任务和结算记录
|
|
```
|
|
|
|
其中 01-06、08 是运行闭环;07 是计费闭环。价格、数量上限、并发上限不再放在“新增模型产品”里。
|
|
|
|
## 总体关系
|
|
|
|
```text
|
|
渠道管理
|
|
| 点击“拉取模型”
|
|
v
|
|
模型发现候选 --勾选并加入--> 模型管理
|
|
|
|
|
| 管理公开参数并主动上架
|
|
v
|
|
分组管理
|
|
|
|
|
| 选择渠道并排序
|
|
v
|
|
路由策略
|
|
|
|
|
用户选择公开模型 ------------+
|
|
v
|
|
智能调度
|
|
|
|
|
过滤 -> 排序 -> 选路
|
|
|
|
|
任务队列 -> 任务执行
|
|
| |
|
|
可确认失败 结果未知
|
|
| |
|
|
故障切换 人工对账
|
|
```
|
|
|
|
核心数据边界:
|
|
|
|
- 公开模型 ID 是平台对用户展示和匹配的 ID。
|
|
- 供应商请求模型 ID 只在渠道请求时使用,不能和公开模型 ID 合并。
|
|
- 分组 ID 由系统生成,管理员不手填“渠道组 ID”。
|
|
- 模型发现只产生候选,不自动建模型、不自动上架、不自动进分组。
|
|
|
|
## 01 渠道管理
|
|
|
|
职责保持现有页面范围不变:管理连接、凭证、渠道内模型和供应商请求映射。
|
|
|
|
### 列表
|
|
|
|
```text
|
|
+--------------------------------------------------------------------------------+
|
|
| 渠道管理 [搜索渠道] [状态 v] [+ 新增渠道] |
|
|
+--------------------------------------------------------------------------------+
|
|
| 渠道名称 | 类型 | 地址 | 启用 | 模型数 | 健康 | 最近拉取 | 操作 |
|
|
|----------|------|------|------|--------|------|----------|-------------------|
|
|
| 渠道 A | 兼容 | ... | 开 | 12 | 正常 | 10:20 | [详情] [探活] [...] |
|
|
+--------------------------------------------------------------------------------+
|
|
| 说明:模型发现必须由管理员点击“拉取模型”,保存渠道时不得隐式请求上游。 |
|
|
+--------------------------------------------------------------------------------+
|
|
```
|
|
|
|
### 新增/编辑渠道抽屉
|
|
|
|
```text
|
|
+----------------------------------+
|
|
| 新增渠道 X |
|
|
+----------------------------------+
|
|
| 渠道名称 [________________] | 输入框,管理员自定义名称
|
|
| 接口类型 [OpenAI 兼容 v] | 下拉框
|
|
| 请求地址 [https://... ] | 完整 URL,例如 https://example.com/v1
|
|
| API Key [****************] | 密码框;编辑留空表示沿用原凭证
|
|
| 启用状态 [开关 ] | 是否允许调度使用
|
|
| 请求超时 [______] 秒 | 数字框,正整数
|
|
| |
|
|
| [保存] [取消] |
|
|
+----------------------------------+
|
|
```
|
|
|
|
### 渠道详情中的模型发现
|
|
|
|
```text
|
|
+--------------------------------------------------------------------------------+
|
|
| 渠道 A / 模型 [拉取模型列表] |
|
|
+--------------------------------------------------------------------------------+
|
|
| 上次请求:10:20 请求路径:/v1/models 状态:已发起 / 成功 |
|
|
| |
|
|
| [ ] 供应商模型 ID 状态 已加入渠道模型数 操作 |
|
|
| [ ] vendor-model-a 新候选 - [加入渠道] |
|
|
| [x] vendor-model-b 已加入 1 [查看映射] |
|
|
+--------------------------------------------------------------------------------+
|
|
| 只有点击“拉取模型列表”才请求上游。勾选结果只加入该渠道,不自动创建公开模型。 |
|
|
+--------------------------------------------------------------------------------+
|
|
```
|
|
|
|
### 渠道模型映射
|
|
|
|
```text
|
|
+----------------------------------------------------------------+
|
|
| 渠道内模型 / 请求映射 |
|
|
+----------------------------------------------------------------+
|
|
| 平台公开模型 ID [选择公开模型 v] |
|
|
| 供应商请求模型 ID [________________] |
|
|
| 说明:公开 ID 与请求 ID 相同也要明确保存;不同则只转换请求值。 |
|
|
| [保存] [取消] |
|
|
+----------------------------------------------------------------+
|
|
```
|
|
|
|
控件规则:地址和 API Key 是输入框;类型和状态是下拉/开关;模型发现是独立按钮;候选模型是复选框;映射中的公开模型使用下拉框,供应商请求 ID 使用输入框。
|
|
|
|
## 02 模型管理
|
|
|
|
模型页面不再叫“新增模型产品”。它管理平台公开模型目录,不管理渠道连接、不管理价格套餐、不管理渠道组。
|
|
|
|
### 列表
|
|
|
|
```text
|
|
+--------------------------------------------------------------------------------+
|
|
| 模型管理 [搜索公开 ID/名称] [状态 v] [能力 v] [从候选导入] |
|
|
+--------------------------------------------------------------------------------+
|
|
| 公开模型 ID | 展示名称 | 能力 | 分辨率 | 支持渠道 | 状态 | 最近发现 | 操作 |
|
|
|-------------|----------|------|--------|----------|------|----------|-----------|
|
|
| image-pro | 图像专业 | 图像 | 1K/2K | 3 | 上架 | 10:20 | [编辑] [...]|
|
|
+--------------------------------------------------------------------------------+
|
|
| 注意:列表展示“支持渠道数”,不在此处填写渠道组 ID、基础价格或并发上限。 |
|
|
+--------------------------------------------------------------------------------+
|
|
```
|
|
|
|
### 导入候选
|
|
|
|
```text
|
|
+----------------------------------------------------------------+
|
|
| 从发现候选导入 X |
|
|
+----------------------------------------------------------------+
|
|
| 来源渠道 [全部渠道 v] |
|
|
| [ ] vendor-model-a 供应商 A 最近发现:今天 10:20 |
|
|
| [ ] vendor-model-b 供应商 B 最近发现:今天 10:18 |
|
|
| |
|
|
| [导入为草稿] [取消] |
|
|
+----------------------------------------------------------------+
|
|
```
|
|
|
|
导入后是草稿;管理员必须在编辑抽屉中确认参数,再点击“上架”。
|
|
|
|
### 模型编辑抽屉
|
|
|
|
```text
|
|
+--------------------------------------------+
|
|
| 编辑公开模型 X |
|
|
+--------------------------------------------+
|
|
| 公开模型 ID [image-pro ] | 只读,来自发现候选
|
|
| 展示名称 [图像专业 ] | 输入框
|
|
| 能力 [图像 v] [编辑 v] | 多选框/标签选择
|
|
| |
|
|
| 分辨率配置 [+ 添加] |
|
|
| # 名称 支持比例 操作 |
|
|
| 1 [1024x1024 ] [1:1 v] [删除] |
|
|
| 2 [1536x1024 ] [1:1 v] [删除] |
|
|
| 3 [2048x1152 ] [16:9 v] [删除] |
|
|
| |
|
|
| 上架状态 [草稿 v] | 草稿 / 上架 / 下架
|
|
| |
|
|
| [保存草稿] [上架] [取消] |
|
|
+--------------------------------------------+
|
|
```
|
|
|
|
分辨率的“支持比例”必须是主题化多选控件,选项例如 `1:1`、`16:9`、`9:16`、`4:3`、`3:4`;不要使用逗号分隔字符串输入。每一行使用稳定 key,新增、删除和编辑时不能丢失焦点。
|
|
|
|
此页面明确不出现:基础价格、数量上限、并发上限、渠道组 ID、创建后自动上架、供应商请求模型 ID。
|
|
|
|
## 03 分组管理
|
|
|
|
分组是路由池。它决定“一个公开模型可以由哪些渠道承载,以及渠道按什么顺序尝试”。
|
|
|
|
### 分组列表
|
|
|
|
```text
|
|
+--------------------------------------------------------------------------------+
|
|
| 分组管理 [搜索分组] [+ 新建分组] |
|
|
+--------------------------------------------------------------------------------+
|
|
| 分组名称 | 状态 | 公开模型数 | 路由渠道数 | 策略 | 更新时间 | 操作 |
|
|
|----------|------|------------|------------|------|----------|------------------|
|
|
| 默认图像 | 启用 | 4 | 6 | 优先级| 10:25 | [编辑] [停用] [...]|
|
|
+--------------------------------------------------------------------------------+
|
|
```
|
|
|
|
### 新建/编辑分组
|
|
|
|
```text
|
|
+----------------------------------------------------------------+
|
|
| 编辑分组 X |
|
|
+----------------------------------------------------------------+
|
|
| 分组名称 [默认图像 ] |
|
|
| 分组 ID [group_xxx ] 只读,系统生成 |
|
|
| 状态 [启用 v] |
|
|
| 调度策略 [优先级优先 + 健康兜底 v] |
|
|
| |
|
|
| 支持的公开模型 [+ 添加模型] |
|
|
| [image-pro v] |
|
|
| |
|
|
| 渠道候选顺序 |
|
|
| 排序 渠道 请求模型 ID 健康 负载 启用 |
|
|
| [=]1 渠道 A vendor-model-a 正常 32% [开] |
|
|
| [=]2 渠道 B vendor-model-b 正常 18% [开] |
|
|
| [=]3 渠道 C vendor-model-c 熔断 -- [关] |
|
|
| |
|
|
| [保存] [取消] |
|
|
+----------------------------------------------------------------+
|
|
```
|
|
|
|
“支持的公开模型”使用多选下拉;每个模型下面显示可用渠道。渠道使用复选框加入候选池,再用拖拽排序或优先级数字框排序;请求模型 ID、健康、负载是只读信息。一个渠道可以出现在多个分组中,并且在不同分组中有不同顺序。
|
|
|
|
推荐策略含义:
|
|
|
|
- 第一级:过滤模型上架、分组启用、能力/分辨率、渠道启用、映射存在、容量、熔断。
|
|
- 第二级:按这里的渠道顺序选首选渠道。
|
|
- 第三级:同级或首选不可用时参考健康状态、并发负载、失败率、延迟。
|
|
|
|
## 04 渠道健康
|
|
|
|
```text
|
|
+--------------------------------------------------------------------------------+
|
|
| 渠道健康 [渠道 v] [健康状态 v] [刷新] |
|
|
+--------------------------------------------------------------------------------+
|
|
| 渠道 | 状态 | 成功率 | P95 延迟 | 当前并发 | 容量 | 熔断 | 最近探活 | 操作 |
|
|
|------|------|--------|----------|----------|------|------|----------|----------|
|
|
| A | 正常 | 99.2% | 840ms | 2/10 | 80% | 关闭 | 10:26 | [探活] |
|
|
| B | 降级 | 91.4% | 2.1s | 8/8 | 100% | 半开 | 10:25 | [详情] |
|
|
+--------------------------------------------------------------------------------+
|
|
```
|
|
|
|
探活按钮必须显示实际请求是否发起、请求路径,以及中文化的失败原因:地址解析、网络连接、HTTP 权限/状态、返回内容。健康配置可以放在详情抽屉:失败阈值、冷却时间、半开探测数量;保存不触发模型拉取。
|
|
|
|
## 05 任务中心
|
|
|
|
```text
|
|
+--------------------------------------------------------------------------------+
|
|
| 任务中心 [任务 ID/模型] [分组 v] [状态 v] [时间范围] [查询] |
|
|
+--------------------------------------------------------------------------------+
|
|
| 任务 ID | 公开模型 | 分组 | 状态 | 当前渠道 | 尝试次数 | 创建时间 | 操作 |
|
|
|---------|----------|------|------|----------|----------|----------|------------|
|
|
| task_001| image-pro| 默认 | 执行中| 渠道 A | 1/3 | 10:27 | [详情] |
|
|
| task_002| image-pro| 默认 | 未知 | 渠道 B | 1/3 | 10:20 | [去对账] |
|
|
+--------------------------------------------------------------------------------+
|
|
```
|
|
|
|
详情页显示:用户提交的公开模型和参数、当时的分组、候选渠道顺序、策略版本快照、每次请求的开始/结束时间、供应商请求模型 ID、HTTP 结果、结算状态。
|
|
|
|
按钮规则:排队中可取消;确认失败的任务可按失败预算重试;结果未知的任务只能进入人工对账,不能直接盲重试或重复扣费。
|
|
|
|
## 06 人工对账
|
|
|
|
```text
|
|
+--------------------------------------------------------------------------------+
|
|
| 人工对账 [任务 ID] [供应商 v] [未知原因 v] [查询] |
|
|
+--------------------------------------------------------------------------------+
|
|
| 任务 ID | 模型 | 渠道 | 发起时间 | 未知原因 | 金币状态 | 等待时长 | 操作 |
|
|
|---------|------|------|----------|----------|----------|----------|--------------|
|
|
| task_002| ... | B | 10:20 | 超时 | 已冻结 | 8m | [查看] |
|
|
+--------------------------------------------------------------------------------+
|
|
```
|
|
|
|
```text
|
|
+--------------------------------------------+
|
|
| 对账 task_002 X |
|
|
+--------------------------------------------+
|
|
| 本地状态 结果未知 |
|
|
| 供应商请求 已发起,未收到最终响应 |
|
|
| 请求路径/ID /v1/... / req_xxx |
|
|
| 供应商证据 [查看原始响应/回调记录] |
|
|
| 当前结算 待确认 |
|
|
| 管理员备注 [________________________] |
|
|
| |
|
|
| [确认成功] [确认失败] [取消] |
|
|
+--------------------------------------------+
|
|
```
|
|
|
|
确认成功后只结算一次;确认失败后释放或退回对应费用,并根据策略决定是否允许下一候选渠道继续执行。所有确认动作写入审计日志。
|
|
|
|
## 07 价格与套餐
|
|
|
|
这个页面是计费配置,不参与模型发现和渠道选择。
|
|
|
|
```text
|
|
+--------------------------------------------------------------------------------+
|
|
| 价格与套餐 [价格规则] [套餐] [+ 新增] |
|
|
+--------------------------------------------------------------------------------+
|
|
| 价格规则:公开模型 | 分辨率 | 计费单位 | 单价 | 生效状态 | 更新时间 | 操作 |
|
|
| image-pro | 1K | 次 | 10 | 生效 | 10:00 | [编辑] |
|
|
+--------------------------------------------------------------------------------+
|
|
| 套餐:名称 | 金币数 | 单任务数量上限 | 并发上限 | 状态 | 操作 |
|
|
| 基础套餐 | 1000 | 20 | 2 | 生效 | [编辑] |
|
|
+--------------------------------------------------------------------------------+
|
|
```
|
|
|
|
价格规则表单:公开模型下拉、分辨率下拉、计费单位下拉、单价数字框、生效状态开关。
|
|
|
|
套餐表单:套餐名称输入框、金币数量数字框、单任务数量上限数字框、并发上限数字框、状态开关。这里不出现渠道地址、API Key、渠道组 ID、供应商请求模型 ID。
|
|
|
|
## 08 审计日志
|
|
|
|
```text
|
|
+--------------------------------------------------------------------------------+
|
|
| 审计日志 [对象类型 v] [操作者] [时间范围] [查询] |
|
|
+--------------------------------------------------------------------------------+
|
|
| 时间 | 操作者 | 对象 | 动作 | 结果 | 摘要 | 详情 |
|
|
|------|--------|------|------|------|------|---------------------------------------|
|
|
| 10:27| admin | 分组 | 修改 | 成功 | 渠道 B 优先级 2 -> 1 | [查看] |
|
|
| 10:20| system | 任务 | 调度 | 成功 | task_001 选择渠道 A | [查看] |
|
|
+--------------------------------------------------------------------------------+
|
|
```
|
|
|
|
详情必须字段化展示:对象、前值、后值、策略版本、候选渠道、最终渠道、任务尝试、结算动作。禁止直接把原始 JSON 当页面主体;原始内容只能作为可展开的辅助信息。
|
|
|
|
## 明确删除的旧逻辑
|
|
|
|
```text
|
|
删除:新增模型产品
|
|
删除:模型表单中的渠道组 ID
|
|
删除:模型表单中的基础价格
|
|
删除:模型表单中的数量上限
|
|
删除:模型表单中的并发上限
|
|
删除:保存模型时隐式拉取供应商
|
|
删除:发现模型后自动创建映射、自动上架、自动加入分组
|
|
保留:分辨率名称和支持比例配置
|
|
```
|
|
|
|
## 一期实现顺序
|
|
|
|
```text
|
|
01 渠道管理中的主动发现与映射
|
|
-> 02 模型目录与分辨率配置
|
|
-> 03 分组路由池与渠道优先级
|
|
-> 04 健康、容量、熔断数据
|
|
-> 05 任务中心与路由快照
|
|
-> 06 未知结果人工对账
|
|
-> 08 审计日志
|
|
-> 07 价格与套餐(有计费需求时启用)
|
|
```
|
|
|