Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

自动回复质量评估流水线

客服自动回复质量评估方案


一、项目概述

团队上线了"客服自动回复"功能,需要评估 20 条回复的质量。本项目将模糊的业务诉求转化为 4 个可自动量化的指标,并用 LLM-as-a-Judge(DeepSeek)作为主引擎逐条打分, 最终产出评估报告(综合分、各指标分布、最差 3 条 case 分析)。

核心结论:20 条回复综合得分 73.4/100(合格 C)。最大共性问题不是"说错",而是 "正确但被动/推诿"——把本该由客服解决的事推给用户("联系客服""去看详情页"), 缺少"我帮您"式的主动服务。

注:评估主引擎为 LLM,即便 temperature=0,不同模型版本/时段下个别 case 分数仍可能有 ±5 分 的轻微波动,综合分与等级稳定在"合格 C"附近。下方数字为一次代表性运行的产物,最新结果以 results/evaluation_report.json 为准。


二、评估指标定义(回答业务方 6 个问题)

业务方诉求 "准确、有用、语气好、不能瞎编" 拆解为 4 个可量化指标,每项 1-5 分整数。 打分制式与权重见下表。

指标 业务诉求 权重 优先级层级 量化方式(rubric 锚点)
准确度 accuracy 准确 0.25 🟥 底线(floor) 5=完全针对问题且事实无误;3=方向正确但泛化;1=答非所问/事实错误
有用度 helpfulness 有用 0.35 🟧 核心(core) 5=主动帮用户解决;4=清晰可执行;3=通用说明需自行操作;2=大量推诿;1=毫无帮助
无幻觉 faithfulness 不能瞎编 0.20 🟥 底线(floor) 5=无编造+合理留白;3=未经核实的具体断言;1=虚构关键事实
语气态度 tone 语气好 0.20 🟨 加分(enhancer) 5=礼貌且共情到位;3=礼貌但模板化;1=冷漠/态度不当

综合分 = Σ(scoreᵢ × weightᵢ) / 5 × 100 → 0-100。

为什么这样定义和加权?(回答问题 1-5)

  1. "准确"=准确度:回复与问题相关且事实无误。量化锚点:是否答非所问、是否有事实错误。
  2. "有用"=有用度:是否真正解决问题、提供可执行方案,而非把责任推给用户。量化锚点:是否含 "我帮您"式主动服务 vs "联系客服/看详情页"式推诿。这是区分好坏回复最关键的维度 (人工标注也印证:20 条里 16 条的扣分点都是"被动推诿")。
  3. "语气好"=语气:礼貌 + 同理心,尤其在用户不满时情绪安抚是否到位。
  4. "不瞎编"=无幻觉:是否编造订单号、具体政策、商品参数等不存在信息。
  5. 指标优先级
    • 底线层(不过线=严重事故):准确度、无幻觉 —— 事实错误/虚构是不可接受的。
    • 核心层(最能区分好坏):有用度 —— 权重最高(0.35)。
    • 加分层:语气 —— 锦上添花,权重最低(0.20)。

三、评估方法

主引擎:LLM-as-a-Judge(DeepSeek)

这是业界评估开放式回复质量的标准方法(参考 LLM-as-a-Judge, Zheng et al. 2023、MT-Bench)。 让 DeepSeek 扮演资深客服质量评审,按统一 rubric 对每条回复打分并给出理由。

关键设计(防数据泄露):判官模型只看到 用户问题 + 自动回复 + 参考回复(human_reference)从来看不到 annotator_notes(人工标注的定性分析)。因此用 annotator_notes 做一致性校验是 合法的样本外检验,不存在"在测试集上调参"的作弊。

离线降级:算法评分器(TF-IDF)

无 API Key 时自动降级到纯算法方案,基于 TF-IDF 余弦相似度与通用语言学特征:

  • auto_replyhuman_reference 的相似度估计有用度;
  • auto_replyuser_question 的相似度估计准确度;
  • 用通用对冲/礼貌词检测无幻觉与语气。

不依赖任何针对本题答案的硬编码关键词,阈值固定,仅作粗粒度降级。

一致性校验(validate.py)

把人工标注的定性判断映射成"好/中/差"三档,与 LLM 打分的三档对比:

  • 方向一致率(差 ≤ 1 档):90%(多次运行稳定在 85%-90%)—— 说明 LLM 判官与人工判断方向一致,方法可信。
  • 少数分歧主要源于:自动回复作为"无状态自动应答",人工标注有时会以"真人客服能做到"为标杆 要求主动服务,而 LLM 判官相对宽容(详见局限性)。

四、运行结果

综合得分:73.4 / 100(合格 C)
样本数:20

各指标平均分(1-5):
  准确度   3.8   (底线达标)
  有用度   3.0   ⚠️ 最大短板(分布偏左,存在较多"被动推诿")
  无幻觉   4.95  (接近满分,无虚构)
  语气     3.4   (礼貌但偏模板化)

等级分布:优秀4 / 良好3 / 合格7 / 较差6 / 很差0

