我把 Hermes 的语音识别从 Whisper 换成 FunASR,它第一次听出了我在生气

lxiol

原文链接:https://mp.weixin.qq.com/s/_aQYGwkL2PsVyn30Ut7xKw

从 Whisper.cpp 迁移到 FunASR SenseVoiceSmall,370+ 条语音验证。最震惊的不是准确率——是 Agent 第一次听出了我的情绪。

副标题:不是一篇工具推荐。是一台 Mac mini 上,从”飞书语音到了但读不了”到”Agent 能听出我的情绪”的真实迁移记录。

先说结论。

FunASR SenseVoiceSmall 给我的最大惊喜不是中文识别更准——虽然确实更准。最大的惊喜是情绪识别。

有一次我在飞书里发了一条语音消息,语气不太好,带着明显的不耐烦。以前 Whisper 转出来的文字是干巴巴的一行话,Hermes 照常回复。这次换成 FunASR 以后,转写结果里带了情绪标记。Hermes 看到标记后,回复的第一句话是:”我能理解你的愤怒。”

那一刻我真的愣住了。

这不是我教的,也不是 prompt 里写的。是语音识别把情绪信息传递给了 Agent,Agent 自然地做出了共情反应。一条语音链路串起来的效果,比我预想的深了一层。

当语音识别不只能听清你说了什么,还能听出你怎么说的——Agent 和你的距离就变了。

01|起因:飞书语音消息到了,但 Hermes 读不了

这个问题可能很多人没意识到:飞书的语音消息通过 API 到达 Agent 时,只有原始音频文件,没有文字。

飞书客户端有”语音转文字”功能,那是客户端侧的能力。当一条语音消息通过飞书开放平台 API 推送给 Hermes 时,消息类型是 voice,内容是空的——日志里清楚写着 type=voice text='' media=1。Hermes 拿到的是一个 OGG 格式的音频文件,必须自己做转写。

企业微信的语音消息也是类似的情况。

所以本地 STT(Speech-to-Text)不是可选项,而是必选项。没有它,Agent 就是个”聋子”——你在飞书里发再多语音,它一个字都看不到。

之前我用的是 Whisper.cpp + medium 模型。英文表现不错,但中文语音有几个持续性问题:口语识别不稳定,语气词经常被吞;中英混合容易出错,英文术语会被音译成奇怪的中文;超过 30 秒的长语音偶尔截断。

我需要换一个专门针对中文优化的方案。

02|为什么选 FunASR,以及 SenseVoiceLarge 为什么用不了

FunASR 是阿里达摩院开源的语音识别框架,GitHub 上超过 15000 Star(截至 2026 年 5 月)。它不是单个模型,而是一个统一工具包,集成了 Paraformer、SenseVoice、CT-Transformer 等多个模型。

我选的是 SenseVoiceSmall。这里有个值得说的背景:SenseVoice 系列其实有两个模型——Small 和 Large。Large 是论文里效果最强的那个,但阿里没有开源。 ModelScope 和 HuggingFace 上能下载到的只有 SenseVoiceSmall(234M 参数)。这一点让我当时有点不爽——你发了论文说效果多好,但最强的模型拿不到。

不过 SenseVoiceSmall 本身也够用。它的特点:

中文优化。 训练数据大量来自真实中文场景——会议录音、客服对话、短视频口播。非自回归端到端架构,官方声称处理 10 秒音频的推理延迟在毫秒级。  不只识别文字。 SenseVoice 同时支持语种识别、情感分析和音频事件检测。它能识别高兴、悲伤、愤怒、中性、恐惧、厌恶、惊讶等 7 种情感状态。这就是后来”听出生气”的技术基础。  轻量级。 234M 参数,CPU 推理就能跑。根据 FunASR 官方基准测试,SenseVoiceSmall 在 GPU 上达到 170 倍实时速度,在 CPU 上也有 17 倍实时速度——比 Whisper-large-v3 在 GPU 上还快 13 倍。

FunASR 的统一 AutoModel 接口也很方便——换模型只需要改一个参数。

03|迁移过程:写了一个兼容脚本,但 Hermes 把自己搞崩了

最干净的迁移方式不是改 Hermes 源码,而是写一个命令行兼容的包装脚本。我写了一个 Python 脚本放在系统 PATH 里,接口和 Whisper CLI 完全一致。Hermes 完全不知道底层已经换了引擎。

脚本核心逻辑很简单:加载 FunASR 的 AutoModel,指定 SenseVoiceSmall 和 CPU 设备,调用 generate 做转写,用 rich_transcription_postprocess 做后处理,写结果到文本文件。Hermes 配置只需要改两处:STT provider 和命令路径。

但迁移过程中出了一次事故。

5 月 30 日,Hermes 在做最后一步——切换 STT 配置并重启网关——的时候,它用了一个不正确的重启命令,直接把自己搞崩溃了。 我在飞书里发现 Hermes 不回复了,去查日志才发现是重启命令的问题。

后来我在飞书里跟 Hermes 说:”你在上周六配置 FunASR 最后一步重启给自己搞崩溃了,我后来查看了相关日志,是因为你使用了不正确的重启命令。”

