AI工作流在电商客服场景的复盘:意图识别准确率从72%到93%的优化之路
2026/7/23 7:43:20 网站建设 项目流程

AI工作流在电商客服场景的复盘:意图识别准确率从72%到93%的优化之路

一、客服场景的意图识别挑战

某电商平台日均客服对话约8000次。传统方案是关键词匹配做意图分类——"退货"→退货流程,"发货"→物流查询。准确率72%,剩下28%是"问发货但不说发货二字"等复杂表达。

例如用户说"你们这速度也太慢了,隔壁家隔天就到了",意图是催发货,但关键词匹配不到。更复杂的如"上次买的那个型号这次还有活动吗"——同时涉及"商品"和"促销"两个意图。

目标明确:把意图识别准确率从72%提到90%以上,让AI正确路由大部分客服对话。

二、三个阶段的优化路径

V1期:关键词匹配(准确率72%,基线)

INTENT_KEYWORDS = { "退货": ["退货", "退钱", "退款", "不要了", "想退"], "物流": ["发货", "物流", "快递", "到哪", "什么时候到"], "商品": ["价格", "优惠", "折扣", "活动", "推荐"], "投诉": ["投诉", "差评", "态度", "骂人", "垃圾"], }

问题:无法处理语义相近但表达不同的句子。

V2期:BERT分类器(准确率85%,+13pp)

from transformers import AutoModelForSequenceClassification class IntentClassifier: def __init__(self): self.model = AutoModelForSequenceClassification.from_pretrained( "bert-base-chinese", num_labels=len(INTENT_LABELS) ) self.labels = [ "退货退款", "物流查询", "商品咨询", "促销活动", "投诉建议", "账号问题", "支付问题", "其他" ] def classify(self, text: str) -> tuple[str, float]: inputs = self.tokenizer(text, return_tensors="pt", truncation=True, max_length=128) with torch.no_grad(): logits = self.model(**inputs).logits probs = torch.softmax(logits, dim=1)[0] top_idx = torch.argmax(probs).item() return self.labels[top_idx], probs[top_idx].item()

BERT的局限:对没见过的新表达泛化不足。用户说"上次买的那个还有货吗"——BERT可能不确定是"商品咨询"还是"促销活动"。

V3期:LLM多轮理解 + Chain-of-Thought(准确率93%,+8pp)

V3不再只分类单条消息,而是理解整段对话的上下文:

class LLMIntentRecognizer: async def recognize(self, messages: list[Message]) -> Intent: # 构建包含历史上下文的Prompt context = self._build_context(messages[-5:]) # 最近5轮 prompt = f"""你是电商客服意图识别专家。 对话历史: {context} 当前用户消息:"{messages[-1].content}" 请按以下步骤推理: 1. 用户的核心诉求是什么? 2. 这个诉求属于哪个类别? 3. 如果涉及多个意图,主意图是什么? 请返回JSON: {{ "primary_intent": "意图名称", "confidence": 0.0-1.0, "reasoning": "推理过程", "secondary_intents": ["次要意图"] }}""" response = await self.llm.chat(prompt, temperature=0.1, max_tokens=300) result = json.loads(response) # 置信度分层 if result["confidence"] < 0.8: return Intent.ESCALATE_TO_HUMAN return Intent(result["primary_intent"])

三、数据增强:训练样本从2000到8000

BERT和LLM都需要数据。但在客服场景,标注数据稀缺。解决方案:用大模型生成训练数据

class DataAugmenter: async def generate_variants(self, seed_text: str, intent: str, count: int = 10) -> list: """用GPT-4o生成同意图的不同表达方式""" prompt = f"""你是数据增强助手。请为以下客服场景生成{count}种不同的表达方式, 表达同一个意图但换不同的说法。 原始句子:「{seed_text}」 意图:{intent} 要求: - 包含正式/非正式/口语化/方言化等多种风格 - 包含含情绪的表达(如焦虑/愤怒/调侃) - 包含不完整句子(如打字中途发送的) 以JSON数组返回:[{{"text": "...", "variation_type": "..."}}]""" response = await self.llm.chat(prompt, temperature=0.8) variants = json.loads(response) return [{"text": v["text"], "intent": intent} for v in variants] # 核心数据集建设流程 async def build_training_dataset(seed_data: list, target_size: int = 8000): augmenter = DataAugmenter() dataset = list(seed_data) # 初始2000条人工标注 # 每个种子样本生成3个变体 for sample in seed_data: variants = await augmenter.generate_variants( sample["text"], sample["intent"], count=3 ) dataset.extend(variants) # 额外:生成多意图的边界样例 boundary_samples = await augmenter.generate_boundary_cases() dataset.extend(boundary_samples) return dataset[:target_size] # 最终8000条

数据增强后BERT准确率从78%提升到85%,LLM从88%提升到93%。

四、意图识别中的边界权衡

准确率 vs 召回率的取舍:在客服路由场景中,"误路由"比"不路由"的危害更大。把"退货"用户路由到"促销"是体验灾难。因此:高置信度时自动路由,低置信度时默认转人工。95%的请求自动路由(93%正确 + 2%误路由),5%升级到人工。

LLM成本控制:如果8000次/天的对话全部用LLM做意图识别,日均API费约$400(GPT-4o单价$0.005/次)。分层策略:BERT处理80%的简单对话,20%的复杂对话走LLM。成本从$400/天降到约$64/天。

误路由的反馈机制:用户说"我被转错了"时,自动记录误判案例。每周人工Review误判top 10,反馈到训练集。这个闭环让准确率在实际运行中从上线时的91%微涨到93%。

五、总结

意图识别准确率从72%到93%的核心经验:

  • 关键词匹配是基线(72%),BERT分类是主力(85%),LLM是终审(93%)——每层处理自己能处理的问题
  • 用大模型做数据增强是稀缺标注数据的有效替代——2000人工样本 + 6000 LLM生成样本
  • Chain-of-Thought推理让LLM的意图识别更可解释,人工Review可以看推理过程而非只看结果
  • 准确率vs误路由的权衡要偏向"不确定时转人工"——因为误路由的代价高于转人工的代价
  • 反馈闭环是模型持续改进的驱动力——每周Review误判Top 10

当前系统支持28个意图标签,93%准确率。剩下7%的错误中,3%是多意图混淆(用户在一条消息中表达了两个意图),4%是全新场景。对于新场景,系统自动标记为"置信度低",转人工处理的同时采集标注数据,3天后即可加入模型。这个"自动发现新场景→采集数据→更新模型"的闭环是意图识别系统长期运行的核心能力。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询