一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

Jev 简历筛选实战:接入 Vercel AI Gateway 返回概率判断

时间:2026-09-20 17:26:01 编辑:袖梨 来源:一聚教程网

在简历筛选这类业务中,系统真正需要的往往不是一段完整分析,而是候选人是否匹配、具备哪些经验,以及判断结果有多大把握。Jev 将这类任务处理成带概率的结构化决策,再通过 Vercel AI Gateway 接入业务代码,可以减少自然语言生成与二次解析环节。下面以测试工程师岗位为例,完整验证这一调用流程。

Jev 实战:用 Vercel AI Gateway 做简历匹配

最近试了一下 TypeSafe AI 的 Jev。

它和普通大模型的用法不太一样。

普通 LLM 更擅长生成文本:

输入
↓
模型分析
↓
输出一段文字

Jev 更像一个判断引擎:

输入 State
↓
提出多个问题
↓
直接返回选择和概率

比如简历筛选:

这份简历和岗位匹不匹配?
有没有测试经验?
有没有接口测试经验?
有没有自动化经验?

Jev 可以一次返回这些判断,不需要先生成长文本,再从文本里解析结果。

Vercel 对 Jev 的定位也是面向分类、路由、评分、验证等结构化决策。它支持 ChoiceScoreBoolean,并能针对同一个 state 并行回答多个问题。

Jev 官网暂时不太方便直接测试

我一开始准备从 TypeSafe AI 官网直接使用 Jev。

但官方入口需要登录和申请使用资格。

只是想快速试一下模型,这一步就有些麻烦。

后来发现 Vercel AI Gateway 已经接入:

typesafe-ai/jev

于是直接改走 Vercel。

Vercel 在 2026 年 9 月 16 日宣布 Jev 上线 AI Gateway,并支持 AI SDK 7 的 experimental_evaluate() 接口。

这样只需要一个 Vercel AI Gateway Key。

安装

先建一个 Node.js 项目,然后安装:

npm install ai

代码里引入:

import { experimental_evaluate as evaluate } from "ai";

测试阶段可以直接设置 Key:

process.env.AI_GATEWAY_API_KEY =  "你的_VERCEL_AI_GATEWAY_KEY";

正式项目建议放进环境变量,不要把 Key 提交到 GitHub。

实战:测试工程师简历匹配

先准备岗位:

const job = `
岗位:测试工程师

要求:
1. 2年以上软件测试经验
2. 熟悉功能测试、接口测试
3. 熟悉 Postman、JMeter
4. 有 Python 自动化测试经验优先
5. 有物联网平台项目经验优先
`;

再准备一份简历:

const resume = `
3年软件测试经验。

负责 Web、Android 和物联网平台测试,
熟悉功能测试、接口测试、回归测试。

使用 Postman 进行接口测试,
使用 JMeter 做性能测试。

会使用 Python 编写自动化测试脚本。
`;

把岗位和简历组成一个 state

const state = `
【岗位要求】
${job}

【候选人简历】
${resume}
`;

接下来交给 Jev。

完整代码:

import { experimental_evaluate as evaluate } from "ai";

process.env.AI_GATEWAY_API_KEY = "你的_VERCEL_AI_GATEWAY_KEY";

const job = `
岗位:测试工程师

要求:
1. 2年以上软件测试经验
2. 熟悉功能测试、接口测试
3. 熟悉 Postman、JMeter
4. 有 Python 自动化测试经验优先
5. 有物联网平台项目经验优先
`;

const resume = `
3年软件测试经验。
负责 Web、Android 和物联网平台测试,
熟悉功能测试、接口测试、回归测试。
使用 Postman 进行接口测试,
使用 JMeter 做性能测试。
会使用 Python 编写自动化测试脚本。
`;

const state = `
【岗位要求】
${job}

【候选人简历】
${resume}
`;

