实战:客服工单智能分类与路由
用结构化输出做工单分类打标,再按类别路由到不同处理流程,构建可靠的生产级分类链。
需求
客服工单自动打标:类别(退款/物流/账号/其他)、紧急度(P0~P3)、情绪(正面/中性/负面),并按结果路由处理。
结构化分类链
from pydantic import BaseModel, Field
from typing import Literal
class Ticket(BaseModel):
category: Literal["退款", "物流", "账号", "其他"] = Field(description="工单类别")
urgency: Literal["P0", "P1", "P2", "P3"] = Field(description="紧急度")
sentiment: Literal["正面", "中性", "负面"] = Field(description="用户情绪")
summary: str = Field(description="一句话摘要")
classifier = (ticket_prompt | llm.with_structured_output(Ticket))
ticket: Ticket = classifier.invoke({"text": raw_ticket})
Literal 枚举杜绝了"模型自造类别"的问题 —— 比自由文本分类可靠得多。
按结果路由
def route(t: Ticket):
if t.urgency == "P0":
return escalate_to_human(t) # P0 直接转人工
if t.category == "退款":
return refund_flow(t)
return faq_bot(t)
branch = RunnableLambda(lambda t: route(t))
质量保障
- 用 50~100 条历史工单(人工标注)做评测集,分类准确率 < 90% 别全量上线;
- 低置信度处理:让模型额外输出 confidence 字段,低于阈值转人工;
- 兜底策略:解析失败(极少发生)时走规则关键词分类兜底。
📝 课后练习
quiz-1 结构化输出中用 Literal 枚举标注字段的好处是?