DEBUG.WIKI
京东云;让 AI 进入真实业务;零售 · 物流 · 客服 · 硬件;查看方案 →
ZgoCloud:多地区部署,按需选节点;日本、美国、香港、德国
Evoxt;最高 6.0GHz CPU;高频云服务器 · 免费每周备份;查看配置 →

VoicePipeline 配置了 float32 仍报 Invalid output dtype,先看它是不是字符串

VoicePipeline 的历史实现可能拒绝字符串 float32 配置。先在配置边界转换受支持类型,再确认安装包包含 dtype 规范化修复,并测试非法类型和字节序边界。

VoicePipeline 配置了 float32 仍报 Invalid output dtype,先看它是不是字符串

语音配置从 JSON 或 YAML 读入后,dtype 通常是字符串。旧版 Agents SDK 的 VoicePipeline 曾因此拒绝本来支持的音频类型:

UserError: Invalid output dtype

问题出现在输出音频转换阶段。即使语音请求已经发出,后续消费音频流时仍会报错,因此改 API key 或重新发起同样的请求通常没有帮助。

为什么字符串和 NumPy 类型会表现不同

#4777 在 v0.22.0 对应的 main 89c02c82 上记录了这个问题。旧实现直接比较配置值与 np.float32、np.int16;配置里的字符串保留下来后,比较结果不符合预期。

短期内可以在应用配置边界明确转换允许的值:

import numpy as np

def resolve_audio_dtype(value):
    allowed = {"float32": np.float32, "int16": np.int16}
    if value not in allowed:
        raise ValueError("音频 dtype 只允许 float32 或 int16")
    return allowed[value]

tts_settings = {"dtype": resolve_audio_dtype("float32")}

这是针对从文本配置读取的两种格式做白名单处理,再把 tts_settings 放进原有 pipeline 配置。不要把任意 NumPy dtype 都放行。

长期修复已经合并,但要核对安装包

#4778 于 2026 年 9 月 7 日合并,对 dtype 做规范化解析。选择升级版本时,应确认安装版本包含该修复,而不能只根据 issue 已关闭就判断当前环境已经修好。

验收可以用离线 TTS 测试模型:让同一小段音频分别走字符串配置、NumPy 类型对象和 dtype 对象,检查最终数组的 dtype 是否相同。也要给 int32 和不可解析的值留负例,避免配置错误静默进入播放链。

修复没有把所有字节序和数据类型都变成受支持格式。尤其是非本机字节序请求,涉及真实音频转换,不能靠改 dtype 标签就认为样本内容正确。