我们把 LLM 换成了 Jev,成本降低 39%
Polylane 把值班 agent 每天几千个小决策从 LLM 换成了 Jev,这个不生成文本的模型只输出判断,成本降了 39%。文章列了迁移前后 30 项决策的对照。
中文
复制

我们的 on-call agent 每天要做出几千个小决策。我们把这些决策从 LLM 迁到了 Jev——一个不生成文本的模型——成本降低了 39%。
发布于:2026 年 9 月 25 日 作者:Vi Tran 和 Boris Tane 原文链接:https://polylane.com/blog/we-swapped-our-llms-for-jev/
我们正在做一个全天候运行的 on-call agent,它需要不停做决策,比如:
- 这个问题有多严重?
- 我们该主动介入这个 Slack 讨论串吗?
- 这个故障我们之前见过吗?
直到上周,这些任务一直由 LLM 承担。这周一拿到 Jev 的访问权限,我们就开始试了。
Jev 是什么?
Jev 是 TypeSafe AI 推出的决策模型。它不生成文本,而是用带类型的值和经过校准的概率回答关于你数据的问题。TypeSafe 把它定位为「智能 if 语句」,用在分类、路由、打分这些手写逻辑太脆弱的环节,官方给出的响应时间是 70 到 500 ms,输出 token 免费。我们的 agent 整天都在做这类决策,于是直接上了生产环境。
工作原理
一个请求包含两部分:state,即你要对其做决策的文本或 JSON;以及你想得到答案的 questions。每个问题属于三种类型之一:
graph TB
S["State: a message, thread, or evaluation case"] --> J["Jev"]
Q["Questions"] --> J
J --> N["Noul<br/>yes/no"]
J --> C["Choice<br/>pick an option"]
J --> R["Score<br/>rate against a rubric"]
style J fill:#d1fae5,stroke:#6ee7b7,color:#065f46
style N stroke:#3b7dd8,color:#2b5fa8
style C stroke:#3b7dd8,color:#2b5fa8
style R stroke:#3b7dd8,color:#2b5fa8
- Noul 返回
yes的概率。 - Choice 从给定选项中选出一个。
- Score 在一个有序评分标准上返回概率加权后的值。
用例一:路由,或者说 agent 什么时候该回应?
我们的 agent 会主动参与 Slack 和 Github。只要它们有对用户有价值的洞察,就会回复 Slack 消息或 Github 评论。用户提出请求时 agent 必须行动,但又不能对每个事件都过度反应。这正好适合用 Jev 的 Noul 问题来解决。
flowchart LR
E["New event"] --> M["PR comment<br/>Slack message"]
M --> J["Jev Noul<br/>Triage?"]
J -->|Yes| W["Wake agent<br/>to follow up"]
J -->|No| N["No action"]
style J fill:#77a52d,stroke:#5c8023,color:#ffffff
style W stroke:#77a52d,color:#5c8023
style N fill:#e5e5e8,stroke:#d1d2d6,color:#47484d
- 我们 agent 提交的 PR 下的评论: 审查者要求修改,会唤醒 agent;CI 状态更新或一句「谢谢」不会。
- Slack 频道: 只有确实能帮上忙时,比如有人直接问基础设施相关的问题,agent 才会不请自来地插话。人类之间互相协调时,它不参与。
- agent 所在的 Slack 讨论串: 它会回复针对自己的消息,忽略人类之间的对话,有人让它退出时它就退出。
下面是一个 Jev 请求示例,用来判断 agent 是否应该跟进某条 Slack 消息。
{
"model": "jev-1.13.0",
"state": {
"slack_channel": "#Deployment",
"user_message": "Watch this PR until fully deployed"
},
"questions": {
"respond": {
"type": "noul",
"instructions": {
"question": "Should the agent follow up on this user message?"
}
}
}
}
我们运行 Jev 大约一周,并与之前用于这项任务的 LLM 做了对比。
图 1. 响应路由:延迟与每 1,000 次调用成本
| 指标 | DeepSeek V4.1 Flash | Jev |
|---|---|---|
| P90 延迟(ms) | 1,466 ms | 472 ms |
| 每 1,000 次调用成本(USD) | $0.238 | $0.123 |
路由的 P90 延迟快了 3 倍,从 1.5 秒降到 500 ms 以内,成本也几乎减半。
用例 2:分类,或者说这些证据意味着什么?
我们还运行了一些需要 agent 把内容分到不同类别的任务。比如,根据给出的证据,agent 应该开始调查这个问题,还是把它归为与某个已有问题相关,抑或它其实是某个已解决问题的重复?
一个 Jev Choice 问题会依据我们定义的标准,把那些证据变成一个标签,下一步由这个标签决定。大致是这样:
flowchart LR
I["New incident"] --> E["Evidence from tool calls"]
E --> J["Jev Choice"]
J -->|Same root cause| D["Defer to the original"]
J -->|Related| L["Link both incidents"]
J -->|Independent| N["Investigate on its own"]
style J fill:#77a52d,stroke:#5c8023,color:#ffffff
style D stroke:#77a52d,color:#5c8023
style L stroke:#77a52d,color:#5c8023
style N fill:#e5e5e8,stroke:#d1d2d6,color:#47484d
我们用这种方式运行了三个分类任务。每个都用一个带明确标准的 Choice 问题,并且各自替换了不同的 LLM,所以是分开测量的。
这些事件相关吗?
新事件开启时,agent 会把它与已有事件做比较:它们是否同属一个根因,是相关,还是彼此独立?下面这个示例只展示了一个候选;生产环境中的调用会把多个候选与同一个新事件做比较。
{
"model": "jev-1.13.0",
"state": {
"incident": "Checkout cannot authenticate to the database.",
"candidate_0": "Billing cannot authenticate to the same database.",
"evidence": "Both services use a credential revoked at 14:00."
},
"questions": {
"candidate_0": {
"type": "choice",
"instructions": "How is candidate_0 connected to the new incident?",
"criteria": {
"duplicate_same_root_cause": "One underlying problem explains both",
"related": "Distinct problems share a trigger or blast radius",
"independent": "No evidenced connection"
}
}
}
}
在这个用例中改用 Jev 后,P90 延迟快了近 8 倍,从 2.9 秒降到 400 ms 以内,成本降低 27%。
图 2. 事件关联:延迟与每 1,000 次调用成本
| 指标 | GPT-OSS 120B | Jev |
|---|---|---|
| P90 延迟(ms) | 2,859 ms | 373 ms |
| 每 1,000 次调用成本(USD) | $0.388 | $0.285 |
我们提交的这个 PR 为什么被关闭了?
我们的 agent 会向开发者提交 pull request,而合并率是我们的关键成功指标之一。我们需要弄清楚 pull request 为什么会被关闭,这样才能改进产品。
当我们的某个 PR 未合并就被关闭时,agent 会阅读评审意见、讨论内容以及对其他工作的引用,然后判断原因:修复本身有误、有人用别的方式修好了、问题属于误报、PR 搁置过久,或者该行为本就是预期行为。
在这个场景中改用 Jev 后,P90 延迟提升到快 6 倍,但成本只降低了 17%。
图 3. 修复类 PR 关闭原因:延迟与每 1,000 次调用成本
| 指标 | GPT-OSS 120B | Jev |
|---|---|---|
| P90 延迟(ms) | 2,379 ms | 416 ms |
| 每 1,000 次调用成本(USD) | $0.123 | $0.102 |
这个 pull request 有多紧急?
在把 pull request 提交给开发者之前,我们的 agent 需要对其排序,让严重程度更高的问题排在前面。做这个分类时,agent 会按从 critical 到 info 的阶梯给底层问题定级。它评估的是当前影响,而非假设性风险。
图 4. Autofix 严重程度:延迟与每 1,000 次调用成本
| 指标 | DeepSeek V4.1 Flash | Jev |
|---|---|---|
| P90 延迟(ms) | 1,456 ms | 313 ms |
| 每 1,000 次调用成本(USD) | $0.197 | $0.081 |
在这里改用 Jev 大幅降低了成本:比 DeepSeek V4.1 Flash 便宜 59%,P90 延迟快了近 5 倍。
在所有分类任务上 Jev 都更快。在它替换 GPT-OSS 120B 的地方,收益主要体现在延迟上。在它替换 DeepSeek V4.1 Flash 的地方,账单也减少了一半以上。
用例 3:排序,或者说这个云资源有多重要?
为了充分发挥 Polylane 的作用,团队会接入自己的云账户。我们会为所有云资源构建一张上下文图,让 agent 能快速理解计算节点、数据库、队列等之间的关系。
平台上有一些团队的云账户极其繁忙,拥有数万个节点。每台服务器、每个沙箱、每个数据库和每个队列都是我们上下文图中的一个节点。必须对这些节点进行排序,agent 才能知道哪些对你的应用至关重要,哪些挂了基本“没关系”。
我们为每个资源分配四个优先级之一:Critical、Standard、Low 或 Minimal。
flowchart LR
C["Cloud account"] --> G["Context graph"]
G -->|Each node + metrics| J["Jev Choice"]
J --> T1["Critical"]
J --> T2["Standard"]
J --> T3["Low"]
J --> T4["Minimal: fine to fail"]
style J fill:#77a52d,stroke:#5c8023,color:#ffffff
style T1 stroke:#77a52d,color:#5c8023
style T2 stroke:#77a52d,color:#5c8023
style T3 stroke:#77a52d,color:#5c8023
style T4 fill:#e5e5e8,stroke:#d1d2d6,color:#47484d
Jev 会针对每个资源评估一个 Choice 问题,判断依据来自配置、环境、近期指标和依赖关系。
{
"model": "jev-1.13.0",
"state": {
"instructions": "Assign importance relative to the other resources in this cohort.",
"cohort": [
{
"id": "database-a",
"environment": "production",
"daily_queries": 80000,
"dependents": 6
},
{
"id": "database-b",
"environment": "preview",
"daily_queries": 0,
"dependents": 0
}
]
},
"questions": {
"resource_0": {
"type": "choice",
"instructions": "Assign the importance tier for database-a.",
"criteria": {
"1": "Critical: substantial production traffic or blast radius",
"2": "Standard: active and operationally relevant",
"3": "Low: limited activity or importance",
"4": "Minimal: idle or disposable, without meaningful dependents"
}
}
}
}
排序正是 Jev 的强项:P90 延迟快 10 倍以上,从 5.4 秒降到约半秒,成本还低 34%。这也是我们调用量最大的决策,因此整体节省主要来自这里。
图 5. 资源排序:延迟与每 1,000 次调用成本
| 指标 | GPT-OSS 20B | Jev |
|---|---|---|
| P90 延迟(ms) | 5,445 ms | 511 ms |
| 每 1,000 次调用成本(USD) | $0.817 | $0.542 |
总结
总体来看,Jev 在延迟和每 1,000 次调用估算成本上都带来了大幅下降:
- P90 延迟下降:4,752 ms --> 508 ms。
- 每 1,000 次调用成本下降:$0.76199 --> $0.46369。
图 6. 已完成调用上 Jev 与 LLM 的对比 2026 年 9 月 20 日 20:00 至 9 月 24 日 20:00 UTC · 36,664 次 LLM 调用与 23,951 次 Jev 调用
| 指标 | LLM | Jev |
|---|---|---|
| P90 延迟(ms) | 4,752 ms | 508 ms |
| 每 1,000 次调用成本(USD) | $0.76199 | $0.46369 |
P90 延迟约快 89.3%。 从 4,752 ms 降至 508 ms。
每 1,000 次调用成本低 39.1%。 从每 1,000 次调用 $0.76199 降至 $0.46369。
36,664 次 LLM 调用与 23,951 次 Jev 调用,包含资源层级分类;P90 为近似值,每 1,000 次调用成本为已完成调用的均值。
按模型看,Jev 既是最快的,也是最便宜的:比 DeepSeek V4.1 Flash 略便宜,远低于两个 GPT-OSS 模型。
图 7. 各模型的延迟与每 1,000 次调用成本
| P90 延迟 | 每 1,000 次调用成本 | |
|---|---|---|
| OpenAI GPT-OSS 20B | 5,445 ms | $0.82 |
| DeepSeek V4.1 Flash | 1,372 ms | $0.51 |
| OpenAI GPT-OSS 120B | 2,255 ms | $0.74 |
| TypeSafe AI Jev | 508 ms | $0.46 |
只要我们的 agent 是从固定答案集中选择,Jev 现在就是默认选项:我们迁移过来的每一个决策,它都更快、更便宜。