[功能请求] 渠道批量同步配置:选中同 URL 渠道、挑源、一键同步模型启用等字段
提交前必读(请勿删除本节)
- 文档:https://docs.newapi.ai/
- 使用问题先看或先问:https://deepwiki.com/QuantumNous/new-api
- 开启透传后的转发相关反馈不接受 issue;透传模式会直接转发请求,请自行确认上游行为。
- 不接受 Coding Plan、逆向渠道、第三方封装接口,以及将 Codex 接口反代为通用 API 后产生的兼容性问题;Codex API 自身特有的协议或行为也不应被当作标准 OpenAI API 行为,相关问题请先向渠道或接口提供方确认。
- 警告:删除本模板、删除小节标题或随意清空内容的 issue,可能会被直接关闭;重复恶意提交者可能会被 block。
您当前的 newapi 版本
v1.0.0-rc.30(本 fork 基线;upstream 最新 release 为 v1.0.0-rc.37)
提交确认
- 非重复 issue: 我已搜索现有 Issues,确认目前没有类似 issue。
- 提交前必读: 我已完整阅读上方"提交前必读",并已查看文档 https://docs.newapi.ai/、项目 README 且向 AI 提问,确认这不是使用、配置或接入类问题,且现有版本无法满足需求。
- 模板完整: 我未删除此模板中的任何引导内容或小节标题,并会按要求完整填写。
- 维护成本: 我理解项目维护者精力有限,不遵循模板要求的 issue 可能会被无视或直接关闭。
功能描述
在渠道列表批量操作工具栏新增「同步渠道配置」:选中 2–100 个同 base_url + 同 type 的渠道 → 弹窗顶部下拉选源 → 勾选要覆盖的字段(models / model_mapping / group / param_override / header_override)→ 折叠列表逐个预览 diff(只 diff models,其他字段显示「将改为 X」)→ 提交。后端在单个 GORM 事务内拉源值覆盖目标、按需重建 ability 路由表,全成功或全回滚。前端不传值,只传 source_id + target_ids + 字段名列表,后端自拉源值防篡改。
应用场景
聚合多个同上游(同 base_url、同 type、只差 key)的渠道时,上游模型列表变更或新增渠道后,希望一键把源渠道的「模型启用配置 / 模型重定向 / 分组 / param_override / header_override」同步给其余渠道,免逐个手改或留持久 tag。
现状痛点:
EditChannelByTag(按 tag 批量编辑)需先打 tag、切到 tag 模式、找到 tag、编辑,作用于「整个 tag 下所有渠道」,且留下持久 tag 标签(需事后清理);对「只想临时批量对齐一组渠道」的场景过重。BatchSetChannelTag只批量改 tag,不碰配置字段。CopyChannel是 1:1 克隆整个渠道(带 key)并新建,不能批量盖到已存在的多个渠道。- 逐个单渠道手改:渠道多时耗时且易漏。
以下为补充研究内容,供维护者评估方案可行性。
现有代码与能力对照
model/channel.go:830 EditChannelByTag— 按 tag 覆盖model_mapping/models/group/priority/weight/param_override/header_override,作用于「整个 tag 下所有渠道」,需先打 tag,留下持久 tag。是现状最接近的能力,但流程重且留标签。model/channel.go:1199 BatchSetChannelTag— 只批量改 tag,不碰配置字段。controller/channel.go:1503 CopyChannel— 1:1 克隆整个渠道(带 key)并新建,不能批量盖到已存在渠道。model/channel.go UpdateAbilities(tx)— per-channel ability 路由表重建,可接受外部 tx 保持原子性(单渠道编辑路径已用)。
结论:现有能力不能「选中 N 个已存在渠道、挑一个当源、把指定字段同步给其他 N-1 个」。
文档查阅结论
- https://docs.newapi.ai/ — 搜索渠道管理 / 批量操作,无跨渠道同步配置的文档。
- https://deepwiki.com/QuantumNous/new-api — Channel Management 章节仅描述加权路由 / 优先级 / 故障转移 / 格式转换,无批量编辑 / 按 tag 编辑 / 跨渠道复制配置内容。
- README / 仓库文档:无相关说明。
重复检查
搜索查询:sync channel config、批量同步 渠道 模型、channel bulk edit models、tag batch edit、同步 渠道 配置、copy channel models multiple、same url different key channel sync、base_url multiple keys、in:title 同步 渠道。
最接近的现有 issue:
- #6697「支持按渠道同步上游分组及模型价格/倍率」——同步上游 pricing/ratio 到成本核算体系,不是同步「模型启用配置」到其他同 URL 渠道,作用域不同。
- #6650「选择同步渠道打开弹窗时页面卡死」——pricing 同步弹窗的 bug,非功能请求,与本提案无关。
- #5804「同步上游模型更新不会自动删除模型吗」——单渠道
fetch_models行为 bug,非跨渠道同步。 - #225「一键同步官方倍率」——倍率同步,非渠道配置同步。
本提案与上述不同:目标是「跨渠道复制模型启用配置」(运维对齐),目标对象、字段、操作粒度都与 pricing/ratio 同步不同;无任何 issue 描述「选中 N 个已存在同 URL 渠道、挑源、一键同步配置字段」。
提议方向(验收标准,非实现清单)
- 渠道列表选中 2–100 个渠道时,批量操作工具栏出现「同步渠道配置」入口。
- 前置校验:所有选中渠道
base_url严格相等且type相等,否则按钮置灰并提示原因(跨 URL / 类型不同步)。 - 弹窗内选源(从选中集合挑一个)、勾选要覆盖的字段(
models/model_mapping/group/param_override/header_override);param_override/header_override需ChannelSensitiveWrite权限,无权限时置灰。 - 提交后单事务覆盖选中字段,源渠道本身不变;若勾了
models或group则在事务内 per-target 重建 ability 路由表。 - 全成功提交后刷新渠道缓存;全失败回滚,无中间态。
- 记一条
channel.batch_edit审计事件,只记字段名不记值。 - 前端只传
source_id + target_ids + 字段开关,后端自拉源值(防篡改)。
范围
- 后续 PR 范围:后端
POST /api/channel/batch/edit端点(source_id + target_ids + 字段开关);前端渠道列表工具栏「同步渠道配置」按钮 + 弹窗(源选择 / 字段开关 / diff 预览);单 GORM 事务 + per-target ability 重建 + 一条审计日志。 - 不在本仓库范围:上游 pricing/ratio 同步(已在 #6697 覆盖)、渠道 key 轮换管理(不在本同步字段集)。
- 这是较大的方向性功能(新增端点 + UI + 审计),故本 issue 用于维护者对齐需求与方案,待确认后再开 PR。
实现状态
我已在 fork 上实现并本地验证(SQLite):commit 6185a4566(feat(channel): add batch sync config across same-upstream channels)+ bugfix d9403a119。用户本人实测所有预期功能(源选择、字段开关、diff 预览、提交同步、ability 重建、审计)均已通过,并与现有「按 tag 批量编辑」并测无冲突。待维护者确认方向后开 PR。
未验证
- 未在 MySQL / PostgreSQL 实例上实测。代码路径走 GORM
Updates+ per-channelUpdateAbilities(tx),与现有单渠道编辑同路径,理论兼容,但未跑三库矩阵。
相关
- 相关但不重复的 issue:#6697(同步上游 pricing/ratio,作用域不同)、#6650(pricing 同步弹窗 bug)、#5804(fetch_models 行为 bug)。
- 相关代码:
model/channel.goEditChannelByTag/BatchSetChannelTag、controller/channel.goCopyChannel。 - 本 issue 前身:#7433(被 review bot 以「未使用功能请求模板」为由关闭,故按
feature_request.yml结构重新提交)。
Source: QuantumNous/new-api