Files
sub2api-cn-relay-manager/docs/PLUGIN_REQUIREMENTS_OVERVIEW_2026-05-28.md
2026-05-28 15:37:13 +08:00

340 lines
11 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.
# 插件整体需求梳理2026-05-28
日期2026-05-28
## 背景
`sub2api-cn-relay-manager` 的最初定位,是一个**不修改宿主源码**的外部控制面:
- 通过宿主 HTTP 管理 API 导入 provider / account / group / plan
- 维护状态库
- 做访问闭环验证
- 提供最小管理页
随着新需求增加,当前插件目标已经从“导入控制面”扩展为一个更完整的**模型供应管理 + 逻辑分组 + 前置路由 + 用户前端聚合层**。
因此这里需要重新把插件职责收口,并明确区分:
- **已完成**:已经有真实代码与真实部署/验收支撑
- **待优化**:能力已存在,但还不够产品化或还不够顺手
- **待完成**:已经明确要做,但当前还没有真正落地
- **未来规划**:方向已确认,但不应假装已经进入当前交付范围
## 当前插件职责总图
按现在的产品边界,插件最终应覆盖 5 大功能域:
1. 增加模型
2. 维护逻辑分组
3. 智能路由
4. 供应商帐号导入与停启用
5. 普通用户前端
这 5 个功能域里,当前真正成熟的是:
- 模型与 provider 管理控制面
- provider 草稿发布到 pack 仓库
- 供应商帐号导入与 access closure
- 最小管理员前端
而“逻辑分组 + 智能路由 + 面向普通用户的统一产品层”是本轮新增后的主线。
---
## 一、增加模型
这里的“增加模型”,当前真实语义不是直接往宿主里加一个模型开关,而是:
- 在 pack/provider 体系里新增或更新 provider manifest
- 定义其 `provider_id / display_name / base_url / supported_models / smoke_test_model`
- 再由插件导入供应商 key把这条 provider 变成真实可访问线路
### 已完成
- 已有 `providers.html` 管理页,可浏览 pack/provider 目录
- 已有 provider manifest 草稿能力:
- `POST /api/provider-drafts`
- `GET /api/provider-drafts`
- `GET /api/provider-drafts/{draft_id}`
- `PUT /api/provider-drafts/{draft_id}`
- `DELETE /api/provider-drafts/{draft_id}`
- 已有 provider 草稿发布能力:
- `POST /api/provider-drafts/{draft_id}/publish`
- 发布时已可自动:
-`packs/<pack>/providers/*.json`
- bump `pack.json` patch version
- 更新 `checksums.txt`
- 重跑 pack 校验
- `git add` + `git commit`
- `Provider Manifest 草稿` 已做过一轮可用性优化:
- 最近成功模板回填
- `Provider ID` 自动生成与避重
- 前端同模型冲突提示
- 服务端 `save draft / publish` 模型冲突校验
### 待优化
- 草稿表单虽然能用但仍偏“manifest 视角”,不是“运营录入视角”
- `providers.html` 还缺更强的“已有模板复用 / 最近一次导入参考 / 同类线路推荐”
- “新增模型”与“导入供应商帐号”虽然已经在同页,但产品语义仍然容易混淆
- route-lab / 逻辑分组引入后,新增模型页需要补一层:
- 这是新增 provider
- 还是把模型纳入某个 `logical_group`
### 待完成
- 增加模型时直接选择或创建 `logical_group`
- 增加模型时直接配置 route 归属,而不只是落一个 provider 文件
- 新增模型后自动生成 shadow group 规划建议
### 未来规划
- 模型家族级模板库
- 官方 / 中转 / 专线 的线路类型模板
- 按历史成功接入记录生成默认字段与 smoke 策略
---
## 二、维护逻辑分组
这是本轮新增后最核心的新能力。
逻辑分组的目标是:
- 前端只显示一个业务分组
- 后面可以挂多个真实 route
- 每个 route 再映射到宿主里的一个 shadow group
### 已完成
- 已经完成概念澄清:当前宿主不支持“同一个真实 group 多 channel”
- 已完成两份关键设计文档:
- [HOST_MULTI_CHANNEL_MINIMAL_RETROFIT.md](/home/long/project/sub2api-cn-relay-manager/docs/HOST_MULTI_CHANNEL_MINIMAL_RETROFIT.md:1)
- [PLUGIN_ROUTE_STICKY_DESIGN.md](/home/long/project/sub2api-cn-relay-manager/docs/PLUGIN_ROUTE_STICKY_DESIGN.md:1)
- 已完成真实实验验证:
- route-lab `asxs`
- route-lab `codex2api`
- 证明当前宿主真实约束是 `GROUP_ALREADY_IN_CHANNEL`
- 已明确 fallback 方向:
- 不改宿主源码
- 由插件层维护 `logical_group -> route -> shadow_group`
### 待优化
- 当前还没有一个统一文档把“逻辑分组”放回整体产品需求里,这份文档正是补这个缺口
- 当前 portal 与 admin 页面里还没有逻辑分组这个产品层
- 逻辑分组和 pack/provider 的关系还没有被操作界面正式表达出来
### 待完成
- `logical_groups` 持久化模型
- `logical_group_routes` 持久化模型
- 逻辑分组 CRUD API
- route 绑定与 shadow group 绑定 API
- 管理页上的逻辑分组维护入口
### 未来规划
- 逻辑分组级别的运营标签、描述、默认模型集合
- 逻辑分组级别的 SLA/成本/优先级策略
- 逻辑分组级别的用户权限与套餐映射
---
## 三、智能路由
这里的智能路由,不是宿主内部调度,而是插件层的**前置路由**
- 用户请求进入插件
- 插件先决定 route
- 再把请求稳定转发到对应 shadow group
- 宿主继续在 shadow group 内做账号调度
### 已完成
- 已完成路线方向选择:
- 放弃“宿主内多 channel”
- 采用“插件前置路由 + 宿主 shadow group”路线
- 已完成第一版设计:
- route sticky
- route failover
- Redis key 设计
- conversation/session/user-model sticky 设计
- cooldown / retryable / non-retryable 分类
### 待优化
- 设计已成型,但还没有拆成实现任务单
- 当前普通用户 portal 还没有接入这层前置路由
- 对 route 健康状态、错误分类、熔断观测还没有产品级可视化
### 待完成
- 前置路由器服务实现
- Redis sticky 实现
- route cooldown / failover 实现
- logical group -> route -> shadow group 实时解析
- 用户请求转发到 shadow group 的数据面链路
### 未来规划
- 同公开模型名双线路主备
- route priority + cost-aware routing
- latency-aware routing
- A/B route policy
- 自动摘除劣化线路与自动恢复
---
## 四、供应商帐号导入与停启用
这是当前插件最接近成熟生产能力的一块,但需求已经不止“导入”。
### 当前要覆盖的完整语义
- 导入供应商帐号 / key
- 预检导入
- 批量导入
- 复用已有帐号
- 重新启用 disabled / deprecated 帐号
- 停用帐号
- 查看帐号状态与导入结果
### 已完成
- 已有 `preview-import` / `import` 主链路
- 已有最小与结构化 batch-import API
- 已有 batch-import 管理页与运行结果查询
- 已支持 key 去重、复用、导入结果投影
- 已在文档与实现中支持:
- 命中 disabled / deprecated 账号时走 `reactivated`
- 已有 access closure 与 provider status 聚合
- 已完成多条真实 provider 验收
### 待优化
- 当前“供应商帐号导入”仍偏导入任务视角,不是帐号资产视角
- 没有真正的“帐号库存页 / 帐号状态列表 / route 归属页”
- “reactivated” 虽然已支持,但前端没有被清晰表达成一个显式运维动作
- 缺少一眼可见的:
- active
- warning
- disabled
- deprecated
- broken
状态面板
### 待完成
- 供应商帐号清单页
- 帐号启用 / 停用 / 下线 API
- 把帐号与 route / shadow group / logical group 的关系展示出来
- 明确“导入新 key”和“启用已有 key”的不同操作入口
### 未来规划
- 批量失效检测
- 自动停用持续失败帐号
- 多 key 池健康分层
- 帐号级配额/余额/延迟监控
---
## 五、普通用户前端
这是当前最容易被误判“已经有了”的部分。
严格说,当前已经有用户 Portal但它还是**宿主分组视角**,不是插件逻辑分组视角。
### 已完成
- 已有公网用户 portal
- `/portal/`
- 已有登录态、用户信息、订阅、key 列表等最小页面
- 已有管理员 portal
- `/portal/admin/`
- `/portal/admin/providers.html`
- `/portal/admin/batch-import.html`
### 待优化
- 当前普通用户最终看到的仍是宿主真实 group / subscription 结构
- 这和未来“逻辑分组 + 多 route”产品层不一致
- 用户仍可能看到过于底层的分组信息,而不是统一产品视图
### 待完成
- 逻辑分组视角的普通用户前端
- 把多个 shadow group 聚合成一个用户可见产品分组
- 用户侧模型展示改成逻辑分组模型集合,而不是宿主原始 group 集合
- 用户创建 key / 查看权限时走逻辑分组视图
### 未来规划
- 用户侧逻辑分组购买 / 订阅 / 升级
- 逻辑分组可见性与分层套餐
- 用户侧展示当前线路状态、可用模型集合、使用建议
---
## 六、当前真实状态总表
### 已完成
- 外部控制面主链路成立host 注册、探测、导入、access closure、reconcile、rollback
- 管理员前端已上线provider 管理、batch-import、管理员 session 登录
- provider 草稿与发布主链路已打通
- provider 模型冲突校验已落到服务端
- 供应商帐号导入主链路已具备真实宿主验收基础
- 宿主不支持同 group 多 channel 的事实已经被真实验证
- 插件前置路由 + logical group 方案已经完成设计收口
### 待优化
- 管理页仍偏工程/manifest 视角,不够产品化
- provider、新增模型、导入帐号三者的产品语义需要重新整理
- batch-import 已有结构化入口,但普通运营视角还不够强
- 当前 portal 仍是宿主分组视角,不是逻辑分组视角
### 待完成
- `logical_group` 数据模型、API、管理页
- 前置智能路由器实现
- Redis sticky / failover / cooldown
- route 与 shadow group 管理
- 供应商帐号启用/停用与库存视图
- 普通用户逻辑分组前端
### 未来规划
- 同公开模型名双线路主备
- 成本/延迟/成功率驱动的智能路由
- 用户侧订阅、购买、升级与逻辑分组统一产品化
- 运营指标、审计面板、健康监控
---
## 七、当前推荐主线
如果要按价值排序,当前插件后续实现主线建议是:
1. 先做 `logical_group` 数据模型与管理 API
2. 再做前置路由器最小闭环:
- priority
- sticky
- failover
- shadow group 转发
3. 再补供应商帐号的启用/停用与 route 归属视图
4. 最后重做普通用户 portal把宿主真实分组隐藏到逻辑分组之后
## 一句话结论
插件已经从“导入控制面”演进为一个四层产品:
- 模型与 provider 管理层
- 逻辑分组与 route 管理层
- 前置智能路由层
- 面向普通用户的聚合前端层
当前第一层基本成立,第二层已完成设计但未落地,第三层和第四层是后续真正的产品化主线。