从 Whisper 或云端 ASR 迁移到 FunASR

当你已经有 Whisper、OpenAI/云端 ASR 或自研语音流水线,并想判断是否值得切到 FunASR 时,可以按这个指南评估。重点是在真实业务音频上比较质量、速度、成本和部署可行性。

什么时候值得评估 FunASR

  • 音频需要留在私有环境内,不能上传到外部云服务。
  • 会议、归档、媒体、客服录音等长音频需要高吞吐转写。
  • 希望一条流水线内完成 VAD、标点、时间戳和说话人分离。
  • 需要 OpenAI 兼容音频接口,接入 Agent、Dify、LangChain、AutoGen 或内部应用。
  • 需要 WebSocket/runtime 服务支撑流式识别或实时字幕。
  • 希望先用 CPU 做可复现 smoke test,再迁移到 GPU 服务。

如果你更需要完全托管服务、厂商 SLA,或你的自有评测显示目标语言/领域还不够好,可以暂时保留现有方案。

快速评估计划

  1. 选择 20-50 条有代表性的音频,覆盖短音频、长录音、噪声、多说话人、目标语言和方言。
  2. 按生产方式运行当前 Whisper 或云端 ASR,保存转写结果、延迟、成本和失败样例。
  3. 用教程跑 FunASR,再根据 部署选型表 选择服务路径。
  4. 用人工审阅或现有 WER/CER 流程比较结果,不要只看一个干净 demo 音频。
  5. 运行 迁移评测示例,为自己的音频目录生成 JSONL 和 Markdown 汇总。
  6. 如果应用已经使用 OpenAI 风格客户端,运行 OpenAI 兼容 API Python 烟测脚本
  7. 分开记录 warmup、模型下载、设备、GPU/CPU 型号、batch size、音频时长和稳定吞吐。

功能映射

现有流程FunASR 路径需要验证什么
Whisper 文件转写教程 · 模型选择转写质量、时间戳、速度、模型下载、CPU/GPU 行为。
Whisper + pyannoteVAD、标点和 spk_model="cam++"说话人标签、换人位置、重叠说话、长静音。
OpenAI 音频 API 或云端批量 ASROpenAI 兼容 API · Kubernetes 模板 · JS/TS 配方/v1/audio/transcriptions、响应格式、客户端兼容性、上传限制。
Dify/LangChain/AutoGen Agent 音频Agent 与 API 配方 或 MCP 服务工具延迟、文件处理、鉴权边界、错误返回。
实时字幕或客服流式识别实时示例分块、断句、重连、背压、中间/最终结果行为。
字幕生成字幕生成器分段可读性、行长、说话人标签、SRT/VTT 兼容性。
离线归档处理批处理示例manifest、重试、进度日志、吞吐、失败文件恢复。

最小本地对比

安装 FunASR,并用你基线评测里的同一条音频运行。若要评测整个目录,可以使用 benchmark_funasr.py 生成 results.jsonlsummary.md

pip install funasr
from funasr import AutoModel

model = AutoModel(
    model="iic/SenseVoiceSmall",
    vad_model="fsmn-vad",
    spk_model="cam++",
    device="cuda",  # 便携 smoke test 可改成 "cpu"
)
result = model.generate(input="sample.wav")
print(result)

若要做可复现的目录级评测:

python examples/migration/benchmark_funasr.py \
  --input /path/to/audio_samples \
  --recursive \
  --model iic/SenseVoiceSmall \
  --device cuda \
  --spk-model cam++ \
  --output-dir outputs/funasr_migration_eval

如果要按 API 服务方式对比:

pip install funasr fastapi uvicorn python-multipart
funasr-server --model sensevoice --device cuda

curl http://localhost:8000/v1/audio/transcriptions \
  -F file=@sample.wav \
  -F model=sensevoice \
  -F response_format=verbose_json

质量与速度检查清单

  • 音频时长、语言、领域、采样率、声道数和说话人数。
  • 模型名、模型版本、FunASR 版本、Python/PyTorch/CUDA 版本,以及 Docker 镜像 tag。
  • 硬件、设备模式、batch size、流式 chunk size,以及是否排除 warmup/模型下载时间。
  • WER/CER 或人工审阅记录:姓名、数字、标点、说话人分离、时间戳、领域词。
  • 延迟、吞吐、GPU/CPU 内存、每小时音频成本、失败文件比例。
  • 运维要求:鉴权、上传限制、TLS、日志、监控、重试和数据留存规则。

上线检查清单

  • 在代表性评测通过前,保留旧流水线作为回退。
  • 先做内部 endpoint 或离线批处理,再对外暴露 API。
  • 为每个请求记录 request id、音频时长、模型、设备、延迟和错误类型。
  • 在 runbook 中固定模型别名和部署命令。
  • 测试噪声、静音、多人重叠、长文件、非 UTF-8 文件名和网络中断。
  • 遇到阻塞时,通过 Deployment Help issue 提交命令、日志、模型、设备和样本特征。

分享迁移结果

如果 FunASR 替代或补充了你的现有 ASR 栈,欢迎提交 Migration Benchmark Reportshowcase issue。包含硬件、速度、质量记录和部署细节的迁移报告,能帮助新用户更快选型。