const start = performance.now();
const result = await evaluate({
  model: "typesafe-ai/jev",
  state,
  questions: {
    match: {
      type: "choice",
      instructions: `
根据岗位要求和候选人简历判断匹配程度。
只能依据简历明确出现的信息判断。
`,
      criteria: {
        strong_match: "高度匹配,核心要求基本满足",
        match: "匹配,大部分核心要求满足",
        partial_match: "部分匹配,但存在明显能力缺口",
        no_match: "不匹配,核心经验与岗位差距较大",
      },
    },
    hasTestingExperience: {
      type: "boolean",
      instructions: "候选人是否拥有明确的软件测试工作经验?",
    },
    hasApiTesting: {
      type: "boolean",
      instructions: "候选人是否拥有明确的接口测试经验?",
    },
    hasAutomation: {
      type: "boolean",
      instructions: "候选人是否拥有自动化测试或 Python 测试脚本经验?",
    },
  },
});
console.log(`耗时:${(performance.now() - start).toFixed(0)} ms`);
const answers = result.answers;
console.log("匹配结果:", answers.match.choice);
console.log("匹配概率:", answers.match.probabilities[answers.match.choice]);
console.log("是否有测试经验:", answers.hasTestingExperience.probability);
console.log("是否有接口测试经验:", answers.hasApiTesting.probability);
console.log("是否有自动化经验:", answers.hasAutomation.probability);

实际运行

这次跑出来:

耗时:719 ms
匹配结果: strong_match
匹配概率: 0.99
是否有测试经验: 0.98
是否有接口测试经验: 0.97
是否有自动化经验: 0.98

换成人能直接看的结果:

简历匹配:高度匹配 99%

测试经验:98%
接口测试:97%
自动化经验:98%

整个请求用了 719 ms

对于这种判断任务,速度不错。

当然,719 ms 只是这一次请求的实测结果。网络、输入长度和服务负载都会影响延迟。

Choice 怎么用

简历整体匹配使用的是:

type: "choice"

然后定义候选结果:

criteria: {
  strong_match: "高度匹配",
  match: "匹配",
  partial_match: "部分匹配",
  no_match: "不匹配",
}

Jev 返回:

{
  choice: "strong_match",

  probabilities: {
    partial_match: 0,
    no_match: 0,
    strong_match: 0.99,
    match: 0.01
  }
}

所以代码不用解析:

“根据我的分析,该候选人与岗位高度匹配……”

直接读取:

answers.match.choice

得到:

strong_match

再读取:

answers.match.probabilities[
  answers.match.choice
]

得到:

0.99

这对业务代码很友好。

Boolean 也不是简单的 true / false

比如:

hasApiTesting: {
  type: "boolean",
  instructions:
    "候选人是否拥有明确的接口测试经验?",
}

返回:

{
  probability: 0.97
}

也就是说,Jev 给你的不是一个死板的:

true

而是:

97%

这样业务可以自己设阈值:

const hasApiTesting =
  answers.hasApiTesting.probability >= 0.8;

甚至可以分三层:

>= 0.9
自动通过

0.6 ~ 0.9
人工检查

< 0.6
不满足

这类概率输出正是 Jev 的核心设计。Vercel 的说明中也强调,Jev 返回 typed answers 和 probabilities,而不是先生成自然语言。

为什么这个场景适合 Jev

简历匹配本质上是一组判断:

工作经验够不够?
有没有接口测试?
有没有自动化经验?
整体匹配属于哪一级?

答案空间都很明确。

这时候让普通 LLM 写一大段分析,再去提取:

推荐
不推荐
匹配度
技能

中间多了一层文本生成和解析。

Jev 可以直接做:

JD + Resume
     ↓
    Jev
     ↓
Choice / Boolean / Score
     ↓
业务代码

这也是它和普通生成模型最大的区别。

费用

Vercel 当前 Jev 模型页标出的输入价格是:

$0.04 / 1M tokens

我这次实际请求用了:

Input Tokens: 683
Output Tokens: 109
Total Tokens: 792

AI Gateway 返回的 marketCost 是:

$0.000028686

单次成本很低。

Jev 更像决策模型,不是聊天模型

如果要做:

重写简历
生成面试题
分析候选人的优缺点
写面试评价

我还是会选 GPT、Claude 这类生成模型。

但如果任务是:

匹不匹配?
是不是?
属于哪一类?
风险是多少?
要走哪个流程?
是否需要人工审核?

Jev 就很顺手。

TypeSafe 自己也把 Jev 定义成面向软件决策的 System One Model:输入结构化问题,输出带概率和置信度的 typed decisions。

一个更实际的用法

后面可以把简历筛选流程拆成两层:

                 ┌→ 不匹配 → 结束
                 │
简历 → Jev 初筛 ─┤
                 │
                 └→ 匹配
                      ↓
                 GPT / Claude
                      ↓
                  深度分析
                      ↓
                  生成面试题

让 Jev 处理大量简单判断。

只有通过初筛的简历,再交给更强的生成模型。

判断交给判断模型。

生成交给生成模型。

这可能才是 Jev 更有意思的地方。

热门栏目