Skip to content

[asr] 新增百炼 Qwen3-ASR-Flash 实时供应商(OpenAI Realtime WS 协议),支持业务空间专属域名 #774

Description

@bigsongeth

现象 / 背景

  • 百炼当前主打的 ASR 是 Qwen3-ASR 系列。其实时版 qwen3-asr-flash-realtimeOpenAI Realtime 风格的 WebSocket 协议wss://dashscope.aliyuncs.com/api-ws/v1/realtime?model=...)——即 asr/bailian.rs 头注释里 "The Qwen OpenAI Realtime line is a different protocol and is intentionally left for a follow-up provider" 预留的那条协议线。
  • 百炼官方正在引导用户迁移到业务空间专属域名(wss://{WorkspaceId}.cn-beijing.maas.aliyuncs.com)。专属域名只承载新版 Realtime 路径(/api-ws/v1/realtime)与兼容模式 HTTP,不承载经典 /api-ws/v1/inference 路径(实测:经典路径在专属域名上返回 InvalidParameter: url error)。
  • 带模型限制的工作空间 API Key(sk-ws- 前缀)可能只被授权 Qwen3 系模型:实测这类 Key 跑经典协议的 fun-asr / paraformer 会被拒(专属域名明确报 AccessDenied: Access denied by API-Key restrictions,公共网关报为 InternalError)。对这类用户,Realtime 协议是唯一可用的实时通道,现有 bailian 供应商完全无法服务他们。
  • 批式 qwen3-asr-flash 走兼容模式 chat/completions + input_audio(与 asr/mimo.rs 的请求格式一致,可借道 MiMo preset 使用),但批式无流式体验,且不是本 issue 的诉求。

关键协议行为(2026-07 线上实测,公共网关与专属域名均验证)

  • server_vad 模式服务端自动断句,每句一个 conversation.item.input_audio_transcription.completed
  • session.finish 会先冲刷 VAD 尚未关闭的尾段(补发 completed)再回 session.finished——说到一半松手不丢尾巴;
  • 纯静音 + finish 干净返回 session.finished(连接检查可行,无经典协议 <200ms 必报 EmptyAudio 的问题);
  • session.update 省略 input_audio_transcription.language 时自动检测语种;
  • 音频以 base64 JSON 事件发送,官方示例块大小 3200B/100ms,与 OpenLess recorder 输出一致。

影响

  • 使用百炼专属域名 / 受限工作空间 Key / 想用 Qwen3-ASR 实时模型的用户,目前在 OpenLess 中无路可走。

建议接受标准

  • 新增独立 ASR 供应商(专有协议 client + provider kind,参照 bailian 分支接线),默认 endpoint wss://dashscope.aliyuncs.com/api-ws/v1/realtime、默认模型 qwen3-asr-flash-realtime,支持用户改为业务空间专属域名。
  • 「验证」「拉取模型」自带真实连通性检查与协议头校验(与 bailian 修复后的口径一致)。
  • 不替换/移除现有 fun-asr-realtime 供应商——经典协议仍是官方在维护的通道。

参考:

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