插件

阿里云

接入 Paraformer、CosyVoice、Qwen 与 Qwen Audio 3.0 Realtime

阿里云插件同时提供传统 STT + LLM + TTS 流水线和 Qwen Audio 3.0 端到端实时语音。

支持能力

  • STT:Paraformer 实时语音识别,默认模型为 paraformer-realtime-v2
  • TTS:CosyVoice 流式语音合成,默认模型为 cosyvoice-v3-flash,默认音色为 longanyang
  • LLM:百炼 OpenAI 兼容接口中的 Qwen 文本模型,默认模型为 qwen-plus
  • Realtime:qwen-audio-3.0-realtime-plusqwen-audio-3.0-realtime-flash

安装与凭证

阿里云百炼创建业务空间 API Key:

STT

参数说明

参数类型默认值说明
modelstrparaformer-realtime-v2Paraformer 实时识别模型。使用其他模型前,请确认该模型已在百炼业务空间中开通。
languagestr | Nonezh识别语言。流式识别需要明确的语言值,示例中的 zh 表示中文。
interim_resultsboolTrue是否返回中间识别结果。开启后,Agent 可以在用户说话过程中持续更新文本;句子结束时仍会返回最终结果。
max_sentence_silenceint500句尾静音阈值,单位为毫秒。值越小,结束响应越快,但更容易把一句话切成多段;值越大,等待时间更长,长句更不容易被截断。
disfluency_removal_enabledboolFalse是否过滤“嗯”“啊”等语气词。
semantic_punctuation_enabledboolFalse是否启用基于语义的断句。开启后,服务端会结合语义判断句子边界。
punctuation_prediction_enabledboolTrue是否启用标点预测。
inverse_text_normalization_enabledboolTrue是否启用文本逆归一化,将数字、日期等内容按更适合阅读的形式输出。
vocabulary_idstr | NoneNone百炼热词表 ID。传入后会提高专有名词、产品名等热词的识别稳定性;不使用热词时保持为 None
workspacestr | NoneNone百炼业务空间 ID。需要使用指定业务空间时传入。

api_key 不需要写在构造参数中,插件会读取 DASHSCOPE_API_KEY 环境变量。热词表需要先在 百炼热词表服务 中创建,再将返回的 ID 传给 vocabulary_id

流式识别必须提供明确的 language,当前模式不支持用 detect_language 自动选择语言。 构造函数仍接受 detect_languagepunctuate,但当前流式实现不会使用这两个兼容参数;标点行为 请通过 semantic_punctuation_enabledpunctuation_prediction_enabled 等参数控制。

TTS

模型与音色兼容关系

CosyVoice 的音色不能跨模型版本混用,modelvoice 必须使用同一版本的组合。 插件默认使用 cosyvoice-v3-flashlonganyang,这组参数同时支持新加坡和中国(北京)地域。

模型新加坡中国(北京)音色说明
cosyvoice-v3-flash可使用官方 v3 音色,例如 longanyang
cosyvoice-v3-plus可使用官方 v3 音色,例如 longanyang
cosyvoice-v2只能使用 v2 音色,例如 longxiaochun_v2;不建议作为默认模型。
cosyvoice-v3.5-plus仅支持声音复刻或声音设计生成的自定义音色,不提供系统音色。
cosyvoice-v3.5-flash仅支持声音复刻或声音设计生成的自定义音色,不提供系统音色。

以上地域和模型限制以阿里云官方实时语音合成文档官方 CosyVoice 音色列表为准。

如果使用 cosyvoice-v2,必须显式传入 v2 音色:

参数说明

参数类型默认值说明
modelstrcosyvoice-v3-flashCosyVoice 合成模型。模型必须支持所选音色,并且需要与 API Key 所属地域匹配。
voicestrlonganyang音色 ID。音色必须与模型版本匹配;可用音色以官方 CosyVoice 音色列表为准。
sample_rateint24000输出采样率,单位为 Hz。支持 80001600022050240004410048000
speech_rateint1历史兼容参数,不会覆盖实际请求中的 rate;调整语速请使用 rate
volumeint100输出音量,取值范围为 0100
ratefloat1.0语速倍率,取值范围为 0.52.0;大于 1 加快,小于 1 减慢。
pitchfloat1.0音调倍率,取值范围为 0.52.0;大于 1 升高,小于 1 降低。
max_session_durationfloat600单个 TTS WebSocket 连接的最长复用时间,单位为秒。连接池到达时长上限后会自动更新连接。

