乐于分享
好东西不私藏

客服Agent实战系列 06-情感分析插件

客服Agent实战系列 06-情感分析插件
上一篇:客服Agent实战系列 05-对话管理

上一篇我们实现了对话管理,Bot能记住对话历史了。这一篇来解决客服场景的关键问题:用户说"你们的服务太差了!我要投诉!",Bot怎么识别这是愤怒情绪,及时转人工?这就是情感分析——客服Bot的"情商"。

1什么是情感分析?为什么重要?

情感分析(Sentiment Analysis)是Agent感知模块的高级功能。它的作用是:识别用户情绪,及时响应负面情绪

用户输入
识别的情感
Bot的处理
"你好"
中性
正常回复
"谢谢"
正面
礼貌感谢
"你们的服务太差了"
负面(愤怒)
安抚+转人工
"我等了很久了"
负面(不耐烦)
道歉+加快处理

图:情感分析流程

情感分析的重要性:

三个关键作用:

1. 及时转人工:识别愤怒情绪,立即转人工客服

2. 调整语气:识别负面情绪,用更温和的语气回复

3. 预警机制:识别情绪变化趋势,提前干预

2情感等级的定义

客服场景的情感分为5个等级:

json[
  {
"level"1,
"name""正面",
"keywords": ["谢谢""感谢""好的""满意"],
"response""礼貌感谢"
  },
  {
"level"2,
"name""中性",
"keywords": ["你好""在吗""请问"],
"response""正常回复"
  },
  {
"level"3,
"name""轻微负面",
"keywords": ["有点慢""不太方便"],
"response""道歉+改进建议"
  },
  {
"level"4,
"name""负面",
"keywords": ["太慢了""等了很久""不满意"],
"response""道歉+加快处理"
  },
  {
"level"5,
"name""愤怒",
"keywords": ["投诉""太差了""垃圾""骗子"],
"response""立即转人工"
  }
]

情感等级的处理策略:

等级
情感
处理策略
Level 1
正面
礼貌感谢:"感谢您的支持!"
Level 2
中性
正常回复,按意图处理
Level 3
轻微负面
道歉:"抱歉给您带来不便..."
Level 4
负面
道歉+加快:"非常抱歉,我立即为您处理..."
Level 5
愤怒
立即转人工:"非常抱歉,正在为您转接人工客服..."

3情感分析的实现方式

2026年,情感分析有三种主流方式:

方式
优点
缺点
适用场景
关键词匹配
速度快、成本低
准确率低、需要维护关键词库
简单场景、快速分流
小模型分类
准确率高、成本低
需要训练数据、维护模型
情感固定的场景
大模型识别
准确率最高、灵活
成本高、速度慢
复杂场景、情感多变

图:情感等级处理流程

客服场景我们选择关键词匹配 + 大模型识别的混合方案:

混合方案的优势:

1. 常见情绪词("投诉"、"太差了")用关键词匹配,速度快

2. 复杂情绪表达用大模型识别,准确率高

3. 情感等级≥4,立即转人工

4实战:实现情感分析插件

我们创建情感分析插件:

plugins/sentiment_analysis/plugin.py:

pythonimport json
from pathlib  import Path
from typing import Dict

classSentimentAnalysisPlugin:
"""情感分析插件"""

def__init__(self, sentiment_file: str = "data/sentiments.json"):
self.sentiments = self._load_sentiments(sentiment_file)
self.keyword_map = self._build_keyword_map()

def_load_sentiments(self, sentiment_file: str) -> list:
"""加载情感定义"""
        path = Path(sentiment_file)
