news 2026/3/31 18:07:37

用SenseVoiceSmall做了个智能会议记录项目,附全过程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
用SenseVoiceSmall做了个智能会议记录项目,附全过程

用SenseVoiceSmall做了个智能会议记录项目,附全过程

开会最怕什么?不是议题多,而是会后没人记得清谁说了啥、情绪怎么样、中间有没有关键掌声或笑声。传统录音转文字工具只能给你一串干巴巴的字,而这次我用SenseVoiceSmall 多语言语音理解模型(富文本/情感识别版),搭出了一个真正“懂人话”的会议记录系统——它不只听清了内容,还记住了语气、情绪、节奏,甚至能标出哪段是领导发言、哪句引发全场笑声、哪个节点有人插话打断。

这不是调API跑个demo,而是从零部署、调试、优化到实际用在团队周会里的完整闭环。下面我把整个过程拆成可复现的步骤,包括怎么绕过常见坑、怎么让结果更易读、怎么把识别结果变成真正可用的会议纪要。全程不写一行新模型代码,全靠镜像自带能力+轻量封装。

1. 为什么选SenseVoiceSmall而不是普通ASR?

先说结论:普通语音转文字是“抄笔记”,SenseVoiceSmall是“做观察员”

你可能用过Paraformer、Whisper这类模型,它们强在准确率,但输出永远是纯文本:“张总说项目要提前上线”。而SenseVoiceSmall的底层设计就不是为“转录”服务的,它是为“理解声音场景”服务的。它的输出天然带结构:

  • <|HAPPY|>表示说话人此刻开心
  • <|APPLAUSE|>标记掌声响起的时间点
  • <|zh|>大家好<|en|>Hello everyone自动混语种分段
  • <|SAD|>这个方案可能需要再评估情绪与内容强绑定

这意味着,你不用再花时间人工标注“这段语气很坚定”“这里大家笑了”,模型已经帮你埋好了语义锚点。对会议记录来说,这直接省掉30%以上的后期整理时间。

更重要的是,它支持中、英、日、韩、粤五语种自动识别,且无需提前指定语言。我们团队常有中英文夹杂的讨论,甚至偶尔冒出几句粤语反馈,以前得切三四个工具,现在上传一个音频,结果里自动分段打标,连语种都标好了。

2. 镜像环境快速验证:5分钟确认能否跑通

别急着写代码,先确保镜像本身能正常工作。这是最容易卡住新手的一步——很多问题其实出在环境没配对,而不是模型不行。

2.1 启动前检查依赖

进入镜像终端后,先确认关键库已安装:

# 检查CUDA和PyTorch是否匹配 nvidia-smi python -c "import torch; print(torch.__version__, torch.cuda.is_available())" # 检查funasr版本(必须≥1.1.0,旧版不支持SenseVoiceSmall) pip show funasr

如果funasr版本低于1.1.0,请升级:

pip install --upgrade funasr

注意:镜像文档里提到的pip install av是必须的。av库负责解码各种音频格式(MP3/WAV/ACC),漏装会导致上传MP3时直接报错Unsupported format,错误信息还不明显,容易误判为模型问题。

2.2 运行官方WebUI验证基础功能

直接运行镜像自带的app_sensevoice.py(路径通常为/root/app_sensevoice.py):

python /root/app_sensevoice.py

如果看到类似输出:

Running on local URL: http://127.0.0.1:6006 To create a public link, set `share=True` in `launch()`.

说明服务已启动。此时在本地浏览器打开http://127.0.0.1:6006(需提前配置SSH端口转发),上传一段10秒左右的测试音频(推荐用手机录自己说“今天会议很开心,大家鼓掌通过了方案”),点击识别。

正常结果应包含类似:

<|HAPPY|>今天会议很开心<|APPLAUSE|>大家鼓掌通过了方案

❌ 如果报错CUDA out of memory:说明显存不足,临时改device="cpu"测试(速度慢但能验证逻辑);
❌ 如果返回空或乱码:大概率是音频采样率不对,用ffmpeg转成16kHz再试:

ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav

这一步的目的不是追求完美效果,而是建立信心:模型能跑、输入能进、输出有结构。只要这三点成立,后面全是优化问题。

3. 从WebUI到会议记录系统的三步改造

官方WebUI是个很好的起点,但它面向通用场景,对会议记录来说有三个硬伤:

  • 输出是原始标签格式(如<|HAPPY|>),不便于阅读和归档;
  • 没有区分说话人,多人会议时所有内容堆在一起;
  • 不生成结构化纪要(议题、结论、待办),只是语音流。

我们不做大改,只加三层轻量封装,就能让它变成真正的会议助手。

3.1 第一层:富文本清洗 → 让结果“看得懂”

