实战案例 中级

实战:客服工单智能分类与路由

用结构化输出做工单分类打标,再按类别路由到不同处理流程,构建可靠的生产级分类链。

需求

客服工单自动打标:类别(退款/物流/账号/其他)、紧急度(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 枚举标注字段的好处是?