这是一个很有教育意义的翻车:Agent 在做自身配置变更时,如果不确定正确的操作流程,可能会把自己搞挂。所以关键操作一定要人类确认,或者至少让 Agent 先只读检查。

04|模型下载也踩了坑

FunASR 的完整语音处理流水线需要多个模型配合:

FunASR 模型列表

前三个模型下载比较顺利。cam++ 说话人分离模型 31 秒就下完了。但 emotion2vec+ 比较大(约 1 GB),下载到 273 MB 时脚本超时了(300 秒限制),模型文件卡在临时目录里。

后来 Hermes 自己发现这个问题,手动把临时目录里的 model.pt 文件移到了正确位置,才完成了安装。

还有一个容易忽略的坑:FunASR 的 Python 依赖比 Whisper.cpp 重得多。Whisper.cpp 是编译好的二进制文件,几乎无依赖。FunASR 需要 Python、PyTorch、torchaudio 等一整套环境。建议用虚拟环境隔离。

05|370 条真实语音跑下来,效果怎么样

迁移完成后,Hermes 自动处理飞书里的语音消息。日志里清楚记录了每次转写:Transcribed audio_xxx.ogg via local STT command (SenseVoiceSmall, 289 chars)。到目前为止,音频缓存目录里已经有 371 条 OGG 文件。

整体感受:

中文口语识别明显更准。 语气词不会被吞掉。以前 Whisper 会把”我觉得吧”识别成”我觉得八”,现在这种问题基本消失了。  中英混合处理更稳定。 在中文语音里穿插的英文术语能被正确识别,不会强行音译。  长语音不再截断。 60 秒以上的语音消息也能完整转写。  情绪标记真的有用。 转写结果里会带情感标签,Hermes 看到后会调整回复语气。开头说的”我能理解你的愤怒”就是这么来的。  

Whisper.cpp vs FunASR 对比

06|它和云方案比怎么样

我不用云端 STT 的核心原因是隐私。飞书语音消息包含真实对话内容,发到云端 API 处理意味着数据离开本地。对于一个 7x24 运行的个人 Agent,语音内容的隐私性必须前置。

其次是延迟。本地推理没有网络往返。一条 10 秒语音的 FunASR 转写几乎秒级完成。

第三是成本。370 条语音用云端 API 会持续累积费用。本地方案是一次部署、零边际成本。

07|对普通读者和技术读者分别意味着什么

如果你不是技术背景,这篇文章的核心信息是:你的 AI Agent 不只能”听懂”你说的话,还能”听出”你的情绪——而且这一切在你自己的电脑上完成,不需要把语音发到云端。

如果你是技术读者,更值得关注的是迁移策略:不要改框架源码,写兼容接口层;关键操作让人类确认(否则 Agent 会把自己搞崩);用虚拟环境隔离依赖;提前下载模型避免超时;设好缓存清理策略。

08|边界和风险

本文基于我在一台 Mac mini 上的真实部署和使用经验,截至 2026 年 6 月 5 日。

环境信息已做脱敏处理:不公开本地用户名、完整路径、IP 地址、API Key、端口号、具体会话名、日志原文和语音内容。音频缓存只描述统计特征。

SenseVoiceLarge 未开源这一事实基于 ModelScope 和 HuggingFace 平台的公开信息,未来可能变化。FunASR 的版本和功能可能随官方更新变化。

本文结论只代表这次环境观察,不代表所有硬件、系统版本或音频场景。

最后一句话

这就是我继续折腾 Personal AI Stack 的原因。

语音是 Agent 进入真实工作场景的重要入口。当你在飞书里发一条语音消息,Agent 能准确听懂你说的是什么、听出你的情绪、及时处理、全程不离开你的电脑——这才是”个人 AI 系统”应该有的样子。

不吹,不黑。先跑起来,再做判断。

相关阅读

截至发稿说明

本文基于真实本地部署和使用记录整理。

关键数据来源:Hermes Gateway 日志(语音消息接收与转写记录)、Agent 日志(FunASR 安装与配置变更时间线)、371 条音频缓存文件统计、FunASR 官方 GitHub 仓库(15K+ Star)、官方基准测试数据。

飞书 API 语音消息行为经 Hermes Gateway 实际接收日志确认(type=voice, text=’’)。SenseVoiceLarge 开源状态经 ModelScope 和 HuggingFace 平台交叉验证。产品价格、功能具有时效性,发布时以官方实时信息为准。

互动问题:

你用 AI 处理过语音吗?如果 Agent 能听出你的情绪,你觉得这是贴心还是有点吓人?

评论区聊聊。

写作声明:本文基于脱敏后的本地部署材料整理,AI 辅助起草初稿,人工负责事实复核、边界确认和发布前检查。


💬 本文评论区已开启,但暂无读者留言。

本文转载自微信公众号,如有侵权请联系删除。

  • 标题: 我把 Hermes 的语音识别从 Whisper 换成 FunASR,它第一次听出了我在生气
  • 作者: lxiol
  • 创建于 : 2026-06-08 11:26:44
  • 更新于 : 2026-06-30 17:05:34
  • 链接: https://blog.lxiol.cn/2026/06/08/我把-Hermes-的语音识别从-Whisper-换成-FunASR它第一次听出了我在生气/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。