基于地平线RDK S100P的端侧离线语音交互系统:全链路实现与性能实测

基于地平线RDK S100P的端侧离线语音交互系统:全链路实现与性能实测

本文记录在 RDK S100P 上落地一套****全离线** **语音交互系统的过程和实测结果。设备在不联网的情况下,完成从唤醒、识别、理解到应答、播报的完整语音对话,整条链路用 ROS2 做了工程化封装。


一、为什么做端侧离线

服务机器人、车载、嵌入式设备很多时候工作在弱网甚至无网环境,而云端语音方案一旦断网就完全不可用。把 ASR(识别)、LLM(理解与对话)、TTS(合成)全部放到设备本地离线运行,主要出于三点考虑:

  • 断网也能正常工作,不依赖网络;

  • 本地直接计算,没有网络往返,延迟更低;

  • 语音数据不离开设备,隐私可控。

前提是模型要足够小、足够快,能在端侧 CPU 上实时跑起来——这也是整条链路工程优化的主要目标。


二、系统全貌与实现流程

系统跑在 RDK S100P 上,全部推理在本地完成,不需要独立 GPU、不需要联网。一次完整对话经过五个环节:


语音唤醒 + 声源定位 → ASR 离线识别 → 意图理解(规则 / LLM 双路)

→ 应答生成(控制执行 / LLM 对话) → 流式 TTS 播报(支持打断)

| 环节 | 做什么 |

|------|--------|

| 唤醒 + 定位 | 麦克风阵列做全向唤醒词检测,并估计声源方向,使设备朝向说话人 |

| ASR 识别 | 端点检测后截取有效语音,离线转写为文本 |

| 意图理解 | 明确指令走规则(快、确定);开放对话走端侧 LLM(灵活) |

| 应答生成 | 控制类直接执行;对话类由端侧 LLM 流式生成 |

| TTS 播报 | 流式分段合成、边生成边播;播报中可被用户打断 |


三、ROS2 工程化封装

整条链路用 ROS2 封装成多节点流水线:每个环节是一个独立节点,节点之间通过消息总线通信;识别、大模型、合成这些重计算下沉为常驻服务,节点本身只负责编排和时序。

这样做的好处:

  • 各环节解耦,可以独立开发、独立替换;

  • 单个节点崩溃能独立重启,不影响整条链路;

  • 重推理常驻,模型只加载一次,多轮对话不重复加载;

  • 唤醒、录音、播报、打断(barge-in)的时序由消息机制统一协调。


四、各环节性能实测

4.1 ASR · 语音识别

经过量化和工程优化,ASR 在 S100P 的 CPU 上跑得远快于实时:

| 指标 | 实测结果 |

|------|----------|

| 实时率 RTF | **≈ 0.06 **(1 秒音频约 60ms 算完,约 16× 实时) |

| 单句识别耗时 | 120 – 360 ms(随句长波动) |

| 模型体积 | 压缩约 3.6×(端侧加载快、占用低) |

| 中文识别准确率 | 量化前后基本无损(量化无明显劣化) |

RTF(实时率)= 处理耗时 ÷ 音频时长,小于 1 才跟得上实时。0.06 意味着识别几乎瞬时完成,延迟预算可以基本都留给后面的理解和合成。

4.2 意图理解 · 规则 / LLM 双路

| 路径 | 处理对象 | 准确率 / 延迟 |

|------|----------|---------------|

| 规则匹配 | 明确控制指令(如前进、停止等) | 零延迟、确定性触发 |

| LLM 意图 | 开放、模糊、自由表达的意图 | 约 **92% **(内部测试集实测) |

控制指令需要即时、确定,用规则零延迟处理;规则覆盖不到的开放表达再交给 LLM。

4.3 LLM · 场景化对话回复

LLM 采用****地平线 BPU 支持的 7B 量化大模型** **,端侧本地推理。在目标场景的问答、寒暄、信息查询中:

| 指标 | 实测结果 |

|------|----------|

| 中文场景回复准确率 | 约 **92% **(内部测试集实测) |

| 回复方式 | 流式生成,边生成边合成播报 |

一个实测观察:输入清晰时模型回复切题、可用;端到端体验的主要短板其实在识别侧——远场、口音造成 ASR 听错,出现「听错了再答」,而不是 LLM 本身的问题。后续优化重点会放在拾音上。

4.4 TTS · 语音合成

| 文本长度 | 合成耗时 | 音频时长 | RTF |

|----------|----------|----------|-----|

| 短(2 字) | 1070 ms | 947 ms | 1.13 |

| 中(11 字) | 2451 ms | 2480 ms | 0.99 |

| 长(18 字) | 4304 ms | 4028 ms | 1.07 |

| 更长(28 字) | 5681 ms | 5781 ms | 0.98 |

TTS 的 RTF 在 1.0 附近(0.98 – 1.13),合成速度约等于实时,长句甚至略快于实时。RTF≈1 看着不快,但配合流式分段(首段只合成开头几个字、不等全文),首字延迟会低很多。

4.5 端到端延迟

| 指标 | 非流式 | 流式优化后 |

|------|--------|------------|

| 说完话 → 首字出声 | ~5 s | ~3 s |

流式管线的做法是:LLM 边生成、首段尽早切出、立刻送去合成播报。这样首字延迟从约 5 秒降到约 3 秒,对话节奏接近正常交流。


五、成果一览

| 环节 | 关键指标 | 实测 |

|------|----------|------|

| ASR | 实时率 RTF | ≈ 0.06 |

| ASR | 模型压缩 | ≈ 3.6× |

| 意图 | 规则路径 | 零延迟、确定 |

| 意图 | LLM 准确率 | ≈ 92% |

| LLM | 中文场景回复准确率 | ≈ 92% |

| TTS | 合成实时率 RTF | ≈ 1.0 |

| 端到端 | 说完话 → 首字 | ~3 s |


六、小结

整套系统在 RDK S100P 上完全离线跑通了「唤醒 → 识别 → 理解 → 应答 → 播报」的语音对话闭环:ASR 实时率约 0.06、规则意图零延迟、意图和场景对话准确率约 92%、TTS 接近实时、端到端首字约 3 秒。配合 ROS2 的多节点封装,整个系统在工程上也比较好维护和迭代。

对没有网络的使用场景来说,端侧离线方案的意义在于不依赖云、不怕断网,本地就能完成低延迟、隐私可控的语音交互。