RuntimeError: [json.exception.type_error.302] type must be number, but is number

该报错通常出现在 Faster-Whisper 已将模型加载并成功转写一段时间后,随机在 model.generate() 阶段抛出;优先排查模型目录里的 config.json 是否完整、以及所用模型的 revision 是否损坏或缺失必需键。

快速结论:该报错通常出现在 Faster-Whisper 已将模型加载并成功转写一段时间后,随机在 model.generate() 阶段抛出;优先排查模型目录里的 config.json 是否完整、以及所用模型的 revision 是否损坏或缺失必需键。

适用环境:Faster-Whisper 1.2.0;ctranslate2 4.0.0;Python 3.10;CPU 推理(device="cpu",compute_type="float32");使用自定义 CT2 模型目录(如 model_ct2_9.30);部分用户使用 systran-large-v3 与 BatchInferencePipeline。

最快修复方案:暂无确认的一步修复方案。Issue 中被验证有效的处理方式是修复/更换模型 revision,使其 config.json 包含全部必需键;另有用户通过 suppress_blank=False 让报错消失,但会影响预测结果,不建议作为首选。

注意事项:使用 suppress_blank=False 只是绕过而非修复,且会改变解码行为、影响输出质量;替换模型 revision 需确认新版本 config.json 字段完整;config.json 缺失或不全时可能抛出的是 type_error.305 而非 type_error.302,两者需区分对待。

问题场景

用户将 Faster-Whisper 作为服务使用,模型(例如 systran-large-v3,或自定义 CT2 模型目录)已成功加载进内存并完成过若干次转写。运行一段时间后,在调用 model.transcribe() / BatchInferencePipeline 时随机触发报错,之后有时又能自行恢复正常;也有用户在单条音频转写 demo 中稳定复现。

报错原文

File "C:\Projects\mjolnir\.venv\Lib\site-packages\faster_whisper\transcribe.py", line 1171, in generate_segments
    ) = self.generate_with_fallback(encoder_output, prompt, tokenizer, options)
File "C:\Projects\mjolnir\.venv\Lib\site-packages\faster_whisper\transcribe.py", line 1404, in generate_with_fallback
    result = self.model.generate(
RuntimeError: [json.exception.type_error.302] type must be number, but is number

原因分析

最可能的原因与模型本身的配置/revision 有关,而不是推理代码或音频输入。Issue 中有用户确认:问题来自所用模型的一个损坏 revision(例如 KBLab/kb-whisper-large 在 5 月 13 日出现损坏,5 月 16 日被修复),期间持续报同样的 type_error.302。另一条关键线索是:config.json 应包含所有必需键,否则会进入未定义行为(UB)并触发该异常。因此可优先怀疑:模型目录(尤其是自定义转换出的 CT2 模型)中的 config.json 缺少字段、字段类型不对,或远端模型仓库的某个 revision 本身有问题。

由于报错表现为“随机出现、又自行恢复”,还可能与该模型 revision 在特定时间点的文件状态、或转换流程产生的不完整配置有关,而非单纯的版本兼容问题。

环境排查

  • 确认 faster-whisper 版本(Issue 中出现 1.2.0)与 ctranslate2 版本(Issue 中出现 4.0.0)是否与模型兼容。
  • 确认 device 与 compute_type(Issue 中为 cpu + float32),排除硬件相关干扰。
  • 确认所用模型来源:是 Hugging Face 上的官方/社区仓库,还是自行转换的 CT2 模型目录(如 model_ct2_9.30)。
  • 检查模型目录中是否存在 config.json,以及其中的键是否齐全、类型是否合法。
  • 若从 Hugging Face 拉取,核对当前使用的 revision/commit 是否在已知问题时间段内。

解决步骤

  1. 先获取完整 traceback,确认报错确实发生在 generate_with_fallback → model.generate 路径,而不是其他位置。
  2. 检查所用模型目录/仓库下的 config.json,确认必需键全部存在、且数值与字符串类型正确;若为自定义 CT2 模型,重新生成或补齐该文件。
  3. 若使用的是社区模型,核对是否存在损坏 revision。Issue 中用户联系模型维护方后,对方修复了 revision,问题随之消失,可优先尝试切换到修复后的 revision/commit。
  4. 作为对比验证,可临时加上 suppress_blank=False;如果报错消失,说明与解码选项/配置相关,但需注意这会改变预测结果,仅用于定位。
  5. 如果 config.json 缺失,可能看到的是 type_error.305 cannot use operator[] with a string argument with null,此时应优先补齐 config.json。

验证方法

修复或更换模型 revision 后,重新加载模型并对之前触发报错的音频(如 0212bc28082f46968100a38da33b2dc9.wav)重复转写;若不再抛出 RuntimeError: [json.exception.type_error.302],且持续运行一段时间后仍稳定,则说明问题已解决。恢复 suppress_blank 默认值后也应保持稳定。

参考来源

SYSTRAN/faster-whisper #1251

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 28744

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注