if path.exists():
with open(path, 'r', encoding='utf-8'as f:
return json.load(f)
return []

def_build_keyword_map(self) -> Dict[str, int]:
"""构建关键词映射表"""
        keyword_map = {}
for sentiment inself.sentiments:
for keyword in sentiment.get("keywords", []):
                keyword_map[keyword] = sentiment["level"]
return keyword_map

defanalyze(self, user_input: str) -> Dict:
"""分析用户情感"""
# 第一步:关键词匹配
        sentiment_level = self._keyword_match(user_input)

# 第二步:如果关键词匹配失败,用大模型识别
if sentiment_level == 0:
            sentiment_level = self._llm_analyze(user_input)


# 获取情感信息
        sentiment = self._get_sentiment_by_level(sentiment_level)

return {
"level": sentiment_level,
"name": sentiment.get("name""未知"),
"response_strategy": sentiment.get("response""正常回复"),
"need_handoff": sentiment_level >= 4
        }

def_keyword_match(self, user_input: str) -> int:
"""关键词匹配"""
        max_level = 0
        words = user_input.split()

for word in words:
if word inself.keyword_map:
                level = self.keyword_map[word]
                max_level = max(max_level, level)

return max_level

def_llm_analyze(self, user_input: str) -> int:
"""大模型分析(简化版)"""
# 实际项目中会调用大模型API
# 这里简化为返回中性
return2

def_get_sentiment_by_level(self, level: int) -> Dict:
"""根据等级获取情感信息"""
for sentiment inself.sentiments:
if sentiment["level"] == level:
return sentiment
return {"level"2"name""中性""response""正常回复"}

5集成到Bot中

将情感分析插件集成到客服Bot:

src/bot.py(更新版):

pythonfrom plugins.sentiment_analysis.plugin import SentimentAnalysisPlugin

classCustomerServiceBot:
def__init__(self, config_path: str = "config/customer_service.yaml"):
self.config = self._load_config(config_path)
self.system_prompt = self._load_prompt()
self.intent_plugin = IntentRecognitionPlugin()
self.kb_plugin = KnowledgeBasePlugin()
self.dialog_manager = DialogManager(max_history=10)
self.sentiment_plugin = SentimentAnalysisPlugin()

defchat(self, user_input: str) -> str:
# 先分析情感
        sentiment_result = self.sentiment_plugin.analyze(user_input)

# 如果情感等级≥4,立即转人工
if sentiment_result["need_handoff"]:
return"非常抱歉给您带来不便。我立即为您转接人工客服处理。"


# 正常处理意图
        intent_result = self.intent_plugin.recognize(user_input)

# 根据情感调整回复语气
        response = self._process_intent(intent_result, user_input)

# 根据情感等级调整语气
if sentiment_result["level"] == 3:
            response = "抱歉给您带来不便。" + response


return response

6测试情感分析效果

python# 测试情感分析
from plugins.sentiment_analysis.plugin import SentimentAnalysisPlugin

plugin = SentimentAnalysisPlugin()

# 测试正面情绪
print(plugin.analyze("谢谢"))
# 输出:{'level': 1, 'name': '正面', 'need_handoff': False}

# 测试中性情绪
print(plugin.analyze("你好"))
# 输出:{'level': 2, 'name': '中性', 'need_handoff': False}

# 测试负面情绪
print(plugin.analyze("太慢了"))
# 输出:{'level': 4, 'name': '负面', 'need_handoff': True}

# 测试愤怒情绪
print(plugin.analyze("我要投诉"))
# 输出:{'level': 5, 'name': '愤怒', 'need_handoff': True}

# 测试完整Bot
from src.bot import CustomerServiceBot

bot = CustomerServiceBot()
print(bot.chat("你们的服务太差了!"))
# 输出:非常抱歉给您带来不便。我立即为您转接人工客服处理。

7情感分析的优化方向

三个优化方向:

1. 情绪追踪:记录情绪变化趋势,识别情绪升级(如从"有点慢"到"太慢了")

2. 个性化回复:根据用户历史情绪,调整回复策略

3. 预警机制:情绪等级≥3时,提前预警,准备转人工

优化方法
效果
成本
情绪追踪
识别情绪升级,提前干预
低(记录情绪)
个性化回复
提高用户满意度
中(分析历史)
预警机制
减少投诉率
低(设置阈值)

8总结:情感分析是Bot的"情商"

本篇要点:

1. 情感分析识别情绪:正面、中性、轻微负面、负面、愤怒5个等级

2. 关键词匹配最快:常见情绪词快速识别

3. 大模型识别最准:复杂情绪表达准确识别

4. 等级≥4转人工:负面和愤怒情绪立即转人工

5. 调整回复语气:根据情感等级调整语气

下一篇,我们来写订单查询插件——如何让Bot查询订单状态。


客服Agent实战系列01 · 项目初始化02 · Bot定义:System Prompt设计03 · 意图识别插件04 · 知识库插件05 · 对话管理 06 · 情感分析插件← 你在这里... 共14篇前置系列:Agent开发系列 06:记忆模块