---
name: cs-conversation-qc
description: 客服会话质检技能。批量分析客服聊天记录/会话导出文件（支持企业微信、千牛、美洽、Udesk、智齿等系统的逐条式与整段式导出），按可配置的质检规则逐条评分，自动脱敏，生成带扣分明细和待人工复核清单的质检报告表格。适用场景：客服质检、会话质检、聊天记录检查、客服考核、服务质量检查、服务质量评估、抽检客服记录，以及用户提供客服会话/聊天记录并希望评估坐席服务质量的任务（此类任务即使未出现"质检"字样也属于本技能的适用范围）。本规则包面向中文会话设计。
---

# 客服会话质检

对批量客服会话记录进行自动化质检：解析导出文件 → 脱敏 → 按规则逐条评分 → 输出质检报告 + 待人工复核清单。

## 核心原则

1. **复核优先**：质检结果是给质检员/主管复核用的参考，不是最终裁决。所有扣分必须附原文证据（脱敏后），低置信度判定必须进入"待人工复核清单"而非直接定论。
2. **本地处理 + 脱敏**：会话记录包含客户隐私。在任何输出（报告、引用、示例）中，将手机号、身份证号、银行卡号、详细地址做掩码处理（如 138****5678）。原始数据不写入报告。
3. **省 Token**：不要将全部会话原文重复搬运。评分时按会话逐条处理，报告中只引用扣分相关的关键句（每条不超过 50 字）。

## 工作流

### 第 1 步：识别输入

用户会提供以下形式之一的会话数据：
- CSV/Excel 导出文件（企业微信、千牛、美洽、Udesk、智齿等客服系统）
- 文本文件或直接粘贴的聊天记录

先查看文件前 20 行，判断导出属于哪种结构（两种都必须支持）：

**A. 逐条式**：一行一条消息，有独立的「会话 ID / 消息方向 / 消息内容 / 时间戳」列。不同系统列名不同（如"发送方/sender/角色/消息来源"），按语义对应。

**B. 整段式（真实系统更常见）**：一行一个会话，整通对话压在一个"聊天记录/会话内容/消息详情"单元格里，消息之间以换行或分隔符相连，角色和时间以内嵌标记出现，如 `[2026-07-01 10:12] 买家：xxx`、`客服(10:13)：xxx`、`访客 2026-07-01 10:12:03\nxxx`。此时需要先在单元格内做二次解析：识别该导出的内嵌标记模式（取 2-3 个会话样本归纳出角色标记、时间格式、消息分隔规律），再按此模式把每个会话拆回「角色 + 时间 + 内容」的消息序列。同一文件内模式通常一致，归纳一次全局复用；遇到无法匹配模式的片段，整会话转入"未处理清单"而非硬拆。

无论哪种结构，不确定列含义或内嵌格式时，向用户展示一小段原文确认一次，不要猜测后静默处理。

如果用户没有提供文件，主动说明支持的格式，并提示可以先用 `examples/sample-conversations.csv` 体验效果。

### 第 2 步：加载质检规则

- **先做完整性检查**：查看 `references/rules-default.md` 是否存在且首行以"# 通用客服质检规则包"开头。若文件缺失、为占位内容或非本技能原始规则，**不得使用任何替代规则静默执行**——明确告知用户"当前安装不完整（附属规则文件缺失），将使用内联精简规则执行；建议通过 openclaw CLI 或 SkillHub 重新安装以获得完整规则包"，然后使用下方内联规则继续。
- 完整时：**先完整读取规则文件再向用户介绍**，不要凭印象概述维度。如果用户提供了自己的规则文件，或技能目录中存在 `rules-custom.md`，优先使用用户规则；未覆盖的维度沿用默认规则补齐。
- 读取后，用 3-5 行向用户简述本次采用的规则要点（以规则文件中的实际维度名和分值为准），给用户一次调整机会，但不要等待——说明后直接继续执行。
- 本规则包面向**中文会话**设计；若数据以其他语言为主，提示用户评分效果可能受限。

