Model Selection Guide
Choose a first model, compare FunASR with Whisper or cloud ASR, and decide which model alias to expose through the OpenAI-compatible API.
Fast default path
If you are unsure, start with SenseVoice-Small. It is the strongest first choice for demos, private APIs, multilingual transcription, speaker-aware meeting transcripts, and agent voice input.
from funasr import AutoModel
model = AutoModel(
model="iic/SenseVoiceSmall",
vad_model="fsmn-vad",
spk_model="cam++",
device="cuda", # use "cpu" for a portable smoke test
)
result = model.generate(input="meeting.wav")
Decision table
| Need | Start with | Why | Next doc |
|---|---|---|---|
| Fast multilingual private transcription | SenseVoice-Small | Strong default with ASR, emotion tags, audio event tags, and CPU viability. | Tutorial |
| Mandarin production ASR | Paraformer-Large | Mature Chinese ASR path with VAD and punctuation. | Tutorial |
| English-only route in the API example | paraformer-en | Compact English route for OpenAI-style compatibility checks. | OpenAI API |
| LLM-based ASR or 31-language experiments | Fun-ASR-Nano | LLM-based path; use vLLM when decoder throughput matters. | vLLM guide |
| Live captions or call-center streams | Runtime WebSocket service | Designed for long-lived streaming sessions and partial results. | Realtime examples |
| Migration from Whisper/cloud ASR | SenseVoice-Small first | Gives a strong baseline before deeper model-specific tuning. | Migration guide |
OpenAI-compatible API aliases
The examples/openai_api server exposes short aliases so application teams do not need to know model repository IDs.
| Alias | Underlying path | Use when |
|---|---|---|
sensevoice | iic/SenseVoiceSmall | You want the default private speech API with multilingual ASR, event tags, and good CPU/GPU behavior. |
paraformer | paraformer-zh | You want a Mandarin-oriented production route with VAD and punctuation. |
paraformer-en | paraformer-en | You want a compact English route in OpenAI-style clients. |
fun-asr-nano | FunAudioLLM/Fun-ASR-Nano-2512 | You are evaluating LLM-based ASR, 31-language coverage, or vLLM acceleration. |
curl http://localhost:8000/v1/models
python examples/openai_api/smoke_test.py --base-url http://localhost:8000 --model sensevoice
Runtime path by workload
| Workload | Runtime path | Notes |
|---|---|---|
| Notebook or one-off evaluation | Python AutoModel | Shortest path for install, model download, and output-shape checks. |
| Internal HTTP service | OpenAI-compatible API | Reuse OpenAI-style clients, Dify, n8n, LangChain, AutoGen, and HTTP nodes. |
| Repeatable local container demo | Docker Compose API | CPU-first smoke test; adapt the image before using CUDA. |
| Internal cluster service | Kubernetes API template | Private ClusterIP, persistent model cache, health probes, and port-forward smoke test. |
| Live audio | Runtime WebSocket service | Validate chunking, VAD, endpointing, reconnects, and client backpressure with real audio. |
| LLM-based ASR throughput | vLLM path for Fun-ASR-Nano | vLLM accelerates autoregressive decoding; it does not apply to non-autoregressive Paraformer. |
See the deployment matrix when you are choosing between these paths.
Benchmark before committing
- Use 20-50 representative audio files that cover short clips, long meetings, silence, noise, overlapping speakers, domain vocabulary, and target languages.
- Record model name, model revision, FunASR version, device, CPU/GPU type, CUDA/PyTorch version, runtime path, batch size, and whether warmup/model download time is excluded.
- Track quality with your normal WER/CER or human review process, not only transcript readability.
- Track latency, throughput, memory, failures, and upload size limits together.
- Keep at least one public sample for smoke tests and at least one private realistic sample for deployment validation.
For migration work, use the migration benchmark example and the migration guide.