用 Jev 做工单路由:显著减少错派单

更新于 适用版本 Jev 1.13

TL;DR: 工单路由本质是一道选择题(choice)——“这单该进哪个队列”。Jev 是 TypeSafe AI(typesafe.ai)2026 年 9 月发布的 System One 判断模型(judgment model),专做判断题(judgment)、选择题(choice)、打分题(scoring),不做聊天。一次调用直接返回结构化的 {answer, confidence, rationale}:置信度 0.85 以上自动派单,以下进人工队列。本文给出输入输出定义、架构图和 50 行以内的端到端实现。

路由决策长什么样

写代码之前,先把任务定义收窄:

{"answer":"billing","confidence":0.94,"rationale":"客户反映被重复扣款并要求退款。"}

三个字段各司其职:answer 决定分支走向,confidence 决定能不能自动化,rationale 是客服接手时直接能读的判据。

为什么判断模型更合适

聊天模型为开放式生成优化,拿它做路由就得解析自由文本、祈祷格式不跑偏。Jev 的任务形态和路由天然对齐。

对比维度聊天模型Jev(choice 调用)
输出形态自由文本,需要自己解析结构化 answer / confidence / rationale
任务框定靠提示词压制闲聊原生选择题
自动化信号默认没有confidence 可直接设阈值
可解释性不稳定每次决策都附带 rationale
失败方式格式跑偏、答非所问低置信度结果,可转人工

架构图

工单到达(主题 + 正文)
        |
        v
预处理(截断、脱敏、拼接主题与正文)
        |
        v
Jev choice 调用(经 OpenRouter,typesafe/jev-1.13)
        |
        v
解析结构化结果 {answer, confidence, rationale}
        |
        +--> confidence >= 0.85 --> 自动派单到对应队列
        |
        +--> confidence <  0.85 --> 人工队列,rationale 展示给客服

整条流水线就是四步逻辑加一个阈值分支,没有任何魔法。

最小端到端实现

import os, json, requests

URL = "https://openrouter.ai/api/v1/chat/completions"
# Confirm the exact model slug on the OpenRouter model page.
MODEL = "typesafe/jev-1.13"
QUEUES = ["billing", "technical", "account", "other"]

SYSTEM = ("You are a ticket router. Choose exactly one queue from: "
          + ", ".join(QUEUES) + ".")

def route(subject: str, body: str) -> dict:
    resp = requests.post(
        URL,
        headers={"Authorization": f"Bearer {os.environ['OPENROUTER_API_KEY']}"},
        json={
            "model": MODEL,
            "messages": [
                {"role": "system", "content": SYSTEM},
                {"role": "user", "content": f"Subject: {subject}\n\n{body[:4000]}"},
            ],
            "temperature": 0,
        },
        timeout=30,
    )
    resp.raise_for_status()
    # 示例数据(example fixture):
    # {"answer":"billing","confidence":0.94,"rationale":"..."}
    return json.loads(resp.json()["choices"][0]["message"]["content"])

result = route("Refund not received", "I was charged twice this month...")
if result["confidence"] < 0.85 or result["answer"] not in QUEUES:
    print("ACTION=human-review", result)
else:
    print("ACTION=route queue=", result["answer"], "conf=", result["confidence"])

核心就三步:调用、解析、分支。任何支持 OpenAI 兼容端点的 SDK(JavaScript、Go 等)写法一致,只是 HTTP 客户端不同。官方 API 的端点与字段请以 typesafe.ai 官方文档为准。

参数与阈值建议

配置项建议理由
任务类型choice路由是单选决策,不是 yes/no 也不是打分
自动派单阈值confidence >= 0.85保守起点,用自有误派样本回调
低置信度路径人工队列 + rationale客服能看到模型犹豫的原因
未知标签按低置信度处理answer 不在队列列表里就进人工队列
正文截断约 4000 字符信号足够,延迟可控

三种任务类型的详细区别见 Jev 三原语(three primitives)指南,阈值设计见置信度与兜底(confidence and fallback)指南;邮件路由三团队的实际案例展示了同款配置的生产运行方式。

本文适用版本:Jev 1.13。

FAQ

常见问题

工单路由为什么用 Jev 而不是聊天模型?

路由是选择题,不是对话。Jev 是 TypeSafe AI 的 System One 判断模型,专做判断题、选择题、打分题,直接返回带置信度的结构化结果,不需要从自由文本里抠答案。

自动派单的置信度阈值设多少合适?

建议从 0.85 起步。置信度达到阈值就自动派单,低于阈值连同 rationale(判定理由)一起进人工队列,再根据自有误派样本微调。

在 OpenRouter 上应该调用哪个模型 id?

本页示例用 typesafe/jev-1.13,端点为 OpenAI 兼容的 https://openrouter.ai/api/v1/chat/completions。上线前请在 OpenRouter 模型页确认确切的模型 slug。

继续阅读