api_key 不需要写在构造参数中,插件会读取 DASHSCOPE_API_KEY 环境变量。

LLM

参数说明

参数类型默认值说明
modelstrqwen-plus百炼 OpenAI 兼容接口使用的模型 ID。模型需要已在业务空间中开通。
api_keystr | NoneDASHSCOPE_API_KEY百炼 API Key。未显式传入时从环境变量读取。
userstr未传入调用方标识,会作为请求中的 user 字段发送。
temperaturefloat未传入OpenAI 兼容的生成随机性参数。当前版本构造函数接受该参数,但不会自动转发到请求。
parallel_tool_callsbool未传入是否允许一次响应并行产生多个工具调用。
tool_choiceToolChoice未传入工具选择策略,可使用 autononerequired 或指定函数。
storebool未传入OpenAI 兼容的响应存储参数。当前版本构造函数接受该参数,但不会自动转发到请求。
metadatadict[str, str]未传入附加到请求中的元数据。
timeouthttpx.Timeout | None连接 15 秒、读取/写入/连接池各 5 秒HTTP 客户端超时配置。

api_key 未显式传入时会读取 DASHSCOPE_API_KEY 环境变量。

当前版本会自动转发 usermetadataparallel_tool_callstool_choice;如果业务依赖 temperaturestore,请先确认适配器版本是否已支持对应请求字段。

这个适配器使用百炼 OpenAI 兼容端点,支持 LiveKit 工具调用。model 可替换为业务 空间已经开通的 Qwen 模型 ID。

Realtime

workspace_id 会生成业务空间专属地址:

也可以用 base_url 显式传入完整 WebSocket 端点。插件会把 LiveKit 音频重采样为 16 kHz PCM16,模型输出为 24 kHz PCM16。

参数类型 / 可选值默认值说明
modelplus / flash 对应的完整模型 IDqwen-audio-3.0-realtime-plusRealtime 模型
voice内置音色或 ClonedVoiceIdlonganqian首次 session update 后不可改
modalities["text"] / ["text","audio"]文本 + 音频输出模态
turn_detectionSmartTurnOptions / ServerVadOptions / Nonesmart turn轮次检测
workspace_idstr | NoneNone百炼业务空间 ID
regioncn-beijing / ap-southeast-1cn-beijing业务空间地域
max_history_turns1..5050请求中保留的问答轮数

轮次检测示例:

模型与音色

模型:

  • qwen-audio-3.0-realtime-plus
  • qwen-audio-3.0-realtime-flash

内置音色:

  • longanqian
  • longanlingxin
  • longanlingxi
  • longanxiaoxin
  • longanlufeng

这些选项已经写入 Python 类型提示,IDE 可以直接补全。官方能力与事件协议见 Qwen Audio Realtime 文档

自定义音色

声音复刻在百炼侧完成,不是在 LiveKit 插件中上传音频。调用百炼 声音复刻服务时:

  1. 使用 voice-enrollment
  2. target_model 必须设为将要使用的 Realtime 模型。
  3. 提交清晰的单人语音样本。
  4. 保存返回的 voice_id

plus 创建的音色不能用于 flash,插件会在连接前检查模型绑定。

常见问题

开场 generate_reply 为什么需要用户消息?

Qwen 的 Realtime 协议要求创建响应前对话中已有用户消息。插件会在首次开场且尚无 真实用户消息时,把 generate_reply(instructions="...") 转换为合成的用户触发消息; 后续 instructions 仍作为本轮附加指令。

Realtime 模式可以使用 session.say() 吗?

可以。插件会把固定话术包装为一次强约束的朗读指令,并通过当前 Qwen Audio Realtime 连接生成音频,不需要另外配置 TTS:

Qwen Audio Realtime 是对话模型而不是确定性 TTS,因此这里属于“尽量逐字朗读”。 如果业务要求金额、验证码或合规话术必须一字不差,应使用独立的 TTS 模型。

为什么出现“不支持 forcing tool_choice”?

Qwen Audio Realtime 由模型自动选择工具,不支持 LiveKit 强制指定某个工具。插件会 保留参数兼容性并记录警告,但不会把强制选择发送给 Qwen。

为什么工具完成后暂时没有语音结果?

用户仍处于 speech_started 到有效 speech_stopped 之间时,Qwen 拒绝 response.create。插件会等待服务端确认用户轮次结束,再重试工具结果响应,避免在 用户说话中途抢答。