我用六组实验测了 TypeSafe Jev:它到底能干什么,不能干什么
9 月 16 日 TypeSafe 发布了 Jev。它和我们熟悉的大模型很不一样:不写段落,不做长推理,只回答封闭问题。你给它一段状态(state),再给几个带类型的问题(是/否、多选一、打分),它一次前向就把每个问题的概率分布返回来。
官方示例是客服工单:"这条消息紧急吗?该转给哪个团队?客户有多生气?" 一次调用三个答案,每个都带概率,花费不到一分钱的千分之二。
看完发布会,我脑子里只有一个问题:这东西在真实数据上到底有没有用? 于是我做了六组实验,其中五组整理成了开源仓库,所有数据、代码、评测集都公开。这篇是总结。
先说结论,三句话:
- Jev 能用的前提是:信号在语义里,不在你的数据统计里。 列名有意义的表格它能做到 0.83 AUC,哈希 ID 组成的 CTR 数据它只有 0.46(比瞎猜还差)。
- 零样本时,它抵得上几百条标注。 在两个完全不同的冷启动问题上,一个训练好的文本模型要 150 到 500 条标注才追得上 Jev 的零样本判断。
- 有了标注,它最好的位置是当特征,不是当模型。 五个项目里,Jev 单独使用从来没有稳定地赢过强基线;但把它的答案加进基线模型,每一次都是显著提升。
下面一个一个说。
实验 0:开场三问
正式项目之前,我先用三个小实验摸它的边界。
Avazu 广告点击率。 2,000 条带标签的广告曝光,特征全是 site_id=1fbe01fe 这种哈希值。Jev 的 AUC 是 0.46,校准时最优斜率是 0,等于"把模型扔掉"。这不意外:一个站点的历史点击率只存在于你的日志里,世界上没有任何语料能告诉模型它是多少。
泰坦尼克号生还。 同样是表格、同样是二分类,但列名是性别、舱位、年龄。Jev 零样本 AUC 0.830,训练好的逻辑回归是 0.843。把 Jev 的概率作为一个特征加进逻辑回归,变成 0.854,比两者单独都高。Jev 错的方式很有规律:方向全对,幅度往中间收。头等舱女性真实生还率 0.97,它给 0.79。它知道"妇孺优先",但不知道这份数据里这条规律有多极端。
安全扫描器二审。 我的 skills 收录站有一个正则安全扫描器,误报很多。我让 Jev 给命中的片段做二审,同时试了两种问法:
- 问"这段文字危险吗?"(是/否):AUC 0.70
- 问"这段文字是什么?"(恶意指令 / 官方安装器 / 文档引用 / 否定句 / 占位符……):AUC 0.94
同一份证据,只是换了问法,差了 0.24。判断题会被模型的谨慎先验拉平到 0.3 到 0.6 之间;分类题让它把"官方安装器"和"恶意指令"分得很开。之前人工核实过的 19 个误报仓库,它 19 个全判对。
三个小实验定下了后面所有项目的判据:问它常识能回答的问题,别问你的数据才知道的问题。
实验 1:搜索重排(D)
我的 skills 收录站有个命令行工具 ash,搜索用的是手写的关键词打分。问题:Jev 重排能不能赢过 embedding?
我用 164 条真实查询(中文、英文、中英混合),把四个检索器的 top-30 结果合并成 9,831 个"查询—结果"对,请两个独立评审打 0 到 3 分的相关性:一个是 Jev,一个是 Claude Haiku 4.5。两者一致性 κ=0.71。30 条分歧最大的我人工裁决。
| 系统 | NDCG@10 |
|---|---|
| embedding 与 Jev 融合(RRF) | 0.864 |
| Jev 重排 embedding 的 top-30 | 0.785 |
| bge-m3 embedding | 0.774 |
| OpenAI text-embedding-3-small | 0.759 |
ash 线上关键词排序 | 0.609 |
乍看 Jev 重排(0.785)比 embedding(0.774)高一点。但这里有个陷阱:Jev 既是评审又是选手。 我把所有系统分别用三套标签重算了一遍:
| Jev 重排 − bge-m3 | 差值 |
|---|---|
| 只用 Jev 自己的标签 | +0.053 |
| 用合并后的标签 | +0.012(不显著) |
| 只用 Haiku 的标签 | −0.028(显著为负) |
换成和 Jev 无关的评审,它单独重排反而输。评审循环偏差是真的,而且能量化出来。
但融合后的系统在三套标签下都显著赢 embedding(+0.064 到 +0.090)。这是第一次看到后面会反复出现的规律:Jev 单独用不赢,当第二个信号用就赢。
顺带发现 ash 真正的病不是排序而是召回:用 embedding 去重排 ash 自己的 top-30,结果反而更差,因为相关的结果根本不在列表里。
实验 2:新 skill 的冷启动先验(A2)
一个新仓库刚被收录,还没有任何 star 数据。Jev 读它的 README,能不能预测它之后会不会火?
我本想回溯:重建每个仓库入库那天的 star 数和 14 天后的 star 数。做到一半发现 GitHub 的 stargazers 接口已经对所有仓库返回 404(连 octocat/Hello-World 都是),第三方的 star 历史服务也自己标注了"2026 年 5 月起严重降级"。历史 star 已经无法重建。
所以只能做代理实验:1,132 个真正的新仓库,目标是"今天的 star 数,按仓库年龄校正"。
- Jev 零样本问"两周内会涨多少星":相关系数 0.435
- 用约 900 条标注训练的 README 文本模型:0.524
- 文本模型加上 Jev 的答案:0.559,显著提升
- 学习曲线:文本模型要 100 到 200 条标注才追得上 Jev 零样本
两个有意思的细节:README 里有没有 demo 截图是第二强的信号(0.324);"是否基于当前热门工具(Claude Code、MCP……)"反而是负相关。因为 95% 的新仓库都在蹭这波,蹭热点是常态,不是区分点。
回溯实验缺了最关键的基线"入库时的 star 数",所以我在收录站的同步流程里加了一个前瞻实验:每个新仓库入库时记下 Jev 先验和当时的 star 数,14 天后对答案。第一批 10 月 2 日出结果。
实验 3:新闻冷启动(A1)
A2 的结论会不会只是 GitHub 这个小圈子的特例?我换了一个完全不同的领域:微软的 MIND 新闻推荐日志,2019 年 MSN 新闻 6 天的曝光记录,3,448 篇文章。按时间切分,前 3 天训练,后 3 天测试。
| 预测方式 | 需要标注 | 相关系数 |
|---|---|---|
| 文本模型 + 类目 + Jev | 1,937 条 | 0.310 |
| 文本模型 + 类目 | 1,937 条 | 0.241 |
| Jev 问"这篇情绪化吗" | 0 | 0.210 |
| Jev 问"读者会点吗" | 0 | 0.154 |
| 类目平均点击率 | 1,937 条 | 0.078 |
结论和 A2 一致:零样本的 Jev 抵得上约 500 条标注;加进模型显著提升(+0.069)。更直观的是:50 条标注加 Jev,约等于不加 Jev 的 800 条标注。
我还做了一个冷启动推荐的模拟:每天的新文章是一堆"老虎机",用 Thompson sampling 分配曝光。先验里加入 Jev 的答案后,同样的曝光量多拿 25% 的点击,比完全没有先验多 73%。
这组实验有一个和 A2 不同的发现:描述题比预测题准。直接问"读者会点吗"(0.154)不如问"这篇情绪化吗"(0.210)。这和扫描器实验一模一样:问它"这是什么",往往比让它直接做判断更好。但在 A2 里,直接预测题反而最强。所以我的建议是两种问法都试,在你自己的数据上比。
另外两个反直觉的点:"内容实用"和"受众面广"的文章,点击反而更少。
实验 4:GitHub issue 流能否提前发现坏版本(C2)
前三个都是"排序/预测",后两个换成"监控/预警":把一段文本流交给 Jev 逐条分类,再汇总成时间序列,看能不能比人更早发现问题。
我抓了 claude-code 和 codex 两个仓库近 60 天的 25,052 个 issue,Jev 逐条判断类型(回归 / bug / 功能请求……)、沮丧程度、是否被卡住。总花费 $0.44。
"坏版本"的真值用维护者自己的原话:后续 release note 里写"regression in 2.1.269"或"Reverted a 2.1.268 change"的版本就算坏。claude-code 的 42 个版本里有 7 个。
发布级结果:阴性。 所有信号(issue 数量、关键词、情绪、Jev)都区分不了好坏版本,7 个坏版本里一个都没能在修复发布前抓到。原因很简单:claude-code 几乎每天发版,坏版本的修复中位只要 25 小时,维护者比任何汇总曲线都快。
单条分诊:Jev 明显更好。
| 对照仓库自己的标签 | 关键词 | Jev | 情绪分析 |
|---|---|---|---|
claude-code regression | 0.765 | 0.898 | 0.432 |
codex bug | 0.642 | 0.965 | 0.331 |
需要说明:这两个仓库约 75% 的标签是自动化机器人打的,所以这里测的是"Jev 和另一个模型的一致程度",不是和人的一致程度。情绪分析比随机还差,因为报 bug 的人通常写得很冷静。
实验 5:客服推文能否早于官方承认故障(C1)
C2 的阴性结果会不会只是因为 claude-code 修得太快?我换了一个组织反应慢得多的场景:Kaggle 上 2017 年的客服推文数据,7 个品牌客服号收到的 17 万条客户推文。Jev 逐条判断"是不是服务挂了""是不是很多人都遇到了",总花费 $1.84。
真值同样用当事方自己的话:品牌客服回复"your area has an outage""this is a known issue"的时刻。这里踩了一个坑:我第一版的匹配规则很宽,人工读了 40 条样本,准确率只有 22%,大部分是"sorry for the service issues, please DM us"这种客服套话。收紧后重新读,准确率 92.5%。最终得到 62 个事故,其中包括 2017 年 11 月 6 日 Comcast 全美断网,说明这个定义抓到的是真事件。
按小时区分"事故前"和"平常":所有信号都差不多(约 0.6),Jev 没有更好。
但作为预警(误报率控制在每周 1.76 次):
| 信号 | 抓到的事故(共 62) | 比官方承认平均提前 |
|---|---|---|
| Jev "服务挂了 × 影响面大" | 17 | 4.1 小时 |
| 关键词 | 12 | 1.7 小时 |
| 推文数量 | 10 | 2.4 小时 |
| 情绪分析 | 9 | 1.7 小时 |
在三种阈值下,Jev 抓到的事故都比推文数量多,其中一个阈值下统计显著。原因是客服号本来就会因为各种事(游戏上线、账单调整、球赛)变忙,只看数量会被淹没;Jev 把"服务真的挂了"的推文筛出来,背景噪声就小了。
但对比一份认真写的关键词表,Jev 的优势始终不显著。报故障的推文用词很集中(down、no internet、anyone else?),关键词已经能抓住大部分。这里我比较了 6 个信号 × 3 个阈值,单个显著结果要打折看。
C2 和 C1 合起来是一个清楚的结论:汇总预警有没有用,取决于组织和客户谁更快。 修得比投诉累积还快,什么信号都没用;组织滞后于客户,Jev 筛过的信号能提前几个小时。
六组实验合起来
| 项目 | Jev 单独用 | Jev 当特征 / 当筛选器 |
|---|---|---|
| 泰坦尼克 | 0.830,接近训练模型 | 0.854,超过两者 |
| D 搜索重排 | 和 embedding 持平(中立评审下略输) | 融合后 +0.06 到 +0.09 |
| A2 skill 冷启动 | 相当于 150 条标注 | +0.035,显著 |
| A1 新闻冷启动 | 相当于 500 条标注 | +0.069,推荐多拿 25% 点击 |
| C2 GitHub issue | 发布级预警无效 | 逐条分诊 0.90 / 0.97 |
| C1 客服推文 | 按小时排序无效 | 预警多抓 70% 事故 |
一共做了约 21 万次判断,Jev 本身的花费不到 3 美元。
我总结的六条规律
1. 信号在语义里才有用。 泰坦尼克能做,Avazu 不能做,差别不在任务形式,在于答案能不能从常识推出来。用之前先问自己:一个懂行的人,不看你的历史数据,凭这段文字能猜个大概吗?
2. 零样本的它抵得上几百条标注。 两个领域、两个任务,都是 150 到 500 条。这就是冷启动场景的价值:新业务线、新类目、没有历史数据的第一天。
3. 有了标注,它最好的位置是当特征。 五个项目五次显著提升,一次都没有例外。它带来的是训练数据里没有的世界知识,你的模型带来的是你这份数据里规律的实际幅度。两者互补。
4. 问法本身是超参数。 "这是什么"和"会怎样"两种问法都要试。扫描器和新闻里描述题赢,skill 冷启动里预测题赢。criteria 的措辞也是 prompt,每改一次都要在带标签的样本上重跑。好在很便宜:几千条样本几美分。
5. 汇总预警看时间尺度。 逐条分诊它都很强;要把逐条判断汇总成预警,前提是问题暴露得比组织反应慢。
6. 情绪分析在这类场景没用。 C2 和 C1 两次都低于随机或接近随机。报故障的人不一定"生气",生气的人也大多不是在报故障。
评测上的几个教训
这六组实验里,我踩过的坑比结论本身更值得记:
- 评审和选手不能是同一个模型。 如果只用 Jev 自己打的标签,搜索重排的结论会完全反过来。至少要有一个无关的第二评审,再看结论在各套标签下是否一致。
- 真值的精度要亲手读。 客服推文那条匹配规则,不读样本的话我会拿着 22% 准确率的"真值"得出一堆结论。
- 机器人打的标签不是人工真值。 GitHub 大仓库的 bug/regression 标签大部分是自动化分诊打的。
- 看到结果后才加的指标要标明。 C2 里我补了一个"按版本比例"的信号,效果略好但仍不显著。它可以报告,但不能拿来替换原计划的结论。
- 钉死模型版本。
~jev-latest会漂,所有结果都记录了实际解析到的版本typesafe/jev-1.13-20260917。 - 数据会消失。 GitHub 的 stargazers 接口、MIND 的官方下载,都在这周之内被我撞上不可用。能前瞻记录的,别指望以后回溯。
什么时候该用 Jev
- 该用: 没有标注的冷启动;逐条分诊、路由、审核;给已有模型加一个"世界知识"特征;便宜的第二评审或二审。
- 不该用: 信号在你的行为日志里(点击、转化、出价);需要计数、日期比较这类精确计算;需要生成内容或长推理;需要跨多步记忆和规划。
五个仓库都是 MIT 开源,数据和评测集能公开的都公开了:
- jev-search-rerank-eval:搜索重排,带评审循环对照
- jev-cold-start-prior:skill 冷启动先验(前瞻部分 10 月 2 日更新)
- jev-news-cold-start:MIND 新闻冷启动 + bandit 模拟
- jev-issue-pulse:GitHub issue 流与坏版本(阴性结果)
- jev-support-pulse:客服推文与故障预警
本文与 TypeSafe 无任何关联,所有实验自费完成。
Subscribe to Newsletter, get the full playbook free
Subscribe to receive the complete "AIP Overseas Social Media Playbook" plus weekly AI curated content
Related Posts
Jason Zhu
Ex-AI Engineer | AI Blogger