外观
FunASR Online Streaming ASR Server 配置参考
本文档详细说明 fanasr-asr-online-server 的配置文件 config.json 中的每一个配置项、默认值、类型约束、取值范围、作用机制及调优建议。
1. 完整配置文件示例
json
{
"server": {
"host": "0.0.0.0",
"port": 10099,
"healthPath": "/health",
"wsPath": "/audio",
"wsSubprotocol": "audio.drachtio.org"
},
"concurrency": {
"maxSessions": 256,
"sessionPoolSize": 128,
"ioWorkers": 8,
"instancePoolSize": 6,
"inferenceThreads": 2,
"acceptBacklog": 256,
"workerPollTimeoutMs": 20
},
"socket": {
"tcpNoDelay": true,
"maxFrameBytes": 1048576,
"readBufferBytes": 65536,
"writeBufferBytes": 65536,
"recvBufferBytes": 65536,
"sendBufferBytes": 65536
},
"logging": {
"dir": "logs",
"debugTextFrames": false,
"debugAudioFrames": false,
"debugRecognitionState": false
},
"recording": {
"enabled": false,
"dir": "recordings"
},
"asr": {
"activeProfile": "sensevoice-pseudo-streaming",
"sampleRate": 16000,
"quantize": true,
"idleFinalizeMs": 1000,
"partialMinIntervalMs": 150,
"profiles": {
"sensevoice-pseudo-streaming": {
"description": "SenseVoiceSmall 极速伪流式(多语种检测 + 原生富文本标点/ITN + 情绪识别)",
"mode": "pseudo_streaming",
"modelDir": "funasr-sensevoicesmall-zh-cantonese-en-ja-ko-onnx",
"vadDir": "funasr-fsmn-vad-zh-onnx",
"language": "auto",
"useItn": true,
"firstPartialMinMs": 150,
"maxUtteranceMs": 15000
},
"paraformer-2pass": {
"description": "Paraformer 2-Pass 双流模式(第1流实时 partial + 第2流离线大模型 final + CT-Transformer 标点纠错)",
"mode": "2pass",
"onlineModelDir": "funasr-paraformer-large-online-zh-onnx",
"offlineModelDir": "funasr-paraformer-large-zh-onnx",
"vadDir": "funasr-fsmn-vad-zh-onnx",
"puncDir": "funasr-ct-transformer-zh-onnx",
"chunkSize": [5, 10, 5]
},
"paraformer-online": {
"description": "Paraformer 单流实时模式(纯流式 CIF 毫秒级上屏,无句尾二次重算)",
"mode": "online",
"onlineModelDir": "funasr-paraformer-large-online-zh-onnx",
"vadDir": "funasr-fsmn-vad-zh-onnx",
"chunkSize": [5, 10, 5]
}
},
"hotwordsFile": "hotword.json",
"defaultHotwordProfile": "default"
}
}2. server 核心网络配置
| 字段名 | 类型 | 默认值 | 取值与约束 | 详细说明与调优建议 |
|---|---|---|---|---|
host | string | "0.0.0.0" | IP 地址 / "0.0.0.0" | 服务绑定的网卡 IP。"0.0.0.0" 监听所有网卡;跨机或对接 FreeSWITCH 时请确保防火墙已放通。 |
port | uint16 | 10099 | 1 ~ 65535 | 监听的 TCP 端口。对接 FreeSWITCH mod_audio_fork 时的推流端口。 |
healthPath | string | "/health" | 路径字符串 | HTTP GET 健康检查端点路径(兼容 /health、/healthz),返回运行状态、运行时间与当前会话指标。 |
wsPath | string | "/audio" | 路径字符串 | WebSocket 音频推流路径。FreeSWITCH 连接 URL 对应为 ws://<host>:<port>/audio。 |
wsSubprotocol | string | "audio.drachtio.org" | 子协议名称 | WebSocket 子协议握手过滤。留空表示允许任意客户端连接;若填写(如 "audio.drachtio.org"),则客户端握手必须匹配。 |
3. concurrency 并发与资源调度配置
| 字段名 | 类型 | 默认值 | 取值与约束 | 详细说明与调优建议 |
|---|---|---|---|---|
maxSessions | int32 | 256 | ≥ 1 | 系统最大并发流式会话上限。当同时在线通话路数达到该值时,后续连接在 HTTP 握手阶段返回 503 Service Unavailable 快速熔断,防止 CPU 耗尽。 |
sessionPoolSize | int32 | 128 | 1 ~ maxSessions | 预分配 Session 对象池容量。连接断开时会话对象回收到池中复用,降低内存高频分配与碎片开销。 |
ioWorkers | int32 | 8 | 1 ~ CPU 核心数 | I/O 事件循环 Worker 线程数。每个 Worker 运行独立的非阻塞 select 事件循环,可并发承载数十路 WebSocket 流。对于 8~16 核服务器建议设置为 4 ~ 8。 |
instancePoolSize | int32 | 6 | 1 ~ 64 | 推理实例池容量(模型句柄池)。多路并发识别时从池中非阻塞借出模型句柄,避免多会话抢占单一把锁造成 Worker 卡顿。建议配置为 CPU 核心数 * 0.75 ~ 1.0。 |
inferenceThreads | int32 | 2 | 1 ~ 8 | 单实例内部计算线程数。每个 ONNX Runtime / 模型推理实例内部用于算子并行的 CPU 线程数。 |
acceptBacklog | int32 | 256 | 16 ~ 1024 | TCP 监听队列等待长度(listen(backlog))。高并发建连时建议设为 256 或更高。 |
workerPollTimeoutMs | int32 | 20 | 5 ~ 100 (ms) | Worker 线程 select 系统调用的单轮超时时间。值越小响应越灵敏,推荐 20ms。 |
4. socket 套接字与网络缓冲区配置
| 字段名 | 类型 | 默认值 | 说明与调优建议 |
|---|---|---|---|
tcpNoDelay | bool | true | 启用 TCP_NODELAY 禁用 Nagle 算法,避免小音频包产生延迟。实时流式必须保持 true。 |
maxFrameBytes | int32 | 1048576 | 单个 WebSocket 帧最大允许字节数(默认 1MB)。超过后判定为协议异常并断开连接。 |
readBufferBytes | int32 | 65536 | 单个连接接收缓冲区初始大小(默认 64KB)。 |
writeBufferBytes | int32 | 65536 | 单个连接发送缓冲区大小(默认 64KB)。 |
recvBufferBytes | int32 | 65536 | 底层 TCP Socket 接收缓冲区 SO_RCVBUF(默认 64KB)。 |
sendBufferBytes | int32 | 65536 | 底层 TCP Socket 发送缓冲区 SO_SNDBUF(默认 64KB)。 |
5. logging 与 recording 日志及录音配置
| 字段名 | 类型 | 默认值 | 说明与调优建议 |
|---|---|---|---|
logging.dir | string | "logs" | 日志输出目录,按天滚动写入。 |
logging.debugTextFrames | bool | false | 是否在日志中打印客户端发送的 Text Frame(包含元数据 JSON)。 |
logging.debugAudioFrames | bool | false | 是否在日志中打印每次收到 Binary PCM 帧的长度与频率(调试用)。 |
logging.debugRecognitionState | bool | false | 是否打印内部 ASR 识别状态转换细节。 |
recording.enabled | bool | false | 音频自动落盘录音开关。true 时会将每路会话接收到的原始 PCM 音频保存为 .pcm 文件。 |
recording.dir | string | "recordings" | 录音文件存储目录。 |
6. asr 引擎与 Profile 模式配置
6.1 全局顶层参数
| 字段名 | 类型 | 默认值 | 说明与调优建议 |
|---|---|---|---|
activeProfile | string | "sensevoice-pseudo-streaming" | 当前生效的场景 Profile 名称。对应 profiles 字典中的键名(如 sensevoice-pseudo-streaming、paraformer-2pass、paraformer-online)。 |
sampleRate | int32 | 16000 | 输入音频采样率(FunASR 模型统一要求 16000Hz PCM16)。 |
quantize | bool | true | int8 模型量化开关。true 加载 model_quant.onnx(推理提速 2~3 倍,内存减少 60%);false 加载 float32 原生模型。 |
idleFinalizeMs | int32 | 1000 | 静音终态自动结算门限(ms)。说话暂停达到该时长时服务端自动触发句尾终态并推送带标点的 type: "final"。外呼打断推荐 800 ~ 1200ms。 |
partialMinIntervalMs | int32 | 150 | 向客户端下发 Partial 字幕的最小时间间隔(ms)。网络层节流,防止短时间内网络高频发包。 |
hotwordsFile | string | "hotword.json" | 独立热词配置文件路径。指定热词词库 JSON 文件。 |
defaultHotwordProfile | string | "default" | 默认生效的热词 Profile ID。在客户端未显式传 hotwordProfile 时生效。 |
7. asr.profiles 场景 Profile 详解
Profile 1: sensevoice-pseudo-streaming (默认推荐)
json
{
"description": "SenseVoiceSmall 极速伪流式(多语种检测 + 原生富文本标点/ITN + 情绪识别)",
"mode": "pseudo_streaming",
"modelDir": "funasr-sensevoicesmall-zh-cantonese-en-ja-ko-onnx",
"vadDir": "funasr-fsmn-vad-zh-onnx",
"language": "auto",
"useItn": true,
"firstPartialMinMs": 150,
"maxUtteranceMs": 15000
}- 工作机制:基于轻量 FSMN-VAD 毫秒级判决语音起止,首字 150ms 极速通道上屏,中间语音按自适应步长(200~500ms)由 SenseVoice 实例池增量推理,句尾自动进行逆文本归一化与富文本/情绪解析;
- 专有参数:
firstPartialMinMs(默认150ms):SenseVoice 伪流式模式专用的首字极速上屏门限。用户开始说话后累积音频达到该门限即刻触发第 1 次 partial 推理,实现极速上屏;maxUtteranceMs(默认15000ms):SenseVoice 伪流式模式专用的单句最长持续时长截断保护。防止超长无静音说话导致音频缓冲无限膨胀,达到该时长自动切句结算;
- 特性:原生多语种(中英粤日韩)混合自动检测、自带高质量标点与 ITN、带情绪(开心/愤怒/悲伤等)和事件(笑声/BGM/掌声等)标签;通用并发与推理参数(
instancePoolSize、inferenceThreads、idleFinalizeMs等)自动继承全局配置。
Profile 2: paraformer-2pass (Paraformer 双流模式)
json
{
"description": "Paraformer 2-Pass 双流模式(第1流实时 partial + 第2流离线大模型 final + CT-Transformer 标点纠错)",
"mode": "2pass",
"onlineModelDir": "funasr-paraformer-large-online-zh-onnx",
"offlineModelDir": "funasr-paraformer-large-zh-onnx",
"vadDir": "funasr-fsmn-vad-zh-onnx",
"puncDir": "funasr-ct-transformer-zh-onnx",
"chunkSize": [5, 10, 5]
}- 工作机制:Pass 1 实时流式切片送入
Paraformer-Online解码 partial;Pass 2 句尾调度Paraformer离线大模型 +CT-Transformer标点模型重算整句输出 final 并结合热词偏置纠错; - 特性:支持
[5, 10, 5]灵活流式窗口,支持深度热词词库注入。
Profile 3: paraformer-online (纯单流实时模式)
json
{
"description": "Paraformer 单流实时模式(纯流式 CIF 毫秒级上屏,无句尾二次重算)",
"mode": "online",
"onlineModelDir": "funasr-paraformer-large-online-zh-onnx",
"vadDir": "funasr-fsmn-vad-zh-onnx",
"chunkSize": [5, 10, 5]
}- 工作机制:纯流式 CIF 毫秒级上屏,句尾直接以流式结果封口,无离线大模型二次重算开销。
8. 模型相对路径与自动寻址规则
配置文件中的 modelDir、onlineModelDir、offlineModelDir、vadDir、puncDir 支持简化模型目录名(如 "funasr-sensevoicesmall-zh-cantonese-en-ja-ko-onnx")。
服务端启动时会依次探测:
config_dir / <path>config_dir / .. / models / <path>config_dir / .. / .. / models / <path>current_working_dir / models / <path>
无需硬编码机器专属绝对路径。
9. 典型场景配置方案
场景 A:智能客服与外呼推荐(SenseVoiceSmall 伪流式多语种 + 情绪感知)
json
{
"server": {
"host": "0.0.0.0",
"port": 10099,
"healthPath": "/health",
"wsPath": "/audio",
"wsSubprotocol": "audio.drachtio.org"
},
"concurrency": {
"maxSessions": 256,
"sessionPoolSize": 128,
"ioWorkers": 8,
"instancePoolSize": 6,
"inferenceThreads": 2
},
"asr": {
"activeProfile": "sensevoice-pseudo-streaming",
"quantize": true,
"idleFinalizeMs": 1000
}
}场景 B:大模型热词纠错场景(Paraformer 2-Pass 高精度纠错)
json
{
"server": {
"host": "0.0.0.0",
"port": 10099,
"healthPath": "/health",
"wsPath": "/audio"
},
"concurrency": {
"maxSessions": 128,
"ioWorkers": 4
},
"asr": {
"activeProfile": "paraformer-2pass",
"hotwordsFile": "hotword.json",
"defaultHotwordProfile": "default"
}
}