SenseVoiceSmall实战案例:智能客服情绪识别系统搭建步骤详解
本文介绍了如何在星图GPU平台上自动化部署SenseVoiceSmall多语言语音理解模型(富文本/情感识别版),快速搭建智能客服情绪识别系统。通过该模型,系统不仅能将客服通话录音转为文字,还能自动识别客户情绪(如开心、愤怒),并标记背景音乐等事件,从而帮助管理者高效进行服务质量分析与风险预警。
SenseVoiceSmall实战案例:智能客服情绪识别系统搭建步骤详解
1. 引言
想象一下,你是一家电商公司的客服主管。每天,客服团队要处理成百上千的通话录音,你很难知道哪些客户是真的满意,哪些只是在强压怒火。传统的语音转文字工具只能告诉你客户说了什么,却无法告诉你他们说话时的情绪。是开心?是愤怒?还是失望?
这就是我们今天要解决的问题。通过搭建一个智能客服情绪识别系统,我们不仅能将通话录音转成文字,还能自动识别出客户的情绪状态,比如开心、愤怒、悲伤,甚至能检测出背景音乐、掌声或笑声。这对于提升客服质量、预警潜在投诉、优化服务流程有着巨大的价值。
本文将手把手带你,基于阿里开源的 SenseVoiceSmall 模型,从零开始搭建这样一个系统。你不需要是AI专家,只要跟着步骤操作,就能拥有一个能“听懂”情绪的智能客服助手。我们会使用预置的Gradio Web界面,让你无需编写复杂代码,通过浏览器就能上传音频、查看带情绪标签的识别结果。
2. 环境准备与快速部署
2.1 理解我们的工具:SenseVoiceSmall
在开始动手之前,我们先花两分钟了解一下核心工具。SenseVoiceSmall不是一个普通的语音转文字模型。你可以把它理解为一个“超级耳朵”,它有两项核心超能力:
- 多语言听力:能准确识别中文、英文、日语、韩语,甚至粤语。
- 情绪与事件感知:不仅能听清字词,还能感知说话者的情绪(开心、愤怒、悲伤)和声音环境中的特定事件(背景音乐、掌声、笑声、哭声)。
它把这些信息都融合在转写的文字里,我们称之为“富文本识别”。比如,它输出的可能不是干巴巴的“好的,我知道了”,而是“[开心] 好的,我知道了 [笑声]”。这样,系统就能自动统计出“愤怒”情绪出现的频率,帮助管理者快速定位问题。
2.2 一键启动服务
得益于集成的镜像,部署过程变得极其简单。如果你的环境已经预装了所需组件,系统可能已经自动运行了服务。如果没有,或者你想了解背后的原理,我们可以手动启动。
首先,打开终端,确保我们安装了必要的Python库。核心是funasr(语音识别框架)和gradio(Web界面库)。
# 安装音频处理库和Web界面库
pip install av gradio
接下来,我们需要创建一个Python脚本,这个脚本将作为我们Web服务的“大脑”。我们创建一个名为 app_sensevoice.py 的文件。
# app_sensevoice.py
import gradio as gr
from funasr import AutoModel
from funasr.utils.postprocess_utils import rich_transcription_postprocess
import os
# 1. 加载SenseVoiceSmall模型
# 这里指定使用阿里开源的SenseVoiceSmall模型,并启用GPU加速
model_id = "iic/SenseVoiceSmall"
model = AutoModel(
model=model_id,
trust_remote_code=True, # 信任远程代码以加载完整模型
vad_model="fsmn-vad", # 语音活动检测模型,用于切分长音频
vad_kwargs={"max_single_segment_time": 30000}, # 设置每段音频最长30秒
device="cuda:0", # 使用GPU,如果只有CPU则改为"cpu"
)
def sensevoice_process(audio_path, language):
"""处理音频文件的核心函数"""
if audio_path is None:
return "请先上传音频文件"
# 2. 调用模型进行识别
# 输入音频路径和语言,模型会返回识别结果
res = model.generate(
input=audio_path,
cache={},
language=language, # 使用用户选择的语言
use_itn=True, # 启用逆文本归一化,将“一二三”转为“123”
batch_size_s=60,
merge_vad=True,
merge_length_s=15,
)
# 3. 对结果进行后处理,让情感标签更易读
if len(res) > 0:
raw_text = res[0]["text"] # 原始识别文本,包含标签
clean_text = rich_transcription_postprocess(raw_text) # 清洗后的文本
return clean_text
else:
return "识别失败"
# 4. 构建网页界面
with gr.Blocks(title="SenseVoice 智能客服情绪识别系统") as demo:
gr.Markdown("# 🎙️ SenseVoice 智能客服情绪识别系统")
gr.Markdown("""
**系统功能:**
- **多语言客服支持**:自动识别中、英、日、韩、粤语客服录音。
- **客户情绪分析**:自动检测通话中的开心、愤怒、悲伤等客户情绪。
- **交互事件标记**:自动标注背景音乐、掌声、笑声等关键声音事件。
- **可视化报告**:直观展示带情绪标签的对话文本。
""")
with gr.Row():
with gr.Column():
# 音频上传组件
audio_input = gr.Audio(type="filepath", label="上传客服通话录音或直接录制")
# 语言选择组件
lang_dropdown = gr.Dropdown(
choices=["auto", "zh", "en", "yue", "ja", "ko"],
value="auto",
label="选择录音语言 (auto为自动检测)"
)
# 识别按钮
submit_btn = gr.Button("开始智能分析", variant="primary")
with gr.Column():
# 结果显示区域
text_output = gr.Textbox(label="智能识别结果(含情绪与事件标签)", lines=20)
# 绑定按钮点击事件
submit_btn.click(
fn=sensevoice_process,
inputs=[audio_input, lang_dropdown],
outputs=text_output
)
# 5. 启动Web服务
# server_name="0.0.0.0" 允许外部访问,server_port=6006 指定端口
demo.launch(server_name="0.0.0.0", server_port=6006)
保存文件后,在终端运行这个脚本:
python app_sensevoice.py
看到终端输出类似 Running on local URL: http://0.0.0.0:6006 的信息,就说明服务启动成功了。
2.3 访问你的智能客服系统
由于安全设置,你可能需要通过SSH隧道在本地浏览器访问这个服务。在你自己电脑的终端(不是云服务器的终端)里执行以下命令:
ssh -L 6006:127.0.0.1:6006 -p [你的服务器SSH端口号] root@[你的服务器IP地址]
连接成功后,打开你电脑上的浏览器,输入地址 http://127.0.0.1:6006,就能看到我们刚刚搭建的智能客服情绪识别系统的操作界面了。
3. 系统核心功能与操作演示
现在,你的智能客服系统已经就绪。让我们通过一个模拟的客服场景,看看它如何工作。
3.1 上传与分析客服录音
假设我们有一段客户投诉的录音。在Web界面中:
- 点击“上传客服通话录音”区域,选择你的音频文件(支持mp3, wav等常见格式)。
- 在“选择录音语言”下拉框中,如果知道确切语言(如中文“zh”),就选择它;如果不确定,就保持“auto”(自动检测)。
- 点击“开始智能分析”按钮。
系统会开始处理音频。SenseVoiceSmall模型会在后台进行:
- 语音活动检测:自动切分有效人声片段,过滤静音。
- 语音转文字:将切分后的音频转为文字。
- 情绪与事件识别:并行分析语音中的情感倾向和特殊声音事件。
- 结果融合与后处理:将文字、情感标签(如
[开心])、事件标签(如[笑声])融合成一段富文本。
3.2 解读识别结果
处理完成后,右侧的文本框会显示类似下面的结果:
[客服] 您好,这里是XX客服,请问有什么可以帮您? [标准]
[客户] [愤怒] 我上周买的手机,才用了三天屏幕就碎了!你们这质量也太差了吧! [愤怒]
[客服] [平静] 先生您先别着急,非常理解您的心情。请问您购买时是否购买了我们的意外险服务呢? [平静]
[客户] [愤怒] 我哪知道要买什么险!现在怎么办? [愤怒]
[客服] [平静] 您放心,即使没有意外险,我们也可以为您提供付费维修服务。我这边先帮您登记一下问题,稍后会有专员联系您处理,您看可以吗? [平静]
[客户] [平静] 那...好吧,快点啊。 [平静]
[背景音] [BGM] (检测到轻微的等待音乐)
结果解读:
- 角色分离(模拟):虽然当前模型不直接区分说话人,但我们可以通过上下文或结合其他工具(如声纹识别)来标注
[客服]和[客户]。上例是手动模拟的。 - 情绪标签:清晰标注了每一句话对应的情绪,如
[愤怒]、[平静]。这让我们一眼就能看出客户的情绪变化曲线:从愤怒开始,在客服安抚后逐渐平静。 - 事件标签:检测到了
[BGM](背景音乐),这有助于分析客服等待时的用户体验。 - 完整对话:保留了完整的对话文本,可供后续质检或分析。
这个结果对于客服主管来说价值巨大。他可以快速定位到含有[愤怒]标签的对话片段,复盘客服的处理话术是否得当。也可以统计全天录音中“愤怒”情绪出现的比例,作为团队服务质量的KPI之一。
4. 进阶应用:从分析到自动化
一个基础的识别系统已经搭建完成。但它的潜力远不止于此。下面我们探讨如何将其融入真实的客服工作流,实现自动化分析。
4.1 批量处理历史录音
客服中心每天产生大量录音,手动上传分析不现实。我们可以写一个简单的脚本,自动扫描某个文件夹下的所有音频文件,批量处理并生成报告。
# batch_process.py
import os
from funasr import AutoModel
from funasr.utils.postprocess_utils import rich_transcription_postprocess
# 初始化模型(与之前相同)
model = AutoModel(model="iic/SenseVoiceSmall", trust_remote_code=True, device="cuda:0")
def analyze_audio_folder(folder_path, output_file="客服情绪报告.txt"):
"""批量分析一个文件夹内的所有音频文件"""
audio_extensions = ['.wav', '.mp3', '.m4a', '.flac']
results = []
for filename in os.listdir(folder_path):
if any(filename.lower().endswith(ext) for ext in audio_extensions):
filepath = os.path.join(folder_path, filename)
print(f"正在处理: {filename}")
try:
res = model.generate(input=filepath, language="zh")
if res:
raw_text = res[0]["text"]
clean_text = rich_transcription_postprocess(raw_text)
# 简单统计情绪关键词出现次数
emotion_count = {
"HAPPY": clean_text.count("开心") + clean_text.count("HAPPY"),
"ANGRY": clean_text.count("愤怒") + clean_text.count("ANGRY"),
"SAD": clean_text.count("悲伤") + clean_text.count("SAD"),
}
results.append({
"file": filename,
"text": clean_text[:500] + "...", # 只保存前500字符
"emotion_stats": emotion_count
})
except Exception as e:
print(f"处理 {filename} 时出错: {e}")
results.append({"file": filename, "error": str(e)})
# 生成简易报告
with open(output_file, 'w', encoding='utf-8') as f:
f.write("=== 客服录音批量情绪分析报告 ===\n\n")
total_angry = sum(r.get('emotion_stats', {}).get('ANGRY', 0) for r in results if 'emotion_stats' in r)
f.write(f"分析文件总数: {len(results)}\n")
f.write(f"总'愤怒'情绪出现次数: {total_angry}\n\n")
for r in results:
f.write(f"文件: {r['file']}\n")
if 'emotion_stats' in r:
f.write(f"情绪统计: {r['emotion_stats']}\n")
f.write(f"内容摘要: {r['text']}\n")
else:
f.write(f"错误: {r.get('error', '未知错误')}\n")
f.write("-"*50 + "\n")
print(f"分析完成!报告已保存至: {output_file}")
# 使用示例:分析 /data/call_records 文件夹下的所有录音
analyze_audio_folder("/data/call_records")
运行这个脚本,它会自动处理指定文件夹里的所有录音,并生成一个包含情绪统计的文本报告,极大提升了分析效率。
4.2 构建实时情绪监控看板
对于大型客服中心,实时监控正在发生的通话情绪更有价值。我们可以将系统稍作改造,接入实时音频流(如从电话系统获取),并搭配一个数据可视化看板(如使用Gradio或Streamlit)。
思路是:
- 实时接入:从呼叫中心的音频流接口获取实时通话数据(需根据具体系统API调整)。
- 滑动窗口分析:不是等通话结束,而是每隔10-15秒分析一次最近一段时间的音频。
- 情绪打分与预警:为“愤怒”等负面情绪设定一个阈值。当短时间内负面情绪出现频率过高时,系统自动标记该通话,并实时通知主管或质检员介入。
- 可视化展示:在看板上用图表展示全公司/全团队当前通话的“整体情绪健康度”,比如用绿色(良好)、黄色(关注)、红色(预警)来表示。
这相当于给客服中心安装了一个“情绪雷达”,问题在萌芽阶段就能被发现和处理。
4.3 与现有系统集成
这个情绪识别引擎可以作为一个独立的服务(API)集成到你们现有的客服质检系统或CRM系统中。
# 简易的Flask API服务示例
from flask import Flask, request, jsonify
from funasr import AutoModel
import tempfile
app = Flask(__name__)
model = AutoModel(model="iic/SenseVoiceSmall", trust_remote_code=True, device="cuda:0")
@app.route('/analyze', methods=['POST'])
def analyze_audio():
"""提供一个HTTP API接口,供其他系统调用"""
if 'file' not in request.files:
return jsonify({'error': '未提供音频文件'}), 400
audio_file = request.files['file']
language = request.form.get('language', 'auto')
# 保存临时文件
with tempfile.NamedTemporaryFile(delete=False, suffix='.wav') as tmp:
audio_file.save(tmp.name)
audio_path = tmp.name
try:
res = model.generate(input=audio_path, language=language)
if res:
text = res[0]["text"]
# 这里可以添加更复杂的分析逻辑,如情绪占比计算
return jsonify({
'status': 'success',
'text': text,
'language': language
})
else:
return jsonify({'error': '识别失败'}), 500
except Exception as e:
return jsonify({'error': str(e)}), 500
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
这样,你们的质检系统在抓取到录音文件后,就可以直接调用这个http://你的服务地址:5000/analyze接口,将带情绪标签的文本结果写回数据库,供后续的报表和质检评分使用。
5. 总结
通过本文的步骤,我们从零搭建了一个具备情绪识别能力的智能客服系统。让我们回顾一下关键收获:
- 系统核心:我们利用了阿里开源的SenseVoiceSmall模型,它强大的“富文本识别”能力是我们系统的基石,能同时输出文字和情感标签。
- 快速搭建:借助预置的Gradio Web界面,我们通过一个Python脚本就实现了完整的、可视化的操作平台,无需前端开发知识。
- 价值落地:这个系统能直接将技术能力转化为业务价值:
- 质检提效:自动筛选出高负面情绪的通话,质检员可优先复查,提升问题发现率。
- 服务优化:通过分析高频“愤怒”场景,优化客服话术和业务流程。
- 风险预警:实时监控可对可能升级的投诉进行预警,及时干预。
- 客户洞察:宏观分析客户整体情绪变化,评估新品发布、营销活动后的客户反馈。
下一步,你可以尝试:
- 收集一些真实的、脱敏后的客服录音,用这个系统跑一遍,看看效果。
- 尝试修改
batch_process.py脚本,让它输出更漂亮的Excel或HTML报告。 - 探索模型对笑声、掌声的识别,或许可以用于分析客户满意度调研的访谈录音。
技术的最终目的是解决问题。希望这个搭建指南,能帮你打开智能客服优化的一扇新门。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。
更多推荐


所有评论(0)