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

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions