Jev 对比大语言模型

它们并不在争同一份工作。大语言模型负责写,Jev 负责判断。有用的比较不是谁更聪明,而是你的代码拿到答案之后还得做什么——这个差别大到足以改变外面那段程序的写法。

同一个判断,两种写法

把一张工单路由到四个队列之一。下面是每一边在代码上真正要你付出的东西。

用语言模型

const res = await llm.chat({
  messages: [{ role: "user", content:
    `Route this ticket. Reply with JSON: {"queue": "Billing"|"Technical"|"Account"|"Sales"}
     Ticket: ${ticket}` }],
  response_format: { type: "json_object" }
});

let queue;
try {
  queue = JSON.parse(res.content).queue;        // may not be JSON
} catch {
  return retry();                               // ...so there is a retry
}
if (!QUEUES.includes(queue)) return retry();    // may be a queue you never had
// and no idea how close the call was

用 Jev

const { answers } = await jev.systemOne({
  state: ticket,
  model: "jev-latest",
  questions: { queue: { type: "choice", instructions:
    "Which team should own this ticket?", criteria: QUEUES } }
});

const { choice, probabilities, confidence } = answers.queue;
// choice is one of QUEUES. It cannot be anything else.
if (confidence < 0.7) return humanReview(ticket, probabilities);
route(choice);

重试循环就是那个破绽。它在第一个版本里存在,是因为答案以文本抵达,可能解析不了,也可能解析出一个从不在名单上的队列。在第二个版本里它无处安身:按构造,答案必是 QUEUES 之一。取代它的是完全不同的一条分支——在模型_不确定_时触发,而不是在它格式错乱时触发。

第二个版本能看见什么

那张工单,真的跑了一遍 Jev。冠军毫不意外;第二名才是光秃秃的标签会丢掉的那部分。

“今早 4.2 发版以来,我们的 SSO 登录一直报 500。团队里没人能登进去。Chrome 和 Safari 上一样,两个不同的租户也一样。”
技术 占 87%,共 4 个选项
87% 技术

技术以 87% 胜出,但账号占着 13%——而这正是应该存在的分歧,因为 SSO 故障确实卡在两者之间。一个光秃秃的标签会把它藏起来。如果你的路由判错是有成本的,13% 就是该拿来设阈值的那个数。

逐项对照

你发出的是什么
Jev

一个 state 加一组类型化问题。

大语言模型

一段提示词,通常把 schema 和规则当散文一起塞进去。

回来的是什么
Jev

每个问题一个类型化答案,每个选项都有概率。

大语言模型

文本。如果你客气地要了、而且支持那个模式,就是 JSON。

你的下一行代码
Jev

对一个只可能是你自己那些值之一的值做 switch。

大语言模型

先解析,再校验,然后为两者中任一失败的情况写一条分支。

它怎么出错
Jev

它可能读错你的文本。它不可能返回你没定义过的形状。

大语言模型

它还可能在形状上出错——缺字段、冒出你从没列过的标签、JSON 外面裹着一段散文。

问十件事
Jev

十个问题一次请求,并行地针对 state 评估。

大语言模型

一段塞满的提示词,或者十次调用。

不确定性
Jev

每个 Choice 和 Score 都带一个分布和一个置信度。

大语言模型

文本自己声称的那点把握。

这些数字

这些是 TypeSafe 公布的;是厂商自己的数据,不是我们的测量。

70–500 毫秒

端到端响应,而前沿模型是 3–329 秒

40–200 倍

在系统一形状的查询上更快

$0.042

每百万输入 token,输出免费

我们能测到的是:在本站发起的 14 次运行中,往返时间中位数是 329毫秒——而其中大多数请求带的是九个问题,不是一个。

什么时候大语言模型才是对的工具

只要你要的是语言,大多数时候都是。Jev 没有能解释的观点,也无话可说。

  • 你需要散文——一封回信、一段摘要、一条 commit 信息、对判断的解释而不是判断本身。
  • 你需要写代码、写方案,或任何在调用之前答案集合还不确定的开放式任务。
  • 可能的答案集合确实是无界的。抽取一个任意的人名,不是在 255 个选项上做 Choice。
  • 你需要一条可以检视的推理链。Jev 返回的是判断,不是判断背后的步骤。
  • 量很小,形状很松。一天跑两次的重试循环不值得专门设计掉。

这两者互补大过互斥。TypeSafe 自己的说法是:系统一负责快速的结构化判断,后面接一个普通模型作为系统二——用 Noul 筛输入,用 Choice 分流,把活下来的交给真正会写东西的那个模型。

继续读

自己跑一遍这个对比

粘一张工单、一份初稿、一段提示词——任何你本来会围着它写一圈解析逻辑的东西——然后看九个类型化答案从一次请求里回来。

打开试验场