线上表现:文本翻译 / 同传 / 面对面全部报「未配置机器翻译服务」, 而后台 EAIMAR 下 mt_alibaba / mt_azure / mt_volcano 三家都启用着、凭据也都填了。 根因:resolveTranslator 挑选时没有任何优先级,谁先从 postgres 返回就用谁, 这次挑中了 mt_volcano,而服务端只实现了阿里一家,于是落进「provider 不是 alibaba 就返回 nil」的分支。错误信息指向「没配置」,会把人引去后台反复检查 明明填好的凭据;而且它取决于数据库返回顺序,可能自己好、也可能自己坏。 - 新增 mtProviderPriority 白名单:只在真正接了的 provider 里挑,并给出稳定优先级。 - 挑选抽成纯函数 pickMTSvc(可脱离 postgres 测),被跳过的未接入服务打一条点名 warn。 - 缓存命中不再硬编码返回 "alibaba",改为记住实际 provider。 - model_translate_test.go 5 个用例:未接入的要跳过、全不可用返回 nil、 停用/非 MT 类别不参与、应用行优先、provider 大小写归一。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>