JEV / TYPESAFE AI / 入门解释
Jev 是什么?从一条退款消息看起
Jev 是 TypeSafe 开发的 AI 模型。你把资料和一个具体问题交给它,它会返回选择、评分或概率,供程序使用。
比如,客服系统可以用它判断一条消息该交给哪个团队。下面用一条退款消息,看看要给它什么、会得到什么,以及程序怎样使用结果。
从客户消息到账单队列
教学示意,并非实际 API 调用结果。
- ① 用户消息+相关订单 → ② 从客服类别中选择
- ② 从客服类别中选择 → ③ 示例选择:账单
- ③ 示例选择:账单 → ④ 程序检查分流规则
- 条件满足:④ 程序检查分流规则 → 账单队列
- 信息不足:④ 程序检查分流规则 → 补材料/人工
Jev 判断消息的类别。核对支付记录、处理退款由应用程序完成。
01 / STATE
发给它客户的消息
“同一笔订单扣了两次钱,请把多扣的退回来。”通过 API 发给它这条消息和相关订单资料。文档把这些输入叫作 state,也就是供模型判断的材料。
02 / QUESTIONS
写明问题和选项
问它:“这条消息该由哪个团队处理?”给出四个选项:账单、技术支持、账号支持、其他,并说明各自负责什么。
03 / ANSWERS
拿到分类结果
这个例子预期选中“账单”。Choice 的返回值还包括所有选项的概率,以及 confidence,程序可以据此判断某一类是否明显胜出。
04 / ACTION
分派消息,再核对扣款
把消息送到财务队列。接下来的财务流程查询支付记录、核对重复扣款、计算退款金额。类别不明确的消息可以交给人工处理。
和已有办法有什么区别?
规则
条件可以精确描述时,直接写规则。例如,订单是否有两笔已完成的扣款,可以查询支付记录。理解客户的话,是另一个问题。
文本分类器
文本分类器已经能把消息分到不同类别。Jev 允许在每次请求中描述类别,适合候选项随页面、任务或用户变化的情况。
LLM 结构化输出
支持结构化输出的大语言模型也能返回符合 JSON 格式的类别,同一流程还需要生成文字时尤其方便。Jev 直接返回选项、分数和概率,供程序判断下一步怎么走。
Jev 适合放在哪里
使用 Jev 时,你提供材料、问题和选项,拿回可供代码使用的值及概率分布。如果应用频繁进行这类小范围判断,就值得拿真实样本试一试。
三种返回值怎么用
Choice · 选哪一个
“这张工单该进哪个队列?”
写出一组互斥选项,返回一个选项和完整概率分布。保留“其他/不明确”,给候选之外的情况留出口。
Score · 处在哪一级
“这个故障影响多大?”
用具体描述定义有序等级,如外观瑕疵、可绕过的故障、完全阻断。分数是等级索引的概率加权平均,可落在两级之间。
Noul · 是否成立
“消息明确要求退款吗?”
返回 0 到 1 的“是”概率,没有单独的 confidence。接近 0.5 表示两种答案接近;它不代表“退款诉求中等”。
问法决定了要判断什么
“穿着不太合适,有什么处理办法?”表达了不满意,但还没有选定处理方式。“客户是否不满意”和“客户是否明确要求退款”是两个问题。把这个区别写进问题里,模型才知道你要判断什么。TypeSafe 在 Jev 1.13 的说明中也用了这类例子。
检索时,多问一句“有答案吗”
程序先为原文段落编号。Choice 从候选中找最相关的一段;同时用 Noul 判断材料里是否真的有答案。代码组合两项结果,决定显示原文还是提示补资料。
这个附加判断很关键:即使所有段落都不相关,Choice 的分布里也会有第一名。排名靠前只能说明相对关系。
如结果含糊,可补充检索再判断;无需强行从现有候选中给用户一个答案。
- 问题+带编号的原文 → 哪一段最相关?
- 问题+带编号的原文 → 材料有答案吗?
- 哪一段最相关? → 代码综合两项结果
- 材料有答案吗? → 代码综合两项结果
- 证据足够:代码综合两项结果 → 返回原文位置
- 不足/模糊:代码综合两项结果 → 补资料/暂缓
浏览器 Agent 从当前页面生成选项
做什么,操作哪个元素?
browser-use/jev-ultrafast 把当前页面整理成一组可选动作。代码读取页面元素,列出此刻能做的操作和对应目标。页面变化,候选项也跟着变化。
把条件问题一起问
同一次请求既问选哪种操作,也分别问每种操作应该选哪个目标:如果点击,点哪里;如果输入,填哪里。代码取出被选中的操作及其对应目标,其余目标答案不执行。
执行后,再看下一步
浏览器执行动作,再读取页面的新状态。需要填写新文字时,由一个小语言模型生成内容。页面提供可操作目标,Jev 从中选择,浏览器执行;这几个部分由代码串起来。
把有用的历史记录留下来
选择哪些记录进入下一轮
Tamara Tran 的 fast-jev-compaction 换了一个角度处理过长的 Agent 对话:让模型判断旧的工具调用和结果中,哪些对当前任务还有用,然后筛选保留。
每次工具调用,问两个问题
要不要保留这次调用?要不要保留它的结果?代码根据两个概率决定:完整保留调用和结果、保留调用并截短结果,或删除这一对记录。最近的调用由代码固定保留,留下来的文字沿用原文。
先给筛选器一份精简视图
筛选器看到对话文字和工具输入,旧工具输出先变成简短状态说明,整体输入还会按预算截取。被删掉的细节不再进入下一轮上下文。这个项目的启发在于,把“写一份摘要”变成了“挑出还需要的记录”。
用同一个问题检查 Agent 的执行记录
一个重复评估实验
在 LangChain 发布的一项实验中,Daniel Shea 和 Sean Roche 选了五份固定的天气 Agent 执行记录,每个评审模型对每份记录重复评估 100 次。Jev 的 500 次通过/不通过判断均与人工标签一致,质量分数在重复评估中的波动也很小。固定输入、反复评估,可以看出评审模型是否稳定地应用同一套标准。
这些做法背后的原理
- 独立判断:同一份 state → Choice:分类
- 独立判断:同一份 state → Noul:要退款?
- Choice:分类 → 代码组合答案
- Noul:要退款? → 代码组合答案
多个问题共享材料,分别计算;有依赖的后续问题需要由代码另行组织。
先把答案空间定义好
浏览器例子中,代码已经列出了可用操作和页面元素。Jev 在给定的答案空间里计算概率。TypeSafe 把这种直接输出判断和概率的模型称为 System One。应用拿到的值可以直接用于后续逻辑。
TypeSafe 介绍了一种并行采样方式,直接产生这些输出,省去逐个 token 生成长篇文字的过程。同一请求里的问题共享输入状态、独立求值。浏览器 Agent 正是利用这一点,同时问“如果点击,点哪里”和“如果输入,填哪里”,再由代码选取对应答案。
“概率校准”是什么意思
它的训练方法叫 RLCD,即面向概率校准决策的强化学习。校准让概率有了实际含义:许多被赋予 0.8 概率的预测中,约八成应该成真。程序可以据此决定立即处理、补充信息,还是转交人工。
也看看概率如何分布
Choice 和 Score 还返回 confidence,用来描述概率分布有多集中。“财务”远高于其他选项,与“财务”和“账号支持”几乎打平,给程序的是两种不同信号。概率分布把这种区别保留下来,再用已有正确答案的样例确定分流阈值。