Baike.dev
All toolsAI codingTrendingOpen sourceNewsSubmit
Log in
Back to tool/Back to issues
#7434·new-api

[功能请求] 渠道批量同步配置:选中同 URL 渠道、挑源、一键同步模型启用等字段

Author: ID-VerNeCreated Sep 17, 2026Updated Sep 17, 2026
Labelsenhancement

提交前必读(请勿删除本节)

  • 文档: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 渠道、挑源、一键同步配置字段」。

提议方向(验收标准,非实现清单)

  1. 渠道列表选中 2–100 个渠道时,批量操作工具栏出现「同步渠道配置」入口。
  2. 前置校验:所有选中渠道 base_url 严格相等且 type 相等,否则按钮置灰并提示原因(跨 URL / 类型不同步)。
  3. 弹窗内选源(从选中集合挑一个)、勾选要覆盖的字段(models / model_mapping / group / param_override / header_override);param_override / header_override 需 ChannelSensitiveWrite 权限,无权限时置灰。
  4. 提交后单事务覆盖选中字段,源渠道本身不变;若勾了 models 或 group 则在事务内 per-target 重建 ability 路由表。
  5. 全成功提交后刷新渠道缓存;全失败回滚,无中间态。
  6. 记一条 channel.batch_edit 审计事件,只记字段名不记值。
  7. 前端只传 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-channel UpdateAbilities(tx),与现有单渠道编辑同路径,理论兼容,但未跑三库矩阵。

相关

  • 相关但不重复的 issue:#6697(同步上游 pricing/ratio,作用域不同)、#6650(pricing 同步弹窗 bug)、#5804(fetch_models 行为 bug)。
  • 相关代码:model/channel.go EditChannelByTag / BatchSetChannelTag、controller/channel.go CopyChannel。
  • 本 issue 前身:#7433(被 review bot 以「未使用功能请求模板」为由关闭,故按 feature_request.yml 结构重新提交)。

Source: QuantumNous/new-api

View original on GitHubView discussion on GitHub