我对 Jev 的理解:把 AI 的“小判断”放进代码里

接触 Jev 时,我觉得最值得理解的一点是:很多时候,我们给程序接入 AI,只是想让它回答一个很小的问题。

比如,一条用户消息应该分给哪个部门?这段话是否在申请退款?搜索出来的几篇文章,哪篇更相关?

这些问题用普通代码写起来很别扭,因为涉及自然语言的意思。但如果每次都让聊天模型写一段分析,再从中提取答案,又显得有点绕。

Jev 就是围绕这类需求设计的。

Jev 到底是什么?

Jev 是 TypeSafe 推出的模型,官方将它归为 System One 模型。这里的 System One 借用了“快思考”的概念,强调快速、聚焦的判断。

我更愿意把它理解成一个能读懂自然语言的判断函数:

输入:待判断的内容 + 问题 + 判断标准
输出:选项、分数或概率

举个例子,用户发来一句话:

“刚刚支付成功了,但账户会员一直没到账。”

我们可以让 Jev 从“支付问题、技术故障、其他”中选择一个类别,然后由程序把消息送到对应的处理流程。

这样,AI 的结果就能直接成为代码里的变量,接着参与 if 判断、排序或者分流。

它的原理,可以怎么理解?

从使用方式看,Jev 的一次调用主要包含两部分:

  • State:判断所需的上下文,比如用户消息、订单信息、相关规则。
  • Questions:希望它回答的问题,以及允许的答案或评分标准。

模型根据这些信息,返回结构化的判断结果。

至于训练原理,官方介绍了一种叫 RLCD 的方法,全称是“面向校准决策的强化学习”。不用记住这个缩写,理解它想解决的问题就够了:除了选对答案,还希望模型给出的概率能反映不确定性。

假设模型对很多判断都给出了 80% 的概率。如果校准得好,这批判断中,对应事件的实际发生比例应该接近 80%。

这里说的是大量样本上的表现。单独某一次返回 0.8,并不代表答案一定可靠。

按照我的理解,Jev 的设计重点有两个:把答案限制在程序可以直接使用的范围内,同时让程序有机会根据不确定性决定下一步。

以上是官方公开的训练思路和接口机制,不能据此推断它完整的网络结构或训练细节。

先认识三种常用的提问方式

类型适合问什么怎么理解结果
Choice这条消息属于哪个类别?从给定选项中选一个
Score这条消息的紧急程度有多高?按你定义的等级评分
Noul这条消息是否在申请退款?返回“是”的概率,范围为 0~1

我觉得最容易混淆的是 Score 和 Noul。

“用户有多生气”是程度问题,适合 Score;“用户是否明确要求退款”是判断问题,适合 Noul。

如果 Noul 返回 0.5,意思是对“是否成立”比较不确定,不能理解成“退款意愿中等”。

怎么用?从一个消息分类的小例子开始

不想写代码的话,可以先从官方快速入门页面进入 Playground,试着输入一条消息,再设置几个分类选项。

如果希望接到自己的程序里,可以使用 Python SDK。下面的例子按照官方当前文档编写,需要 Python 3.10 或以上版本;这里没有实际调用 API。

先安装:

pip install typesafe-sdk

到 TypeSafe 控制台 获取 API Key,并设置环境变量。Windows PowerShell 可以这样写:

$env:TYPESAFE_API_KEY="你的 API Key"

然后保存并运行下面的 Python 代码:

from typesafe_sdk import Choice, TypeSafeClient
message = "我的账户被扣了两次钱,麻烦帮我查一下。"
with TypeSafeClient(model="jev-latest") as client:
response = client.system_one(
state={"message": message},
questions={
"category": Choice(
instructions="根据 message 的内容,选择最适合处理该问题的类别。",
criteria={
"billing": "扣费、支付、账单或退款问题",
"technical": "程序报错、功能故障或接口问题",
"other": "不属于以上类别,或信息不足",
},
)
},
)
answer = response.choices["category"]
print(answer.choice)

这个例子里,state 是用户消息,instructions 说明要判断什么,criteria 定义各个类别的含义。

调用结束后,程序拿到一个类别,就可以继续执行自己的逻辑。模型负责理解消息,程序负责决定怎么处理。

我特意保留了 other。因为真实输入不一定落在预设类别里,给模型留一个合理出口,比强迫它选一个更实用。

实际使用时,我会注意什么?

首先,问题要具体。

“帮我判断一下这条消息”太模糊;“判断消息是否明确提出退款请求”就清楚得多。模型需要知道你要做什么,也需要知道依据是什么。

其次,上下文要够用。

如果要判断某笔订单是否符合退款条件,只给一句用户留言通常不够。还需要订单时间、商品情况和退款规则。信息没给全,换一种问法也解决不了根本问题。

最后,要区分“格式正确”和“判断正确”。

Jev 返回的结果方便程序读取,但类型明确并不代表内容永远准确。正式使用前,还是应该拿自己的实际样本检查效果,再决定哪些情况可以自动处理,哪些需要复核。

我觉得 Jev 适合放在哪里?

在我看来,它适合放在流程里那些“规则写不清,但问题能问清”的位置。

比如客服消息分类、检索结果相关性判断、内容筛选,或者判断一段材料是否支持某个说法。具体的计算、数据库查询和执行动作,继续交给普通代码。

Jev 给我的启发是:接入 AI 的入口可以很小。先找到程序里一个需要理解语义的判断点,把问题和标准定义清楚,就已经能做出有用的功能。

参考资料:System One、训练思路、快速入门。