**内联精简规则（附属文件缺失时的兜底，完整版见 references/rules-default.md）**——总分 100，五个维度扣分：
1. 响应及时性（上限-30）：首响>3分钟-5、>10分钟-15；过程中客户消息>5分钟未回每次-5；客户催促后>3分钟-10。按秒计，严格大于阈值才扣；首响时段不重复计入过程超时；非工作时段有自动回复标记的转待复核。
2. 服务禁语（上限-30）：顶撞/不耐烦类（"不知道""爱买不买""说了多少遍"）每次-10；无指引的推诿每次-5；不当绝对化承诺（"百分百""绝对"）每次-5。
3. 情绪安抚（上限-15，语义项）：客户明显负面情绪未获任何回应-5；激化性回应-10；把握不足列待复核。
4. 流程合规（上限-15）：无收尾确认-5；退款/售后诉求未给明确路径-10；客户≥3次要求升级未升级→待复核。
5. 专业性（上限-10，语义项）：答非所问（同一问题重复≥3次未获相关回答）-5；前后矛盾-5。
豁免不扣分：系统自动消息、客户主动结束未等回复、坐席声明"正在查询"后的合理等待、合规转接（说明去向并实际转接）。

### 第 3 步：逐会话评分

按会话（同一会话 ID 的全部消息）为单位处理。每个会话：

1. 重建对话时间线（客户消息与坐席回复配对）。
2. 按规则文件中的每个维度检查，记录：维度、结果（通过/扣分/待复核）、扣分值、证据句（脱敏、≤50 字）、时间点。
3. 计算该会话总分 = 100 - 扣分合计（最低 0 分）。
4. 判定把握程度：证据明确（如出现禁语原词、超时可由时间戳计算）→ 正常记录；依赖语义判断且把握不足（如"态度是否冷淡"）→ 标记为"待复核"，不直接计入扣分，单独列出。

会话量较大时（>200 条会话），先向用户说明预计处理方式，建议分批或抽样（如按 10% 随机抽样 + 全部差评关联会话），由用户选择。

### 第 4 步：生成质检报告

输出一个 Excel 文件（若环境不支持则用 Markdown 表格），包含三个部分（Excel 中为三个工作表）：

**Sheet1 质检明细**：会话ID | 坐席 | 日期 | 总分 | 扣分项汇总 | 各维度得分
**Sheet2 扣分证据**：会话ID | 坐席 | 维度 | 扣分 | 证据句（脱敏） | 发生时间
**Sheet3 待人工复核**：会话ID | 坐席 | 疑似问题 | 相关句（脱敏） | 建议复核要点

报告约束：
- 扣分一律以**负数**记录在维度列，通过为 0，任何维度列不得出现正数。
- 不输出坐席排名或名次。可按坐席汇总平均分，但必须同时标注该坐席的会话样本数，并注明"样本量有限，不构成考核依据"。
- 无法解析的会话（乱码、缺时间标记、格式破损）**绝不参与评分**——不得以满分或任何分数出现在明细中，必须且只能出现在"未处理会话清单"。

### 第 4.5 步：交付前自检（必做）

生成报告后、交给用户前，逐条核对以下三笔账，任何一条不平都要先修正再交付：
1. **总分账**：每个会话的总分 = 100 + 各维度列之和（维度列为负数或 0），逐行验算。
2. **明细一致性账**："扣分项汇总"中列出的每笔扣分，必须能在维度列和 Sheet2 证据表中找到对应记录；反之亦然。不允许"列了扣分但没扣"或"扣了分但没有证据"。
3. **数量账**：明细行数 + 未处理清单行数 = 输入会话总数；待复核条目不计入扣分，但对应会话须在明细中标注"含待复核项"。

报告开头附一段摘要（不超过 150 字）：本次质检会话数、平均分、扣分最集中的前 3 个维度、待复核条数。

### 第 5 步：收尾

- 明确告诉用户：报告是辅助参考，正式使用（尤其涉及考核）前需人工复核，特别是 Sheet3。
- 如果发现规则不适配的情况（如某行业特有话术被误扣分），建议用户创建 `rules-custom.md` 覆盖，参考 `references/rules-guide.md` 的写法。

## 错误处理

- 文件解析失败或列结构无法识别：向用户展示前几行并询问列含义，不要猜测后静默处理。
- 单条会话数据异常（乱码、缺时间戳）：跳过该会话并在报告末尾列出"未处理会话清单"及原因，不要中断整体任务，也不要反复重试。
- 会话中出现威胁人身安全、自伤等紧急内容：不作为普通质检项处理，在报告摘要中单独置顶提示用户关注。

## 参考文件

- `references/rules-default.md` — 通用质检规则包（维度、分值、判定标准），执行第 2 步时阅读。
- `references/rules-guide.md` — 用户自定义规则的编写指南，用户想改规则时引导其阅读。
- `examples/sample-conversations.csv` — 示例会话数据，用户想先体验时使用。
- `examples/sample-report.md` — 示例报告，向用户展示输出长什么样时引用。