官方文档提到了rich_transcription_postprocess,但它默认只做简单替换(<|HAPPY|>[开心])。我们把它升级成“会议友好型”清洗器:

# utils/cleaner.py from funasr.utils.postprocess_utils import rich_transcription_postprocess def clean_for_meeting(raw_text): # 基础清洗(保留官方逻辑) clean_text = rich_transcription_postprocess(raw_text) # 会议增强清洗 replacements = { r'<\|HAPPY\|>': '[😄 开心]', r'<\|ANGRY\|>': '[😠 愤怒]', r'<\|SAD\|>': '[😢 悲伤]', r'<\|APPLAUSE\|>': '\n[ 全场掌声]\n', r'<\|LAUGHTER\|>': '[😂 笑声]', r'<\|BGM\|>': '[🎵 背景音乐]', r'<\|zh\|>': '', r'<\|en\|>': '[EN]', r'<\|yue\|>': '[粤]', } for pattern, repl in replacements.items(): import re clean_text = re.sub(pattern, repl, clean_text) return clean_text.strip()

效果对比:
原始输出:<|zh|>张总说<|HAPPY|>方案很棒<|APPLAUSE|><|en|>Great job!
清洗后:张总说[😄 开心]方案很棒\n[ 全场掌声]\n[EN]Great job!

这样既保留了原始语义,又让非技术人员一眼看懂情绪和事件。

3.2 第二层:说话人粗略分离 → 解决“谁在说”

SenseVoiceSmall本身不带说话人分离(diarization),但会议音频通常有自然停顿。我们利用merge_vad=True的特性,在model.generate()中开启语音活动检测(VAD),再按静音段切分:

# 在 app_sensevoice.py 的 sensevoice_process 函数内修改 res = model.generate( input=audio_path, cache={}, language=language, use_itn=True, batch_size_s=60, merge_vad=True, # 启用VAD合并 merge_length_s=15, # 每段最长15秒 ) # 新增:按VAD结果分段并添加说话人标记 if len(res) > 0: segments = [] for i, seg in enumerate(res): # 简单策略:奇数段标为"发言人A",偶数段标为"发言人B" # (真实项目中可接轻量VAD模型,此处为演示简化) speaker = "发言人A" if i % 2 == 0 else "发言人B" text = clean_for_meeting(seg["text"]) segments.append(f"【{speaker}】{text}") final_output = "\n\n".join(segments) return final_output

虽然不如专业diarization精准,但在内部会议这种语境下,80%的场景能正确区分主讲人和回应者,且完全不增加推理延迟。

3.3 第三层:生成结构化纪要 → 从“录音稿”到“可执行文档”

最后一步,把清洗后的文本喂给一个轻量LLM(我们用本地部署的Qwen2-0.5B,1GB显存即可),提示词如下:

你是一个专业的会议纪要助理。请根据以下带情绪和事件标记的语音转录内容,生成标准会议纪要,要求: 1. 提取3个核心议题(用【议题】开头) 2. 每个议题下列出明确结论(用【结论】开头)和待办事项(用【待办】开头,含负责人和截止时间) 3. 保留关键情绪线索(如“李经理[😄 开心]表示支持”) 4. 删除所有重复、口语化表达(如“呃”、“那个”、“然后”) 转录内容: {cleaned_text}

将此逻辑集成进Gradio按钮,点击“生成纪要”即可输出Markdown格式的正式文档。我们实测一次20分钟会议,从上传音频到拿到纪要,全程不到90秒。

4. 实战效果:真实周会音频处理对比

我们用上周团队周会的原始录音(18分钟,中英混杂,含3次掌声、2次笑声)做了全流程测试。以下是关键对比:

维度传统ASR(Whisper)SenseVoiceSmall 改造版
文字准确率92.3%(专有名词错误较多)95.1%(自动校正“Kubernetes”为“K8s”)
情绪识别标出4处[😄 开心]、1处[😠 愤怒]、2处[ 全场掌声]
事件标记精确标出BGM起止、笑声持续时长(约2.3秒)
语种识别需手动切换自动分段:
`【发言人A】我们下周上线<
纪要生成质量需人工重写30分钟LLM直接输出含议题/结论/待办的Markdown,人工仅需校对5分钟

特别值得一提的是“掌声”识别。传统工具只能告诉你“这里有声音”,而SenseVoiceSmall能判断这是有组织的集体掌声(APPLAUSE),而非随机噪音(NOISE)。在会议中,掌声往往对应决策通过的关键节点,这个信号比单纯的文字更可靠。

5. 工程化建议:如何稳定用于生产环境

跑通demo只是开始,真正在团队中长期使用,还需几个关键加固点:

5.1 音频预处理标准化

会议录音质量参差不齐。我们在上传前加了一层FFmpeg预处理:

# 统一转为16kHz单声道WAV,降噪并提升信噪比 ffmpeg -i "$input" -ar 16000 -ac 1 -af "highpass=f=100, lowpass=f=4000, afftdn=nf=-25" "$output"
  • highpass/lowpass滤除低频嗡鸣和高频嘶嘶声
  • afftdn是FFmpeg内置降噪,nf=-25表示降噪强度(数值越小越激进,-25是平衡点)

实测后,识别错误率下降12%,尤其改善了空调噪音下的粤语识别。

5.2 WebUI体验优化

原生Gradio界面适合调试,但团队使用需要更聚焦。我们精简了UI:

  • 移除语言下拉框(默认auto,99%场景够用)
  • 增加“会议模式”开关:开启后自动启用VAD分段+情绪清洗+纪要生成三件套
  • 结果区用不同颜色高亮:蓝色=正文,绿色=[😄 开心],红色=[😠 愤怒],灰色=[ 全场掌声]

代码只需在gr.Blocks内调整组件顺序和默认值,不改动核心逻辑。

5.3 安全与权限控制

生产环境不能让所有人随意上传音频。我们在Nginx层加了基础认证:

location / { auth_basic "Restricted Access"; auth_basic_user_file /etc/nginx/.htpasswd; proxy_pass http://127.0.0.1:6006; }

htpasswd -c /etc/nginx/.htpasswd admin创建管理员账号。简单有效,避免敏感会议录音被误传。

6. 总结:它不是另一个ASR,而是会议场景的“声音理解引擎”

回看整个项目,最大的认知刷新是:语音处理的终点不是文字,而是对沟通意图的理解

SenseVoiceSmall的价值,不在于它比Whisper多识别了0.5%的字,而在于它把声音还原成了有温度、有节奏、有情绪的沟通现场。当系统自动标出“王总监[😠 愤怒]指出进度严重滞后”时,你不需要再听一遍录音去确认语气;当它在“方案通过”后紧跟着标记[ 全场掌声],你就知道这是真正的共识达成,而非客套敷衍。

这个项目没有用到任何大模型微调或复杂工程,全部基于镜像开箱能力。它的启示很朴素:选对工具,比堆参数更重要。当你面对的是真实业务场景(比如会议、客服、访谈),优先考虑那些为场景而生的模型,而不是通用能力最强的模型。

下一步,我们计划把纪要生成模块对接飞书机器人,会议结束自动推送纪要到群,并@相关待办负责人。而这一切,都始于那个不起眼的<|APPLAUSE|>标签。


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/21 11:14:18

SDXL-Turbo性能评测:不同GPU下的推理延迟对比分析

SDXL-Turbo性能评测&#xff1a;不同GPU下的推理延迟对比分析 1. 为什么SDXL-Turbo的“打字即出图”值得认真测一测 你有没有试过在AI绘画工具里输入提示词&#xff0c;然后盯着进度条数秒、甚至十几秒&#xff1f;等图出来的那一刻&#xff0c;灵感可能早就飘走了。而SDXL-T…

作者头像 李华
网站建设 2026/3/27 22:27:16

foobar2000歌词插件foo_openlyrics 2023最新版安装使用指南

foobar2000歌词插件foo_openlyrics 2023最新版安装使用指南 【免费下载链接】foo_openlyrics An open-source lyric display panel for foobar2000 项目地址: https://gitcode.com/gh_mirrors/fo/foo_openlyrics foobar2000作为专业的音乐播放器&#xff0c;其强大的扩展…

作者头像 李华
网站建设 2026/3/21 9:58:56

ESP32固件库下载驱动开发:红外遥控模块完整示例

以下是对您提供的博文内容进行深度润色与结构重构后的技术文章。我以一位深耕嵌入式系统多年、兼具工业级功率电子开发经验与教学传播能力的工程师视角&#xff0c;对原文进行了全面升级&#xff1a;✅彻底去除AI腔调与模板化表达&#xff08;如“本文将从……几个方面阐述”&a…

作者头像 李华
网站建设 2026/3/29 6:01:15

PDF-Extract-Kit-1.0效果展示:低分辨率扫描PDF中细线表格结构恢复效果

PDF-Extract-Kit-1.0效果展示&#xff1a;低分辨率扫描PDF中细线表格结构恢复效果 1. 核心能力概览 PDF-Extract-Kit-1.0是一款专注于处理低质量扫描PDF文档的工具集&#xff0c;其核心能力在于从模糊、低分辨率的扫描件中精确恢复表格结构。这套工具特别擅长处理以下场景&am…

作者头像 李华