# 插件整体需求梳理(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//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 管理层 - 前置智能路由层 - 面向普通用户的聚合前端层 当前第一层基本成立,第二层已完成设计但未落地,第三层和第四层是后续真正的产品化主线。