跳到正文
Powered by Pagefind
中文
教程与实战

用 Jev 做客服分流:决策契约、置信度阈值与降级策略

客服/工单分流是 Jev 最直接的落地场景:一次请求并行判定意图、复杂度、紧急度与情绪,再用置信度阈值决定自动执行、 specialist 处理还是转人工。本文给出完整的契约设计、可直接改造的阈值代码,以及用中文样本校准阈值的流程。

2026/9/26 jev-1.13.0 Jev 决策实验室 最后核实: 2026/9/26 10 分钟阅读

客服分流几乎是 Jev 的「教科书场景」:输入是文本、答案是封闭集合、量大、低置信度可以平滑转人工。这篇教程把官方文档里的工单例子扩展成一个完整的契约 + 阈值策略,你可以直接改造成自己的版本。

场景与输入

输入是一条工单/客服消息(文本),可附订单状态、客户等级等结构化信息拼进 state。目标是决定:这条消息由哪个团队处理、要不要升级、要不要抄送。

决策契约:一次请求问全五件事

{
  "state": "Shoes arrived two weeks late and in the wrong size. Also I see two charges on my card. What are you going to do about this?",
  "questions": {
    "department": {
      "type": "choice",
      "instructions": "Which team should handle this?",
      "criteria": {
        "returns": "Exchanges, refunds, wrong or damaged items",
        "shipping": "Delivery status, delays, lost packages",
        "billing": "Charges, invoices, payment problems"
      }
    },
    "return_reason": {
      "type": "choice",
      "instructions": "If the customer wants to return something, why?",
      "criteria": {
        "wrong_size": "The item doesn't fit",
        "wrong_item": "A different product was delivered",
        "damaged": "The item arrived broken or faulty",
        "changed_mind": "The item is fine, the customer no longer wants it",
        "other": "A return reason that fits none of the above"
      }
    },
    "shipping_issue": {
      "type": "choice",
      "instructions": "If this is a shipping problem, which kind is it?",
      "criteria": {
        "not_delivered": "The package never arrived",
        "delayed": "The package is late but still on its way",
        "wrong_address": "The package went to the wrong place",
        "damaged_in_transit": "The package arrived damaged",
        "other": "A shipping problem that fits none of the above"
      }
    },
    "requested_resolution": {
      "type": "choice",
      "instructions": "What does the customer want to happen?",
      "criteria": {
        "exchange": "Swap the item for a different one",
        "refund": "Money back",
        "replacement": "The same item sent again",
        "information": "Just an answer, no action needed"
      }
    },
    "tone": {
      "type": "choice",
      "instructions": "What is the customer's tone?",
      "criteria": { "calm": null, "frustrated": null, "angry": null }
    }
  }
}

这个契约有几个值得抄走的设计:

  • 投机性问题一起问:return_reason 只在部门是退货时有用,但官方明确「加问题的边际延迟很小」——一次问全,代码忽略没用的答案,换来的是请求数只有 1。
  • 每个清单都带 other:没有任何清单能穷举现实,兜底选项是低置信度分流之外的第二道安全网。
  • 选项描述写「不管什么」:容易混淆的选项(如「退货政策」vs「退货进度」)要说明 not_for,参见决策原语详解。

阈值策略:把概率分布翻译成路由规则

对上面那条「迟到 + 错码 + 双重扣费」的复合工单,官方文档给出的响应是:department 返回 returns(概率 0.60)但 billing 紧随其后(0.38),置信度只有 0.39。翻译成代码:

answers = response.answers
department = answers["department"]

# 层 1:分布太散 → 人工
if department.confidence < 0.3:
    send_to_manual_triage(ticket)
elif department.choice == "returns":
    # 层 2:主选项自动路由(投机性答案只在对应分支被消费)
    assign(ticket, team="returns", issue=answers["return_reason"].choice)
elif department.choice == "shipping":
    assign(ticket, team="shipping", issue=answers["shipping_issue"].choice)
else:
    assign(ticket, team="billing")

# 层 3:第二名概率可观 → 抄送,而不是丢弃
for team, p in department.probabilities.items():
    if team != department.choice and p > 0.25:
        notify(ticket, team=team)

# 层 4:诉求不明确 → 问,而不是猜
resolution = answers["requested_resolution"]
if resolution.confidence < 0.5:
    ask_customer_what_they_want(ticket)
elif resolution.choice == "refund":
    flag_for_refund_approval(ticket)

# 层 5:情绪是升级信号
if answers["tone"].choice == "angry":
    flag_for_senior_agent(ticket)

这套分层结构的语义值得记住:置信度不是准确率,它是「要不要人介入」的开关。这正是官方 Confidence-gated routing 模式的核心——答案告诉你「是什么」,置信度告诉你「能不能据此行动」。

阈值校准:三步用你自己的工单定数字

上面代码里的 0.3 / 0.25 / 0.5 只是官方示例的演示值,不是最佳实践。正确的数字只能从你的数据里来:

  1. 建黄金集:抽 200–500 条真实工单,人工标注期望部门。没有真实数据就用脱敏样本,但别用编造的「理想工单」。
  2. 跑分布,不是跑对错:对每条样本记录 choice 是否命中 以及 confidence / 第二名概率的分布。你会得到一张「置信度 vs 准确率」的对应表。
  3. 按业务代价定阈值:误分给 billing 的代价高,就把部门阈值收紧;抄送成本低的团队,可以把第二名的抄送线放低。转人工比例是成本——目标不是 0,是「自动化收益 > 人工处理成本」的平衡点。

官方对中文的提醒在这里再次适用:英语是主训练语言,中日韩效果需自行验证——中文黄金集是这个场景的第一笔投资,而不是可选项。跑通的步骤见中文上手教程。

边界与降级

  • 超时/请求失败 → 转人工:降级路径必须是默认路径的兜底,而不是异常处理脚注。
  • 高风险动作不自动执行:退款、换货这类副作用动作,Jev 判定之后走审批流,不让模型直接触发。
  • 版本迁移重跑黄金集:把响应里的 model 版本记进日志;升级模型版本(例如从 jev-1.13.0 起新版本)后用同一黄金集回归,阈值可能要重校。
  • 契约迭代:发现两类工单反复混淆,优先改选项描述(not_for + 示例),其次才考虑收窄清单。

契约设计的底层语法(三种原语、分布怎么读)在决策原语详解;这个场景在整个架构里的位置见Jev 是什么与Jev vs LLM。

相关文章

这篇文章有帮助吗?