用 Jev 做客服分流:决策契约、置信度阈值与降级策略
客服/工单分流是 Jev 最直接的落地场景:一次请求并行判定意图、复杂度、紧急度与情绪,再用置信度阈值决定自动执行、 specialist 处理还是转人工。本文给出完整的契约设计、可直接改造的阈值代码,以及用中文样本校准阈值的流程。
客服分流几乎是 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 只是官方示例的演示值,不是最佳实践。正确的数字只能从你的数据里来:
- 建黄金集:抽 200–500 条真实工单,人工标注期望部门。没有真实数据就用脱敏样本,但别用编造的「理想工单」。
- 跑分布,不是跑对错:对每条样本记录
choice是否命中 以及confidence/ 第二名概率的分布。你会得到一张「置信度 vs 准确率」的对应表。 - 按业务代价定阈值:误分给 billing 的代价高,就把部门阈值收紧;抄送成本低的团队,可以把第二名的抄送线放低。转人工比例是成本——目标不是 0,是「自动化收益 > 人工处理成本」的平衡点。
官方对中文的提醒在这里再次适用:英语是主训练语言,中日韩效果需自行验证——中文黄金集是这个场景的第一笔投资,而不是可选项。跑通的步骤见中文上手教程。
边界与降级
- 超时/请求失败 → 转人工:降级路径必须是默认路径的兜底,而不是异常处理脚注。
- 高风险动作不自动执行:退款、换货这类副作用动作,Jev 判定之后走审批流,不让模型直接触发。
- 版本迁移重跑黄金集:把响应里的
model版本记进日志;升级模型版本(例如从jev-1.13.0起新版本)后用同一黄金集回归,阈值可能要重校。 - 契约迭代:发现两类工单反复混淆,优先改选项描述(
not_for+ 示例),其次才考虑收窄清单。
契约设计的底层语法(三种原语、分布怎么读)在决策原语详解;这个场景在整个架构里的位置见Jev 是什么与Jev vs LLM。
相关文章
concepts
Choice / Score / Noul:三种决策原语怎么选、怎么写
Jev 的所有请求都由三种问题类型构成:Choice(封闭选项二选一)、Score(有序量表定位)、Noul(是非概率)。本文用官方文档的请求/响应结构逐一拆解字段含义、概率与置信度怎么读,以及最容易踩的三个契约设计错误。
concepts
Jev vs LLM:不是替换大战,是组合架构
「Jev 能取代 LLM 吗」问错了问题。本文用官方口径对照 Jev 与 LLM、JSON Mode、传统分类器的能力边界,给出按「是否生成文本 + 是否需要概率」决策的选型树,并展示两者组合的标准工作流。
concepts
Jev 是什么:把「生成一段话」换成「返回一个决策」
TypeSafe 的 Jev 是首个 System One 决策模型:不做文本生成,而是把状态加一组封闭问题并行采样,返回带概率与置信度的结构化决策。本文讲清它的定位、三种决策原语、官方宣称的能力边界,以及最常见的理解误区。
这篇文章有帮助吗?
感谢反馈!