最差 3 条:case_13(面膜成分)、case_01(放错快递柜)、case_09(退货邮费)
最佳 3 条:case_07(异地登录)、case_18(扫地机故障)、case_08(手机壳材质)

完整报告见 results/evaluation_report.md,含分布图 metric_distribution.pnggrade_distribution.png


五、局限性讨论(回答问题 6)

1. 评分相对宽容,可能高估"被动推诿"型回复

LLM 判官对"事实正确但不够主动"的回复,有时给 3 分(中等)而非更低。人工标注认为这类应判更差。 改进:可在 rubric 中加入更强的"推诿惩罚"锚点,或引入"主动服务度"作为独立维度。

2. 无状态自动回复 vs 有状态人工服务 的标准冲突

人工标注常以"真人客服能查订单/主动跟进"为标杆,但自动回复无法访问用户订单系统。 部分 case(如 case_02"这个充电宝能上飞机吗")判官给了中等分,人工却判差——因为人工能查具体商品 参数。改进:应分"自动回复"与"人工回复"两套标准;或将"需要查订单的查询"路由到人工而非自动回复。

3. 单轮评估,无法度量多轮对话连贯性

真实客服是多轮的。本评估只看单条回复,无法发现"追问后答不上""前后矛盾"等问题。 改进:扩展为多轮对话评估集。

4. 参考回复本身是单一样本

reference-based judging 依赖人工参考回复质量。若参考回复本身不优,会拉偏判官尺度。 改进:每个 case 提供 2-3 条人工参考 + 标注一致性。

5. LLM 判官的稳定性与成本

temperature=0 仍有轻微波动;调用 20 条需数十秒+少量 token 成本。 改进:关键 case 做多 judge 投票(ensemble)降低方差;大批量时用缓存。

6. 可能评不准的具体 case 类型

  • 模糊指代类("那个""那款"):判官不知指代何物,难以判"准不准";
  • 强情绪类:语气分易受判官自身倾向影响;
  • 需要外部知识类(具体政策/物流时效):无 grounding 数据时只能判"是否编造",难判"是否最新准确"。

六、快速开始

环境要求

  • Python 3.10+
  • 依赖:requestsmatplotlibscikit-learn(离线降级用)

安装

pip install -r requirements.txt

运行

# 方式一:LLM-as-a-Judge(推荐,需配置 API Key)
# 支持 DeepSeek 或 智谱GLM(OpenAI 兼容接口)
set DEEPSEEK_API_KEY=sk-xxxx        # Windows
python run.py --validate

# 方式二:离线算法模式(无需任何 Key)
python run.py --algo --validate

运行后在 results/ 下生成:

  • evaluation_report.json — 结构化完整结果
  • evaluation_report.md — 可读报告(含最差 3 条 case 分析)
  • metric_distribution.png — 各指标平均分图
  • grade_distribution.png — 综合分等级分布图

--validate 会额外输出与人工标注的一致性校验表。


七、项目结构

auto-reply-eval/
├── task/                          # 官方提供(输入数据,勿改)
│   ├── task3_auto_replies.json    # 20 条待评自动回复
│   ├── task3_human_ref.json       # 人工参考回复 + 标注分析
│   └── task3_eval_criteria.md     # 业务方原始诉求
├── src/
│   ├── metrics.py                 # 指标定义 + 权重 + rubric(唯一事实来源)
│   ├── llm_client.py              # LLM-as-a-Judge 引擎(DeepSeek/GLM,OpenAI 兼容)
│   ├── algo_scorer.py             # 离线算法评分器(TF-IDF,降级用)
│   ├── pipeline.py                # 评估流水线(读数据→打分→汇总)
│   ├── reporter.py                # 报告生成(Markdown + 图表)
│   └── validate.py                # 与人工标注盲测校验
├── results/                       # 运行产物
├── run.py                         # CLI 入口
├── requirements.txt
└── README.md

八、AI 工具使用情况

本项目开发过程中使用了 AI 工具辅助:

  • 编码助手(glm-5.2):用于项目脚手架、prompt 构造、报告模板等工程代码生成与调试。
  • 评估引擎(DeepSeek API):作为 LLM-as-a-Judge 主引擎,对 20 条回复逐条打分。 这是"评估自动化"的核心——把需要人工判断的主观质量,用 AI 自动量化。
  • 设计决策:指标拆解、rubric 锚点、防数据泄露设计、一致性校验方法均由人工主导, AI 辅助实现。关键设计(判官不接触 annotator_notes)保证了校验的有效性。

说明:开发中曾尝试过基于关键词的规则评分器,发现会导致"在标注数据上调参"的数据泄露问题, 已废弃并改用 LLM-as-a-Judge + 算法降级的方案,确保评估方法本身是自动化且可信的。

About

Customer-service auto-reply quality evaluation pipeline | LLM-as-a-Judge (DeepSeek) + TF-IDF fallback | 4 weighted metrics with human-annotation consistency check (90%)

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages