跳到正文

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 核心网络配置

字段名类型默认值取值与约束详细说明与调优建议
hoststring"0.0.0.0"IP 地址 / "0.0.0.0"服务绑定的网卡 IP。"0.0.0.0" 监听所有网卡;跨机或对接 FreeSWITCH 时请确保防火墙已放通。
portuint16100991 ~ 65535监听的 TCP 端口。对接 FreeSWITCH mod_audio_fork 时的推流端口。
healthPathstring"/health"路径字符串HTTP GET 健康检查端点路径(兼容 /health/healthz),返回运行状态、运行时间与当前会话指标。
wsPathstring"/audio"路径字符串WebSocket 音频推流路径。FreeSWITCH 连接 URL 对应为 ws://<host>:<port>/audio
wsSubprotocolstring"audio.drachtio.org"子协议名称WebSocket 子协议握手过滤。留空表示允许任意客户端连接;若填写(如 "audio.drachtio.org"),则客户端握手必须匹配。

3. concurrency 并发与资源调度配置

字段名类型默认值取值与约束详细说明与调优建议
maxSessionsint32256≥ 1系统最大并发流式会话上限。当同时在线通话路数达到该值时,后续连接在 HTTP 握手阶段返回 503 Service Unavailable 快速熔断,防止 CPU 耗尽。
sessionPoolSizeint321281 ~ maxSessions预分配 Session 对象池容量。连接断开时会话对象回收到池中复用,降低内存高频分配与碎片开销。
ioWorkersint3281 ~ CPU 核心数I/O 事件循环 Worker 线程数。每个 Worker 运行独立的非阻塞 select 事件循环,可并发承载数十路 WebSocket 流。对于 8~16 核服务器建议设置为 4 ~ 8
instancePoolSizeint3261 ~ 64推理实例池容量(模型句柄池)。多路并发识别时从池中非阻塞借出模型句柄,避免多会话抢占单一把锁造成 Worker 卡顿。建议配置为 CPU 核心数 * 0.75 ~ 1.0
inferenceThreadsint3221 ~ 8单实例内部计算线程数。每个 ONNX Runtime / 模型推理实例内部用于算子并行的 CPU 线程数。
acceptBacklogint3225616 ~ 1024TCP 监听队列等待长度(listen(backlog))。高并发建连时建议设为 256 或更高。
workerPollTimeoutMsint32205 ~ 100 (ms)Worker 线程 select 系统调用的单轮超时时间。值越小响应越灵敏,推荐 20ms

4. socket 套接字与网络缓冲区配置

字段名类型默认值说明与调优建议
tcpNoDelaybooltrue启用 TCP_NODELAY 禁用 Nagle 算法,避免小音频包产生延迟。实时流式必须保持 true
maxFrameBytesint321048576单个 WebSocket 帧最大允许字节数(默认 1MB)。超过后判定为协议异常并断开连接。
readBufferBytesint3265536单个连接接收缓冲区初始大小(默认 64KB)。
writeBufferBytesint3265536单个连接发送缓冲区大小(默认 64KB)。
recvBufferBytesint3265536底层 TCP Socket 接收缓冲区 SO_RCVBUF(默认 64KB)。
sendBufferBytesint3265536底层 TCP Socket 发送缓冲区 SO_SNDBUF(默认 64KB)。

5. loggingrecording 日志及录音配置

字段名类型默认值说明与调优建议
logging.dirstring"logs"日志输出目录,按天滚动写入。
logging.debugTextFramesboolfalse是否在日志中打印客户端发送的 Text Frame(包含元数据 JSON)。
logging.debugAudioFramesboolfalse是否在日志中打印每次收到 Binary PCM 帧的长度与频率(调试用)。
logging.debugRecognitionStateboolfalse是否打印内部 ASR 识别状态转换细节。
recording.enabledboolfalse音频自动落盘录音开关。true 时会将每路会话接收到的原始 PCM 音频保存为 .pcm 文件。
recording.dirstring"recordings"录音文件存储目录。

6. asr 引擎与 Profile 模式配置

6.1 全局顶层参数

字段名类型默认值说明与调优建议
activeProfilestring"sensevoice-pseudo-streaming"当前生效的场景 Profile 名称。对应 profiles 字典中的键名(如 sensevoice-pseudo-streamingparaformer-2passparaformer-online)。
sampleRateint3216000输入音频采样率(FunASR 模型统一要求 16000Hz PCM16)。
quantizebooltrueint8 模型量化开关true 加载 model_quant.onnx(推理提速 2~3 倍,内存减少 60%);false 加载 float32 原生模型。
idleFinalizeMsint321000静音终态自动结算门限(ms)。说话暂停达到该时长时服务端自动触发句尾终态并推送带标点的 type: "final"。外呼打断推荐 800 ~ 1200ms
partialMinIntervalMsint32150向客户端下发 Partial 字幕的最小时间间隔(ms)。网络层节流,防止短时间内网络高频发包。
hotwordsFilestring"hotword.json"独立热词配置文件路径。指定热词词库 JSON 文件。
defaultHotwordProfilestring"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/掌声等)标签;通用并发与推理参数(instancePoolSizeinferenceThreadsidleFinalizeMs 等)自动继承全局配置。

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. 模型相对路径与自动寻址规则

配置文件中的 modelDironlineModelDirofflineModelDirvadDirpuncDir 支持简化模型目录名(如 "funasr-sensevoicesmall-zh-cantonese-en-ja-ko-onnx")。

服务端启动时会依次探测:

  1. config_dir / <path>
  2. config_dir / .. / models / <path>
  3. config_dir / .. / .. / models / <path>
  4. 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"
  }
}

文档与代码在同一仓库维护,现有 Markdown 是唯一内容源。