完整案例 / 从原话到可执行流程
完整实战:一条“显示送达却没收到”的工单,如何设计 Jev 决策流程
这不是一张只展示请求格式的代码卡。我们把一条工单从进入系统到分配队列逐步走完,并保留每一步的判断依据。所有客户、订单和模型数值都是教学用的合成示例;本站没有调用 Jev API 得到这些结果。
先看原始任务:客服真正需要什么?
- 客户原话:“订单显示昨天已送达,但门口没有包裹。我今天就要用,能不能直接退款?”
- 业务目标是决定谁先处理:物流、账单、技术,还是人工复核。退款并不是这次模型调用的输出,也不能因为用户提到了退款就立即执行。
- 系统另外查到:订单属于该账户;承运商状态为 delivered;签收信息缺失;退款政策由另一个确定性流程管理。模型看不到系统没有提供的事实。
01 · 确定动作边界
把最终动作写成可检查的规则:只有资料齐全、分类明确且达到自有验证阈值时,才自动分配一个可撤销的队列。信息不足、多个诉求冲突、低置信度或接口失败,全部进入人工复核。任何退款申请都要走身份、订单和政策检查。
02 · 把原话变成 state
不要把整个账户历史丢进去。保留本次消息、经系统核实的配送状态、签收人是否已知;标清“客户称未收到”与“承运商显示送达”来自不同来源。删除姓名、地址、电话、卡号。若订单记录查不到,先补信息,不让模型猜。
03 · 拆成三个原子问题
Choice 回答“首先由哪个团队处理”;Noul 回答“这条消息是否表达时间紧迫”;Score 依预先定义的低、中、高尺度评估客户情绪。三个答案互相独立;代码可以让高紧迫度工单优先排队,但不会把情绪评分当成退款权限。
04 · 读取示意结果并执行
假设 Choice 选 shipping,示意 confidence 为 0.84;Noul 为 0.91;Score 为中等级。只有在自己标注的数据上验证过适用阈值后,代码才能决定是否自动分配物流队列。若阈值设为 0.88,这条工单仍要人工复核。0.84、0.91 和 0.88 都是教学假设,不是官方实测或推荐值。
05 · 用反例找出设计漏洞
如果客户只说“我要退款”,物流仍是唯一选项,就说明候选集设计错了;如果承运商状态缺失,先查记录;如果同一句同时有物流和扣款争议,转人工或拆成两个工单;如果“我不着急”被判紧急,就把否定句加入回归集。
可复制的最小 state:标清事实来源
customer_claim: 包裹显示送达但未收到;today_needed: true
verified_order_owner: true;carrier_status: delivered
signature: unknown;refund_authorized: not_checked把问题写成请求:三个判断共享同一份 state
以下 JSON 展示官方文档的请求形状,字段值是本站编写的合成样本。发送前仍要按实际 SDK/API 版本核对约束和权限。
{
"state": "customer_claim: 包裹显示送达但未收到;today_needed: true\nverified_order_owner: true;carrier_status: delivered\nsignature: unknown;refund_authorized: not_checked",
"model": "jev-latest",
"questions": {
"team": {
"type": "choice",
"instructions": "Which team should handle this ticket first?",
"criteria": {
"shipping": "Delivery, tracking, missing parcel",
"billing": "Charges, payment, subscription",
"technical": "Product bug or integration",
"review": "More than one intent or insufficient information"
}
},
"urgent": {
"type": "noul",
"instructions": "This message expresses time sensitivity."
},
"tone": {
"type": "score",
"instructions": "How distressed does the customer appear?",
"criteria": [
"Calm, factual",
"Concerned but civil",
"Strong distress or anger"
]
}
}
}不要把示意输出误当实测
下面数值是为讲解决策路径手工编写的示意数据。Choice/Score 的 confidence 与 probabilities 是不同字段;Noul 只有 noul 值。应用应先检查 answers 的问题 ID、type 和必需字段,再决定下一步。
{
"answers": {
"team": {
"type": "choice",
"choice": "shipping",
"confidence": 0.84,
"probabilities": {
"shipping": 0.81,
"billing": 0.1,
"technical": 0.02,
"review": 0.07
}
},
"urgent": {
"type": "noul",
"noul": 0.91
},
"tone": {
"type": "score",
"score": 1.0,
"confidence": 0.78,
"probabilities": {
"0": 0.08,
"1": 0.82,
"2": 0.1
}
}
}
}六条回归样本:先写预期动作,再看模型
| 输入变化 | 应先做什么 | 为什么 |
|---|---|---|
| 正常:显示送达但未收到 | 核实订单后分流或复核 | 物流事实与客户说法都存在 |
| 只有“救命,急” | 补订单信息 | 缺少可路由的事实 |
| 同时说未收到和重复扣款 | 拆单或人工复核 | 单一 Choice 可能掩盖第二诉求 |
| 明确说“我不着急” | 检查紧急性否定句 | 不能只匹配“着急”两个字 |
| 承运商无状态 | 先查记录,必要时人工 | 不能把缺失当 delivered |
| 英文或中英混写 | 用同一标签规则复测 | 语言变化可能改变分布 |
怎样判断这个方案值得上线?
- 从目标业务抽取脱敏样本,先让人工标注“首接团队”和“是否允许自动分流”。把常见样本与高代价长尾样本分开统计。
- 在一组样本上调阈值,在未参与调参的样本上验证;报告误分到高风险队列的次数、转人工率、p50/p95 端到端延迟、每千单成本。
- 小流量、可撤销地试运行,记录模型版本、请求 ID、问题定义版本和人工改派原因。模型或候选集更新后重新回归。
动手练习
现在轮到你:改一条输入,看处理路径是否变化
如果订单所属账户尚未验证,最合理的第一步是什么?