Skip to content

[asr] 放宽百炼 ASR 模型白名单,支持官方文档中的更多模型 #850

Description

@HKLHaoBin

背景

OpenLess 的「阿里云百炼」ASR 入口在 UI 上合并为单一 provider(bailian),但后端对模型名做了硬编码白名单,导致百炼控制台/API 文档中大量可用模型无法在软件里使用。

百炼平台本身并不限制只能使用软件下拉列表中的那几个模型;限制来自 OpenLess 的协议路由与校验逻辑。

现状

1. 模型路由白名单(桌面端)

resolve_effective_asr_provider 仅允许以下模型模式,其余直接报错:

  • fun-asr-realtime* / paraformer-realtime* / sensevoice-realtime* → 经典 WebSocket(bailian.rs
  • qwen3-asr-flash-realtime* → Qwen Realtime WebSocket(qwen_realtime.rs
  • fun-asr-flash-2026-06-15精确匹配)→ HTTP 录音文件(dashscope_multimodal.rs

不支持时会返回类似:

不支持的百炼 ASR 模型:{model}。支持 fun-asr-realtime、paraformer-realtime、sensevoice-realtime、qwen3-asr-flash-realtime 和 fun-asr-flash-2026-06-15

相关代码:openless-all/app/src-tauri/src/coordinator.rsresolve_effective_asr_providervalidate_dashscope_multimodal_model

2. 「拉取模型」为静态列表

百炼 ASR 无 /v1/models 类接口,list_provider_models 返回固定 5 项快捷模型,容易让用户误以为百炼只有这些模型可选。

相关代码:openless-all/app/src-tauri/src/commands/providers.rs

3. 移动端更窄

Android/iOS 统一百炼入口不做模型路由,固定走经典 fun-asr-realtime WebSocket。

相关代码:coordinator.rscfg!(mobile) 分支

百炼已有、但 OpenLess 未支持的典型模型

模型 官方能力 OpenLess 现状
fun-asr / fun-asr-mtl 异步录音文件识别(≤12h,热词、说话人分离) ❌ 未接
qwen3-asr-flash 非实时同步(≤5min,情感识别) ❌ 未接
qwen3-asr-flash-filetrans 异步文件转写(≤12h) ❌ 未接
fun-asr-flash-8k-realtime 8kHz 实时(更低价) ❌ 明确拒绝
同系列快照版(如 fun-asr-realtime-2025-11-07 与稳定版同协议 ⚠️ 可手填前缀匹配,但不在下拉中

参考:百炼语音识别模型列表模型价格

诉求

解除(或显著放宽)百炼 ASR 的模型白名单限制,让用户能使用百炼官方文档中的更多模型,而不仅限于当前 3 条协议 + 5 个快捷项。

建议实现方向

A. 短期(降低误拒)

  1. 扩展路由规则:按官方文档的「模式 + API」映射自动选择客户端,而非精确枚举:
    • fun-asr* / fun-asr-mtl*(非 *-realtime*)→ 异步 HTTP 文件转写客户端(新模块)
    • qwen3-asr-flash(非 realtime/filetrans)→ 同步 multimodal-generation 客户端(可复用/泛化 dashscope_multimodal.rs
    • qwen3-asr-flash-filetrans* → 异步 transcription 客户端(新模块)
    • fun-asr-flash-8k-realtime* → 经典 WebSocket(参数 sample_rate=8000)
  2. 放宽 fun-asr-flash-* 校验fun-asr-flash-2026-06-15 改为前缀 fun-asr-flash- 匹配(同系列快照版一并支持)
  3. 静态模型列表扩充:下拉加入官方在案的主要稳定版 + 常用快照版,并注明「可手填其他已支持前缀的模型 ID」

B. 中期(体验)

  1. 验证逻辑按协议分发validate_asr_provider 根据解析后的 effective provider 走对应连通性检查(目前已有部分逻辑,需与路由一致)
  2. 移动端对齐桌面路由:mobile 也按模型名选择协议,而非一律 fun-asr-realtime
  3. 文档:在设置页或 docs/ 说明百炼模型族、协议差异、弱网场景推荐(如 fun-asr-flash-* 非实时更稳)

验收标准

  • 用户手填 fun-asrqwen3-asr-flashqwen3-asr-flash-filetrans 等官方模型时,不再被 resolve_effective_asr_provider 直接拒绝
  • 每种新协议有对应的 Rust 客户端 + coordinator 分支 + 凭据校验
  • 设置页模型提示能区分:实时 WebSocket / 同步录音文件 / 异步文件转写
  • 现有已支持模型(fun-asr-realtimeqwen3-asr-flash-realtime*fun-asr-flash-2026-06-15)行为不回归
  • 补充单元测试覆盖模型名 → 协议路由表

相关文件

  • openless-all/app/src-tauri/src/coordinator.rs
  • openless-all/app/src-tauri/src/commands/providers.rs
  • openless-all/app/src-tauri/src/asr/bailian.rs
  • openless-all/app/src-tauri/src/asr/qwen_realtime.rs
  • openless-all/app/src-tauri/src/asr/dashscope_multimodal.rs
  • openless-all/app/src/pages/settings/ProvidersSection.tsx

动机(用户场景)

  • 弱网下希望用更便宜的非实时模型(如 fun-asr-flash-*,0.00022 元/秒)而非强制实时流式
  • 希望使用百炼控制台已开通的模型(如 fun-asr 异步、qwen3-asr-flash-filetrans),不必等软件逐个硬编码
  • 下拉列表不应被误解为百炼平台的完整模型清单

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions